Re: help: when wrapit comes across allocatable array

From: Sha Feng <sfeng_at_nyahnyahspammersnyahnyah>
Date: Fri Sep 30 2011 - 13:59:11 MDT

I have tropo.so file (attached) and load it before begin command in my ncl script.

Thanks,
Sha

On Sep 30, 2011, at 3:52 PM, Dennis Shea wrote:

> I am not sure of your error. It is looking for
> a file called tropo.so
>
> external TROPO "./tropo.so"
>
> http://www.ncl.ucar.edu/Document/Tools/WRAPIT.shtml
>
> On 9/30/11 12:15 PM, Sha Feng wrote:
>> Hi Dennis,
>>
>> After revision that just declare the argument being passed to from ncl, files can be successfully linked. However, there are still errors as follows when I run ncl script
>>
>> ======================
>> $ ncl test.ncl
>> .....
>> warning:An error occurred loading the external file ./tropo.so, file not loaded
>> dlopen(./tropo.so, 2): Symbol not found: _tropo_
>> Referenced from: .../tropo.so
>> Expected in: flat namespace
>> in .../tropo.so
>> warning:error at line 12 in file test.ncl
>>
>> fatal:syntax error: line 33 in file test.ncl before or near :
>> TROPO:
>> -----------------^
>>
>> fatal:error in statement
>> fatal:Syntax Error in block, block not executed
>> fatal:error at line 40 in file test.ncl
>>
>> arctic:code shafeng$ nm tropo.so
>> 0000000000000ec0 s stub helpers
>> 0000000000000598 T _Init
>> U _NclGetArgValue
>> U _NclRegisterProc
>> U _NewArgs
>> U _NhlPError
>> U _SetArgTemplate
>> 0000000000000000 t __mh_bundle_header
>> U _tropo_
>> 00000000000007e4 T _tropo_W
>> U dyld_stub_binder
>> =====================
>>
>> Thanks,
>> Sha
>>
>> On Sep 29, 2011, at 11:44 PM, Dennis Shea wrote:
>>
>>> Just the arguments being pased to/from ncl
>>>
>>> On 9/29/11 8:49 PM, sfeng@marine.usf.edu wrote:
>>>> Dennis,
>>>>
>>>> So, as far as I know, the stub file just need to declare the parameters as
>>>> arguments of subroutine, and it doesn't have to declare all of the
>>>> variables in the subroutine. Right?
>>>>
>>>> Regards,
>>>> Sha
>>>>
>>>>> See: http://www.ncl.ucar.edu/Document/Tools/WRAPIT.shtml
>>>>>
>>>>> You would just need one f77 style stub file [ mystub.f].
>>>>> Stub files should be created only for subroutines
>>>>> invoked from within NCL explicitly.
>>>>>
>>>>> C NCLFORTSTART
>>>>> subroutine cstub(nlev,temp,pres,alt,pliml, plimu,plimlex,mis
>>>>> + ,numtp,tp,tt,ta)
>>>>> implicit none
>>>>> integer nlev
>>>>> real temp(nlev), pres(nlev), alt(nlev), pliml, plimu,plimlex,mis
>>>>> integer numtp
>>>>> real tp(nlev), tt(nlev), ta(nlev)
>>>>> C NCLEND
>>>>>
>>>>> %> WRAPIT mystub.f ShaFeng.f90
>>>>>
>>>>> external CSTUB "./mystub.so"
>>>>>
>>>>> CSTUB::cstub(...)
>>>>>
>>>>> On 9/29/11 3:32 PM, Sha Feng wrote:
>>>>>> Dennis,
>>>>>>
>>>>>> My code is .f90. So I don't have to use the same declaration with the
>>>>>> .f90 files in the .stub, do I?
>>>>>>
>>>>>> A snippet of my code is also follows.
>>>>>> !==================================
>>>>>> subroutine C(...)
>>>>>> implicit none
>>>>>> integer,intent(in) :: nlev
>>>>>> real,intent(in),dimension(nlev) :: temp
>>>>>> real,intent(in),dimension(nlev) :: pres
>>>>>> real,intent(in),dimension(nlev) :: alt
>>>>>> real, intent(in) :: pliml, plimu,plimlex
>>>>>> integer,intent(out) :: numtp
>>>>>> real,intent(in) ::mis
>>>>>> real,intent(out),dimension(nlev) :: tp,tt,ta
>>>>>>
>>>>>> integer :: i, j, validrow
>>>>>> real,dimension(nlev) :: t,p,a
>>>>>> real, dimension(:), allocatable :: t1,p1,a1
>>>>>> real :: trp
>>>>>> ....
>>>>>> call A(...)
>>>>>> ...
>>>>>> call B(...)
>>>>>> ...
>>>>>> end subroutine C
>>>>>>
>>>>>> subroutine A(...)
>>>>>> ...
>>>>>> end subroutine A
>>>>>>
>>>>>> subroutine B(....)
>>>>>> ...
>>>>>> end subroutine B
>>>>>> !==================================
>>>>>>
>>>>>>
>>>>>> BTW, this subroutine includes three subroutines (three subroutine in one
>>>>>> .f90 file). Should I make declaration for all of them in the .stub file.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sep 29, 2011, at 5:10 PM, Dennis Shea wrote:
>>>>>>
>>>>>>> It would be good to see a snippet of your f90 code.
>>>>>>>
>>>>>>> As along as the 'allocateable' is not between the
>>>>>>> C NCLFORTSTART
>>>>>>> C NCLEND
>>>>>>>
>>>>>>> Also, is the f90 code .f or .f90?
>>>>>>>
>>>>>>> C ----------Sample for .f file -----------------------------------
>>>>>>> C NCLFORTSTART
>>>>>>> subroutine wgt_runave (x,npts,wgt,nwgt,kopt,xmsg,ier)
>>>>>>> integer npts, nwgt,kopt,ier
>>>>>>> real x(npts), wgt(nwgt), xmsg
>>>>>>> C NCLEND
>>>>>>> integer lwork
>>>>>>> real, allocatable, dimension(:) :: work
>>>>>>>
>>>>>>> nhalf = nwgt/2
>>>>>>> lwork = npts+2*nhalf
>>>>>>> allocate (work(lwork), stat=ier)
>>>>>>>
>>>>>>> call wrunavx77 (x,npts,wgt,nwgt,kopt,xmsg,work,lwork,ier)
>>>>>>>
>>>>>>> deallocate (work)
>>>>>>>
>>>>>>> return ! NCL return (wrunwgt[x])
>>>>>>> end
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 9/29/11 12:19 PM, Sha Feng wrote:
>>>>>>>> Hi ncl-talker,
>>>>>>>>
>>>>>>>> How can I deal with the codes which are related with allocatable
>>>>>>>> arrays when I use WRAPIT to combine Fortran 90 subroutines with NCL
>>>>>>>> scripts?
>>>>>>>>
>>>>>>>> Any suggestion is very much appreciated.
>>>>>>>>
>>>>>>>> Sha
>>>>>>>> _______________________________________________
>>>>>>>> ncl-talk mailing list
>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk

Received on Fri Sep 30 14:00:12 2011

This archive was generated by hypermail 2.1.8 : Sun Oct 09 2011 - 13:05:26 MDT