Loading src/LAPACK.h +28 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,10 @@ extern "C" void dsterf_(int*, double*, double*, int*); extern "C" void ssterf_(int*, float*, float*, int*); extern "C" void dsteqr_(char*, int*, double*, double*, double*, int*, double*, int*); extern "C" void ssteqr_(char*, int*, float*, float*, float*, int*, float*, int*); // ============================================================================ inline void STERF(int* n, double* d, double* e, int* info) Loading @@ -239,6 +243,30 @@ inline void STERF(int* n, float* d, float* e, int* info) ssterf_(n, d, e, info); } inline void STEQR(char jobz, int n, double* d, double* e, double *z, int ldz, double *work, int *info) { dsteqr_(&jobz, &n, d, e, z, &ldz, work, info); } inline void STEQR(char jobz, int n, float* d, float* e, float *z, int ldz, float *work, int *info) { ssteqr_(&jobz, &n, d, e, z, &ldz, work, info); } inline void GESV(int ma, int mb, float* a, Loading src/TridiagonalMatrix.cpp +1 −1 Original line number Diff line number Diff line #include "TridiagonalMatrix.h" #ifndef USE_STERF #ifndef USE_STEQR namespace PsimagLite { Loading src/TridiagonalMatrix.h +6 −4 Original line number Diff line number Diff line Loading @@ -143,7 +143,7 @@ public: } #ifndef USE_STERF #ifndef USE_STEQR void diag(VectorRealType&, SizeType) const; #else void diag(VectorRealType& eigs, SizeType nn) Loading @@ -152,10 +152,12 @@ public: VectorType e = b_; eigs = a_; int info = 0; psimag::LAPACK::STERF(&n, &(eigs[0]), &(e[1]), &info); int ldz = 1; VectorRealType work(2*nn); VectorRealType z(ldz*nn + 2); psimag::LAPACK::STEQR('N', n, &(eigs[0]), &(e[1]), &(z[0]), ldz, &(work[0]), &info); if (info == 0) return; throw RuntimeError("FATAL: *sterf_ failed with info = " + ttos(info) + "\n"); throw RuntimeError("FATAL: *STEQR failed with info = " + ttos(info) + "\n"); } #endif Loading Loading
src/LAPACK.h +28 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,10 @@ extern "C" void dsterf_(int*, double*, double*, int*); extern "C" void ssterf_(int*, float*, float*, int*); extern "C" void dsteqr_(char*, int*, double*, double*, double*, int*, double*, int*); extern "C" void ssteqr_(char*, int*, float*, float*, float*, int*, float*, int*); // ============================================================================ inline void STERF(int* n, double* d, double* e, int* info) Loading @@ -239,6 +243,30 @@ inline void STERF(int* n, float* d, float* e, int* info) ssterf_(n, d, e, info); } inline void STEQR(char jobz, int n, double* d, double* e, double *z, int ldz, double *work, int *info) { dsteqr_(&jobz, &n, d, e, z, &ldz, work, info); } inline void STEQR(char jobz, int n, float* d, float* e, float *z, int ldz, float *work, int *info) { ssteqr_(&jobz, &n, d, e, z, &ldz, work, info); } inline void GESV(int ma, int mb, float* a, Loading
src/TridiagonalMatrix.cpp +1 −1 Original line number Diff line number Diff line #include "TridiagonalMatrix.h" #ifndef USE_STERF #ifndef USE_STEQR namespace PsimagLite { Loading
src/TridiagonalMatrix.h +6 −4 Original line number Diff line number Diff line Loading @@ -143,7 +143,7 @@ public: } #ifndef USE_STERF #ifndef USE_STEQR void diag(VectorRealType&, SizeType) const; #else void diag(VectorRealType& eigs, SizeType nn) Loading @@ -152,10 +152,12 @@ public: VectorType e = b_; eigs = a_; int info = 0; psimag::LAPACK::STERF(&n, &(eigs[0]), &(e[1]), &info); int ldz = 1; VectorRealType work(2*nn); VectorRealType z(ldz*nn + 2); psimag::LAPACK::STEQR('N', n, &(eigs[0]), &(e[1]), &(z[0]), ldz, &(work[0]), &info); if (info == 0) return; throw RuntimeError("FATAL: *sterf_ failed with info = " + ttos(info) + "\n"); throw RuntimeError("FATAL: *STEQR failed with info = " + ttos(info) + "\n"); } #endif Loading