From bhh at xs4all.nl  Tue Mar  6 13:06:34 2012
From: bhh at xs4all.nl (Berend Hasselman)
Date: Tue, 6 Mar 2012 13:06:34 +0100
Subject: [Rd] Calling FORTRAN function from R issue?
In-Reply-To: <20120306195608.7ec858c0@bossiaea>
References: <CADUbQ5ghmCd-3K4hx=FrzhA8YwfohhUp0-g6rJHHU0s-uEfN+A@mail.gmail.com>
	<B1B70BE3-2D8A-495B-8893-CC67026E1E9F@xs4all.nl>
	<20120306195608.7ec858c0@bossiaea>
Message-ID: <879BAEC9-1963-4574-B962-CA8CC9D4F13B@xs4all.nl>


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



[Rd] Calling FORTRAN function from R issue?
Berend Hasselman