QNANO
Eigen_Band_Structure_Calculator.h
1 #ifndef QNANO_NEW_EIGEN_BAND_STRUCTURE_CALCULATOR_DEFINED_H
2 #define QNANO_NEW_EIGEN_BAND_STRUCTURE_CALCULATOR_DEFINED_H
3 
4 #include "tightbinding/TB_Model_Slater_Koster.h"
5 #include "eigen/Eigen_Diagonalize_Sparse_Matrix.h"
6 #include "eigen/Eigenvector_Printer_Eigen.h"
7 #include "structure/Band_Structure.h"
8 
10 public:
11 
12  static void calculate(Band_Structure &bs, TB_Model_Slater_Koster &model){
13  bool bck_evaluate_at_k=model.evaluate_at_k;
14  model.evaluate_at_k=true;
15  Vec3d bck_kvector=model.kvector;
16 
17 
18  Lattice &lat=model.parlist[0].lat;
19  int DIM=model.get_DIM();
20  bs.set_nr_bands(DIM);
21  bs.complain_if_k_not_set_up();
22 
23 
24  Vec3d scale_k=Vec3d(1.,1.,1.); //param_map.get_as_Vec3d("scale_k",Vec3d(1.,1.,1.));
25 
26  for(size_t i=0; i<bs.get_nr_k(); i++){
27  Vec3d kvec=bs.get_k(i,lat);
28  model.kvector=Vec3d(kvec[0]*scale_k[0], kvec[1]*scale_k[1], kvec[2]*scale_k[2]);
29 
30  Eigen_Diagonalize_Sparse_Matrix solver(&model);
31  solver.solve();
32  Eigenvector_Printer_Eigen EVprinter(&solver.solver,&model);
33  EVprinter.target=-10000;
34  for(int n=0; n<EVprinter.get_n_converged(); n++){
35  bs.energy[n][i]=EVprinter.get_eigenvalue(n);
36  }
37  }
38 
39  model.evaluate_at_k=bck_evaluate_at_k;
40  model.kvector=bck_kvector;
41 
42  }
43 };
44 #endif
Class to store positions and to handle operations on 3d vectors.
Definition: Vec3d.h:9
Vec3d get_k(int i, const Lattice &lat) const
get k-vector; convert from lattice units to 1/nm using the specified lattice
Definition: K_Point_List.cc:3
Definition: Eigen_Diagonalize_Sparse_Matrix.h:8
Definition: Band_Structure.h:6
Definition: Lattice.h:36
Definition: Eigenvector_Printer_Eigen.h:8
Definition: TB_Model_Slater_Koster.h:19
Definition: Eigen_Band_Structure_Calculator.h:9