Skip to content
Prev 2470 / 10988 Next

[Rcpp-devel] RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge?

On Tue, Jun 7, 2011 at 4:20 PM, baptiste auguie
<baptiste.auguie at googlemail.com> wrote:
Fortran programmers.  Just as the founders of Microsoft decided that
no one would ever have more than some amount of memory (128K, IIRC)
those defining the Fortran specification in the 1950's - 60's declared
that you would never need more than 6 upper-case characters in an
identifier.

You parse the name according to the first letter indicates the storage
type (z for double precision complex), the next two for specific
characteristics of the matrix (ge -> general, tr -> triangular, sy ->
symmetric, po -> symmetric and positive definite, ...) and the
remaining two or three for the operation (trf -> triangular
factorization, sl -> solution of linear systems, ls -> least squares
solution).

You should only have a request for zgels if you are trying to get
least squares solutions.

The complex Lapack routines that you can count on being available are

cmplx.f:96:      SUBROUTINE ZBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,
cmplx.f:838:      SUBROUTINE ZDRSCL( N, SA, SX, INCX )
cmplx.f:952:      SUBROUTINE ZGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV,
cmplx.f:1141:      SUBROUTINE ZGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
cmplx.f:1471:      SUBROUTINE ZGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP,
WORK, INFO )
cmplx.f:1721:      SUBROUTINE ZGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP,
WORK, LWORK,
cmplx.f:1989:      SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND,
WORK, RWORK,
cmplx.f:2182:      SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL,
LDVL, VR, LDVR,
cmplx.f:2578:      SUBROUTINE ZGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO )
cmplx.f:2726:      SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK,
LWORK, INFO )
cmplx.f:2999:      SUBROUTINE ZGELQ2( M, N, A, LDA, TAU, WORK, INFO )
cmplx.f:3122:      SUBROUTINE ZGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:3317:      SUBROUTINE ZGEQP3( M, N, A, LDA, JPVT, TAU, WORK,
LWORK, RWORK,
cmplx.f:3610:      SUBROUTINE ZGEQR2( M, N, A, LDA, TAU, WORK, INFO )
cmplx.f:3731:      SUBROUTINE ZGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:3927:      SUBROUTINE ZGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
cmplx.f:4034:      SUBROUTINE ZGESVD( JOBU, JOBVT, M, N, A, LDA, S, U,
LDU, VT, LDVT,
cmplx.f:7636:      SUBROUTINE ZGETF2( M, N, A, LDA, IPIV, INFO )
cmplx.f:7784:      SUBROUTINE ZGETRF( M, N, A, LDA, IPIV, INFO )
cmplx.f:7943:      SUBROUTINE ZGETRS( TRANS, N, NRHS, A, LDA, IPIV, B,
LDB, INFO )
cmplx.f:8092:      SUBROUTINE ZHEEV( JOBZ, UPLO, N, A, LDA, W, WORK,
LWORK, RWORK,
cmplx.f:8310:      SUBROUTINE ZHETD2( UPLO, N, A, LDA, D, E, TAU, INFO )
cmplx.f:8568:      SUBROUTINE ZHETRD( UPLO, N, A, LDA, D, E, TAU,
WORK, LWORK, INFO )
cmplx.f:8864:      SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH,
W, Z, LDZ,
cmplx.f:9259:      SUBROUTINE ZLABRD( M, N, NB, A, LDA, D, E, TAUQ,
TAUP, X, LDX, Y,
cmplx.f:9587:      SUBROUTINE ZLACGV( N, X, INCX )
cmplx.f:9647:      SUBROUTINE ZLACN2( N, V, X, EST, KASE, ISAVE )
cmplx.f:9868:      SUBROUTINE ZLACPY( UPLO, M, N, A, LDA, B, LDB )
cmplx.f:10004:      SUBROUTINE ZLAHQR( WANTT, WANTZ, N, ILO, IHI, H,
LDH, W, ILOZ,
cmplx.f:10474:      SUBROUTINE ZLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY )
cmplx.f:10714:      SUBROUTINE ZLAHRD( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY )
cmplx.f:11678:      SUBROUTINE ZLAQP2( M, N, OFFSET, A, LDA, JPVT,
TAU, VN1, VN2,
cmplx.f:11857:      SUBROUTINE ZLAQPS( M, N, OFFSET, NB, KB, A, LDA,
JPVT, TAU, VN1,
cmplx.f:12123:      SUBROUTINE ZLAQR0( WANTT, WANTZ, N, ILO, IHI, H,
LDH, W, ILOZ,
cmplx.f:12724:      SUBROUTINE ZLAQR1( N, H, LDH, S1, S2, V )
cmplx.f:12821:      SUBROUTINE ZLAQR2( WANTT, WANTZ, N, KTOP, KBOT,
NW, H, LDH, ILOZ,
cmplx.f:13258:      SUBROUTINE ZLAQR3( WANTT, WANTZ, N, KTOP, KBOT,
NW, H, LDH, ILOZ,
cmplx.f:13706:      SUBROUTINE ZLAQR4( WANTT, WANTZ, N, ILO, IHI, H,
LDH, W, ILOZ,
cmplx.f:14308:      SUBROUTINE ZLAQR5( WANTT, WANTZ, KACC22, N, KTOP,
KBOT, NSHFTS, S,
cmplx.f:15117:      SUBROUTINE ZLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
cmplx.f:15237:      SUBROUTINE ZLARFB( SIDE, TRANS, DIRECT, STOREV, M,
N, K, V, LDV,
cmplx.f:15845:      SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU )
cmplx.f:15990:      SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV,
TAU, T, LDT )
cmplx.f:16214:      SUBROUTINE ZLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
cmplx.f:16855:      SUBROUTINE ZLARTG( F, G, CS, SN, R )
cmplx.f:17050:      SUBROUTINE ZLASCL( TYPE, KL, KU, CFROM, CTO, M, N,
A, LDA, INFO )
cmplx.f:17317:      SUBROUTINE ZLASET( UPLO, M, N, ALPHA, BETA, A, LDA )
cmplx.f:17431:      SUBROUTINE ZLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
cmplx.f:17794:      SUBROUTINE ZLASSQ( N, X, INCX, SCALE, SUMSQ )
cmplx.f:17895:      SUBROUTINE ZLASWP( N, A, LDA, K1, K2, IPIV, INCX )
cmplx.f:18014:      SUBROUTINE ZLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
cmplx.f:18293:      SUBROUTINE ZLATRS( UPLO, TRANS, DIAG, NORMIN, N,
A, LDA, X, SCALE,
cmplx.f:19172:      SUBROUTINE ZPOTF2( UPLO, N, A, LDA, INFO )
cmplx.f:19346:      SUBROUTINE ZPOTRF( UPLO, N, A, LDA, INFO )
cmplx.f:19532:      SUBROUTINE ZROT( N, CX, INCX, CY, INCY, C, S )
cmplx.f:19623:      SUBROUTINE ZSTEQR( COMPZ, N, D, E, Z, LDZ, WORK, INFO )
cmplx.f:20126:      SUBROUTINE ZTRCON( NORM, UPLO, DIAG, N, A, LDA, RCOND, WORK,
cmplx.f:20330:      SUBROUTINE ZTREVC( SIDE, HOWMNY, SELECT, N, T,
LDT, VL, LDVL, VR,
cmplx.f:20716:      SUBROUTINE ZTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST,
ILST, INFO )
cmplx.f:20878:      SUBROUTINE ZTRTRS( UPLO, TRANS, DIAG, N, NRHS, A,
LDA, B, LDB,
cmplx.f:21026:      SUBROUTINE ZUNG2L( M, N, K, A, LDA, TAU, WORK, INFO )
cmplx.f:21154:      SUBROUTINE ZUNG2R( M, N, K, A, LDA, TAU, WORK, INFO )
cmplx.f:21284:      SUBROUTINE ZUNGBR( VECT, M, N, K, A, LDA, TAU,
WORK, LWORK, INFO )
cmplx.f:21529:      SUBROUTINE ZUNGHR( N, ILO, IHI, A, LDA, TAU, WORK,
LWORK, INFO )
cmplx.f:21694:      SUBROUTINE ZUNGL2( M, N, K, A, LDA, TAU, WORK, INFO )
cmplx.f:21830:      SUBROUTINE ZUNGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:22045:      SUBROUTINE ZUNGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:22267:      SUBROUTINE ZUNGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:22483:      SUBROUTINE ZUNGR2( M, N, K, A, LDA, TAU, WORK, INFO )
cmplx.f:22617:      SUBROUTINE ZUNGRQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:22840:      SUBROUTINE ZUNGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO )
cmplx.f:23024:      SUBROUTINE ZUNM2R( SIDE, TRANS, M, N, K, A, LDA,
TAU, C, LDC,
cmplx.f:23225:      SUBROUTINE ZUNMBR( VECT, SIDE, TRANS, M, N, K, A,
LDA, TAU, C,
cmplx.f:23513:      SUBROUTINE ZUNML2( SIDE, TRANS, M, N, K, A, LDA,
TAU, C, LDC,
cmplx.f:23718:      SUBROUTINE ZUNMLQ( SIDE, TRANS, M, N, K, A, LDA,
TAU, C, LDC,
cmplx.f:23985:      SUBROUTINE ZUNMQR( SIDE, TRANS, M, N, K, A, LDA,
TAU, C, LDC,

If you look at the definition of zgels you will see that for least
squares solutions it calls ZGEQRF, ZUNMQR and ZTRTRS so you just need
to set up those calls instead (although admittedly it's a royal PITA
to get the Fortran calls set up properly).

An alternative would be to leave a copy of the Fortran sources for
ZGELS in the src directory for your package but that may croak on
trying to compile the whole routine, which allows for both
over-determined and under-determined systems.

Thread (16 messages)

Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 3 Dirk Eddelbuettel RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 3 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 4 Dirk Eddelbuettel RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 4 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 5 Dirk Eddelbuettel RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 5 Douglas Bates RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Douglas Bates RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Douglas Bates RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Douglas Bates RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 7 Baptiste Auguie RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 22 Dirk Eddelbuettel RcppArmadillo inv() depends on Lapack, zgetri_ not available on CRAN / R-forge? Jun 22