diff options
Diffstat (limited to 'packages/base/src/Internal/C')
-rw-r--r-- | packages/base/src/Internal/C/lapack-aux.c | 95 | ||||
-rw-r--r-- | packages/base/src/Internal/C/lapack-aux.h | 32 |
2 files changed, 64 insertions, 63 deletions
diff --git a/packages/base/src/Internal/C/lapack-aux.c b/packages/base/src/Internal/C/lapack-aux.c index cdbaab9..baa0570 100644 --- a/packages/base/src/Internal/C/lapack-aux.c +++ b/packages/base/src/Internal/C/lapack-aux.c | |||
@@ -38,6 +38,9 @@ typedef float complex TCF; | |||
38 | // #define OK return 0; | 38 | // #define OK return 0; |
39 | // #endif | 39 | // #endif |
40 | 40 | ||
41 | |||
42 | // printf("%dx%d %d:%d\n",ar,ac,aXr,aXc); | ||
43 | |||
41 | #define TRACEMAT(M) {int q; printf(" %d x %d: ",M##r,M##c); \ | 44 | #define TRACEMAT(M) {int q; printf(" %d x %d: ",M##r,M##c); \ |
42 | for(q=0;q<M##r*M##c;q++) printf("%.1f ",M##p[q]); printf("\n");} | 45 | for(q=0;q<M##r*M##c;q++) printf("%.1f ",M##p[q]); printf("\n");} |
43 | 46 | ||
@@ -56,7 +59,7 @@ inline int mod (int a, int b); | |||
56 | 59 | ||
57 | inline int64_t mod_l (int64_t a, int64_t b); | 60 | inline int64_t mod_l (int64_t a, int64_t b); |
58 | 61 | ||
59 | //--------------------------------------- | 62 | //////////////////////////////////////////////////////////////////////////////// |
60 | void asm_finit() { | 63 | void asm_finit() { |
61 | #ifdef i386 | 64 | #ifdef i386 |
62 | 65 | ||
@@ -78,8 +81,6 @@ void asm_finit() { | |||
78 | #endif | 81 | #endif |
79 | } | 82 | } |
80 | 83 | ||
81 | //--------------------------------------- | ||
82 | |||
83 | #if NANDEBUG | 84 | #if NANDEBUG |
84 | 85 | ||
85 | #define CHECKNANR(M,msg) \ | 86 | #define CHECKNANR(M,msg) \ |
@@ -109,16 +110,16 @@ for(k=0; k<(M##r * M##c); k++) { \ | |||
109 | #define CHECKNANR(M,msg) | 110 | #define CHECKNANR(M,msg) |
110 | #endif | 111 | #endif |
111 | 112 | ||
112 | //--------------------------------------- | ||
113 | 113 | ||
114 | //////////////////// real svd //////////////////////////////////// | 114 | //////////////////////////////////////////////////////////////////////////////// |
115 | //////////////////// real svd /////////////////////////////////////////////////// | ||
115 | 116 | ||
116 | /* Subroutine */ int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n, | 117 | /* Subroutine */ int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n, |
117 | doublereal *a, integer *lda, doublereal *s, doublereal *u, integer * | 118 | doublereal *a, integer *lda, doublereal *s, doublereal *u, integer * |
118 | ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork, | 119 | ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork, |
119 | integer *info); | 120 | integer *info); |
120 | 121 | ||
121 | int svd_l_R(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) { | 122 | int svd_l_R(KODMAT(a),ODMAT(u), DVEC(s),ODMAT(v)) { |
122 | integer m = ar; | 123 | integer m = ar; |
123 | integer n = ac; | 124 | integer n = ac; |
124 | integer q = MIN(m,n); | 125 | integer q = MIN(m,n); |
@@ -181,7 +182,7 @@ int svd_l_R(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) { | |||
181 | doublereal *vt, integer *ldvt, doublereal *work, integer *lwork, | 182 | doublereal *vt, integer *ldvt, doublereal *work, integer *lwork, |
182 | integer *iwork, integer *info); | 183 | integer *iwork, integer *info); |
183 | 184 | ||
184 | int svd_l_Rdd(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) { | 185 | int svd_l_Rdd(KODMAT(a),ODMAT(u), DVEC(s),ODMAT(v)) { |
185 | integer m = ar; | 186 | integer m = ar; |
186 | integer n = ac; | 187 | integer n = ac; |
187 | integer q = MIN(m,n); | 188 | integer q = MIN(m,n); |
@@ -231,7 +232,7 @@ int zgesvd_(char *jobu, char *jobvt, integer *m, integer *n, | |||
231 | integer *ldu, doublecomplex *vt, integer *ldvt, doublecomplex *work, | 232 | integer *ldu, doublecomplex *vt, integer *ldvt, doublecomplex *work, |
232 | integer *lwork, doublereal *rwork, integer *info); | 233 | integer *lwork, doublereal *rwork, integer *info); |
233 | 234 | ||
234 | int svd_l_C(KCMAT(a),CMAT(u), DVEC(s),CMAT(v)) { | 235 | int svd_l_C(KOCMAT(a),OCMAT(u), DVEC(s),OCMAT(v)) { |
235 | integer m = ar; | 236 | integer m = ar; |
236 | integer n = ac; | 237 | integer n = ac; |
237 | integer q = MIN(m,n); | 238 | integer q = MIN(m,n); |
@@ -297,7 +298,7 @@ int zgesdd_ (char *jobz, integer *m, integer *n, | |||
297 | integer *ldu, doublecomplex *vt, integer *ldvt, doublecomplex *work, | 298 | integer *ldu, doublecomplex *vt, integer *ldvt, doublecomplex *work, |
298 | integer *lwork, doublereal *rwork, integer* iwork, integer *info); | 299 | integer *lwork, doublereal *rwork, integer* iwork, integer *info); |
299 | 300 | ||
300 | int svd_l_Cdd(KCMAT(a),CMAT(u), DVEC(s),CMAT(v)) { | 301 | int svd_l_Cdd(KOCMAT(a),OCMAT(u), DVEC(s),OCMAT(v)) { |
301 | //printf("entro\n"); | 302 | //printf("entro\n"); |
302 | integer m = ar; | 303 | integer m = ar; |
303 | integer n = ac; | 304 | integer n = ac; |
@@ -358,7 +359,7 @@ int svd_l_Cdd(KCMAT(a),CMAT(u), DVEC(s),CMAT(v)) { | |||
358 | integer *ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work, | 359 | integer *ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work, |
359 | integer *lwork, doublereal *rwork, integer *info); | 360 | integer *lwork, doublereal *rwork, integer *info); |
360 | 361 | ||
361 | int eig_l_C(KCMAT(a), CMAT(u), CVEC(s),CMAT(v)) { | 362 | int eig_l_C(KOCMAT(a), OCMAT(u), CVEC(s),OCMAT(v)) { |
362 | integer n = ar; | 363 | integer n = ar; |
363 | REQUIRES(ac==n && sn==n, BAD_SIZE); | 364 | REQUIRES(ac==n && sn==n, BAD_SIZE); |
364 | REQUIRES(up==NULL || (ur==n && uc==n), BAD_SIZE); | 365 | REQUIRES(up==NULL || (ur==n && uc==n), BAD_SIZE); |
@@ -413,7 +414,7 @@ int eig_l_C(KCMAT(a), CMAT(u), CVEC(s),CMAT(v)) { | |||
413 | integer *ldvl, doublereal *vr, integer *ldvr, doublereal *work, | 414 | integer *ldvl, doublereal *vr, integer *ldvr, doublereal *work, |
414 | integer *lwork, integer *info); | 415 | integer *lwork, integer *info); |
415 | 416 | ||
416 | int eig_l_R(KDMAT(a),DMAT(u), CVEC(s),DMAT(v)) { | 417 | int eig_l_R(KODMAT(a),ODMAT(u), CVEC(s),ODMAT(v)) { |
417 | integer n = ar; | 418 | integer n = ar; |
418 | REQUIRES(ac==n && sn==n, BAD_SIZE); | 419 | REQUIRES(ac==n && sn==n, BAD_SIZE); |
419 | REQUIRES(up==NULL || (ur==n && uc==n), BAD_SIZE); | 420 | REQUIRES(up==NULL || (ur==n && uc==n), BAD_SIZE); |
@@ -461,7 +462,7 @@ int eig_l_R(KDMAT(a),DMAT(u), CVEC(s),DMAT(v)) { | |||
461 | integer *lda, doublereal *w, doublereal *work, integer *lwork, | 462 | integer *lda, doublereal *w, doublereal *work, integer *lwork, |
462 | integer *info); | 463 | integer *info); |
463 | 464 | ||
464 | int eig_l_S(int wantV,KDMAT(a),DVEC(s),DMAT(v)) { | 465 | int eig_l_S(int wantV,KODMAT(a),DVEC(s),ODMAT(v)) { |
465 | integer n = ar; | 466 | integer n = ar; |
466 | REQUIRES(ac==n && sn==n, BAD_SIZE); | 467 | REQUIRES(ac==n && sn==n, BAD_SIZE); |
467 | REQUIRES(vr==n && vc==n, BAD_SIZE); | 468 | REQUIRES(vr==n && vc==n, BAD_SIZE); |
@@ -499,7 +500,7 @@ int eig_l_S(int wantV,KDMAT(a),DVEC(s),DMAT(v)) { | |||
499 | *a, integer *lda, doublereal *w, doublecomplex *work, integer *lwork, | 500 | *a, integer *lda, doublereal *w, doublecomplex *work, integer *lwork, |
500 | doublereal *rwork, integer *info); | 501 | doublereal *rwork, integer *info); |
501 | 502 | ||
502 | int eig_l_H(int wantV,KCMAT(a),DVEC(s),CMAT(v)) { | 503 | int eig_l_H(int wantV,KOCMAT(a),DVEC(s),OCMAT(v)) { |
503 | integer n = ar; | 504 | integer n = ar; |
504 | REQUIRES(ac==n && sn==n, BAD_SIZE); | 505 | REQUIRES(ac==n && sn==n, BAD_SIZE); |
505 | REQUIRES(vr==n && vc==n, BAD_SIZE); | 506 | REQUIRES(vr==n && vc==n, BAD_SIZE); |
@@ -541,7 +542,7 @@ int eig_l_H(int wantV,KCMAT(a),DVEC(s),CMAT(v)) { | |||
541 | /* Subroutine */ int dgesv_(integer *n, integer *nrhs, doublereal *a, integer | 542 | /* Subroutine */ int dgesv_(integer *n, integer *nrhs, doublereal *a, integer |
542 | *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info); | 543 | *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info); |
543 | 544 | ||
544 | int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) { | 545 | int linearSolveR_l(KODMAT(a),KODMAT(b),ODMAT(x)) { |
545 | integer n = ar; | 546 | integer n = ar; |
546 | integer nhrs = bc; | 547 | integer nhrs = bc; |
547 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); | 548 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); |
@@ -571,7 +572,7 @@ int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) { | |||
571 | integer *lda, integer *ipiv, doublecomplex *b, integer *ldb, integer * | 572 | integer *lda, integer *ipiv, doublecomplex *b, integer *ldb, integer * |
572 | info); | 573 | info); |
573 | 574 | ||
574 | int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) { | 575 | int linearSolveC_l(KOCMAT(a),KOCMAT(b),OCMAT(x)) { |
575 | integer n = ar; | 576 | integer n = ar; |
576 | integer nhrs = bc; | 577 | integer nhrs = bc; |
577 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); | 578 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); |
@@ -601,7 +602,7 @@ int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) { | |||
601 | doublereal *a, integer *lda, doublereal *b, integer *ldb, integer * | 602 | doublereal *a, integer *lda, doublereal *b, integer *ldb, integer * |
602 | info); | 603 | info); |
603 | 604 | ||
604 | int cholSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) { | 605 | int cholSolveR_l(KODMAT(a),KODMAT(b),ODMAT(x)) { |
605 | integer n = ar; | 606 | integer n = ar; |
606 | integer nhrs = bc; | 607 | integer nhrs = bc; |
607 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); | 608 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); |
@@ -623,7 +624,7 @@ int cholSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) { | |||
623 | doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, | 624 | doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, |
624 | integer *info); | 625 | integer *info); |
625 | 626 | ||
626 | int cholSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) { | 627 | int cholSolveC_l(KOCMAT(a),KOCMAT(b),OCMAT(x)) { |
627 | integer n = ar; | 628 | integer n = ar; |
628 | integer nhrs = bc; | 629 | integer nhrs = bc; |
629 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); | 630 | REQUIRES(n>=1 && ar==ac && ar==br,BAD_SIZE); |
@@ -645,7 +646,7 @@ int cholSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) { | |||
645 | nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb, | 646 | nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb, |
646 | doublereal *work, integer *lwork, integer *info); | 647 | doublereal *work, integer *lwork, integer *info); |
647 | 648 | ||
648 | int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)) { | 649 | int linearSolveLSR_l(KODMAT(a),KODMAT(b),ODMAT(x)) { |
649 | integer m = ar; | 650 | integer m = ar; |
650 | integer n = ac; | 651 | integer n = ac; |
651 | integer nrhs = bc; | 652 | integer nrhs = bc; |
@@ -693,7 +694,7 @@ int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)) { | |||
693 | nrhs, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, | 694 | nrhs, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, |
694 | doublecomplex *work, integer *lwork, integer *info); | 695 | doublecomplex *work, integer *lwork, integer *info); |
695 | 696 | ||
696 | int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)) { | 697 | int linearSolveLSC_l(KOCMAT(a),KOCMAT(b),OCMAT(x)) { |
697 | integer m = ar; | 698 | integer m = ar; |
698 | integer n = ac; | 699 | integer n = ac; |
699 | integer nrhs = bc; | 700 | integer nrhs = bc; |
@@ -742,7 +743,7 @@ int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)) { | |||
742 | s, doublereal *rcond, integer *rank, doublereal *work, integer *lwork, | 743 | s, doublereal *rcond, integer *rank, doublereal *work, integer *lwork, |
743 | integer *info); | 744 | integer *info); |
744 | 745 | ||
745 | int linearSolveSVDR_l(double rcond,KDMAT(a),KDMAT(b),DMAT(x)) { | 746 | int linearSolveSVDR_l(double rcond,KODMAT(a),KODMAT(b),ODMAT(x)) { |
746 | integer m = ar; | 747 | integer m = ar; |
747 | integer n = ac; | 748 | integer n = ac; |
748 | integer nrhs = bc; | 749 | integer nrhs = bc; |
@@ -801,7 +802,7 @@ int zgelss_(integer *m, integer *n, integer *nhrs, | |||
801 | doublecomplex *work, integer* lwork, doublereal* rwork, | 802 | doublecomplex *work, integer* lwork, doublereal* rwork, |
802 | integer *info); | 803 | integer *info); |
803 | 804 | ||
804 | int linearSolveSVDC_l(double rcond, KCMAT(a),KCMAT(b),CMAT(x)) { | 805 | int linearSolveSVDC_l(double rcond, KOCMAT(a),KOCMAT(b),OCMAT(x)) { |
805 | integer m = ar; | 806 | integer m = ar; |
806 | integer n = ac; | 807 | integer n = ac; |
807 | integer nrhs = bc; | 808 | integer nrhs = bc; |
@@ -859,7 +860,7 @@ int linearSolveSVDC_l(double rcond, KCMAT(a),KCMAT(b),CMAT(x)) { | |||
859 | /* Subroutine */ int zpotrf_(char *uplo, integer *n, doublecomplex *a, | 860 | /* Subroutine */ int zpotrf_(char *uplo, integer *n, doublecomplex *a, |
860 | integer *lda, integer *info); | 861 | integer *lda, integer *info); |
861 | 862 | ||
862 | int chol_l_H(KCMAT(a),CMAT(l)) { | 863 | int chol_l_H(KOCMAT(a),OCMAT(l)) { |
863 | integer n = ar; | 864 | integer n = ar; |
864 | REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE); | 865 | REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE); |
865 | DEBUGMSG("chol_l_H"); | 866 | DEBUGMSG("chol_l_H"); |
@@ -871,9 +872,9 @@ int chol_l_H(KCMAT(a),CMAT(l)) { | |||
871 | CHECK(res,res); | 872 | CHECK(res,res); |
872 | doublecomplex zero = {0.,0.}; | 873 | doublecomplex zero = {0.,0.}; |
873 | int r,c; | 874 | int r,c; |
874 | for (r=0; r<lr-1; r++) { | 875 | for (r=0; r<lr; r++) { |
875 | for(c=r+1; c<lc; c++) { | 876 | for(c=0; c<r; c++) { |
876 | lp[r*lc+c] = zero; | 877 | AT(l,r,c) = zero; |
877 | } | 878 | } |
878 | } | 879 | } |
879 | OK | 880 | OK |
@@ -883,7 +884,7 @@ int chol_l_H(KCMAT(a),CMAT(l)) { | |||
883 | /* Subroutine */ int dpotrf_(char *uplo, integer *n, doublereal *a, integer * | 884 | /* Subroutine */ int dpotrf_(char *uplo, integer *n, doublereal *a, integer * |
884 | lda, integer *info); | 885 | lda, integer *info); |
885 | 886 | ||
886 | int chol_l_S(KDMAT(a),DMAT(l)) { | 887 | int chol_l_S(KODMAT(a),ODMAT(l)) { |
887 | integer n = ar; | 888 | integer n = ar; |
888 | REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE); | 889 | REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE); |
889 | DEBUGMSG("chol_l_S"); | 890 | DEBUGMSG("chol_l_S"); |
@@ -894,9 +895,9 @@ int chol_l_S(KDMAT(a),DMAT(l)) { | |||
894 | CHECK(res>0,NODEFPOS); | 895 | CHECK(res>0,NODEFPOS); |
895 | CHECK(res,res); | 896 | CHECK(res,res); |
896 | int r,c; | 897 | int r,c; |
897 | for (r=0; r<lr-1; r++) { | 898 | for (r=0; r<lr; r++) { |
898 | for(c=r+1; c<lc; c++) { | 899 | for(c=0; c<r; c++) { |
899 | lp[r*lc+c] = 0.; | 900 | AT(l,r,c) = 0.; |
900 | } | 901 | } |
901 | } | 902 | } |
902 | OK | 903 | OK |
@@ -907,7 +908,7 @@ int chol_l_S(KDMAT(a),DMAT(l)) { | |||
907 | /* Subroutine */ int dgeqr2_(integer *m, integer *n, doublereal *a, integer * | 908 | /* Subroutine */ int dgeqr2_(integer *m, integer *n, doublereal *a, integer * |
908 | lda, doublereal *tau, doublereal *work, integer *info); | 909 | lda, doublereal *tau, doublereal *work, integer *info); |
909 | 910 | ||
910 | int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)) { | 911 | int qr_l_R(KODMAT(a), DVEC(tau), ODMAT(r)) { |
911 | integer m = ar; | 912 | integer m = ar; |
912 | integer n = ac; | 913 | integer n = ac; |
913 | integer mn = MIN(m,n); | 914 | integer mn = MIN(m,n); |
@@ -926,7 +927,7 @@ int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)) { | |||
926 | /* Subroutine */ int zgeqr2_(integer *m, integer *n, doublecomplex *a, | 927 | /* Subroutine */ int zgeqr2_(integer *m, integer *n, doublecomplex *a, |
927 | integer *lda, doublecomplex *tau, doublecomplex *work, integer *info); | 928 | integer *lda, doublecomplex *tau, doublecomplex *work, integer *info); |
928 | 929 | ||
929 | int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)) { | 930 | int qr_l_C(KOCMAT(a), CVEC(tau), OCMAT(r)) { |
930 | integer m = ar; | 931 | integer m = ar; |
931 | integer n = ac; | 932 | integer n = ac; |
932 | integer mn = MIN(m,n); | 933 | integer mn = MIN(m,n); |
@@ -946,7 +947,7 @@ int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)) { | |||
946 | a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, | 947 | a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, |
947 | integer *info); | 948 | integer *info); |
948 | 949 | ||
949 | int c_dorgqr(KDMAT(a), KDVEC(tau), DMAT(r)) { | 950 | int c_dorgqr(KODMAT(a), KDVEC(tau), ODMAT(r)) { |
950 | integer m = ar; | 951 | integer m = ar; |
951 | integer n = MIN(ac,ar); | 952 | integer n = MIN(ac,ar); |
952 | integer k = taun; | 953 | integer k = taun; |
@@ -966,7 +967,7 @@ int c_dorgqr(KDMAT(a), KDVEC(tau), DMAT(r)) { | |||
966 | doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex * | 967 | doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex * |
967 | work, integer *lwork, integer *info); | 968 | work, integer *lwork, integer *info); |
968 | 969 | ||
969 | int c_zungqr(KCMAT(a), KCVEC(tau), CMAT(r)) { | 970 | int c_zungqr(KOCMAT(a), KCVEC(tau), OCMAT(r)) { |
970 | integer m = ar; | 971 | integer m = ar; |
971 | integer n = MIN(ac,ar); | 972 | integer n = MIN(ac,ar); |
972 | integer k = taun; | 973 | integer k = taun; |
@@ -989,7 +990,7 @@ int c_zungqr(KCMAT(a), KCVEC(tau), CMAT(r)) { | |||
989 | doublereal *a, integer *lda, doublereal *tau, doublereal *work, | 990 | doublereal *a, integer *lda, doublereal *tau, doublereal *work, |
990 | integer *lwork, integer *info); | 991 | integer *lwork, integer *info); |
991 | 992 | ||
992 | int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)) { | 993 | int hess_l_R(KODMAT(a), DVEC(tau), ODMAT(r)) { |
993 | integer m = ar; | 994 | integer m = ar; |
994 | integer n = ac; | 995 | integer n = ac; |
995 | integer mn = MIN(m,n); | 996 | integer mn = MIN(m,n); |
@@ -1012,7 +1013,7 @@ int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)) { | |||
1012 | doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex * | 1013 | doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex * |
1013 | work, integer *lwork, integer *info); | 1014 | work, integer *lwork, integer *info); |
1014 | 1015 | ||
1015 | int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)) { | 1016 | int hess_l_C(KOCMAT(a), CVEC(tau), OCMAT(r)) { |
1016 | integer m = ar; | 1017 | integer m = ar; |
1017 | integer n = ac; | 1018 | integer n = ac; |
1018 | integer mn = MIN(m,n); | 1019 | integer mn = MIN(m,n); |
@@ -1037,7 +1038,7 @@ int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)) { | |||
1037 | doublereal *wi, doublereal *vs, integer *ldvs, doublereal *work, | 1038 | doublereal *wi, doublereal *vs, integer *ldvs, doublereal *work, |
1038 | integer *lwork, logical *bwork, integer *info); | 1039 | integer *lwork, logical *bwork, integer *info); |
1039 | 1040 | ||
1040 | int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)) { | 1041 | int schur_l_R(KODMAT(a), ODMAT(u), ODMAT(s)) { |
1041 | integer m = ar; | 1042 | integer m = ar; |
1042 | integer n = ac; | 1043 | integer n = ac; |
1043 | REQUIRES(m>=1 && n==m && ur==n && uc==n && sr==n && sc==n, BAD_SIZE); | 1044 | REQUIRES(m>=1 && n==m && ur==n && uc==n && sr==n && sc==n, BAD_SIZE); |
@@ -1077,7 +1078,7 @@ int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)) { | |||
1077 | doublecomplex *vs, integer *ldvs, doublecomplex *work, integer *lwork, | 1078 | doublecomplex *vs, integer *ldvs, doublecomplex *work, integer *lwork, |
1078 | doublereal *rwork, logical *bwork, integer *info); | 1079 | doublereal *rwork, logical *bwork, integer *info); |
1079 | 1080 | ||
1080 | int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)) { | 1081 | int schur_l_C(KOCMAT(a), OCMAT(u), OCMAT(s)) { |
1081 | integer m = ar; | 1082 | integer m = ar; |
1082 | integer n = ac; | 1083 | integer n = ac; |
1083 | REQUIRES(m>=1 && n==m && ur==n && uc==n && sr==n && sc==n, BAD_SIZE); | 1084 | REQUIRES(m>=1 && n==m && ur==n && uc==n && sr==n && sc==n, BAD_SIZE); |
@@ -1109,7 +1110,7 @@ int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)) { | |||
1109 | /* Subroutine */ int dgetrf_(integer *m, integer *n, doublereal *a, integer * | 1110 | /* Subroutine */ int dgetrf_(integer *m, integer *n, doublereal *a, integer * |
1110 | lda, integer *ipiv, integer *info); | 1111 | lda, integer *ipiv, integer *info); |
1111 | 1112 | ||
1112 | int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r)) { | 1113 | int lu_l_R(KODMAT(a), DVEC(ipiv), ODMAT(r)) { |
1113 | integer m = ar; | 1114 | integer m = ar; |
1114 | integer n = ac; | 1115 | integer n = ac; |
1115 | integer mn = MIN(m,n); | 1116 | integer mn = MIN(m,n); |
@@ -1135,7 +1136,7 @@ int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r)) { | |||
1135 | /* Subroutine */ int zgetrf_(integer *m, integer *n, doublecomplex *a, | 1136 | /* Subroutine */ int zgetrf_(integer *m, integer *n, doublecomplex *a, |
1136 | integer *lda, integer *ipiv, integer *info); | 1137 | integer *lda, integer *ipiv, integer *info); |
1137 | 1138 | ||
1138 | int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r)) { | 1139 | int lu_l_C(KOCMAT(a), DVEC(ipiv), OCMAT(r)) { |
1139 | integer m = ar; | 1140 | integer m = ar; |
1140 | integer n = ac; | 1141 | integer n = ac; |
1141 | integer mn = MIN(m,n); | 1142 | integer mn = MIN(m,n); |
@@ -1164,7 +1165,7 @@ int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r)) { | |||
1164 | doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer * | 1165 | doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer * |
1165 | ldb, integer *info); | 1166 | ldb, integer *info); |
1166 | 1167 | ||
1167 | int luS_l_R(KDMAT(a), KDVEC(ipiv), KDMAT(b), DMAT(x)) { | 1168 | int luS_l_R(KODMAT(a), KDVEC(ipiv), KODMAT(b), ODMAT(x)) { |
1168 | integer m = ar; | 1169 | integer m = ar; |
1169 | integer n = ac; | 1170 | integer n = ac; |
1170 | integer mrhs = br; | 1171 | integer mrhs = br; |
@@ -1189,7 +1190,7 @@ int luS_l_R(KDMAT(a), KDVEC(ipiv), KDMAT(b), DMAT(x)) { | |||
1189 | doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, | 1190 | doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, |
1190 | integer *ldb, integer *info); | 1191 | integer *ldb, integer *info); |
1191 | 1192 | ||
1192 | int luS_l_C(KCMAT(a), KDVEC(ipiv), KCMAT(b), CMAT(x)) { | 1193 | int luS_l_C(KOCMAT(a), KDVEC(ipiv), KOCMAT(b), OCMAT(x)) { |
1193 | integer m = ar; | 1194 | integer m = ar; |
1194 | integer n = ac; | 1195 | integer n = ac; |
1195 | integer mrhs = br; | 1196 | integer mrhs = br; |
@@ -1215,7 +1216,7 @@ void dgemm_(char *, char *, integer *, integer *, integer *, | |||
1215 | double *, const double *, integer *, const double *, | 1216 | double *, const double *, integer *, const double *, |
1216 | integer *, double *, double *, integer *); | 1217 | integer *, double *, double *, integer *); |
1217 | 1218 | ||
1218 | int multiplyR(int ta, int tb, KDMAT(a),KDMAT(b),DMAT(r)) { | 1219 | int multiplyR(int ta, int tb, KODMAT(a),KODMAT(b),ODMAT(r)) { |
1219 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); | 1220 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); |
1220 | DEBUGMSG("dgemm_"); | 1221 | DEBUGMSG("dgemm_"); |
1221 | CHECKNANR(a,"NaN multR Input\n") | 1222 | CHECKNANR(a,"NaN multR Input\n") |
@@ -1237,7 +1238,7 @@ void zgemm_(char *, char *, integer *, integer *, integer *, | |||
1237 | doublecomplex *, const doublecomplex *, integer *, const doublecomplex *, | 1238 | doublecomplex *, const doublecomplex *, integer *, const doublecomplex *, |
1238 | integer *, doublecomplex *, doublecomplex *, integer *); | 1239 | integer *, doublecomplex *, doublecomplex *, integer *); |
1239 | 1240 | ||
1240 | int multiplyC(int ta, int tb, KCMAT(a),KCMAT(b),CMAT(r)) { | 1241 | int multiplyC(int ta, int tb, KOCMAT(a),KOCMAT(b),OCMAT(r)) { |
1241 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); | 1242 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); |
1242 | DEBUGMSG("zgemm_"); | 1243 | DEBUGMSG("zgemm_"); |
1243 | CHECKNANC(a,"NaN multC Input\n") | 1244 | CHECKNANC(a,"NaN multC Input\n") |
@@ -1262,7 +1263,7 @@ void sgemm_(char *, char *, integer *, integer *, integer *, | |||
1262 | float *, const float *, integer *, const float *, | 1263 | float *, const float *, integer *, const float *, |
1263 | integer *, float *, float *, integer *); | 1264 | integer *, float *, float *, integer *); |
1264 | 1265 | ||
1265 | int multiplyF(int ta, int tb, KFMAT(a),KFMAT(b),FMAT(r)) { | 1266 | int multiplyF(int ta, int tb, KOFMAT(a),KOFMAT(b),OFMAT(r)) { |
1266 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); | 1267 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); |
1267 | DEBUGMSG("sgemm_"); | 1268 | DEBUGMSG("sgemm_"); |
1268 | integer m = ta?ac:ar; | 1269 | integer m = ta?ac:ar; |
@@ -1281,7 +1282,7 @@ void cgemm_(char *, char *, integer *, integer *, integer *, | |||
1281 | complex *, const complex *, integer *, const complex *, | 1282 | complex *, const complex *, integer *, const complex *, |
1282 | integer *, complex *, complex *, integer *); | 1283 | integer *, complex *, complex *, integer *); |
1283 | 1284 | ||
1284 | int multiplyQ(int ta, int tb, KQMAT(a),KQMAT(b),QMAT(r)) { | 1285 | int multiplyQ(int ta, int tb, KOQMAT(a),KOQMAT(b),OQMAT(r)) { |
1285 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); | 1286 | //REQUIRES(ac==br && ar==rr && bc==rc,BAD_SIZE); |
1286 | DEBUGMSG("cgemm_"); | 1287 | DEBUGMSG("cgemm_"); |
1287 | integer m = ta?ac:ar; | 1288 | integer m = ta?ac:ar; |
@@ -1564,13 +1565,13 @@ int remapQ(KOIMAT(i), KOIMAT(j), KOQMAT(m), OQMAT(r)) { | |||
1564 | 1565 | ||
1565 | //////////////////////////////////////////////////////////////////////////////// | 1566 | //////////////////////////////////////////////////////////////////////////////// |
1566 | 1567 | ||
1567 | int saveMatrix(char * file, char * format, KDMAT(a)){ | 1568 | int saveMatrix(char * file, char * format, KODMAT(a)){ |
1568 | FILE * fp; | 1569 | FILE * fp; |
1569 | fp = fopen (file, "w"); | 1570 | fp = fopen (file, "w"); |
1570 | int r, c; | 1571 | int r, c; |
1571 | for (r=0;r<ar; r++) { | 1572 | for (r=0;r<ar; r++) { |
1572 | for (c=0; c<ac; c++) { | 1573 | for (c=0; c<ac; c++) { |
1573 | fprintf(fp,format,ap[r*ac+c]); | 1574 | fprintf(fp,format,AT(a,r,c)); |
1574 | if (c<ac-1) { | 1575 | if (c<ac-1) { |
1575 | fprintf(fp," "); | 1576 | fprintf(fp," "); |
1576 | } else { | 1577 | } else { |
diff --git a/packages/base/src/Internal/C/lapack-aux.h b/packages/base/src/Internal/C/lapack-aux.h index bf8c5e9..b38ca7a 100644 --- a/packages/base/src/Internal/C/lapack-aux.h +++ b/packages/base/src/Internal/C/lapack-aux.h | |||
@@ -52,16 +52,6 @@ typedef short ftnlen; | |||
52 | #define CMAT(A) int A##r, int A##c, doublecomplex* A##p | 52 | #define CMAT(A) int A##r, int A##c, doublecomplex* A##p |
53 | #define PMAT(A) int A##r, int A##c, void* A##p, int A##s | 53 | #define PMAT(A) int A##r, int A##c, void* A##p, int A##s |
54 | 54 | ||
55 | #define OIMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, int* A##p | ||
56 | #define OLMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, int64_t* A##p | ||
57 | #define OFMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, float* A##p | ||
58 | #define ODMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, double* A##p | ||
59 | #define OQMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, complex* A##p | ||
60 | #define OCMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, doublecomplex* A##p | ||
61 | |||
62 | #define VECG(T,A) int A##n, T* A##p | ||
63 | #define MATG(T,A) int A##r, int A##c, int A##Xr, int A##Xc, T* A##p | ||
64 | |||
65 | #define KIVEC(A) int A##n, const int*A##p | 55 | #define KIVEC(A) int A##n, const int*A##p |
66 | #define KLVEC(A) int A##n, const int64_t*A##p | 56 | #define KLVEC(A) int A##n, const int64_t*A##p |
67 | #define KFVEC(A) int A##n, const float*A##p | 57 | #define KFVEC(A) int A##n, const float*A##p |
@@ -78,12 +68,22 @@ typedef short ftnlen; | |||
78 | #define KCMAT(A) int A##r, int A##c, const doublecomplex* A##p | 68 | #define KCMAT(A) int A##r, int A##c, const doublecomplex* A##p |
79 | #define KPMAT(A) int A##r, int A##c, const void* A##p, int A##s | 69 | #define KPMAT(A) int A##r, int A##c, const void* A##p, int A##s |
80 | 70 | ||
81 | #define KOIMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const int* A##p | 71 | #define VECG(T,A) int A##n, T* A##p |
82 | #define KOLMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const int64_t* A##p | 72 | #define MATG(T,A) int A##r, int A##c, int A##Xr, int A##Xc, T* A##p |
83 | #define KOFMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const float* A##p | 73 | |
84 | #define KODMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const double* A##p | 74 | #define OIMAT(A) MATG(int,A) |
85 | #define KOQMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const complex* A##p | 75 | #define OLMAT(A) MATG(int64_t,A) |
86 | #define KOCMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const doublecomplex* A##p | 76 | #define OFMAT(A) MATG(float,A) |
77 | #define ODMAT(A) MATG(double,A) | ||
78 | #define OQMAT(A) MATG(complex,A) | ||
79 | #define OCMAT(A) MATG(doublecomplex,A) | ||
80 | |||
81 | #define KOIMAT(A) MATG(const int,A) | ||
82 | #define KOLMAT(A) MATG(const int64_t,A) | ||
83 | #define KOFMAT(A) MATG(const float,A) | ||
84 | #define KODMAT(A) MATG(const double,A) | ||
85 | #define KOQMAT(A) MATG(const complex,A) | ||
86 | #define KOCMAT(A) MATG(const doublecomplex,A) | ||
87 | 87 | ||
88 | #define AT(m,i,j) (m##p[(i)*m##Xr + (j)*m##Xc]) | 88 | #define AT(m,i,j) (m##p[(i)*m##Xr + (j)*m##Xc]) |
89 | #define TRAV(m,i,j) int i,j; for (i=0;i<m##r;i++) for (j=0;j<m##c;j++) | 89 | #define TRAV(m,i,j) int i,j; for (i=0;i<m##r;i++) for (j=0;j<m##c;j++) |