Commit cab75e4c authored by Alvarez, Gonzalo's avatar Alvarez, Gonzalo
Browse files

USE_STEQR instead of [ds]stedc

parent 6615f254
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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,
+1 −1
Original line number Diff line number Diff line
#include "TridiagonalMatrix.h"

#ifndef USE_STERF
#ifndef USE_STEQR

namespace PsimagLite {

+6 −4
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@ public:
	}


#ifndef USE_STERF
#ifndef USE_STEQR
	void diag(VectorRealType&, SizeType) const;
#else
	void diag(VectorRealType& eigs, SizeType nn)
@@ -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