38 #if !defined(SLR_HEADER) 50 template<
bool MultByS,
bool SwapXY>
72 onDisk(0), inMemory(1) {
79 VarVector() : v(NULL), fName(NULL), nvar(0), onDisk(0), inMemory(1) {}
83 : v(NULL), fName(NULL), nvar(0), onDisk(0), inMemory(1) {
84 setFromFull(nbast, nocc, full_mat);
106 int size()
const {
return nvar; }
107 void print(
const char *comment = NULL) {
108 if(comment) puts(comment);
109 for(
int i=0; i<nvar*2; i++) printf(
"%15.10f\n", (
double)v[i]);
111 void setFromFull(
int nbast,
int nocc,
const ergo_real *full_mat);
112 void setFull(
int nbast,
int nocc,
ergo_real *full_mat)
const;
116 for(
int i=0; i<2*nvar; i++) v[i] = scalar;
121 if(
this == &b)
return *
this;
127 memcpy(v, b.
v, 2*nvar*
sizeof(v[0]));
134 if (&proxy.
vec ==
this)
135 throw "VarVector self-assignment not-implemented";
136 if(nvar != proxy.
vec.nvar) {
138 nvar = proxy.
vec.nvar;
142 for(
int i=0; i<2*nvar; i++)
149 if (&proxy.
vec ==
this)
150 throw "VarVector self-assignment not-implemented";
151 if(nvar != proxy.
vec.nvar) {
153 nvar = proxy.
vec.nvar;
156 for(
int i=0; i<nvar; i++) {
165 void load(
const char* tmpdir);
167 void save(
const char* tmpdir);
169 void release(
const char* tmpdir);
198 nVecs(0), nAllocated(0), diskMode(false) {
199 if(nSize) setSize(nSize);
202 void setSize(
int sz);
204 int size()
const {
return nVecs; }
218 virtual void getOper(
ergo_real *result) = 0;
240 void expand(
int newSize);
255 if(fdiag)
delete fdiag;
274 virtual ergo_real getPreconditionerShift(
int i)
const = 0;
277 virtual void increaseSubspaceLimit(
int newSize);
285 static const int MVEC = 200;
347 :
LRSolver(nbast, nocc, fock_matrix, s), frequency(freq),
355 virtual void increaseSubspaceLimit(
int newSize);
377 :
LRSolver(nbast, nocc, NULL, NULL),
379 nStates(n), nConverged(0), last_ev(NULL) {
380 ritzVals[0] = setE2diag(nbast, nocc, fock_matrix, overlap);
381 for(
int i=1; i<n; i++) ritzVals[i] = ritzVals[0];
384 if(last_ev)
delete last_ev;
386 delete [] transMoms2;
389 return ritzVals[nConverged+i];
394 virtual void increaseSubspaceLimit(
int newSize);
int size() const
Definition: slr.h:204
VarVector(const VarVector &a)
Definition: slr.h:71
ergo_real * last_ev
most recent eigenvectors in the reduced space
Definition: slr.h:372
ergo_real operator*(const VarVector &a, const VarVector &b)
Definition: slr.cc:101
EigenSolver(int nbast, int nocc, const ergo_real *fock_matrix, const ergo_real *overlap, int n)
Definition: slr.h:374
double ergo_real
Definition: realtype.h:69
int nAllocated
Definition: slr.h:194
Iterative Set Of Linear Equations solver, extending the generic LRSolver.
Definition: slr.h:337
ergo_real & operator[](int j) const
Definition: slr.h:230
RowProxy(ergo_real *r)
Definition: slr.h:229
int size() const
Definition: slr.h:106
ergo_real * mat
Definition: slr.h:224
Linear Response iterative solver using a variant of the Davidson method.
Definition: slr.h:247
void setDiskMode(bool x)
Definition: slr.h:206
E2Evaluator interface provides a way to perform a linear transformation of supplied transition densit...
Definition: slr.h:181
const VarVector & vec
Definition: slr.h:53
virtual ~OneElOperator()
Definition: slr.h:219
unsigned inMemory
valid representation in memory
Definition: slr.h:69
VarVector & operator=(const VarVectorProxyOp< false, false > &proxy)
Definition: slr.h:133
ergo_real * rhsSub
RHS vector projected onto subspace.
Definition: slr.h:358
VarVectorProxyOp(const VarVector &a, ergo_real s=1.0)
Definition: slr.h:55
VarVectorCollection Avects
vects and Avects members store the trial vectors and their transformed versions.
Definition: slr.h:325
unsigned currentAge
Definition: slr.h:192
ergo_real * ritzVals
recent ritz values in the subspace.
Definition: slr.h:368
template based proxy object that uses bool-valued policies to perform the assignments.
Definition: slr.h:51
VarVectorCollection(int nSize=0)
Definition: slr.h:197
ergo_real & operator[](int i)
Definition: slr.h:114
Vector of variables parametrising the solution to the linear response equations.
Definition: slr.h:62
VarVector & operator=(ergo_real scalar)
Definition: slr.h:115
int nVecs
Definition: slr.h:193
ergo_real scalar
Definition: slr.h:54
SetOfEqSolver(int nbast, int nocc, const ergo_real *fock_matrix, const ergo_real *s, ergo_real freq)
Creates the set-of-equations solver.
Definition: slr.h:343
virtual ~SetOfEqSolver()
Definition: slr.h:350
Iterative Eigenvalue solver, extending the generic LRSolver.
Definition: slr.h:367
~SmallMatrix()
Definition: slr.h:236
a collection of vectors, usually handled at once.
Definition: slr.h:189
ergo_real * cmo
the MO coefficients.
Definition: slr.h:328
Definition of the main floating-point datatype used; the ergo_real type.
VarVector & operator=(const VarVectorProxyOp< false, true > &proxy)
Definition: slr.h:148
unsigned onDisk
valid representation on disk
Definition: slr.h:68
ergo_real xTimesRHS
Definition: slr.h:361
ergo_real getFreq(int i) const
Definition: slr.h:396
const RowProxy operator[](int i)
Definition: slr.h:237
VarVector(int nbast, int nocc, const ergo_real *full_mat)
Creates a vector from a full matrix.
Definition: slr.h:82
ergo_real * toprow
Definition: slr.h:228
void print(const char *comment=NULL)
Definition: slr.h:107
ergo_real frequency
frequency for which the SOE is to be solved.
Definition: slr.h:338
~VarVector()
Definition: slr.h:87
SmallMatrix(int sz)
Definition: slr.h:235
ergo_real * x() const
return the X part of the vector.
Definition: slr.h:94
a class implementing dynamic resized two dimensional arrays.
Definition: slr.h:223
char * fName
Present in secondary storage (i.e.
Definition: slr.h:65
ergo_real * transMoms2
most recent SQUARED transition moments.
Definition: slr.h:369
VarVector rhs
RHS of the SOE.
Definition: slr.h:339
int maxSubspaceSize
current subspace size limit.
Definition: slr.h:283
Abstract interface to a one electron operator.
Definition: slr.h:216
int nsize
Definition: slr.h:225
void setSize(int n)
Definition: slr.h:97
static const char * tmpdir
Definition: slr.h:211
int nStates
number of excited states to compute
Definition: slr.h:370
ergo_real convThreshold
iterative method convergence threshold
Definition: slr.h:282
virtual ergo_real getPreconditionerShift(int i) const
returns the preconditioning shift.
Definition: slr.h:388
int subspaceSize
current subspace size
Definition: slr.h:287
ergo_real * fdiag
the eigenvalues of the Fock matrix.
Definition: slr.h:326
SmallMatrix sSub
S[2] matrix projected onto subspace.
Definition: slr.h:289
int nConverged
number of already converged eigenvalues
Definition: slr.h:371
VarVector e2diag
approximation to the diagonal of E2 operator
Definition: slr.h:286
bool getDiskMode() const
Definition: slr.h:205
bool diskMode
Definition: slr.h:195
VarVector & operator=(const VarVector &b)
Definition: slr.h:120
ergo_real getTransitionMoment2(int i) const
Definition: slr.h:400
SmallMatrix eSub
E[2] matrix projected onto subspace.
Definition: slr.h:288
VarVector()
Definition: slr.h:79
int nvar
nvar := nocc*nvirt.
Definition: slr.h:67
virtual ergo_real getPreconditionerShift(int) const
returns the preconditioning shift.
Definition: slr.h:351
const ergo_real & operator[](int i) const
Definition: slr.h:113
ergo_real * v
vector coefficients
Definition: slr.h:63
VarVectorCollection vects
base vectors
Definition: slr.h:317
int nbast
number of basis functions
Definition: slr.h:315
int nocc
number of occupied orbitals
Definition: slr.h:316
unsigned * ages
Definition: slr.h:191
virtual ~E2Evaluator()
Definition: slr.h:184
ergo_real * xSub
solution vector projected onto subspace
Definition: slr.h:290
ergo_real * y() const
returns the Y part.
Definition: slr.h:95
virtual ~EigenSolver()
Definition: slr.h:383
virtual ~LRSolver()
Definition: slr.h:253
VarVector * vecs
Definition: slr.h:190