[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