[ncl-talk] Case sensitivity of subroutines called within shared objects
Michael Toy
toy at ucar.edu
Thu May 24 10:48:30 MDT 2018
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 <mailto: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 <mailto: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 <mailto: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 <mailto: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/2e371584/attachment.html>
More information about the ncl-talk
mailing list