[ncl-talk] Case sensitivity of subroutines called within shared objects
Dennis Shea
shea at ucar.edu
Thu May 24 11:09:47 MDT 2018
THX! I did not know this factoid! Sigh! D
On Thu, May 24, 2018 at 10:48 AM, Michael Toy <toy at ucar.edu> wrote:
> Hi Dennis,
>
> Sorry to be cluttering the ncl-talk conversation, but I was able to find
> out the issue to my problem. It turns out that I had to call the
> "gwdo_gsd_F77” subroutine with all LOWERCASE (or lowercase) letters, i.e.,
> “gwdo_gsd_f77”. I learned from a colleague down the hall, Jim Rosinski,
> that somewhere in the process of creating the *.so file, the names of
> subroutines get converted to all lowercase. This was evident from doing a
> UNIX “nm” on the *.so file. I guess the moral of the story is to use
> lowercase letters when naming subroutines in the F77 stub file to help
> avoid the problem I was having.
>
> Thanks.
>
> — Mike
>
>
>
>
> On May 24, 2018, at 8:42 AM, Michael Toy <toy at ucar.edu> wrote:
>
> Hi Dennis,
>
> After successfully creating the *.so file with WRAPIT and having it load
> properly in NCL with the command ‘ external GWDO “./module_bl_gwdo_gsd.so”
> ‘, when I try to call the subroutine “gwdo_gsd_F77” from NCL using the
> command ‘ GWDO::gwdo_gsd_F77(76 arguments) ‘, I get the following error
> message:
> fatal:syntax error: procedure gwdo_gsd_F77 is not defined in package GWDO
>
> Is there a way to query “GWDO” to see what subroutines it supposedly
> contains?
>
> Thanks.
>
> — Mike
>
>
>
> On May 17, 2018, at 5:04 PM, Dennis Shea <shea at ucar.edu> wrote:
>
> Hi Mike/Barry,
>
> I asked one of the core NCL developers [Rick Brownrigg; cc'd] to help with
> what I could not see [literally]. He responded with two messages:
> ---
> [1]
> All I know at this point is that it occurs with this line:
>
> $NCARG_ROOT/bin/wrapit77 < WRAPIT.stub >! WRAPIT.c
>
> wrapit77 is a C program with a full lex/yacc grammar, and the error
> message originates out of the grammar parsing code. Beyond that, I haven't
> been able to determine why, just yet. Looking at the contents of
> WRAPIT.stuib, there's nothing that stands out.
>
> [2]
> OK, it appears the issue is that the original fortran code contains
> carriage-return/newline delimiters, and wrapit77's grammar does not expect
> that. Things appear to work if I strip those out:
>
> cat test.NCL.f | sed 's/\r$//' | cat >testNCL_noCR.f
> ---
> NOTE: the above does not seem to work with the MacOS.
>
> It had to rune on a 'real linux box'
>
> So .... NCL itself handles carriage returns and new line characters
> **BUT** the "full lex/yacc grammar ..." WRAPIT does not.
>
> %> WRAPIT module_bl_gwdo_gsd.f90 testNCL_noCR.f
>
> WRAPIT Version: 120209
> COMPILING module_bl_gwdo_gsd.f90
> COMPILING testNCL_noCR.f
> LINKING
> END WRAPIT
>
> ===
> I am the messenger. Rick did the real work.
>
> D
>
> On Wed, May 16, 2018 at 10:28 PM, Dennis Shea <shea at ucar.edu> wrote:
>
>> [A]
>>
>> (0:1,0:1,0:1) is legal f77 & f90
>>
>> WRAPIT is not a full fortran language parser. It is not very
>> sophisticated. It does not understand this syntax.
>>
>> [B]
>>
>> Again, we must do the "end-around".
>>
>> I added 'imsime', 'jmsjme', 'kmskme'
>>
>> to the argument list and the declarations.
>>
>> Where the quantities are:
>>
>> imsime = ime-ims+1
>> jmsjme = jme-jms+1
>> kmskme = kme-kms+1
>>
>> --------
>>
>> %> gfortran -c module_bl_gwdo_gsd.f90 test.NCL.f
>>
>> works fine.
>>
>> Unfortunately,
>>
>> %> WRAPIT module_bl_gwdo_gsd.f90 test.NCL.f
>>
>> WRAPIT Version: 120209
>> A syntax error occurred while parsing:
>> COMPILING module_bl_gwdo_gsd.f90
>> COMPILING test.NCL.f
>> LINKING
>> END WRAPIT
>>
>> I'll look again tomorrow but it is late!
>>
>> D
>>
>>
>> On Wed, May 16, 2018 at 6:15 AM, Dennis Shea <shea at ucar.edu> wrote:
>>
>>> Hi, Michael, Barry,
>>>
>>> I hope to look at this later today.
>>>
>>> D
>>>
>>> On Tue, May 15, 2018 at 11:14 AM, Michael Toy <toy at ucar.edu> wrote:
>>>
>>>> Hi Dennis and Barry,
>>>>
>>>> I think narrowed my issue with WRAPIT and the "A syntax error occurred
>>>> while parsing: :” error message I’m getting to declaring arrays in F77
>>>> in which the indices are not the standard 1..N arrangement. For the simple
>>>> stub below, I get the error message:
>>>>
>>>> C NCLFORTSTART
>>>> subroutine print_array(x)
>>>> implicit none
>>>> real x( 0:1, 0:1, 0:1 )
>>>> C NCLEND
>>>>
>>>> However, if I change the declaration line to:
>>>> real x ( 2, 2, 2 )
>>>>
>>>> It compiles fine.
>>>>
>>>> I’ve looked up some documentation on Fortran77, and it looks the
>>>> (0:1,0:1,0:1) declaration should work. Is this not legal F77 syntax?
>>>>
>>>> Thanks.
>>>>
>>>> — Mike
>>>>
>>>>
>>>
>>
> <testNCL_noCR.f><module_bl_gwdo_gsd.f90>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180524/dded0751/attachment.html>
More information about the ncl-talk
mailing list