TBTK
DiagonalizationSolver.h
Go to the documentation of this file.
1 /* Copyright 2016 Kristofer Björnson
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
23 #ifndef COM_DAFER45_TBTK_DIAGONALIZATION_SOLVER
24 #define COM_DAFER45_TBTK_DIAGONALIZATION_SOLVER
25 
26 #include "Model.h"
27 #include <complex>
28 
29 namespace TBTK{
30 
37 public:
40 
43 
45  void setModel(Model *model);
46 
49  void setSCCallback(
50  bool (*scCallback)(
51  DiagonalizationSolver *diagonalizationSolver
52  )
53  );
54 
56  void setMaxIterations(int maxIterations);
57 
61  void run();
62 
64  const double* getEigenValues();
65 
68  double* getEigenValuesRW();
69 
71  const std::complex<double>* getEigenVectors();
72 
75  std::complex<double>* getEigenVectorsRW();
76 
78  const double getEigenValue(int state);
79 
85  const std::complex<double> getAmplitude(int state, const Index &index);
86 
88  Model *getModel();
89 private:
91  Model *model;
92 
94  std::complex<double> *hamiltonian;
95 
97  double *eigenValues;
98 
100  std::complex<double> *eigenVectors;
101 
103  int maxIterations;
104 
107  bool (*scCallback)(DiagonalizationSolver *diagonalizationSolver);
108 
110  void init();
111 
113  void update();
114 
116  void solve();
117 };
118 
120  this->model = model;
121 }
122 
124  bool (*scCallback)(
125  DiagonalizationSolver *diagonalizationSolver
126  )
127 ){
128  this->scCallback = scCallback;
129 }
130 
131 inline void DiagonalizationSolver::setMaxIterations(int maxIterations){
132  this->maxIterations = maxIterations;
133 }
134 
136  return eigenValues;
137 }
138 
140  return eigenValues;
141 }
142 
143 inline const std::complex<double>* DiagonalizationSolver::getEigenVectors(){
144  return eigenVectors;
145 }
146 
147 inline std::complex<double>* DiagonalizationSolver::getEigenVectorsRW(){
148  return eigenVectors;
149 }
150 
151 inline const std::complex<double> DiagonalizationSolver::getAmplitude(
152  int state,
153  const Index &index
154 ){
155  return eigenVectors[model->getBasisSize()*state + model->getBasisIndex(index)];
156 }
157 
158 inline const double DiagonalizationSolver::getEigenValue(int state){
159  return eigenValues[state];
160 }
161 
163  return model;
164 }
165 
166 }; //End of namespace TBTK
167 
168 #endif
169 
std::complex< double > * getEigenVectorsRW()
Definition: DiagonalizationSolver.h:147
DiagonalizationSolver()
Definition: DiagonalizationSolver.cpp:30
void setModel(Model *model)
Definition: DiagonalizationSolver.h:119
Model Hamiltonian.
Definition: DiagonalizationSolver.h:36
~DiagonalizationSolver()
Definition: DiagonalizationSolver.cpp:41
const std::complex< double > * getEigenVectors()
Definition: DiagonalizationSolver.h:143
Model * getModel()
Definition: DiagonalizationSolver.h:162
const std::complex< double > getAmplitude(int state, const Index &index)
Definition: DiagonalizationSolver.h:151
const double getEigenValue(int state)
Definition: DiagonalizationSolver.h:158
Definition: Index.h:44
Definition: AbstractOperator.h:26
int getBasisSize()
Definition: Model.h:146
void setMaxIterations(int maxIterations)
Definition: DiagonalizationSolver.h:131
void run()
Definition: DiagonalizationSolver.cpp:50
void setSCCallback(bool(*scCallback)(DiagonalizationSolver *diagonalizationSolver))
Definition: DiagonalizationSolver.h:123
double * getEigenValuesRW()
Definition: DiagonalizationSolver.h:139
int getBasisIndex(Index index)
Definition: Model.h:150
const double * getEigenValues()
Definition: DiagonalizationSolver.h:135
Definition: Model.h:40