24 #ifndef COM_DAFER45_TBTK_TIME_EVOLVER 25 #define COM_DAFER45_TBTK_TIME_EVOLVER 91 const std::complex<double> getAmplitude(
int state,
const Index &index);
109 enum class DecayMode{None, Instantly, Interpolate, Custom};
112 void setDecayMode(DecayMode decayMode);
120 std::complex<double> **eigenVectorsMap
126 void setDecayHandler(DecayHandler *decayHandler);
130 int getCurrentTimeStep();
135 void setOrthogonalityCheckInterval(
int orthogonalityCheckInterval);
138 double getOrthogonalityError();
152 std::complex<double> *eigenVectors;
158 std::complex<double> **eigenVectorsMap;
164 int numberOfParticles;
168 bool particleNumberIsFixed;
174 DecayHandler *decayHandler;
192 static std::vector<TimeEvolver*> timeEvolvers;
197 static std::vector<DiagonalizationSolver*> dSolvers;
208 void onDiagonalizationFinished();
215 void updateOccupancy();
218 void decayInstantly();
221 void decayInterpolate();
225 double orthogonalityError;
229 int orthogonalityCheckInterval;
232 void calculateOrthogonalityError();
238 this->callback = callback;
242 dSolver.setMaxIterations(maxIterations);
246 this->numTimeSteps = numTimeSteps;
254 this->numberOfParticles = numberOfParticles;
258 return numberOfParticles;
262 this->particleNumberIsFixed = particleNumberIsFixed;
270 return eigenValues[state];
274 return occupancy[state];
277 inline const std::complex<double> TimeEvolver::getAmplitude(
281 return eigenVectorsMap[state][model->getBasisIndex(index)];
284 inline Model* TimeEvolver::getModel(){
288 inline void TimeEvolver::setDecayMode(DecayMode decayMode){
289 this->decayMode = decayMode;
292 inline void TimeEvolver::setDecayHandler(DecayHandler *decayHandler){
293 this->decayHandler = decayHandler;
296 inline int TimeEvolver::getCurrentTimeStep(){
297 return currentTimeStep;
300 inline void TimeEvolver::setOrthogonalityCheckInterval(
301 int orthogonalityCheckInterval
303 this->orthogonalityCheckInterval = orthogonalityCheckInterval;
306 inline double TimeEvolver::getOrthogonalityError(){
307 return orthogonalityError;
void setTimeStep(double dt)
Definition: TimeEvolver.h:249
Handles conversions between different units.
double getEigenValue(int state)
Definition: TimeEvolver.h:269
void fixParticleNumber(bool particleNumberIsFixed)
Definition: TimeEvolver.h:261
Definition: DiagonalizationSolver.h:36
int getNumberOfParticles()
Definition: TimeEvolver.h:257
Definition: TimeEvolver.h:35
TimeEvolver(TBTK::Model *model)
Definition: TimeEvolver.cpp:39
Solves a Model using diagonalization.
void setNumberOfParticles(int numberOfParticles)
Definition: TimeEvolver.h:253
void setMaxSCIterations(int maxIterations)
Definition: TimeEvolver.h:241
Definition: AbstractOperator.h:26
~TimeEvolver()
Definition: TimeEvolver.cpp:59
void setNumTimeSteps(int numTimeSteps)
Definition: TimeEvolver.h:245
DiagonalizationSolver * getDiagonalizationSolver()
Definition: TimeEvolver.h:265
double getOccupancy(int state)
Definition: TimeEvolver.h:273
void run()
Definition: TimeEvolver.cpp:81
void setCallback(bool(*callback)(TimeEvolver *timeEvolver))
Definition: TimeEvolver.h:235