Changeset 2559 in Sophya for trunk/SophyaExt/LinAlg/intflapack.cc
- Timestamp:
- Jul 22, 2004, 3:38:49 PM (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/LinAlg/intflapack.cc
r2556 r2559 122 122 r_8* work, int_4* lwork, int_4* info); 123 123 void cgesvd_(char* jobu, char* jobvt, int_4* m, int_4* n, complex<r_4>* a, int_4* lda, 124 complex<r_4>* s, complex<r_4>* u, int_4* ldu, complex<r_4>* vt, int_4* ldvt,125 complex<r_4>* work, int_4* lwork, int_4* info);124 r_4* s, complex<r_4>* u, int_4* ldu, complex<r_4>* vt, int_4* ldvt, 125 complex<r_4>* work, int_4* lwork, r_4* rwork, int_4* info); 126 126 void zgesvd_(char* jobu, char* jobvt, int_4* m, int_4* n, complex<r_8>* a, int_4* lda, 127 complex<r_8>* s, complex<r_8>* u, int_4* ldu, complex<r_8>* vt, int_4* ldvt,128 complex<r_8>* work, int_4* lwork, int_4* info);127 r_8* s, complex<r_8>* u, int_4* ldu, complex<r_8>* vt, int_4* ldvt, 128 complex<r_8>* work, int_4* lwork, r_8* rwork, int_4* info); 129 129 130 130 // Driver pour eigen decomposition for symetric/hermitian matrices … … 512 512 int_4 info; 513 513 514 if (typeid(T) == typeid(r_4) ) 514 if (typeid(T) == typeid(r_4) ) { 515 515 sgesvd_(&jobu, &jobvt, &m, &n, (r_4 *)a.Data(), &lda, 516 516 (r_4 *)s.Data(), (r_4 *) up->Data(), &ldu, (r_4 *)vtp->Data(), &ldvt, 517 517 (r_4 *)work, &lwork, &info); 518 else if (typeid(T) == typeid(r_8) )518 } else if (typeid(T) == typeid(r_8) ) { 519 519 dgesvd_(&jobu, &jobvt, &m, &n, (r_8 *)a.Data(), &lda, 520 520 (r_8 *)s.Data(), (r_8 *) up->Data(), &ldu, (r_8 *)vtp->Data(), &ldvt, 521 521 (r_8 *)work, &lwork, &info); 522 else if (typeid(T) == typeid(complex<r_4>) ) 522 } else if (typeid(T) == typeid(complex<r_4>) ) { 523 r_4 * rwork = new r_4[5*minmn +5]; 524 r_4 * sloc = new r_4[minmn]; 523 525 cgesvd_(&jobu, &jobvt, &m, &n, (complex<r_4> *)a.Data(), &lda, 524 ( complex<r_4> *)s.Data(), (complex<r_4> *) up->Data(), &ldu,526 (r_4 *)sloc, (complex<r_4> *) up->Data(), &ldu, 525 527 (complex<r_4> *)vtp->Data(), &ldvt, 526 (complex<r_4> *)work, &lwork, &info); 527 else if (typeid(T) == typeid(complex<r_8>) ) 528 (complex<r_4> *)work, &lwork, (r_4 *)rwork, &info); 529 for(int_4 i=0;i<minmn;i++) s[i] = sloc[i]; 530 delete [] rwork; delete [] sloc; 531 } else if (typeid(T) == typeid(complex<r_8>) ) { 532 r_8 * rwork = new r_8[5*minmn +5]; 533 r_8 * sloc = new r_8[minmn]; 528 534 zgesvd_(&jobu, &jobvt, &m, &n, (complex<r_8> *)a.Data(), &lda, 529 ( complex<r_8> *)s.Data(), (complex<r_8> *) up->Data(), &ldu,535 (r_8 *)sloc, (complex<r_8> *) up->Data(), &ldu, 530 536 (complex<r_8> *)vtp->Data(), &ldvt, 531 (complex<r_8> *)work, &lwork, &info); 532 else { 537 (complex<r_8> *)work, &lwork, (r_8 *)rwork, &info); 538 for(int_4 i=0;i<minmn;i++) s[i] = sloc[i]; 539 delete [] rwork; delete [] sloc; 540 } else { 533 541 if (jobu == 'N') delete up; 534 542 if (jobvt == 'N') delete vtp;
Note:
See TracChangeset
for help on using the changeset viewer.