FIXED a recently introduced bug in vec.h

This commit is contained in:
2025-12-09 17:45:38 +01:00
parent 1cb536421f
commit 6fe5dd8be6
2 changed files with 5 additions and 5 deletions

6
t.cc
View File

@@ -4506,11 +4506,11 @@ if(0)
int n,m; int n,m;
cin>>n >>m; cin>>n >>m;
NRSMat<complex<double> > a(n); NRSMat<complex<double> > a(n);
a.randomize(.5); a.randomize(.1);
for(int i=0;i<n;++i) for(int i=0;i<n;++i)
{ {
a(i,i)= RANDDOUBLE() + .2*(i-n); a(i,i)= RANDDOUBLE() + .5*(i-n);
} }
//cout <<"test matrix = "<<a; //cout <<"test matrix = "<<a;
@@ -4522,7 +4522,7 @@ cout <<"Exact energies "<<rr;
NRVec<complex<double> > r(m); NRVec<complex<double> > r(m);
NRVec<complex<double> > *eivecs = new NRVec<complex<double> >[m]; NRVec<complex<double> > *eivecs = new NRVec<complex<double> >[m];
davidson(a,r,eivecs,NULL,m,true,1e-6,true,10*n,n*10); davidson(a,r,eivecs,NULL,m,true,1e-5,true,10*n,n);
cout <<"Davidson energies " <<r; cout <<"Davidson energies " <<r;
cout <<"Exact energies "<<rr; cout <<"Exact energies "<<rr;

4
vec.h
View File

@@ -314,7 +314,7 @@ public:
//! compute the Euclidean inner product (with conjugation in complex case) with a stride-vector //! compute the Euclidean inner product (with conjugation in complex case) with a stride-vector
inline const T dot(const T *a, const int stride = 1, bool conjugate=true) const; inline const T dot(const T *a, const int stride = 1, bool conjugate=true) const;
inline const T dot(const NRVec &rhs, bool conjugate=true) const {return dot(&((*this)[0]),1,conjugate);}; inline const T dot(const NRVec &rhs, bool conjugate=true) const {return dot(&(rhs[0]),1,conjugate);};
void gemv(const T beta, const NRMat<T> &a, const char trans, const T alpha, const NRVec &x); void gemv(const T beta, const NRMat<T> &a, const char trans, const T alpha, const NRVec &x);
void gemv(const T beta, const NRSMat<T> &a, const char trans /**< just for compatibility reasons */, const T alpha, const NRVec &x); void gemv(const T beta, const NRSMat<T> &a, const char trans /**< just for compatibility reasons */, const T alpha, const NRVec &x);
@@ -1832,7 +1832,7 @@ inline const std::complex<double> NRVec<std::complex<double> >::dot(const std::c
std::complex<double> dot; std::complex<double> dot;
NOT_GPU(*this); NOT_GPU(*this);
if(conjugate) cblas_zdotc_sub(nn, v,1,y, stride, &dot); if(conjugate) cblas_zdotc_sub(nn, v,1,y, stride, &dot);
else cblas_zdotc_sub(nn, v,1,y, stride, &dot); else cblas_zdotu_sub(nn, v,1,y, stride, &dot);
return dot; return dot;
} }