Re: [Rd] Calling FORTRAN function from R issue?

From: Berwin A Turlach <Berwin.Turlach_at_gmail.com>
Date: Tue, 06 Mar 2012 14:28:05 +0800

G'day Dominick,

On Mon, 5 Mar 2012 19:21:01 -0500
Dominick Samperi <djsamperi_at_gmail.com> wrote:

> Section 5.2 of the R manual (on Extending R) says that only
> FORTRAN subroutines can be called (not functions), probably
> because of the non-standard way the compilers map FORTRAN
> function names to symbols in the DLL.

Section 5.2 deals with calling C/FORTRAN code from R via .C() or .Fortran(), and is not directly relevant to the question on how to call FORTRAN code from C code. :)  

> This is consistent with the interface prototype for the BLAS
> routine zdotc contained in <R>/include/R_ext/BLAS.h, namely,
>
> BLAS_extern Rcomplex
> F77_NAME(zdotc)(Rcomplex * ret_val, int *n,
> Rcomplex *zx, int *incx, Rcomplex *zy, int *incy);
>
>[...]
>
> On the other hand, this is not consistent with the standard
> FORTRAN definition for zdotc that is contained in
> <R>/src/extra/blas/cmplxblas.f, where the first argument is
> n, not ret_val.

This seems to be indeed inconsistent and, presumably, a bug. Applying the attach patch to R's development version (compiles, installs and passes all checks with this patch), and changing in your code the line

        F77_CALL(zdotc)(&ret_val, &n, zx, &incx, zy, &incy);

to

        ret_val = F77_CALL(zdotc)(&n, zx, &incx, zy, &incy);

produces the expected output.

> Consequently, it is not clear where the wrapper
> is defined that is called via the prototype.

The F77_xxxx macros seem to be defined in <R>/include/R_ext/RS.h, and their sole purpose seems to be to append a _ to the argument if needed.

Cheers,

        Berwin



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Tue 06 Mar 2012 - 07:30:45 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 06 Mar 2012 - 16:20:26 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive