Program Listing for File Lanczos.cpp¶
↰ Return to documentation for file (src_ed/Hamiltonian/Lanczos.cpp)
#include "Lanczos.hpp"
//------------------------------------------------------------------------------
// external variables or declarations
using namespace std;
std::normal_distribution<double> normal_dis(0.0, 1.0);
//------------------------------------------------------------------------------
// variables local to this file
void EigensystemTridiagonal(bool evector_flag, vector<double> &alpha, vector<double> &beta, vector<double> &energy, vector<double> &evector)
{
if(alpha.size()==1){
energy.clear();
erase(evector);
energy.push_back(alpha[0]);
if(evector_flag) evector.push_back(1.0);
return;
}
size_t M = alpha.size();
vector<double> d(alpha), e(beta), work(2*M), z(M*M);
char jobz;
if(evector_flag) jobz='V'; else jobz='N';
integer info, ldz, nn;
nn = M;
ldz = M;
// call to a LAPACK routine
dstev_(&jobz, &nn, (doublereal*)d.data(), (doublereal*)e.data(), (doublereal*)z.data(), &ldz, (doublereal*)work.data(), &info);
QCM_ASSERT((int)info==0);
energy.assign(d.begin(),d.begin()+M);
if(evector_flag) evector.assign(z.begin(), z.begin()+M);
}