diagonalize3 for n smaller than dimension

This commit is contained in:
2025-12-10 17:11:26 +01:00
parent 6fe5dd8be6
commit 62d9e18043
2 changed files with 4 additions and 4 deletions

View File

@@ -947,10 +947,10 @@ extern "C" void FORNAME(zggev)(const char *JOBVL, const char *JOBVR, const FINT
//tridiagonal
extern "C" void FORNAME(dsteqr)(const char *compz, const FINT *n, double *d, double *d1, double *z, const FINT *ldz, double *work, FINT *info);
void diagonalize3(NRVec<double> &d, NRVec<double> &d1, NRMat<double> *v, const bool corder)
void diagonalize3(NRVec<double> &d, NRVec<double> &d1, NRMat<double> *v, const bool corder, int n0)
{
FINT n = d.size();
if(d1.size()!=n) laerror("inconsistent dimensions in diagonalize3");
FINT n = n0? n0: d.size();
if(d1.size()<n-1) laerror("inconsistent dimensions in diagonalize3");
if(v) {if(n!=v->nrows()||n!=v->ncols()) laerror("inconsistent dimensions in diagonalize3");}
d.copyonwrite();
d1.copyonwrite();

View File

@@ -184,7 +184,7 @@ extern void gdiagonalize(NRMat<std::complex<double> > &a, NRVec<double> &wr, NRV
NRMat<std::complex<double> > *b=NULL, NRVec<std::complex<double> > *beta=NULL);
//diagonalization of symmetric real tridiagonal matrix
extern void diagonalize3(NRVec<double> &d, NRVec<double> &d1, NRMat<double> *v, const bool corder=1);
extern void diagonalize3(NRVec<double> &d, NRVec<double> &d1, NRMat<double> *v, const bool corder=1, int n0=0);
//complex,real,imaginary parts of various entities
template<typename T>