On Tue, 7 Jul 2020 03:00:23 +0000 Pierre Lafaye de Micheaux <laf...@unsw.edu.au> wrote:
>Should I just write something like (adding the middle instruction >below to my existing code above)?: > >#ifdef FC_LEN_T >typedef long long int FC_LEN_T; No, I don't think that would help. What _might_ help is adapting the incantation from [*] to redefine FC_LEN_T to int on older GCC: #if defined(__GNUC__) && __GNUC__ < 7 /* Rconfig.h #define doesn't match the actual type * of hidden length argument in old gfortran */ #define FC_LEN_T int #else /* Otherwise we use the #define from Rconfig.h */ #define USE_FC_LEN_T #endif /* Your code starts here */ #include <R.h> /* ... */ Another option that _should_ help is rewriting zhpevxC in Fortran 2003 using its bind(c) feature. The C interoperability would ensure that the resulting function is callable from C, while the fact that it's written in Fortran should make it safe to call other Fortran functions: subroutine zhpevxC(jobz, range, uplo, n, ap, vl, vu, il, iu, & abstol, m, w, z, ldz, work, rwork, iwork, & ifail, info) bind(c, name='zhpevxC') use, intrinsic :: iso_c_binding, only: c_char, c_int, c_double, & c_double_complex character(kind = c_char) :: jobz, range, uplo integer(kind = c_int) :: il, info, iu, ldz, m, n real(kind = c_double) :: abstol, vl, vu integer(kind = c_int) :: ifail( * ), iwork( * ) real(kind = c_double) :: rwork( * ), w( * ) complex(kind = c_double_complex) :: ap( * ), work( * ), z( ldz, * ) call zhpevx(JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU, & abstol, m, w, z, ldz, work, rwork, iwork, & ifail, info) end subroutine A subroutine defined like this can be represented by the following C++ prototype: extern "C" void zhpevx( char * JOBZ, char * RANGE, char * UPLO, int * N, std::complex<double> * AP, double * VL, double * VU, int * IL, int * IU, double * abstol, int * m, double * w, std::complex<double> * z, int * ldz, std::complex<double> * work, double * rwork, int * iwork, int * ifail, int * info ); This is the approach described in WRE 6.6.1 Fortran character strings near the code block with the definition of subroutine c_dgemm. -- Best regards, Ivan [*] https://gcc.gnu.org/onlinedocs/gfortran/Argument-passing-conventions.html ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel