G'day Berend, On Tue, 6 Mar 2012 11:19:07 +0100 Berend Hasselman <b...@xs4all.nl> wrote:
> On 06-03-2012, at 01:21, Dominick Samperi wrote: [...] > > zx[0].r = 1.0; zx[0].i = 0.0; > > zx[1].r = 2.0; zx[0].i = 0.0; > > zx[2].r = 3.0; zx[0].i = 0.0; Just noticing that it is always zx[0].i, same with the imaginary part of zy. But this is probably not of importance. :) > 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). Cheers, Berwin ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel