SOLIDstate
A C++ library for solid state physics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
QuantumDynamics.hpp
Go to the documentation of this file.
1 
11 #ifndef QUANTUMDYNAMICS_QUANTUMDYNAMICS_HPP
12 #define QUANTUMDYNAMICS_QUANTUMDYNAMICS_HPP
13 
14 #include <armadillo>
15 #include <string>
16 
17 #include "../QuantumSystem/QuantumSystem.hpp"
18 #include "../QuantumState/QuantumState.hpp"
19 #include "../Parameters/Parameters.hpp"
20 #include "../Hamiltonian/TermsEnabled.hpp"
21 #include "DynamicsSchedule.hpp"
24 
25 namespace solid
26 {
27 
39 template <template <typename> class T1, typename T2, typename T3>
41 {
42 
43 public:
52  void Create(
53  QuantumSystem<T1, T2> &qSystem,
54  QuantumState<T3> &initQuantumState,
55  DynamicsSchedule<arma::SpMat<T2>> &dynSchedule,
57  const std::string label = "rk4")
58  {
59  terms = qSystem.hamiltonian.termsEnabled;
60  quantumSystem = qSystem;
61  quantumState = initQuantumState;
62  param = qSystem.parameters;
63  dynamicsSchedule = dynSchedule;
64  measurementSchedule = mesSchedule;
66  }
67 
71  void Run();
72 
73 private:
77  void LoadParameters();
78 
82  void Propagate();
83 
87  void Measure();
88 
89  // TODO reorganize friend class, add getter setter methods
90 
91  template <template <typename> class G1, typename G2, typename G3>
92  friend class RK4;
93 
94  template <template <typename> class G1, typename G2, typename G3>
95  friend class AdiabaticSolver;
96 
97  template <template <typename> class G1, typename G2, typename G3>
98  friend class IQuantumDynamicSolver;
99 
100  double time;
108 };
109 
110 } // namespace solid
111 #endif
Runge–Kutta forth order method (RK4) for solving differentional equations.
Definition: RungeKutta4.hpp:35
void Create(QuantumSystem< T1, T2 > &qSystem, QuantumState< T3 > &initQuantumState, DynamicsSchedule< arma::SpMat< T2 >> &dynSchedule, MeasurementSchedule< T1, T2, T3 > &mesSchedule, const std::string label="rk4")
QuantumDynamics constructor.
Definition: QuantumDynamics.hpp:52
void Run()
Run the evolution.
Definition: QuantumDynamics.cpp:20
Schedule for the dynamics (uniform time step)
Definition: DynamicsSchedule.hpp:49
Quantum Dynamics class.
Definition: QuantumDynamics.hpp:40
Dynamics Schedule header.
Adiabatic Solver header.
Definition: AdiabaticSolver.hpp:38
Operator< T1, T2 > hamiltonian
container for matrixElements
Definition: QuantumSystem.hpp:50
QuantumSystem< T1, T2 > quantumSystem
Definition: QuantumDynamics.hpp:103
MeasurementSchedule< T1, T2, T3 > measurementSchedule
Definition: QuantumDynamics.hpp:106
Schedule for the measurment.
Definition: DynamicsSchedule.hpp:72
void Measure()
performs MeasurmentSchedule
Definition: QuantumDynamics.cpp:44
QuantumDynamicSolver interface header.
IQuantumDynamicSolver< T1, T2, T3 > * solver
Definition: QuantumDynamics.hpp:107
Terms enebled in Operator.
Definition: TermsEnabled.hpp:24
SolverSwitcher header.
Parameters< T2 > parameters
Parameters for hamiltonian.
Definition: QuantumSystem.hpp:55
TermsEnabled terms
Definition: QuantumDynamics.hpp:101
void LoadParameters()
Loads the parameters with respect to time.
Definition: QuantumDynamics.cpp:9
void Propagate()
Propagates the state.
Definition: QuantumDynamics.cpp:38
Quantum Dynamic Solver interface.
Definition: QuantumDynamicSolver.hpp:35
general purpouse class for solving quantum systems
Definition: QuantumSystem.hpp:39
double time
Definition: QuantumDynamics.hpp:100
static IQuantumDynamicSolver< T1, T2, T3 > * Switch(const std::string label)
Switch between IQuantumDynamicSolvers.
Definition: SolverSwitcher.hpp:44
DynamicsSchedule< arma::SpMat< T2 > > dynamicsSchedule
Definition: QuantumDynamics.hpp:105
Parameters< T2 > param
Definition: QuantumDynamics.hpp:104
QuantumState< T3 > quantumState
Definition: QuantumDynamics.hpp:102