00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _TEUCHOS_LAPACK_HPP_
00030 #define _TEUCHOS_LAPACK_HPP_
00031
00039
00040
00041
00042
00043 #if defined (INTEL_CXML)
00044 unsigned int one=1;
00045 #endif
00046
00047 #ifdef CHAR_MACRO
00048 #undef CHAR_MACRO
00049 #endif
00050 #if defined (INTEL_CXML)
00051 #define CHAR_MACRO(char_var) &char_var, one
00052 #else
00053 #define CHAR_MACRO(char_var) &char_var
00054 #endif
00055
00056 #include "Teuchos_ConfigDefs.hpp"
00057 #include "Teuchos_ScalarTraits.hpp"
00058 #include "Teuchos_LAPACK_wrappers.hpp"
00059
00090 namespace Teuchos
00091 {
00092
00093 template<class T>
00094 struct UndefinedLAPACKRoutine
00095 {
00096
00097 static inline T notDefined() { return T::LAPACK_routine_not_defined_for_this_type(); };
00098 };
00099
00100 template<typename OrdinalType, typename ScalarType>
00101 class LAPACK
00102 {
00103 public:
00104
00105 typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
00106
00108
00109
00111 inline LAPACK(void) {};
00112
00114 inline LAPACK(const LAPACK<OrdinalType, ScalarType>& lapack) {};
00115
00117 inline virtual ~LAPACK(void) {};
00119
00121
00122
00124 void PTTRF(const OrdinalType n, ScalarType* d, ScalarType* e, OrdinalType* info) const;
00125
00127 void PTTRS(const OrdinalType n, const OrdinalType nrhs, const ScalarType* d, const ScalarType* e, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00128
00130 void POTRF(const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* info) const;
00131
00133 void POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00134
00136 void POTRI(const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* info) const;
00137
00139
00140 void POCON(const char UPLO, const OrdinalType n, const ScalarType* A, const OrdinalType lda, const ScalarType anorm, ScalarType* rcond, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00141
00143 void POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00144
00146 void POEQU(const OrdinalType n, const ScalarType* A, const OrdinalType lda, ScalarType* S, ScalarType* scond, ScalarType* amax, OrdinalType* info) const;
00147
00149 void PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, const ScalarType* AF, const OrdinalType ldaf, const ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00150
00152 void POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* AF, const OrdinalType ldaf, char EQUED, ScalarType* S, ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* rcond, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00154
00156
00157
00159 void GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00160
00162 void GEQRF( const OrdinalType m, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00163
00165 void GETRF(const OrdinalType m, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const;
00166
00168 void GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, const OrdinalType* IPIV, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00169
00171 void GTTRF(const OrdinalType n, ScalarType* dl, ScalarType* d, ScalarType* du, ScalarType* du2, OrdinalType* IPIV, OrdinalType* info) const;
00172
00174 void GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const ScalarType* dl, const ScalarType* d, const ScalarType* du, const ScalarType* du2, const OrdinalType* IPIV, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00175
00177 void GETRI(const OrdinalType n, ScalarType* A, const OrdinalType lda, const OrdinalType* IPIV, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00178
00180 void GECON(const char NORM, const OrdinalType n, const ScalarType* A, const OrdinalType lda, const ScalarType anorm, ScalarType* rcond, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00181
00183 void GESV(const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, OrdinalType* IPIV, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00184
00186 void GEEQU(const OrdinalType m, const OrdinalType n, const ScalarType* A, const OrdinalType lda, ScalarType* R, ScalarType* C, ScalarType* rowcond, ScalarType* colcond, ScalarType* amax, OrdinalType* info) const;
00187
00189 void GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, const ScalarType* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00190
00192 void GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, ScalarType* R, ScalarType* C, ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* rcond, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00193
00197 void SYTRD(const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* D, ScalarType* E, ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00198
00200 void GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, ScalarType* A, const OrdinalType lda, ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00201
00203 void TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const;
00204
00206
00208
00209
00212 void SPEV(const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* AP, ScalarType* W, ScalarType* Z, const OrdinalType ldz, ScalarType* WORK, OrdinalType* info) const;
00213
00217 void SYEV(const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* W, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00218
00222 void SYGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, ScalarType* W, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00223
00227 void HEEV(const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, MagnitudeType* W, ScalarType* WORK, const OrdinalType lwork, MagnitudeType* RWORK, OrdinalType* info) const;
00228
00232 void HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, MagnitudeType* W, ScalarType* WORK, const OrdinalType lwork, MagnitudeType *RWORK, OrdinalType* info) const;
00233
00235 void STEQR(const char COMPZ, const OrdinalType n, ScalarType* D, ScalarType* E, ScalarType* Z, const OrdinalType ldz, ScalarType* WORK, OrdinalType* info) const;
00237
00239
00240
00241 void HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, ScalarType* H, const OrdinalType ldh, ScalarType* WR, ScalarType* WI, ScalarType* Z, const OrdinalType ldz, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00242
00246 void GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(ScalarType*, ScalarType*), const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* sdim, ScalarType* WR, ScalarType* WI, ScalarType* VS, const OrdinalType ldvs, ScalarType* WORK, const OrdinalType lwork, OrdinalType* BWORK, OrdinalType* info) const;
00247
00251 void GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(ScalarType*), const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* sdim, ScalarType* W, ScalarType* VS, const OrdinalType ldvs, ScalarType* WORK, const OrdinalType lwork, MagnitudeType* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
00252
00256 void GEES(const char JOBVS, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* sdim, MagnitudeType* WR, MagnitudeType* WI, ScalarType* VS, const OrdinalType ldvs, ScalarType* WORK, const OrdinalType lwork, MagnitudeType* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
00257
00259 void GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* WR, ScalarType* WI, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00261
00263
00264
00267 void ORMQR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType k, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* C, const OrdinalType ldc, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00268
00272 void ORGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00273
00277 void UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00278
00282 void ORGHR(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00283
00287 void ORMHR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, const ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* C, const OrdinalType ldc, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const;
00289
00291
00292
00296 void TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(ScalarType*, ScalarType*), const OrdinalType n, const ScalarType* T, const OrdinalType ldt, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, ScalarType* WORK, OrdinalType* info) const;
00297
00301 void TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(ScalarType*), const OrdinalType n, const ScalarType* T, const OrdinalType ldt, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, ScalarType* WORK, MagnitudeType* RWORK, OrdinalType* info) const;
00302
00306 void TREVC(const char SIDE, const OrdinalType n, const ScalarType* T, const OrdinalType ldt, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, ScalarType* WORK, MagnitudeType* RWORK, OrdinalType* info) const;
00307
00311 void TREXC(const char COMPQ, const OrdinalType n, ScalarType* T, const OrdinalType ldt, ScalarType* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, ScalarType* WORK, OrdinalType* info) const;
00312
00314
00316
00317
00319 void LARTG( const ScalarType f, const ScalarType g, MagnitudeType* c, ScalarType* s, ScalarType* r ) const;
00320
00322 void LARFG( const OrdinalType n, ScalarType* alpha, ScalarType* x, const OrdinalType incx, ScalarType* tau ) const;
00323
00325
00327
00328
00329 ScalarType LARND( const OrdinalType idist, OrdinalType* seed ) const;
00330
00332 void LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, ScalarType* v ) const;
00334
00336
00337
00340 ScalarType LAMCH(const char CMACH) const;
00341
00346 OrdinalType ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1 = -1, const OrdinalType N2 = -1, const OrdinalType N3 = -1, const OrdinalType N4 = -1 ) const;
00348
00350
00351
00354 ScalarType LAPY2(const ScalarType x, const ScalarType y) const;
00356 };
00357
00358
00359
00360
00361
00362
00363 template<typename OrdinalType, typename ScalarType>
00364 void LAPACK<OrdinalType, ScalarType>::PTTRF(const OrdinalType n, ScalarType* d, ScalarType* e, OrdinalType* info) const
00365 {
00366 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00367 }
00368
00369 template<typename OrdinalType, typename ScalarType>
00370 void LAPACK<OrdinalType, ScalarType>::PTTRS(const OrdinalType n, const OrdinalType nrhs, const ScalarType* d, const ScalarType* e, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00371 {
00372 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00373 }
00374
00375 template<typename OrdinalType, typename ScalarType>
00376 void LAPACK<OrdinalType, ScalarType>::POTRF(const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* info) const
00377 {
00378 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00379 }
00380
00381 template<typename OrdinalType, typename ScalarType>
00382 void LAPACK<OrdinalType, ScalarType>::POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00383 {
00384 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00385 }
00386
00387 template<typename OrdinalType, typename ScalarType>
00388 void LAPACK<OrdinalType, ScalarType>::POTRI(const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* info) const
00389 {
00390 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00391 }
00392
00393 template<typename OrdinalType, typename ScalarType>
00394 void LAPACK<OrdinalType, ScalarType>::POCON(const char UPLO, const OrdinalType n, const ScalarType* A, const OrdinalType lda, const ScalarType anorm, ScalarType* rcond, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const
00395 {
00396 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00397 }
00398
00399 template<typename OrdinalType, typename ScalarType>
00400 void LAPACK<OrdinalType, ScalarType>::POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00401 {
00402 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00403 }
00404
00405 template<typename OrdinalType, typename ScalarType>
00406 void LAPACK<OrdinalType, ScalarType>::POEQU(const OrdinalType n, const ScalarType* A, const OrdinalType lda, ScalarType* S, ScalarType* scond, ScalarType* amax, OrdinalType* info) const
00407 {
00408 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00409 }
00410
00411 template<typename OrdinalType, typename ScalarType>
00412 void LAPACK<OrdinalType, ScalarType>::PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, const ScalarType* AF, const OrdinalType ldaf, const ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const
00413 {
00414 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00415 }
00416
00417 template<typename OrdinalType, typename ScalarType>
00418 void LAPACK<OrdinalType, ScalarType>::POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* AF, const OrdinalType ldaf, char EQUED, ScalarType* S, ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* rcond, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const
00419 {
00420 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00421 }
00422
00423 template<typename OrdinalType, typename ScalarType>
00424 void LAPACK<OrdinalType,ScalarType>::GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00425 {
00426 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00427 }
00428
00429 template<typename OrdinalType, typename ScalarType>
00430 void LAPACK<OrdinalType,ScalarType>::GEQRF( const OrdinalType m, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00431 {
00432 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00433 }
00434
00435 template<typename OrdinalType, typename ScalarType>
00436 void LAPACK<OrdinalType,ScalarType>::GETRF(const OrdinalType m, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const
00437 {
00438 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00439 }
00440
00441 template<typename OrdinalType, typename ScalarType>
00442 void LAPACK<OrdinalType,ScalarType>::GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, const OrdinalType* IPIV, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00443 {
00444 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00445 }
00446
00447 template<typename OrdinalType, typename ScalarType>
00448 void LAPACK<OrdinalType,ScalarType>::GTTRF(const OrdinalType n, ScalarType* dl, ScalarType* d, ScalarType* du, ScalarType* du2, OrdinalType* IPIV, OrdinalType* info) const
00449 {
00450 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00451 }
00452
00453 template<typename OrdinalType, typename ScalarType>
00454 void LAPACK<OrdinalType,ScalarType>::GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const ScalarType* dl, const ScalarType* d, const ScalarType* du, const ScalarType* du2, const OrdinalType* IPIV, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00455 {
00456 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00457 }
00458
00459 template<typename OrdinalType, typename ScalarType>
00460 void LAPACK<OrdinalType,ScalarType>::GETRI(const OrdinalType n, ScalarType* A, const OrdinalType lda, const OrdinalType* IPIV, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00461 {
00462 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00463 }
00464
00465 template<typename OrdinalType, typename ScalarType>
00466 void LAPACK<OrdinalType,ScalarType>::GECON(const char NORM, const OrdinalType n, const ScalarType* A, const OrdinalType lda, const ScalarType anorm, ScalarType* rcond, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const
00467 {
00468 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00469 }
00470
00471 template<typename OrdinalType, typename ScalarType>
00472 void LAPACK<OrdinalType,ScalarType>::GESV(const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, OrdinalType* IPIV, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00473 {
00474 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00475 }
00476
00477 template<typename OrdinalType, typename ScalarType>
00478 void LAPACK<OrdinalType,ScalarType>::GEEQU(const OrdinalType m, const OrdinalType n, const ScalarType* A, const OrdinalType lda, ScalarType* R, ScalarType* C, ScalarType* rowcond, ScalarType* colcond, ScalarType* amax, OrdinalType* info) const
00479 {
00480 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00481 }
00482
00483 template<typename OrdinalType, typename ScalarType>
00484 void LAPACK<OrdinalType,ScalarType>::GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, const ScalarType* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const
00485 {
00486 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00487 }
00488
00489 template<typename OrdinalType, typename ScalarType>
00490 void LAPACK<OrdinalType,ScalarType>::GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, ScalarType* A, const OrdinalType lda, ScalarType* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, ScalarType* R, ScalarType* C, ScalarType* B, const OrdinalType ldb, ScalarType* X, const OrdinalType ldx, ScalarType* rcond, ScalarType* FERR, ScalarType* BERR, ScalarType* WORK, OrdinalType* IWORK, OrdinalType* info) const
00491 {
00492 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00493 }
00494
00495 template<typename OrdinalType, typename ScalarType>
00496 void LAPACK<OrdinalType,ScalarType>::SYTRD(const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* D, ScalarType* E, ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00497 {
00498 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00499 }
00500
00501 template<typename OrdinalType, typename ScalarType>
00502 void LAPACK<OrdinalType,ScalarType>::GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, ScalarType* A, const OrdinalType lda, ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00503 {
00504 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00505 }
00506
00507 template<typename OrdinalType, typename ScalarType>
00508 void LAPACK<OrdinalType,ScalarType>::TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, OrdinalType* info) const
00509 {
00510 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00511 }
00512
00513 template<typename OrdinalType, typename ScalarType>
00514 void LAPACK<OrdinalType,ScalarType>::SPEV(const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* AP, ScalarType* W, ScalarType* Z, const OrdinalType ldz, ScalarType* WORK, OrdinalType* info) const
00515 {
00516 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00517 }
00518
00519 template<typename OrdinalType, typename ScalarType>
00520 void LAPACK<OrdinalType,ScalarType>::SYEV(const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* W, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00521 {
00522 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00523 }
00524
00525 template<typename OrdinalType, typename ScalarType>
00526 void LAPACK<OrdinalType,ScalarType>::SYGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, ScalarType* W, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00527 {
00528 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00529 }
00530
00531 template<typename OrdinalType, typename ScalarType>
00532 void LAPACK<OrdinalType,ScalarType>::HEEV(const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, MagnitudeType* W, ScalarType* WORK, const OrdinalType lwork, MagnitudeType* RWORK, OrdinalType* info) const
00533 {
00534 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00535 }
00536
00537 template<typename OrdinalType, typename ScalarType>
00538 void LAPACK<OrdinalType,ScalarType>::HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* B, const OrdinalType ldb, MagnitudeType* W, ScalarType* WORK, const OrdinalType lwork, MagnitudeType* RWORK, OrdinalType* info) const
00539 {
00540 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00541 }
00542
00543 template<typename OrdinalType, typename ScalarType>
00544 void LAPACK<OrdinalType,ScalarType>::STEQR(const char COMPZ, const OrdinalType n, ScalarType* D, ScalarType* E, ScalarType* Z, const OrdinalType ldz, ScalarType* WORK, OrdinalType* info) const
00545 {
00546 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00547 }
00548
00549 template<typename OrdinalType, typename ScalarType>
00550 void LAPACK<OrdinalType, ScalarType>::HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, ScalarType* H, const OrdinalType ldh, ScalarType* WR, ScalarType* WI, ScalarType* Z, const OrdinalType ldz, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00551 {
00552 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00553 }
00554
00555 template<typename OrdinalType, typename ScalarType>
00556 void LAPACK<OrdinalType, ScalarType>::GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(ScalarType*, ScalarType*), const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* sdim, ScalarType* WR, ScalarType* WI, ScalarType* VS, const OrdinalType ldvs, ScalarType* WORK, const OrdinalType lwork, OrdinalType* BWORK, OrdinalType* info) const
00557 {
00558 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00559 }
00560
00561 template<typename OrdinalType, typename ScalarType>
00562 void LAPACK<OrdinalType, ScalarType>::GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(ScalarType*), const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* sdim, ScalarType* W, ScalarType* VS, const OrdinalType ldvs, ScalarType* WORK, const OrdinalType lwork, MagnitudeType *RWORK, OrdinalType* BWORK, OrdinalType* info) const
00563 {
00564 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00565 }
00566
00567 template<typename OrdinalType, typename ScalarType>
00568 void LAPACK<OrdinalType, ScalarType>::GEES(const char JOBVS, const OrdinalType n, ScalarType* A, const OrdinalType lda, OrdinalType* sdim, MagnitudeType* WR, MagnitudeType* WI, ScalarType* VS, const OrdinalType ldvs, ScalarType* WORK, const OrdinalType lwork, MagnitudeType *RWORK, OrdinalType* BWORK, OrdinalType* info) const
00569 {
00570 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00571 }
00572
00573 template<typename OrdinalType, typename ScalarType>
00574 void LAPACK<OrdinalType, ScalarType>::GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, ScalarType* A, const OrdinalType lda, ScalarType* WR, ScalarType* WI, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00575 {
00576 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00577 }
00578
00579 template<typename OrdinalType, typename ScalarType>
00580 void LAPACK<OrdinalType, ScalarType>::ORMQR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType k, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* C, const OrdinalType ldc, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00581 {
00582 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00583 }
00584
00585 template<typename OrdinalType, typename ScalarType>
00586 void LAPACK<OrdinalType, ScalarType>::ORGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00587 {
00588 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00589 }
00590
00591 template<typename OrdinalType, typename ScalarType>
00592 void LAPACK<OrdinalType, ScalarType>::UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00593 {
00594 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00595 }
00596
00597 template<typename OrdinalType, typename ScalarType>
00598 void LAPACK<OrdinalType, ScalarType>::ORGHR(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00599 {
00600 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00601 }
00602
00603 template<typename OrdinalType, typename ScalarType>
00604 void LAPACK<OrdinalType, ScalarType>::ORMHR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, const ScalarType* A, const OrdinalType lda, const ScalarType* TAU, ScalarType* C, const OrdinalType ldc, ScalarType* WORK, const OrdinalType lwork, OrdinalType* info) const
00605 {
00606 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00607 }
00608
00609 template<typename OrdinalType, typename ScalarType>
00610 void LAPACK<OrdinalType, ScalarType>::TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(ScalarType*, ScalarType*), const OrdinalType n, const ScalarType* T, const OrdinalType ldt, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, ScalarType* WORK, OrdinalType* info) const
00611 {
00612 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00613 }
00614
00615 template<typename OrdinalType, typename ScalarType>
00616 void LAPACK<OrdinalType, ScalarType>::TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(ScalarType*), const OrdinalType n, const ScalarType* T, const OrdinalType ldt, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, ScalarType* WORK, MagnitudeType* RWORK, OrdinalType* info) const
00617 {
00618 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00619 }
00620
00621 template<typename OrdinalType, typename ScalarType>
00622 void LAPACK<OrdinalType, ScalarType>::TREVC(const char SIDE, const OrdinalType n, const ScalarType* T, const OrdinalType ldt, ScalarType* VL, const OrdinalType ldvl, ScalarType* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, ScalarType* WORK, MagnitudeType* RWORK, OrdinalType* info) const
00623 {
00624 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00625 }
00626
00627 template<typename OrdinalType, typename ScalarType>
00628 void LAPACK<OrdinalType, ScalarType>::TREXC(const char COMPQ, const OrdinalType n, ScalarType* T, const OrdinalType ldt, ScalarType* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, ScalarType* WORK, OrdinalType* info) const
00629 {
00630 UndefinedLAPACKRoutine<ScalarType>::notDefined();
00631 }
00632
00633 template<typename OrdinalType, typename ScalarType>
00634 ScalarType LAPACK<OrdinalType, ScalarType>::LAMCH(const char CMACH) const
00635 {
00636 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00637 }
00638
00639 template<typename OrdinalType, typename ScalarType>
00640 OrdinalType LAPACK<OrdinalType, ScalarType>::ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1, const OrdinalType N2, const OrdinalType N3, const OrdinalType N4 ) const
00641 {
00642 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00643 }
00644
00645 template<typename OrdinalType, typename ScalarType>
00646 ScalarType LAPACK<OrdinalType, ScalarType>::LAPY2(const ScalarType x, const ScalarType y) const
00647 {
00648 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00649 }
00650
00651 template<typename OrdinalType, typename ScalarType>
00652 void LAPACK<OrdinalType, ScalarType>::LARTG( const ScalarType f, const ScalarType g, MagnitudeType* c, ScalarType* s, ScalarType* r ) const
00653 {
00654 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00655 }
00656
00657 template<typename OrdinalType, typename ScalarType>
00658 void LAPACK<OrdinalType, ScalarType>::LARFG( const OrdinalType n, ScalarType* alpha, ScalarType* x, const OrdinalType incx, ScalarType* tau ) const
00659 {
00660 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00661 }
00662
00663 template<typename OrdinalType, typename ScalarType>
00664 ScalarType LAPACK<OrdinalType, ScalarType>::LARND( const OrdinalType idist, OrdinalType* seed ) const
00665 {
00666 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00667 }
00668
00669 template<typename OrdinalType, typename ScalarType>
00670 void LAPACK<OrdinalType, ScalarType>::LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, ScalarType* v ) const
00671 {
00672 return UndefinedLAPACKRoutine<ScalarType>::notDefined();
00673 }
00674
00675
00676
00677 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00678
00679
00680
00681 template<typename OrdinalType>
00682 class LAPACK<OrdinalType, float>
00683 {
00684 public:
00685 inline LAPACK(void) {};
00686 inline LAPACK(const LAPACK<OrdinalType, float>& lapack) {};
00687 inline virtual ~LAPACK(void) {};
00688
00689
00690 void POTRF(const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* info) const;
00691 void POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, float* B, const OrdinalType ldb, OrdinalType* info) const;
00692 void PTTRF(const OrdinalType n, float* d, float* e, OrdinalType* info) const;
00693 void PTTRS(const OrdinalType n, const OrdinalType nrhs, const float* d, const float* e, float* B, const OrdinalType ldb, OrdinalType* info) const;
00694 void POTRI(const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* info) const;
00695 void POCON(const char UPLO, const OrdinalType n, const float* A, const OrdinalType lda, const float anorm, float* rcond, float* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00696 void POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, OrdinalType* info) const;
00697 void POEQU(const OrdinalType n, const float* A, const OrdinalType lda, float* S, float* scond, float* amax, OrdinalType* info) const;
00698 void PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, const float* AF, const OrdinalType ldaf, const float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00699 void POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* AF, const OrdinalType ldaf, char EQUED, float* S, float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00700
00701
00702 void GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00703 void GEQRF( const OrdinalType m, const OrdinalType n, float* A, const OrdinalType lda, float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00704 void GETRF(const OrdinalType m, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const;
00705 void GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, const OrdinalType* IPIV, float* B, const OrdinalType ldb, OrdinalType* info) const;
00706 void GTTRF(const OrdinalType n, float* dl, float* d, float* du, float* du2, OrdinalType* IPIV, OrdinalType* info) const;
00707 void GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const float* dl, const float* d, const float* du, const float* du2, const OrdinalType* IPIV, float* B, const OrdinalType ldb, OrdinalType* info) const;
00708
00709
00710 void GETRI(const OrdinalType n, float* A, const OrdinalType lda, const OrdinalType* IPIV, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00711 void GECON(const char NORM, const OrdinalType n, const float* A, const OrdinalType lda, const float anorm, float* rcond, float* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00712 void GESV(const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, OrdinalType* IPIV, float* B, const OrdinalType ldb, OrdinalType* info) const;
00713 void GEEQU(const OrdinalType m, const OrdinalType n, const float* A, const OrdinalType lda, float* R, float* C, float* rowcond, float* colcond, float* amax, OrdinalType* info) const;
00714 void GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, const float* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00715 void GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, float* R, float* C, float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const;
00716 void SYTRD(const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* D, float* E, float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00717 void GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, float* A, const OrdinalType lda, float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00718 void TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, float* B, const OrdinalType ldb, OrdinalType* info) const;
00719
00720
00721 void SPEV(const char JOBZ, const char UPLO, const OrdinalType n, float* AP, float* W, float* Z, const OrdinalType ldz, float* WORK, OrdinalType* info) const;
00722 void SYEV(const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* W, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00723 void SYGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, float* W, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00724 void HEEV(const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* W, float* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* info) const;
00725 void HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, float* W, float* WORK, const OrdinalType lwork, float *RWORK, OrdinalType* info) const;
00726 void STEQR(const char COMPZ, const OrdinalType n, float* D, float* E, float* Z, const OrdinalType ldz, float* WORK, OrdinalType* info) const;
00727
00728
00729 void HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, float* H, const OrdinalType ldh, float* WR, float* WI, float* Z, const OrdinalType ldz, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00730 void GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(float*, float*), const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* sdim, float* WR, float* WI, float* VS, const OrdinalType ldvs, float* WORK, const OrdinalType lwork, OrdinalType* BWORK, OrdinalType* info) const;
00731 void GEES(const char JOBVS, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* sdim, float* WR, float* WI, float* VS, const OrdinalType ldvs, float* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
00732 void GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, float* A, const OrdinalType lda, float* WR, float* WI, float* VL, const OrdinalType ldvl, float* VR, const OrdinalType ldvr, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00733
00734
00735 void ORMQR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType k, float* A, const OrdinalType lda, const float* TAU, float* C, const OrdinalType ldc, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00736 void ORGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, float* A, const OrdinalType lda, const float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00737 void UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, float* A, const OrdinalType lda, const float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00738 void ORGHR(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, float* A, const OrdinalType lda, const float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00739 void ORMHR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, const float* A, const OrdinalType lda, const float* TAU, float* C, const OrdinalType ldc, float* WORK, const OrdinalType lwork, OrdinalType* info) const;
00740
00741
00742 void TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(float*, float*), const OrdinalType n, const float* T, const OrdinalType ldt, float* VL, const OrdinalType ldvl, float* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, float* WORK, OrdinalType* info) const;
00743 void TREVC(const char SIDE, const OrdinalType n, const float* T, const OrdinalType ldt, float* VL, const OrdinalType ldvl, float* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, float* WORK, float *RWORK, OrdinalType* info) const;
00744 void TREXC(const char COMPQ, const OrdinalType n, float* T, const OrdinalType ldt, float* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, float* WORK, OrdinalType* info) const;
00745
00746
00747 void LARTG( const float f, const float g, float* c, float* s, float* r ) const;
00748 void LARFG( const OrdinalType n, float* alpha, float* x, const OrdinalType incx, float* tau ) const;
00749
00750
00751 float LARND( const OrdinalType idist, OrdinalType* seed ) const;
00752 void LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, float* v ) const;
00753
00754
00755 float LAMCH(const char CMACH) const;
00756 OrdinalType ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1 = -1, const OrdinalType N2 = -1, const OrdinalType N3 = -1, const OrdinalType N4 = -1 ) const;
00757
00758
00759
00760 float LAPY2(const float x, const float y) const;
00761 };
00762
00763
00764
00765
00766
00767 template<typename OrdinalType>
00768 void LAPACK<OrdinalType, float>::PTTRF(const OrdinalType n, float* d, float* e, OrdinalType* info) const
00769 {
00770 SPTTRF_F77(&n,d,e,info);
00771 }
00772
00773 template<typename OrdinalType>
00774 void LAPACK<OrdinalType, float>::PTTRS(const OrdinalType n, const OrdinalType nrhs, const float* d, const float* e, float* B, const OrdinalType ldb, OrdinalType* info) const
00775 {
00776 SPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info);
00777 }
00778
00779 template<typename OrdinalType>
00780 void LAPACK<OrdinalType, float>::POTRF(const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* info) const
00781 {
00782 SPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
00783 }
00784
00785 template<typename OrdinalType>
00786 void LAPACK<OrdinalType, float>::POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, float* B, const OrdinalType ldb, OrdinalType* info) const
00787 {
00788 SPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
00789 }
00790
00791 template<typename OrdinalType>
00792 void LAPACK<OrdinalType, float>::POTRI(const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* info) const
00793 {
00794 SPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
00795 }
00796
00797 template<typename OrdinalType>
00798 void LAPACK<OrdinalType, float>::POCON(const char UPLO, const OrdinalType n, const float* A, const OrdinalType lda, const float anorm, float* rcond, float* WORK, OrdinalType* IWORK, OrdinalType* info) const
00799 {
00800 SPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, IWORK, info);
00801 }
00802
00803 template<typename OrdinalType>
00804 void LAPACK<OrdinalType, float>::POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, OrdinalType* info) const
00805 {
00806 SPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
00807 }
00808
00809 template<typename OrdinalType>
00810 void LAPACK<OrdinalType, float>::POEQU(const OrdinalType n, const float* A, const OrdinalType lda, float* S, float* scond, float* amax, OrdinalType* info) const
00811 {
00812 SPOEQU_F77(&n, A, &lda, S, scond, amax, info);
00813 }
00814
00815 template<typename OrdinalType>
00816 void LAPACK<OrdinalType, float>::PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, const float* AF, const OrdinalType ldaf, const float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const
00817 {
00818 SPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info);
00819 }
00820
00821 template<typename OrdinalType>
00822 void LAPACK<OrdinalType, float>::POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* AF, const OrdinalType ldaf, char EQUED, float* S, float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const
00823 {
00824 SPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHAR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info);
00825 }
00826
00827 template<typename OrdinalType>
00828 void LAPACK<OrdinalType,float>::GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00829 {
00830 SGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
00831 }
00832
00833 template<typename OrdinalType>
00834 void LAPACK<OrdinalType,float>::GEQRF( const OrdinalType m, const OrdinalType n, float* A, const OrdinalType lda, float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00835 {
00836 SGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
00837 }
00838
00839 template<typename OrdinalType>
00840 void LAPACK<OrdinalType,float>::GETRF(const OrdinalType m, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const
00841 {
00842 SGETRF_F77(&m, &n, A, &lda, IPIV, info);
00843 }
00844
00845 template<typename OrdinalType>
00846 void LAPACK<OrdinalType,float>::GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, const OrdinalType* IPIV, float* B, const OrdinalType ldb, OrdinalType* info) const
00847 {
00848 SGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
00849 }
00850
00851 template<typename OrdinalType>
00852 void LAPACK<OrdinalType,float>::GTTRF(const OrdinalType n, float* dl, float* d, float* du, float* du2, OrdinalType* IPIV, OrdinalType* info) const
00853 {
00854 SGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
00855 }
00856
00857 template<typename OrdinalType>
00858 void LAPACK<OrdinalType,float>::GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const float* dl, const float* d, const float* du, const float* du2, const OrdinalType* IPIV, float* B, const OrdinalType ldb, OrdinalType* info) const
00859 {
00860 SGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
00861 }
00862
00863 template<typename OrdinalType>
00864 void LAPACK<OrdinalType,float>::GETRI(const OrdinalType n, float* A, const OrdinalType lda, const OrdinalType* IPIV, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00865 {
00866 SGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
00867 }
00868
00869 template<typename OrdinalType>
00870 void LAPACK<OrdinalType,float>::GECON(const char NORM, const OrdinalType n, const float* A, const OrdinalType lda, const float anorm, float* rcond, float* WORK, OrdinalType* IWORK, OrdinalType* info) const
00871 {
00872 SGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, IWORK, info);
00873 }
00874
00875 template<typename OrdinalType>
00876 void LAPACK<OrdinalType,float>::GESV(const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, OrdinalType* IPIV, float* B, const OrdinalType ldb, OrdinalType* info) const
00877 {
00878 SGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
00879 }
00880
00881 template<typename OrdinalType>
00882 void LAPACK<OrdinalType,float>::GEEQU(const OrdinalType m, const OrdinalType n, const float* A, const OrdinalType lda, float* R, float* C, float* rowcond, float* colcond, float* amax, OrdinalType* info) const
00883 {
00884 SGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
00885 }
00886
00887 template<typename OrdinalType>
00888 void LAPACK<OrdinalType,float>::GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, const float* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const
00889 {
00890 SGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info);
00891 }
00892
00893 template<typename OrdinalType>
00894 void LAPACK<OrdinalType,float>::GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, float* A, const OrdinalType lda, float* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, float* R, float* C, float* B, const OrdinalType ldb, float* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, float* WORK, OrdinalType* IWORK, OrdinalType* info) const
00895 {
00896 SGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHAR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info);
00897 }
00898
00899 template<typename OrdinalType>
00900 void LAPACK<OrdinalType,float>::SYTRD(const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* D, float* E, float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00901 {
00902 SSYTRD_F77(CHAR_MACRO(UPLO), &n, A, &lda, D, E, TAU, WORK, &lwork, info);
00903 }
00904
00905 template<typename OrdinalType>
00906 void LAPACK<OrdinalType,float>::GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, float* A, const OrdinalType lda, float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00907 {
00908 SGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
00909 }
00910
00911 template<typename OrdinalType>
00912 void LAPACK<OrdinalType,float>::TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const float* A, const OrdinalType lda, float* B, const OrdinalType ldb, OrdinalType* info) const
00913 {
00914 STRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
00915 }
00916
00917 template<typename OrdinalType>
00918 void LAPACK<OrdinalType,float>::SPEV(const char JOBZ, const char UPLO, const OrdinalType n, float* AP, float* W, float* Z, const OrdinalType ldz, float* WORK, OrdinalType* info) const
00919 {
00920 SSPEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, AP, W, Z, &ldz, WORK, info);
00921 }
00922
00923 template<typename OrdinalType>
00924 void LAPACK<OrdinalType,float>::SYEV(const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* W, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00925 {
00926 SSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
00927 }
00928
00929 template<typename OrdinalType>
00930 void LAPACK<OrdinalType,float>::SYGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, float* W, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00931 {
00932 SSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
00933 }
00934
00935 template<typename OrdinalType>
00936 void LAPACK<OrdinalType,float>::HEEV(const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* W, float* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* info) const
00937 {
00938 SSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
00939 }
00940
00941 template<typename OrdinalType>
00942 void LAPACK<OrdinalType,float>::HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, float* A, const OrdinalType lda, float* B, const OrdinalType ldb, float* W, float* WORK, const OrdinalType lwork, float *RWORK, OrdinalType* info) const
00943 {
00944 SSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
00945 }
00946
00947 template<typename OrdinalType>
00948 void LAPACK<OrdinalType,float>::STEQR(const char COMPZ, const OrdinalType n, float* D, float* E, float* Z, const OrdinalType ldz, float* WORK, OrdinalType* info) const
00949 {
00950 SSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
00951 }
00952
00953 template<typename OrdinalType>
00954 void LAPACK<OrdinalType, float>::HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, float* H, const OrdinalType ldh, float* WR, float* WI, float* Z, const OrdinalType ldz, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00955 {
00956 SHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, WR, WI, Z, &ldz, WORK, &lwork, info);
00957 }
00958
00959 template<typename OrdinalType>
00960 void LAPACK<OrdinalType, float>::GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(float*, float*), const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* sdim, float* WR, float* WI, float* VS, const OrdinalType ldvs, float* WORK, const OrdinalType lwork, OrdinalType* BWORK, OrdinalType* info) const
00961 {
00962 SGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
00963 }
00964
00965 template<typename OrdinalType>
00966 void LAPACK<OrdinalType, float>::GEES(const char JOBVS, const OrdinalType n, float* A, const OrdinalType lda, OrdinalType* sdim, float* WR, float* WI, float* VS, const OrdinalType ldvs, float* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* BWORK, OrdinalType* info) const
00967 {
00968 OrdinalType (*nullfptr)(float*,float*) = NULL;
00969 const char sort = 'N';
00970 SGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
00971 }
00972
00973 template<typename OrdinalType>
00974 void LAPACK<OrdinalType, float>::GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, float* A, const OrdinalType lda, float* WR, float* WI, float* VL, const OrdinalType ldvl, float* VR, const OrdinalType ldvr, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00975 {
00976 SGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, WORK, &lwork, info);
00977 }
00978
00979 template<typename OrdinalType>
00980 void LAPACK<OrdinalType, float>::ORMQR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType k, float* A, const OrdinalType lda, const float* TAU, float* C, const OrdinalType ldc, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00981 {
00982 SORMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
00983 }
00984
00985 template<typename OrdinalType>
00986 void LAPACK<OrdinalType, float>::ORGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, float* A, const OrdinalType lda, const float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00987 {
00988 SORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
00989 }
00990
00991 template<typename OrdinalType>
00992 void LAPACK<OrdinalType, float>::UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, float* A, const OrdinalType lda, const float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00993 {
00994 SORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
00995 }
00996
00997 template<typename OrdinalType>
00998 void LAPACK<OrdinalType, float>::ORGHR(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, float* A, const OrdinalType lda, const float* TAU, float* WORK, const OrdinalType lwork, OrdinalType* info) const
00999 {
01000 SORGHR_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
01001 }
01002
01003 template<typename OrdinalType>
01004 void LAPACK<OrdinalType, float>::ORMHR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, const float* A, const OrdinalType lda, const float* TAU, float* C, const OrdinalType ldc, float* WORK, const OrdinalType lwork, OrdinalType* info) const
01005 {
01006 SORMHR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &ilo, &ihi, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
01007 }
01008
01009 template<typename OrdinalType>
01010 void LAPACK<OrdinalType, float>::TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(float*,float*), const OrdinalType n, const float* T, const OrdinalType ldt, float* VL, const OrdinalType ldvl, float* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, float* WORK, OrdinalType* info) const
01011 {
01012 STREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), ptr2func, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
01013 }
01014
01015 template<typename OrdinalType>
01016 void LAPACK<OrdinalType, float>::TREVC(const char SIDE, const OrdinalType n, const float* T, const OrdinalType ldt, float* VL, const OrdinalType ldvl, float* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, float* WORK, float* RWORK, OrdinalType* info) const
01017 {
01018 OrdinalType (*nullfptr)(float*,float*) = NULL;
01019 const char whch = 'A';
01020 STREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), nullfptr, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
01021 }
01022
01023 template<typename OrdinalType>
01024 void LAPACK<OrdinalType, float>::TREXC(const char COMPQ, const OrdinalType n, float* T, const OrdinalType ldt, float* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, float* WORK, OrdinalType* info) const
01025 {
01026 STREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, &ifst, &ilst, WORK, info);
01027 }
01028
01029 template<typename OrdinalType>
01030 void LAPACK<OrdinalType, float>::LARTG( const float f, const float g, float* c, float* s, float* r ) const
01031 {
01032 SLARTG_F77(&f, &g, c, s, r);
01033 }
01034
01035 template<typename OrdinalType>
01036 void LAPACK<OrdinalType, float>::LARFG( const OrdinalType n, float* alpha, float* x, const OrdinalType incx, float* tau ) const
01037 {
01038 SLARFG_F77(&n, alpha, x, &incx, tau);
01039 }
01040
01041 template<typename OrdinalType>
01042 float LAPACK<OrdinalType, float>::LARND( const OrdinalType idist, OrdinalType* seed ) const
01043 {
01044 return(SLARND_F77(&idist, seed));
01045 }
01046
01047 template<typename OrdinalType>
01048 void LAPACK<OrdinalType, float>::LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, float* v ) const
01049 {
01050 SLARNV_F77(&idist, seed, &n, v);
01051 }
01052
01053 template<typename OrdinalType>
01054 float LAPACK<OrdinalType, float>::LAMCH(const char CMACH) const
01055 {
01056 return(SLAMCH_F77(CHAR_MACRO(CMACH)));
01057 }
01058
01059 template<typename OrdinalType>
01060 OrdinalType LAPACK<OrdinalType, float>::ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1, const OrdinalType N2, const OrdinalType N3, const OrdinalType N4 ) const
01061 {
01062 unsigned int opts_length = OPTS.length();
01063
01064 std::string temp_NAME = "s" + NAME;
01065 if (temp_NAME.substr(1,2) == "he") {
01066 temp_NAME.replace(1,2,"sy");
01067 }
01068 unsigned int name_length = temp_NAME.length();
01069 #if defined (INTEL_CXML)
01070 return ILAENV_F77(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4 );
01071 #else
01072 return ILAENV_F77(&ispec, &temp_NAME[0], &OPTS[0], &N1, &N2, &N3, &N4, name_length, opts_length );
01073 #endif
01074 }
01075
01076 template<typename OrdinalType>
01077 float LAPACK<OrdinalType, float>::LAPY2(const float x, const float y) const
01078 {
01079 return SLAPY2_F77(&x, &y);
01080 }
01081
01082
01083
01084
01085
01086 template<typename OrdinalType>
01087 class LAPACK<OrdinalType, double>
01088 {
01089 public:
01090 inline LAPACK(void) {};
01091 inline LAPACK(const LAPACK<OrdinalType, double>& lapack) {};
01092 inline virtual ~LAPACK(void) {};
01093
01094
01095 void PTTRF(const OrdinalType n, double* d, double* e, OrdinalType* info) const;
01096 void PTTRS(const OrdinalType n, const OrdinalType nrhs, const double* d, const double* e, double* B, const OrdinalType ldb, OrdinalType* info) const;
01097 void POTRF(const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* info) const;
01098 void POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, double* B, const OrdinalType ldb, OrdinalType* info) const;
01099 void POTRI(const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* info) const;
01100 void POCON(const char UPLO, const OrdinalType n, const double* A, const OrdinalType lda, const double anorm, double* rcond, double* WORK, OrdinalType* IWORK, OrdinalType* info) const;
01101 void POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, OrdinalType* info) const;
01102 void POEQU(const OrdinalType n, const double* A, const OrdinalType lda, double* S, double* scond, double* amax, OrdinalType* info) const;
01103 void PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, const double* AF, const OrdinalType ldaf, const double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const;
01104 void POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* AF, const OrdinalType ldaf, char EQUED, double* S, double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const;
01105
01106
01107 void GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01108 void GEQRF( const OrdinalType m, const OrdinalType n, double* A, const OrdinalType lda, double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01109 void GETRF(const OrdinalType m, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const;
01110 void GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, const OrdinalType* IPIV, double* B, const OrdinalType ldb, OrdinalType* info) const;
01111 void GTTRF(const OrdinalType n, double* dl, double* d, double* du, double* du2, OrdinalType* IPIV, OrdinalType* info) const;
01112 void GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const double* dl, const double* d, const double* du, const double* du2, const OrdinalType* IPIV, double* B, const OrdinalType ldb, OrdinalType* info) const;
01113 void GETRI(const OrdinalType n, double* A, const OrdinalType lda, const OrdinalType* IPIV, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01114 void GECON(const char NORM, const OrdinalType n, const double* A, const OrdinalType lda, const double anorm, double* rcond, double* WORK, OrdinalType* IWORK, OrdinalType* info) const;
01115 void GESV(const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, OrdinalType* IPIV, double* B, const OrdinalType ldb, OrdinalType* info) const;
01116 void GEEQU(const OrdinalType m, const OrdinalType n, const double* A, const OrdinalType lda, double* R, double* C, double* rowcond, double* colcond, double* amax, OrdinalType* info) const;
01117 void GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, const double* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const;
01118 void GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, double* R, double* C, double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const;
01119 void SYTRD(const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* D, double* E, double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01120 void GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, double* A, const OrdinalType lda, double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01121 void TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, double* B, const OrdinalType ldb, OrdinalType* info) const;
01122
01123
01124 void SPEV(const char JOBZ, const char UPLO, const OrdinalType n, double* AP, double* W, double* Z, const OrdinalType ldz, double* WORK, OrdinalType* info) const;
01125 void SYEV(const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* W, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01126 void SYGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, double* W, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01127 void HEEV(const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* W, double* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* info) const;
01128 void HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, double* W, double* WORK, const OrdinalType lwork, double *RWORK, OrdinalType* info) const;
01129 void STEQR(const char COMPZ, const OrdinalType n, double* D, double* E, double* Z, const OrdinalType ldz, double* WORK, OrdinalType* info) const;
01130
01131
01132 void HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, double* H, const OrdinalType ldh, double* WR, double* WI, double* Z, const OrdinalType ldz, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01133 void GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(double*, double*), const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* sdim, double* WR, double* WI, double* VS, const OrdinalType ldvs, double* WORK, const OrdinalType lwork, OrdinalType* BWORK, OrdinalType* info) const;
01134 void GEES(const char JOBVS, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* sdim, double* WR, double* WI, double* VS, const OrdinalType ldvs, double* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
01135 void GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, double* A, const OrdinalType lda, double* WR, double* WI, double* VL, const OrdinalType ldvl, double* VR, const OrdinalType ldvr, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01136
01137
01138 void ORMQR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType k, double* A, const OrdinalType lda, const double* TAU, double* C, const OrdinalType ldc, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01139 void ORGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, double* A, const OrdinalType lda, const double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01140 void UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, double* A, const OrdinalType lda, const double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01141 void ORGHR(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, double* A, const OrdinalType lda, const double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01142 void ORMHR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, const double* A, const OrdinalType lda, const double* TAU, double* C, const OrdinalType ldc, double* WORK, const OrdinalType lwork, OrdinalType* info) const;
01143
01144
01145 void TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(double*,double*), const OrdinalType n, const double* T, const OrdinalType ldt, double* VL, const OrdinalType ldvl, double* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, double* WORK, OrdinalType* info) const;
01146 void TREVC(const char SIDE, const OrdinalType n, const double* T, const OrdinalType ldt, double* VL, const OrdinalType ldvl, double* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, double* WORK, double* RWORK, OrdinalType* info) const;
01147 void TREXC(const char COMPQ, const OrdinalType n, double* T, const OrdinalType ldt, double* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, double* WORK, OrdinalType* info) const;
01148
01149
01150 void LARTG( const double f, const double g, double* c, double* s, double* r ) const;
01151 void LARFG( const OrdinalType n, double* alpha, double* x, const OrdinalType incx, double* tau ) const;
01152
01153
01154 double LARND( const OrdinalType idist, OrdinalType* seed ) const;
01155 void LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, double* v ) const;
01156
01157
01158 double LAMCH(const char CMACH) const;
01159 OrdinalType ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1 = -1, const OrdinalType N2 = -1, const OrdinalType N3 = -1, const OrdinalType N4 = -1 ) const;
01160
01161
01162 double LAPY2(const double x, const double y) const;
01163 };
01164
01165
01166
01167
01168
01169
01170 template<typename OrdinalType>
01171 void LAPACK<OrdinalType, double>::PTTRF(const OrdinalType n, double* d, double* e, OrdinalType* info) const
01172 {
01173 DPTTRF_F77(&n,d,e,info);
01174 }
01175
01176 template<typename OrdinalType>
01177 void LAPACK<OrdinalType, double>::PTTRS(const OrdinalType n, const OrdinalType nrhs, const double* d, const double* e, double* B, const OrdinalType ldb, OrdinalType* info) const
01178 {
01179 DPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info);
01180 }
01181
01182 template<typename OrdinalType>
01183 void LAPACK<OrdinalType, double>::POTRF(const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* info) const
01184 {
01185 DPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
01186 }
01187
01188 template<typename OrdinalType>
01189 void LAPACK<OrdinalType, double>::POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, double* B, const OrdinalType ldb, OrdinalType* info) const
01190 {
01191 DPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
01192 }
01193
01194 template<typename OrdinalType>
01195 void LAPACK<OrdinalType, double>::POTRI(const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* info) const
01196 {
01197 DPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
01198 }
01199
01200 template<typename OrdinalType>
01201 void LAPACK<OrdinalType, double>::POCON(const char UPLO, const OrdinalType n, const double* A, const OrdinalType lda, const double anorm, double* rcond, double* WORK, OrdinalType* IWORK, OrdinalType* info) const
01202 {
01203 DPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, IWORK, info);
01204 }
01205
01206 template<typename OrdinalType>
01207 void LAPACK<OrdinalType, double>::POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, OrdinalType* info) const
01208 {
01209 DPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
01210 }
01211
01212 template<typename OrdinalType>
01213 void LAPACK<OrdinalType, double>::POEQU(const OrdinalType n, const double* A, const OrdinalType lda, double* S, double* scond, double* amax, OrdinalType* info) const
01214 {
01215 DPOEQU_F77(&n, A, &lda, S, scond, amax, info);
01216 }
01217
01218 template<typename OrdinalType>
01219 void LAPACK<OrdinalType, double>::PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, const double* AF, const OrdinalType ldaf, const double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const
01220 {
01221 DPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info);
01222 }
01223
01224 template<typename OrdinalType>
01225 void LAPACK<OrdinalType, double>::POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* AF, const OrdinalType ldaf, char EQUED, double* S, double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const
01226 {
01227 DPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHAR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info);
01228 }
01229
01230 template<typename OrdinalType>
01231 void LAPACK<OrdinalType,double>::GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01232 {
01233 DGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, &info);
01234 }
01235
01236 template<typename OrdinalType>
01237 void LAPACK<OrdinalType,double>::GEQRF( const OrdinalType m, const OrdinalType n, double* A, const OrdinalType lda, double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01238 {
01239 DGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
01240 }
01241
01242 template<typename OrdinalType>
01243 void LAPACK<OrdinalType,double>::GETRF(const OrdinalType m, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const
01244 {
01245 DGETRF_F77(&m, &n, A, &lda, IPIV, info);
01246 }
01247
01248 template<typename OrdinalType>
01249 void LAPACK<OrdinalType,double>::GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, const OrdinalType* IPIV, double* B, const OrdinalType ldb, OrdinalType* info) const
01250 {
01251 DGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
01252 }
01253
01254 template<typename OrdinalType>
01255 void LAPACK<OrdinalType,double>::GTTRF(const OrdinalType n, double* dl, double* d, double* du, double* du2, OrdinalType* IPIV, OrdinalType* info) const
01256 {
01257 DGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
01258 }
01259
01260 template<typename OrdinalType>
01261 void LAPACK<OrdinalType,double>::GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const double* dl, const double* d, const double* du, const double* du2, const OrdinalType* IPIV, double* B, const OrdinalType ldb, OrdinalType* info) const
01262 {
01263 DGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
01264 }
01265
01266 template<typename OrdinalType>
01267 void LAPACK<OrdinalType,double>::GETRI(const OrdinalType n, double* A, const OrdinalType lda, const OrdinalType* IPIV, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01268 {
01269 DGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
01270 }
01271
01272 template<typename OrdinalType>
01273 void LAPACK<OrdinalType,double>::GECON(const char NORM, const OrdinalType n, const double* A, const OrdinalType lda, const double anorm, double* rcond, double* WORK, OrdinalType* IWORK, OrdinalType* info) const
01274 {
01275 DGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, IWORK, info);
01276 }
01277
01278 template<typename OrdinalType>
01279 void LAPACK<OrdinalType,double>::GESV(const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, OrdinalType* IPIV, double* B, const OrdinalType ldb, OrdinalType* info) const
01280 {
01281 DGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
01282 }
01283
01284 template<typename OrdinalType>
01285 void LAPACK<OrdinalType,double>::GEEQU(const OrdinalType m, const OrdinalType n, const double* A, const OrdinalType lda, double* R, double* C, double* rowcond, double* colcond, double* amax, OrdinalType* info) const
01286 {
01287 DGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
01288 }
01289
01290 template<typename OrdinalType>
01291 void LAPACK<OrdinalType,double>::GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, const double* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const
01292 {
01293 DGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info);
01294 }
01295
01296 template<typename OrdinalType>
01297 void LAPACK<OrdinalType,double>::GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, double* A, const OrdinalType lda, double* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, double* R, double* C, double* B, const OrdinalType ldb, double* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, double* WORK, OrdinalType* IWORK, OrdinalType* info) const
01298 {
01299 DGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHAR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info);
01300 }
01301
01302 template<typename OrdinalType>
01303 void LAPACK<OrdinalType,double>::SYTRD(const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* D, double* E, double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01304 {
01305 DSYTRD_F77(CHAR_MACRO(UPLO), &n, A, &lda, D, E, TAU, WORK, &lwork, info);
01306 }
01307
01308 template<typename OrdinalType>
01309 void LAPACK<OrdinalType, double>::GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, double* A, const OrdinalType lda, double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01310 {
01311 DGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
01312 }
01313
01314 template<typename OrdinalType>
01315 void LAPACK<OrdinalType,double>::TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const double* A, const OrdinalType lda, double* B, const OrdinalType ldb, OrdinalType* info) const
01316 {
01317 DTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
01318 }
01319
01320 template<typename OrdinalType>
01321 void LAPACK<OrdinalType,double>::SPEV(const char JOBZ, const char UPLO, const OrdinalType n, double* AP, double* W, double* Z, const OrdinalType ldz, double* WORK, OrdinalType* info) const
01322 {
01323 DSPEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, AP, W, Z, &ldz, WORK, info);
01324 }
01325
01326 template<typename OrdinalType>
01327 void LAPACK<OrdinalType,double>::SYEV(const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* W, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01328 {
01329 DSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
01330 }
01331
01332 template<typename OrdinalType>
01333 void LAPACK<OrdinalType,double>::SYGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, double* W, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01334 {
01335 DSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
01336 }
01337
01338 template<typename OrdinalType>
01339 void LAPACK<OrdinalType,double>::HEEV(const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* W, double* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* info) const
01340 {
01341 DSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
01342 }
01343
01344 template<typename OrdinalType>
01345 void LAPACK<OrdinalType,double>::HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, double* A, const OrdinalType lda, double* B, const OrdinalType ldb, double* W, double* WORK, const OrdinalType lwork, double *RWORK, OrdinalType* info) const
01346 {
01347 DSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
01348 }
01349
01350 template<typename OrdinalType>
01351 void LAPACK<OrdinalType,double>::STEQR(const char COMPZ, const OrdinalType n, double* D, double* E, double* Z, const OrdinalType ldz, double* WORK, OrdinalType* info) const
01352 {
01353 DSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
01354 }
01355
01356 template<typename OrdinalType>
01357 void LAPACK<OrdinalType, double>::HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, double* H, const OrdinalType ldh, double* WR, double* WI, double* Z, const OrdinalType ldz, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01358 {
01359 DHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, WR, WI, Z, &ldz, WORK, &lwork, info);
01360 }
01361
01362 template<typename OrdinalType>
01363 void LAPACK<OrdinalType, double>::GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(double*, double*), const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* sdim, double* WR, double* WI, double* VS, const OrdinalType ldvs, double* WORK, const OrdinalType lwork, OrdinalType* BWORK, OrdinalType* info) const
01364 {
01365 DGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
01366 }
01367
01368 template<typename OrdinalType>
01369 void LAPACK<OrdinalType, double>::GEES(const char JOBVS, const OrdinalType n, double* A, const OrdinalType lda, OrdinalType* sdim, double* WR, double* WI, double* VS, const OrdinalType ldvs, double* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* BWORK, OrdinalType* info) const
01370 {
01371 OrdinalType (*nullfptr)(double*,double*) = NULL;
01372 const char sort = 'N';
01373 DGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
01374 }
01375
01376 template<typename OrdinalType>
01377 void LAPACK<OrdinalType, double>::GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, double* A, const OrdinalType lda, double* WR, double* WI, double* VL, const OrdinalType ldvl, double* VR, const OrdinalType ldvr, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01378 {
01379 DGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, WORK, &lwork, info);
01380 }
01381
01382 template<typename OrdinalType>
01383 void LAPACK<OrdinalType, double>::ORMQR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType k, double* A, const OrdinalType lda, const double* TAU, double* C, const OrdinalType ldc, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01384 {
01385 DORMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
01386 }
01387
01388 template<typename OrdinalType>
01389 void LAPACK<OrdinalType, double>::ORGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, double* A, const OrdinalType lda, const double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01390 {
01391 DORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
01392 }
01393
01394 template<typename OrdinalType>
01395 void LAPACK<OrdinalType, double>::UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, double* A, const OrdinalType lda, const double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01396 {
01397 DORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
01398 }
01399
01400 template<typename OrdinalType>
01401 void LAPACK<OrdinalType, double>::ORGHR(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, double* A, const OrdinalType lda, const double* TAU, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01402 {
01403 DORGHR_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
01404 }
01405
01406 template<typename OrdinalType>
01407 void LAPACK<OrdinalType, double>::ORMHR(const char SIDE, const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, const double* A, const OrdinalType lda, const double* TAU, double* C, const OrdinalType ldc, double* WORK, const OrdinalType lwork, OrdinalType* info) const
01408 {
01409 DORMHR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &ilo, &ihi, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
01410 }
01411
01412 template<typename OrdinalType>
01413 void LAPACK<OrdinalType, double>::TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(double*,double*), const OrdinalType n, const double* T, const OrdinalType ldt, double* VL, const OrdinalType ldvl, double* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, double* WORK, OrdinalType* info) const
01414 {
01415 DTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), ptr2func, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
01416 }
01417
01418 template<typename OrdinalType>
01419 void LAPACK<OrdinalType, double>::TREVC(const char SIDE, const OrdinalType n, const double* T, const OrdinalType ldt, double* VL, const OrdinalType ldvl, double* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, double* WORK, double* RWORK, OrdinalType* info) const
01420 {
01421 OrdinalType (*nullfptr)(double*,double*) = NULL;
01422 const char whch = 'A';
01423 DTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), nullfptr, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
01424 }
01425
01426 template<typename OrdinalType>
01427 void LAPACK<OrdinalType, double>::TREXC(const char COMPQ, const OrdinalType n, double* T, const OrdinalType ldt, double* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, double* WORK, OrdinalType* info) const
01428 {
01429 DTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, &ifst, &ilst, WORK, info);
01430 }
01431
01432 template<typename OrdinalType>
01433 void LAPACK<OrdinalType, double>::LARTG( const double f, const double g, double* c, double* s, double* r ) const
01434 {
01435 DLARTG_F77(&f, &g, c, s, r);
01436 }
01437
01438 template<typename OrdinalType>
01439 void LAPACK<OrdinalType, double>::LARFG( const OrdinalType n, double* alpha, double* x, const OrdinalType incx, double* tau ) const
01440 {
01441 DLARFG_F77(&n, alpha, x, &incx, tau);
01442 }
01443
01444 template<typename OrdinalType>
01445 double LAPACK<OrdinalType, double>::LARND( const OrdinalType idist, OrdinalType* seed ) const
01446 {
01447 return(DLARND_F77(&idist, seed));
01448 }
01449
01450 template<typename OrdinalType>
01451 void LAPACK<OrdinalType, double>::LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, double* v ) const
01452 {
01453 DLARNV_F77(&idist, seed, &n, v);
01454 }
01455
01456 template<typename OrdinalType>
01457 double LAPACK<OrdinalType, double>::LAMCH(const char CMACH) const
01458 {
01459 return(DLAMCH_F77(CHAR_MACRO(CMACH)));
01460 }
01461
01462 template<typename OrdinalType>
01463 OrdinalType LAPACK<OrdinalType, double>::ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1, const OrdinalType N2, const OrdinalType N3, const OrdinalType N4 ) const
01464 {
01465 unsigned int opts_length = OPTS.length();
01466
01467 std::string temp_NAME = "d" + NAME;
01468 if (temp_NAME.substr(1,2) == "he") {
01469 temp_NAME.replace(1,2,"sy");
01470 }
01471 unsigned int name_length = temp_NAME.length();
01472 #if defined(INTEL_CXML)
01473 return ILAENV_F77(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4 );
01474 #else
01475 # if defined(__INTEL_COMPILER) && defined(_WIN32)
01476 return 0;
01477 # else
01478 return ILAENV_F77(&ispec, &temp_NAME[0], &OPTS[0], &N1, &N2, &N3, &N4, name_length, opts_length );
01479 # endif
01480 #endif
01481 }
01482
01483 template<typename OrdinalType>
01484 double LAPACK<OrdinalType, double>::LAPY2(const double x, const double y) const
01485 {
01486 return DLAPY2_F77(&x, &y);
01487 }
01488
01489
01490
01491 #ifdef HAVE_TEUCHOS_COMPLEX
01492
01493
01494
01495 template<typename OrdinalType>
01496 class LAPACK<OrdinalType, complex<float> >
01497 {
01498 public:
01499 inline LAPACK(void) {};
01500 inline LAPACK(const LAPACK<OrdinalType, complex<float> >& lapack) {};
01501 inline virtual ~LAPACK(void) {};
01502
01503
01504 void PTTRF(const OrdinalType n, complex<float>* d, complex<float>* e, OrdinalType* info) const;
01505 void PTTRS(const OrdinalType n, const OrdinalType nrhs, const complex<float>* d, const complex<float>* e, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01506 void POTRF(const char UPLO, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* info) const;
01507 void POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01508 void POTRI(const char UPLO, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* info) const;
01509 void POCON(const char UPLO, const OrdinalType n, const complex<float>* A, const OrdinalType lda, const float anorm, float* rcond, complex<float>* WORK, float* rwork, OrdinalType* info) const;
01510 void POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01511 void POEQU(const OrdinalType n, const complex<float>* A, const OrdinalType lda, float* S, float* scond, float* amax, OrdinalType* info) const;
01512 void PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, const complex<float>* AF, const OrdinalType ldaf, const complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01513 void POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* AF, const OrdinalType ldaf, char EQUED, float* S, complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01514
01515
01516 void GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01517 void GEQRF( const OrdinalType m, const OrdinalType n, complex<float>* A, const OrdinalType lda, complex<float>* TAU, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01518 void UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, complex<float>* A, const OrdinalType lda, const complex<float>* TAU, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01519 void GETRF(const OrdinalType m, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const;
01520 void GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01521 void GTTRF(const OrdinalType n, complex<float>* dl, complex<float>* d, complex<float>* du, complex<float>* du2, OrdinalType* IPIV, OrdinalType* info) const;
01522 void GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<float>* dl, const complex<float>* d, const complex<float>* du, const complex<float>* du2, const OrdinalType* IPIV, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01523 void GETRI(const OrdinalType n, complex<float>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01524 void GECON(const char NORM, const OrdinalType n, const complex<float>* A, const OrdinalType lda, const float anorm, float* rcond, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01525 void GESV(const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, OrdinalType* IPIV, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01526 void GEEQU(const OrdinalType m, const OrdinalType n, const complex<float>* A, const OrdinalType lda, float* R, float* C, float* rowcond, float* colcond, float* amax, OrdinalType* info) const;
01527 void GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, const complex<float>* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01528 void GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, float* R, float* C, complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01529 void GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<float>* A, const OrdinalType lda, complex<float>* TAU, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01530 void TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const;
01531
01532
01533 void STEQR(const char COMPZ, const OrdinalType n, float* D, float* E, complex<float>* Z, const OrdinalType ldz, float* WORK, OrdinalType* info) const;
01534 void HEEV(const char JOBZ, const char UPLO, const OrdinalType n, complex<float>* A, const OrdinalType lda, float* W, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* info) const;
01535 void HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, float* W, complex<float>* WORK, const OrdinalType lwork, float *RWORK, OrdinalType* info) const;
01536
01537
01538 void HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<float>* H, const OrdinalType ldh, complex<float>* W, complex<float>* Z, const OrdinalType ldz, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01539 void GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(complex<float>*), const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* sdim, complex<float>* W, complex<float>* VS, const OrdinalType ldvs, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
01540 void GEES(const char JOBVS, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* sdim, float* WR, float* WI, complex<float>* VS, const OrdinalType ldvs, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
01541 void GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, complex<float>* A, const OrdinalType lda, complex<float>* W, complex<float>* VL, const OrdinalType ldvl, complex<float>* VR, const OrdinalType ldvr, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* info) const;
01542
01543
01544 void TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(complex<float>*), const OrdinalType n, const complex<float>* T, const OrdinalType ldt, complex<float>* VL, const OrdinalType ldvl, complex<float>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01545 void TREVC(const char SIDE, const OrdinalType n, const complex<float>* T, const OrdinalType ldt, complex<float>* VL, const OrdinalType ldvl, complex<float>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<float>* WORK, float* RWORK, OrdinalType* info) const;
01546 void TREXC(const char COMPQ, const OrdinalType n, complex<float>* T, const OrdinalType ldt, complex<float>* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, complex<float>* WORK, OrdinalType* info) const;
01547
01548
01549 void LARTG( const complex<float> f, const complex<float> g, float* c, complex<float>* s, complex<float>* r ) const;
01550 void LARFG( const OrdinalType n, complex<float>* alpha, complex<float>* x, const OrdinalType incx, complex<float>* tau ) const;
01551
01552
01553 complex<float> LARND( const OrdinalType idist, OrdinalType* seed ) const;
01554 void LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, complex<float>* v ) const;
01555
01556
01557 OrdinalType ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1 = -1, const OrdinalType N2 = -1, const OrdinalType N3 = -1, const OrdinalType N4 = -1 ) const;
01558
01559 };
01560
01561
01562
01563
01564
01565 template<typename OrdinalType>
01566 void LAPACK<OrdinalType, complex<float> >::PTTRF(const OrdinalType n, complex<float>* d, complex<float>* e, OrdinalType* info) const
01567 {
01568 CPTTRF_F77(&n,d,e,info);
01569 }
01570
01571 template<typename OrdinalType>
01572 void LAPACK<OrdinalType, complex<float> >::PTTRS(const OrdinalType n, const OrdinalType nrhs, const complex<float>* d, const complex<float>* e, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const
01573 {
01574 CPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info);
01575 }
01576
01577 template<typename OrdinalType>
01578 void LAPACK<OrdinalType, complex<float> >::POTRF(const char UPLO, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* info) const
01579 {
01580 CPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
01581 }
01582
01583 template<typename OrdinalType>
01584 void LAPACK<OrdinalType, complex<float> >::POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const
01585 {
01586 CPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
01587 }
01588
01589 template<typename OrdinalType>
01590 void LAPACK<OrdinalType, complex<float> >::POTRI(const char UPLO, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* info) const
01591 {
01592 CPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
01593 }
01594
01595 template<typename OrdinalType>
01596 void LAPACK<OrdinalType, complex<float> >::POCON(const char UPLO, const OrdinalType n, const complex<float>* A, const OrdinalType lda, const float anorm, float* rcond, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01597 {
01598 CPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
01599 }
01600
01601 template<typename OrdinalType>
01602 void LAPACK<OrdinalType, complex<float> >::POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const
01603 {
01604 CPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
01605 }
01606
01607 template<typename OrdinalType>
01608 void LAPACK<OrdinalType, complex<float> >::POEQU(const OrdinalType n, const complex<float>* A, const OrdinalType lda, float* S, float* scond, float* amax, OrdinalType* info) const
01609 {
01610 CPOEQU_F77(&n, A, &lda, S, scond, amax, info);
01611 }
01612
01613 template<typename OrdinalType>
01614 void LAPACK<OrdinalType, complex<float> >::PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, const complex<float>* AF, const OrdinalType ldaf, const complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01615 {
01616 CPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
01617 }
01618
01619 template<typename OrdinalType>
01620 void LAPACK<OrdinalType, complex<float> >::POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* AF, const OrdinalType ldaf, char EQUED, float* S, complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01621 {
01622 CPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHAR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
01623 }
01624
01625 template<typename OrdinalType>
01626 void LAPACK<OrdinalType,complex<float> >::GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const
01627 {
01628 CGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
01629 }
01630
01631 template<typename OrdinalType>
01632 void LAPACK<OrdinalType,complex<float> >::GEQRF( const OrdinalType m, const OrdinalType n, complex<float>* A, const OrdinalType lda, complex<float>* TAU, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const
01633 {
01634 CGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
01635 }
01636
01637 template<typename OrdinalType>
01638 void LAPACK<OrdinalType,complex<float> >::UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, complex<float>* A, const OrdinalType lda, const complex<float>* TAU, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const
01639 {
01640 CUNGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
01641 }
01642
01643 template<typename OrdinalType>
01644 void LAPACK<OrdinalType,complex<float> >::GETRF(const OrdinalType m, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const
01645 {
01646 CGETRF_F77(&m, &n, A, &lda, IPIV, info);
01647 }
01648
01649 template<typename OrdinalType>
01650 void LAPACK<OrdinalType,complex<float> >::GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<float>* B , const OrdinalType ldb, OrdinalType* info) const
01651 {
01652 CGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
01653 }
01654
01655 template<typename OrdinalType>
01656 void LAPACK<OrdinalType,complex<float> >::GTTRF(const OrdinalType n, complex<float>* dl, complex<float>* d, complex<float>* du, complex<float>* du2, OrdinalType* IPIV, OrdinalType* info) const
01657 {
01658 CGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
01659 }
01660
01661 template<typename OrdinalType>
01662 void LAPACK<OrdinalType,complex<float> >::GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<float>* dl, const complex<float>* d, const complex<float>* du, const complex<float>* du2, const OrdinalType* IPIV, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const
01663 {
01664 CGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
01665 }
01666
01667 template<typename OrdinalType>
01668 void LAPACK<OrdinalType,complex<float> >::GETRI(const OrdinalType n, complex<float>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const
01669 {
01670 CGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
01671 }
01672
01673 template<typename OrdinalType>
01674 void LAPACK<OrdinalType,complex<float> >::GECON(const char NORM, const OrdinalType n, const complex<float>* A, const OrdinalType lda, const float anorm, float* rcond, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01675 {
01676 CGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
01677 }
01678
01679 template<typename OrdinalType>
01680 void LAPACK<OrdinalType,complex<float> >::GESV(const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, OrdinalType* IPIV, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const
01681 {
01682 CGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
01683 }
01684
01685 template<typename OrdinalType>
01686 void LAPACK<OrdinalType,complex<float> >::GEEQU(const OrdinalType m, const OrdinalType n, const complex<float>* A, const OrdinalType lda, float* R, float* C, float* rowcond, float* colcond, float* amax, OrdinalType* info) const
01687 {
01688 CGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
01689 }
01690
01691 template<typename OrdinalType>
01692 void LAPACK<OrdinalType,complex<float> >::GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, const complex<float>* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01693 {
01694 CGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
01695 }
01696
01697 template<typename OrdinalType>
01698 void LAPACK<OrdinalType,complex<float> >::GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, complex<float>* A, const OrdinalType lda, complex<float>* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, float* R, float* C, complex<float>* B, const OrdinalType ldb, complex<float>* X, const OrdinalType ldx, float* rcond, float* FERR, float* BERR, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01699 {
01700 CGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHAR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
01701 }
01702
01703 template<typename OrdinalType>
01704 void LAPACK<OrdinalType,complex<float> >::GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<float>* A, const OrdinalType lda, complex<float>* TAU, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const
01705 {
01706 CGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
01707 }
01708
01709 template<typename OrdinalType>
01710 void LAPACK<OrdinalType,complex<float> >::TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const complex<float>* A, const OrdinalType lda, complex<float>* B, const OrdinalType ldb, OrdinalType* info) const
01711 {
01712 CTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
01713 }
01714
01715 template<typename OrdinalType>
01716 void LAPACK<OrdinalType,complex<float> >::STEQR(const char COMPZ, const OrdinalType n, float* D, float* E, complex<float>* Z, const OrdinalType ldz, float* WORK, OrdinalType* info) const
01717 {
01718 CSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
01719 }
01720
01721 template<typename OrdinalType>
01722 void LAPACK<OrdinalType,complex<float> >::HEEV(const char JOBZ, const char UPLO, const OrdinalType n, complex<float> * A, const OrdinalType lda, float * W, complex<float> * WORK, const OrdinalType lwork, float* RWORK, OrdinalType* info) const
01723 {
01724 CHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, RWORK, info);
01725 }
01726
01727 template<typename OrdinalType>
01728 void LAPACK<OrdinalType,complex<float> >::HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, complex<float> * A, const OrdinalType lda, complex<float> * B, const OrdinalType ldb, float * W, complex<float> * WORK, const OrdinalType lwork, float *RWORK, OrdinalType* info) const
01729 {
01730 CHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, RWORK, info);
01731 }
01732
01733 template<typename OrdinalType>
01734 void LAPACK<OrdinalType, complex<float> >::HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<float>* H, const OrdinalType ldh, complex<float>* W, complex<float>* Z, const OrdinalType ldz, complex<float>* WORK, const OrdinalType lwork, OrdinalType* info) const
01735 {
01736 CHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, W, Z, &ldz, WORK, &lwork, info);
01737 }
01738
01739 template<typename OrdinalType>
01740 void LAPACK<OrdinalType, complex<float> >::GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(complex<float>*), const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* sdim, complex<float>* W, complex<float>* VS, const OrdinalType ldvs, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* BWORK, OrdinalType* info) const
01741 {
01742 CGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, W, VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
01743 }
01744
01745 template<typename OrdinalType>
01746 void LAPACK<OrdinalType, complex<float> >::GEES(const char JOBVS, const OrdinalType n, complex<float>* A, const OrdinalType lda, OrdinalType* sdim, float* WR, float* WI, complex<float>* VS, const OrdinalType ldvs, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* BWORK, OrdinalType* info) const
01747 {
01748 OrdinalType (*nullfptr)(complex<float>*) = NULL;
01749 std::vector< complex<float> > W(n);
01750 const char sort = 'N';
01751 CGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, &W[0], VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
01752 for (int i=0; i<n; i++) {
01753 WR[i] = W[i].real();
01754 WI[i] = W[i].imag();
01755 }
01756 }
01757
01758 template<typename OrdinalType>
01759 void LAPACK<OrdinalType, complex<float> >::GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, complex<float>* A, const OrdinalType lda, complex<float>* W, complex<float>* VL, const OrdinalType ldvl, complex<float>* VR, const OrdinalType ldvr, complex<float>* WORK, const OrdinalType lwork, float* RWORK, OrdinalType* info) const
01760 {
01761 CGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
01762 }
01763
01764 template<typename OrdinalType>
01765 void LAPACK<OrdinalType, complex<float> >::TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(complex<float>*), const OrdinalType n, const complex<float>* T, const OrdinalType ldt, complex<float>* VL, const OrdinalType ldvl, complex<float>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01766 {
01767 CTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), ptr2func, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
01768 }
01769
01770 template<typename OrdinalType>
01771 void LAPACK<OrdinalType, complex<float> >::TREVC(const char SIDE, const OrdinalType n, const complex<float>* T, const OrdinalType ldt, complex<float>* VL, const OrdinalType ldvl, complex<float>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<float>* WORK, float* RWORK, OrdinalType* info) const
01772 {
01773 OrdinalType (*nullfptr)(complex<float>*) = NULL;
01774 const char whch = 'A';
01775 CTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), nullfptr, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
01776 }
01777
01778 template<typename OrdinalType>
01779 void LAPACK<OrdinalType, complex<float> >::TREXC(const char COMPQ, const OrdinalType n, complex<float>* T, const OrdinalType ldt, complex<float>* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, complex<float>* WORK, OrdinalType* info) const
01780 {
01781 CTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, &ifst, &ilst, info);
01782 }
01783
01784 template<typename OrdinalType>
01785 void LAPACK<OrdinalType, complex<float> >::LARTG( const complex<float> f, const complex<float> g, float* c, complex<float>* s, complex<float>* r ) const
01786 {
01787 CLARTG_F77(&f, &g, c, s, r);
01788 }
01789
01790 template<typename OrdinalType>
01791 void LAPACK<OrdinalType, complex<float> >::LARFG( const OrdinalType n, complex<float>* alpha, complex<float>* x, const OrdinalType incx, complex<float>* tau ) const
01792 {
01793 CLARFG_F77(&n, alpha, x, &incx, tau);
01794 }
01795
01796 template<typename OrdinalType>
01797 complex<float> LAPACK<OrdinalType, complex<float> >::LARND( const OrdinalType idist, OrdinalType* seed ) const
01798 {
01799 return(CLARND_F77(&idist, seed));
01800 }
01801
01802 template<typename OrdinalType>
01803 void LAPACK<OrdinalType, complex<float> >::LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, complex<float>* v ) const
01804 {
01805 CLARNV_F77(&idist, seed, &n, v);
01806 }
01807
01808 template<typename OrdinalType>
01809 OrdinalType LAPACK<OrdinalType, complex<float> >::ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1, const OrdinalType N2, const OrdinalType N3, const OrdinalType N4 ) const
01810 {
01811 unsigned int opts_length = OPTS.length();
01812 std::string temp_NAME = "c" + NAME;
01813 unsigned int name_length = temp_NAME.length();
01814 #if defined (INTEL_CXML)
01815 return ILAENV_F77(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4 );
01816 #else
01817 return ILAENV_F77(&ispec, &temp_NAME[0], &OPTS[0], &N1, &N2, &N3, &N4, name_length, opts_length );
01818 #endif
01819 }
01820
01821
01822
01823
01824
01825 template<typename OrdinalType>
01826 class LAPACK<OrdinalType, complex<double> >
01827 {
01828 public:
01829 inline LAPACK(void) {};
01830 inline LAPACK(const LAPACK<OrdinalType, complex<double> >& lapack) {};
01831 inline virtual ~LAPACK(void) {};
01832
01833
01834 void PTTRF(const OrdinalType n, complex<double>* d, complex<double>* e, OrdinalType* info) const;
01835 void PTTRS(const OrdinalType n, const OrdinalType nrhs, const complex<double>* d, const complex<double>* e, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01836 void POTRF(const char UPLO, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* info) const;
01837 void POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01838 void POTRI(const char UPLO, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* info) const;
01839 void POCON(const char UPLO, const OrdinalType n, const complex<double>* A, const OrdinalType lda, const double anorm, double* rcond, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01840 void POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01841 void POEQU(const OrdinalType n, const complex<double>* A, const OrdinalType lda, double* S, double* scond, double* amax, OrdinalType* info) const;
01842 void PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, const complex<double>* AF, const OrdinalType ldaf, const complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01843 void POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* AF, const OrdinalType ldaf, char EQUED, double* S, complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01844
01845
01846 void GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01847 void GEQRF( const OrdinalType m, const OrdinalType n, complex<double>* A, const OrdinalType lda, complex<double>* TAU, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01848 void UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, complex<double>* A, const OrdinalType lda, const complex<double>* TAU, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01849 void GETRF(const OrdinalType m, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const;
01850 void GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01851 void GTTRF(const OrdinalType n, complex<double>* dl, complex<double>* d, complex<double>* du, complex<double>* du2, OrdinalType* IPIV, OrdinalType* info) const;
01852 void GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<double>* dl, const complex<double>* d, const complex<double>* du, const complex<double>* du2, const OrdinalType* IPIV, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01853 void GETRI(const OrdinalType n, complex<double>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01854 void GECON(const char NORM, const OrdinalType n, const complex<double>* A, const OrdinalType lda, const double anorm, double* rcond, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01855 void GESV(const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, OrdinalType* IPIV, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01856 void GEEQU(const OrdinalType m, const OrdinalType n, const complex<double>* A, const OrdinalType lda, double* R, double* C, double* rowcond, double* colcond, double* amax, OrdinalType* info) const;
01857 void GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, const complex<double>* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01858 void GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, double* R, double* C, complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01859 void GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<double>* A, const OrdinalType lda, complex<double>* TAU, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01860 void TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const;
01861
01862
01863 void STEQR(const char COMPZ, const OrdinalType n, double* D, double* E, complex<double>* Z, const OrdinalType ldz, double* WORK, OrdinalType* info) const;
01864 void HEEV(const char JOBZ, const char UPLO, const OrdinalType n, complex<double>* A, const OrdinalType lda, double* W, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* info) const;
01865 void HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, double* W, complex<double>* WORK, const OrdinalType lwork, double *RWORK, OrdinalType* info) const;
01866
01867
01868 void HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<double>* H, const OrdinalType ldh, complex<double>* W, complex<double>* Z, const OrdinalType ldz, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const;
01869 void GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(complex<double>*), const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* sdim, complex<double>* W, complex<double>* VS, const OrdinalType ldvs, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
01870 void GEES(const char JOBVS, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* sdim, double* WR, double* WI, complex<double>* VS, const OrdinalType ldvs, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* BWORK, OrdinalType* info) const;
01871 void GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, complex<double>* A, const OrdinalType lda, complex<double>* W, complex<double>* VL, const OrdinalType ldvl, complex<double>* VR, const OrdinalType ldvr, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* info) const;
01872
01873
01874 void TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(complex<double>*), const OrdinalType n, const complex<double>* T, const OrdinalType ldt, complex<double>* VL, const OrdinalType ldvl, complex<double>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01875 void TREVC(const char SIDE, const OrdinalType n, const complex<double>* T, const OrdinalType ldt, complex<double>* VL, const OrdinalType ldvl, complex<double>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<double>* WORK, double* RWORK, OrdinalType* info) const;
01876 void TREXC(const char COMPQ, const OrdinalType n, complex<double>* T, const OrdinalType ldt, complex<double>* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, complex<double>* WORK, OrdinalType* info) const;
01877
01878
01879 void LARTG( const complex<double> f, const complex<double> g, double* c, complex<double>* s, complex<double>* r ) const;
01880 void LARFG( const OrdinalType n, complex<double>* alpha, complex<double>* x, const OrdinalType incx, complex<double>* tau ) const;
01881
01882
01883 complex<double> LARND( const OrdinalType idist, OrdinalType* seed ) const;
01884 void LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, complex<double>* v ) const;
01885
01886
01887 OrdinalType ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1 = -1, const OrdinalType N2 = -1, const OrdinalType N3 = -1, const OrdinalType N4 = -1 ) const;
01888
01889 };
01890
01891
01892
01893
01894
01895 template<typename OrdinalType>
01896 void LAPACK<OrdinalType, complex<double> >::PTTRF(const OrdinalType n, complex<double>* d, complex<double>* e, OrdinalType* info) const
01897 {
01898 ZPTTRF_F77(&n,d,e,info);
01899 }
01900
01901 template<typename OrdinalType>
01902 void LAPACK<OrdinalType, complex<double> >::PTTRS(const OrdinalType n, const OrdinalType nrhs, const complex<double>* d, const complex<double>* e, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
01903 {
01904 ZPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info);
01905 }
01906
01907 template<typename OrdinalType>
01908 void LAPACK<OrdinalType, complex<double> >::POTRF(const char UPLO, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* info) const
01909 {
01910 ZPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
01911 }
01912
01913 template<typename OrdinalType>
01914 void LAPACK<OrdinalType, complex<double> >::POTRS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
01915 {
01916 ZPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
01917 }
01918
01919 template<typename OrdinalType>
01920 void LAPACK<OrdinalType, complex<double> >::POTRI(const char UPLO, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* info) const
01921 {
01922 ZPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
01923 }
01924
01925 template<typename OrdinalType>
01926 void LAPACK<OrdinalType, complex<double> >::POCON(const char UPLO, const OrdinalType n, const complex<double>* A, const OrdinalType lda, const double anorm, double* rcond, complex<double>* WORK, double* RWORK, OrdinalType* info) const
01927 {
01928 ZPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
01929 }
01930
01931 template<typename OrdinalType>
01932 void LAPACK<OrdinalType, complex<double> >::POSV(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
01933 {
01934 ZPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
01935 }
01936
01937 template<typename OrdinalType>
01938 void LAPACK<OrdinalType, complex<double> >::POEQU(const OrdinalType n, const complex<double>* A, const OrdinalType lda, double* S, double* scond, double* amax, OrdinalType* info) const
01939 {
01940 ZPOEQU_F77(&n, A, &lda, S, scond, amax, info);
01941 }
01942
01943 template<typename OrdinalType>
01944 void LAPACK<OrdinalType, complex<double> >::PORFS(const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, const complex<double>* AF, const OrdinalType ldaf, const complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const
01945 {
01946 ZPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
01947 }
01948
01949 template<typename OrdinalType>
01950 void LAPACK<OrdinalType, complex<double> >::POSVX(const char FACT, const char UPLO, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* AF, const OrdinalType ldaf, char EQUED, double* S, complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const
01951 {
01952 ZPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHAR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
01953 }
01954
01955 template<typename OrdinalType>
01956 void LAPACK<OrdinalType,complex<double> >::GELS(const char TRANS, const OrdinalType m, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const
01957 {
01958 ZGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
01959 }
01960
01961 template<typename OrdinalType>
01962 void LAPACK<OrdinalType,complex<double> >::GEQRF( const OrdinalType m, const OrdinalType n, complex<double>* A, const OrdinalType lda, complex<double>* TAU, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const
01963 {
01964 ZGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
01965 }
01966
01967 template<typename OrdinalType>
01968 void LAPACK<OrdinalType,complex<double> >::UNGQR(const OrdinalType m, const OrdinalType n, const OrdinalType k, complex<double>* A, const OrdinalType lda, const complex<double>* TAU, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const
01969 {
01970 ZUNGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
01971 }
01972
01973 template<typename OrdinalType>
01974 void LAPACK<OrdinalType,complex<double> >::GETRF(const OrdinalType m, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* IPIV, OrdinalType* info) const
01975 {
01976 ZGETRF_F77(&m, &n, A, &lda, IPIV, info);
01977 }
01978
01979 template<typename OrdinalType>
01980 void LAPACK<OrdinalType,complex<double> >::GETRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
01981 {
01982 ZGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
01983 }
01984
01985 template<typename OrdinalType>
01986 void LAPACK<OrdinalType,complex<double> >::GTTRF(const OrdinalType n, complex<double>* dl, complex<double>* d, complex<double>* du, complex<double>* du2, OrdinalType* IPIV, OrdinalType* info) const
01987 {
01988 ZGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
01989 }
01990
01991 template<typename OrdinalType>
01992 void LAPACK<OrdinalType,complex<double> >::GTTRS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<double>* dl, const complex<double>* d, const complex<double>* du, const complex<double>* du2, const OrdinalType* IPIV, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
01993 {
01994 ZGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
01995 }
01996
01997 template<typename OrdinalType>
01998 void LAPACK<OrdinalType,complex<double> >::GETRI(const OrdinalType n, complex<double>* A, const OrdinalType lda, const OrdinalType* IPIV, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const
01999 {
02000 ZGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
02001 }
02002
02003 template<typename OrdinalType>
02004 void LAPACK<OrdinalType,complex<double> >::GECON(const char NORM, const OrdinalType n, const complex<double>* A, const OrdinalType lda, const double anorm, double* rcond, complex<double>* WORK, double* RWORK, OrdinalType* info) const
02005 {
02006 ZGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
02007 }
02008
02009 template<typename OrdinalType>
02010 void LAPACK<OrdinalType,complex<double> >::GESV(const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, OrdinalType* IPIV, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
02011 {
02012 ZGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
02013 }
02014
02015 template<typename OrdinalType>
02016 void LAPACK<OrdinalType,complex<double> >::GEEQU(const OrdinalType m, const OrdinalType n, const complex<double>* A, const OrdinalType lda, double* R, double* C, double* rowcond, double* colcond, double* amax, OrdinalType* info) const
02017 {
02018 ZGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
02019 }
02020
02021 template<typename OrdinalType>
02022 void LAPACK<OrdinalType,complex<double> >::GERFS(const char TRANS, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, const complex<double>* AF, const OrdinalType ldaf, const OrdinalType* IPIV, const complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const
02023 {
02024 ZGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
02025 }
02026
02027 template<typename OrdinalType>
02028 void LAPACK<OrdinalType,complex<double> >::GESVX(const char FACT, const char TRANS, const OrdinalType n, const OrdinalType nrhs, complex<double>* A, const OrdinalType lda, complex<double>* AF, const OrdinalType ldaf, OrdinalType* IPIV, char EQUED, double* R, double* C, complex<double>* B, const OrdinalType ldb, complex<double>* X, const OrdinalType ldx, double* rcond, double* FERR, double* BERR, complex<double>* WORK, double* RWORK, OrdinalType* info) const
02029 {
02030 ZGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHAR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
02031 }
02032
02033 template<typename OrdinalType>
02034 void LAPACK<OrdinalType,complex<double> >::GEHRD(const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<double>* A, const OrdinalType lda, complex<double>* TAU, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const
02035 {
02036 ZGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
02037 }
02038
02039 template<typename OrdinalType>
02040 void LAPACK<OrdinalType,complex<double> >::TRTRS(const char UPLO, const char TRANS, const char DIAG, const OrdinalType n, const OrdinalType nrhs, const complex<double>* A, const OrdinalType lda, complex<double>* B, const OrdinalType ldb, OrdinalType* info) const
02041 {
02042 ZTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
02043 }
02044
02045 template<typename OrdinalType>
02046 void LAPACK<OrdinalType,complex<double> >::STEQR(const char COMPZ, const OrdinalType n, double* D, double* E, complex<double>* Z, const OrdinalType ldz, double* WORK, OrdinalType* info) const
02047 {
02048 ZSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
02049 }
02050
02051 template<typename OrdinalType>
02052 void LAPACK<OrdinalType,complex<double> >::HEEV(const char JOBZ, const char UPLO, const OrdinalType n, complex<double> * A, const OrdinalType lda, double * W, complex<double> * WORK, const OrdinalType lwork, double* RWORK, OrdinalType* info) const
02053 {
02054 ZHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, RWORK, info);
02055 }
02056
02057 template<typename OrdinalType>
02058 void LAPACK<OrdinalType,complex<double> >::HEGV(const OrdinalType itype, const char JOBZ, const char UPLO, const OrdinalType n, complex<double> * A, const OrdinalType lda, complex<double> * B, const OrdinalType ldb, double * W, complex<double> * WORK, const OrdinalType lwork, double *RWORK, OrdinalType* info) const
02059 {
02060 ZHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, RWORK, info);
02061 }
02062
02063 template<typename OrdinalType>
02064 void LAPACK<OrdinalType, complex<double> >::HSEQR(const char JOB, const char COMPZ, const OrdinalType n, const OrdinalType ilo, const OrdinalType ihi, complex<double>* H, const OrdinalType ldh, complex<double>* W, complex<double>* Z, const OrdinalType ldz, complex<double>* WORK, const OrdinalType lwork, OrdinalType* info) const
02065 {
02066 ZHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, W, Z, &ldz, WORK, &lwork, info);
02067 }
02068
02069 template<typename OrdinalType>
02070 void LAPACK<OrdinalType, complex<double> >::GEES(const char JOBVS, const char SORT, OrdinalType (*ptr2func)(complex<double>*), const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* sdim, complex<double>* W, complex<double>* VS, const OrdinalType ldvs, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* BWORK, OrdinalType* info) const
02071 {
02072 ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, W, VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
02073 }
02074
02075 template<typename OrdinalType>
02076 void LAPACK<OrdinalType, complex<double> >::GEES(const char JOBVS, const OrdinalType n, complex<double>* A, const OrdinalType lda, OrdinalType* sdim, double* WR, double* WI, complex<double>* VS, const OrdinalType ldvs, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* BWORK, OrdinalType* info) const
02077 {
02078 OrdinalType (*nullfptr)(complex<double>*) = NULL;
02079 std::vector< complex<double> > W(n);
02080 const char sort = 'N';
02081 ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, &W[0], VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
02082 for (int i=0; i<n; i++) {
02083 WR[i] = W[i].real();
02084 WI[i] = W[i].imag();
02085 }
02086 }
02087
02088 template<typename OrdinalType>
02089 void LAPACK<OrdinalType, complex<double> >::GEEV(const char JOBVL, const char JOBVR, const OrdinalType n, complex<double>* A, const OrdinalType lda, complex<double>* W, complex<double>* VL, const OrdinalType ldvl, complex<double>* VR, const OrdinalType ldvr, complex<double>* WORK, const OrdinalType lwork, double* RWORK, OrdinalType* info) const
02090 {
02091 ZGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
02092 }
02093
02094 template<typename OrdinalType>
02095 void LAPACK<OrdinalType, complex<double> >::TREVC(const char SIDE, const char HOWMNY, OrdinalType (*ptr2func)(complex<double>*), const OrdinalType n, const complex<double>* T, const OrdinalType ldt, complex<double>* VL, const OrdinalType ldvl, complex<double>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<double>* WORK, double* RWORK, OrdinalType* info) const
02096 {
02097 ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), ptr2func, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
02098 }
02099
02100 template<typename OrdinalType>
02101 void LAPACK<OrdinalType, complex<double> >::TREVC(const char SIDE, const OrdinalType n, const complex<double>* T, const OrdinalType ldt, complex<double>* VL, const OrdinalType ldvl, complex<double>* VR, const OrdinalType ldvr, const OrdinalType mm, OrdinalType* m, complex<double>* WORK, double* RWORK, OrdinalType* info) const
02102 {
02103 OrdinalType (*nullfptr)(complex<double>*) = NULL;
02104 const char whch = 'A';
02105 ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), nullfptr, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
02106 }
02107
02108 template<typename OrdinalType>
02109 void LAPACK<OrdinalType, complex<double> >::TREXC(const char COMPQ, const OrdinalType n, complex<double>* T, const OrdinalType ldt, complex<double>* Q, const OrdinalType ldq, OrdinalType ifst, OrdinalType ilst, complex<double>* WORK, OrdinalType* info) const
02110 {
02111 ZTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, &ifst, &ilst, info);
02112 }
02113
02114 template<typename OrdinalType>
02115 void LAPACK<OrdinalType, complex<double> >::LARTG( const complex<double> f, const complex<double> g, double* c, complex<double>* s, complex<double>* r ) const
02116 {
02117 ZLARTG_F77(&f, &g, c, s, r);
02118 }
02119
02120 template<typename OrdinalType>
02121 void LAPACK<OrdinalType, complex<double> >::LARFG( const OrdinalType n, complex<double>* alpha, complex<double>* x, const OrdinalType incx, complex<double>* tau ) const
02122 {
02123 ZLARFG_F77(&n, alpha, x, &incx, tau);
02124 }
02125
02126 template<typename OrdinalType>
02127 complex<double> LAPACK<OrdinalType, complex<double> >::LARND( const OrdinalType idist, OrdinalType* seed ) const
02128 {
02129 return(ZLARND_F77(&idist, seed));
02130 }
02131
02132 template<typename OrdinalType>
02133 void LAPACK<OrdinalType, complex<double> >::LARNV( const OrdinalType idist, OrdinalType* seed, const OrdinalType n, complex<double>* v ) const
02134 {
02135 ZLARNV_F77(&idist, seed, &n, v);
02136 }
02137
02138 template<typename OrdinalType>
02139 OrdinalType LAPACK<OrdinalType, complex<double> >::ILAENV( const OrdinalType ispec, const std::string& NAME, const std::string& OPTS, const OrdinalType N1, const OrdinalType N2, const OrdinalType N3, const OrdinalType N4 ) const
02140 {
02141 unsigned int opts_length = OPTS.length();
02142 std::string temp_NAME = "z" + NAME;
02143 unsigned int name_length = temp_NAME.length();
02144 #if defined (INTEL_CXML)
02145 return ILAENV_F77(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4 );
02146 #else
02147 return ILAENV_F77(&ispec, &temp_NAME[0], &OPTS[0], &N1, &N2, &N3, &N4, name_length, opts_length );
02148 #endif
02149 }
02150
02151
02152
02153 #endif // HAVE_TEUCHOS_COMPLEX
02154
02155 #endif // DOXYGEN_SHOULD_SKIP_THIS
02156
02157 }
02158
02159 #endif // _TEUCHOS_LAPACK_HPP_