[Rd] F77_CALL(dgetrs) C++ call in R-devel

Lars Relund |@r@@re|und @end|ng |rom gm@||@com
Wed Dec 21 12:43:54 CET 2022


Thanks I got it to work!

I will try to migrate to (Rcpp)Armadillo asap.

Lars


Den tir. 20. dec. 2022 kl. 14.09 skrev Dirk Eddelbuettel <edd using debian.org>:

>
> On 20 December 2022 at 12:33, Lars Relund wrote:
> | In my package, I have the method:
> |
> |     /** Solve equations transpose(P)w = r. */
> |     int LASolveT(MatSimple<double> &P, MatSimple<double> &w, const
> | MatSimple<double> &r) {
> |         int rows = P.rows;
> |         int nrhs = 1;
> |         int lda = rows;
> |         int ldb = rows;
> |         int info = -1;
> |         MatSimple<int> ipivot(1,rows);
> |         w.Inject(r);    // copy r to w;
> |         F77_CALL(dgetrf)(&rows, &rows, &P(0,0), &lda, &ipivot(0,0),
> &info);
> |         if (info!=0) {
> |             cout << "Error in LASolve (dgetrf). Info=" << info << endl;
> |             return 1;
> |         }
> |         F77_CALL(dgetrs)("T", &rows, &nrhs, &P(0,0), &lda, &ipivot(0,0),
> | &w(0,0), &ldb, &info);("T", &rows, &nrhs, &P(0,0), &lda, &ipivot(0,0),
> | &w(0,0), &ldb, &info);
> |         if (info!=0) {
> |             cout << "Error in LASolve (dgetrs). Info=" << info << endl;
> |             return 1;
> |         }
> |         return 0;
> |     }
> |
> | When compiling the package on using R-devel the error for
> F77_CALL(dgetrs)
> | occur:
> |
> | matalg.h:67:25: error: too few arguments to function ‘void dgetrs_(const
> | char*, const int*, const int*, const double*, const int*, const int*,
> | double*, const int*, int*, size_t)’
> |    67 |         F77_CALL(dgetrs)("T", &rows, &nrhs, &P(0,0), &lda,
> | &ipivot(0,0), &w(0,0), &ldb, &info);
> |
> | It works in R-release and I guess it have something to do with
> | https://cran.r-project.org/doc/manuals/r-devel/NEWS.html and LAPACK.
> |
> | Any hints on how to get it to work for both R-release and R-devel.
>
> I can offer you two answers. The first, and narrower, is in Writing R
> Extensions and concerns FC_LEN. R now 'automagically' injects additional
> parameters for a better, more stringent, control of character variable
> length. See eg
>
>
> https://rstudio.github.io/r-manuals/r-exts/The-R-API.html#fortran-character-strings
>
> and related. (And this isn't new per se, those of use with packages with
> Fortran interfaces have been keeping this up.)
>
> The second, more pragmatic answer, is of course 'to not do that' but to
> rely
> on the decade of tuning and bazillion of test and runs a higher-end Linear
> Algebra package like (Rcpp)Armadillo offers by wrapping around LAPACK and
> BLAS for you.  You already are in C++, so there os essentially no switching
> cost. And (Rcpp)Armadillo is header-only and hence free of added
> complications.
>
> Dirk
>
> --
> dirk.eddelbuettel.com | @eddelbuettel | edd using debian.org
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list