Calling FORTRAN function from R issue?
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