[Rd] Calling FORTRAN function from R issue?
Berend Hasselman
bhh at xs4all.nl
Tue Mar 6 13:06:34 CET 2012
On 06-03-2012, at 12:56, Berwin A Turlach wrote:
> G'day Berend,
>
> [..]
>> I tried calling zdotc through an intermediate Fortran routine hoping
>> it would solve your problem.
> [...]
>> Above C routine changed to
> [...]
>> The fortran subroutine is
>>
>> <code>
>> subroutine callzdotc(retval,n, zx, incx, zy, incy)
>> integer n, incx, incy
>> double complex retval, zx(*), zy(*)
>> external double complex zdotc
>>
>> retval = zdotc(n, zx, incx, zy, incy)
>>
>> return
>> end
>> </code>
>>
>> Made a shared object with
>>
>> R CMD SHLIB --output=dozdot.so callzdotc.f czdot.c
>>
>> and ran
>>
>> dyn.load("dozdot.so")
>> .C("testzdotc")
>>
>> with the result 0.0, 0.0
>
> Same here.
>
> Once I change the line
>
> external double complex zdotc
>
> in your fortran subroutine to
>
> double complex zdotc
>
> everything works fine and I get as result 14.0, 0.0.
>
> It is long time ago that I was taught (and studied) the FORTRAN 77
> standard. But flipping through some books from that time I thing I
> have some inkling on what is going on. The "external" statement is not
> needed here (seems to be used in the sense that C is using the
> "external" statement).
Thanks.
I should have tried that too.
This implies that Dominick's original issue can be avoided by using an intermediate Fortran routine.
But I would really like to hear from an Rexpert why you shouldn't/can't use external here in the Fortran.
Berend
More information about the R-devel
mailing list