Greens-code
A modular quantum transport code
topologic_insulator.hpp
Go to the documentation of this file.
1 #ifndef TOPOLOGIC_INSULATOR_HPP
2 #define TOPOLOGIC_INSULATOR_HPP
3 
4 #include "pencils.hpp"
5 #include "hamiltonian.hpp"
7 
25 {
26 public:
27  topo_insulator(){};
28  ~topo_insulator() throw() {};
29 private:
30  pencil::ref get_pencil_() const;
31  const std::string& get_pencil_name_() const;
32 
33  double dx_sh_() const;
34  double dy_sh_() const;
35  double width_sh_() const;
36  point_Positions::ref rxy_sh_() const;
38  size_t layers_() const {return 2;}
39  int ny_layer_sh_(size_t) const {return ny()/2;}
40  void createperiodicH0(Matrix&) const;
41  void createperiodicHI(Matrix&) const;
42 
43  static const double hbar;
44  //double e_site;
45  double m_eff;
46  double dx,dy;
47  double alpha,beta,gamma,U;
48  int compl_conj,cylinder;
49  double prevent_degeneracy;
50 
51  const char* name() const { return "Topological_insulator";}
52 
53  void init_H_params();
54  void init_ny_dependent_H_params(){};
55 };
56 
65 {
66 public:
68  ~topo_insulator_bothspins() throw() {};
69  double deltay() { return dy; }
70 private:
71  pencil::ref get_pencil_() const;
72  const std::string& get_pencil_name_() const;
73 
74  double dx_sh_() const;
75  double dy_sh_() const;
76  double width_sh_() const;
77  point_Positions::ref rxy_sh_() const;
79  size_t layers_() const {return 4;};
80  int ny_layer_sh_(size_t) const { return ny()/4;};
81  // size_t ny_layer_(const geometry_const_iterator& pos) const {return ny/2;}
82 
83  void createperiodicH0(Matrix&) const;
84  void createperiodicHI(Matrix&) const;
85  static const double hbar;
86  //double e_site;
87  double sep;
88  double m_eff;
89  double dx,dy;
90  double delta;
91  double alpha,beta,gamma,U;
92  int cylinder;
93  double spin_degeneracy;
94  double gh_norm, ge_norm, g_parallel;
95  double omega,b_unit;
96 
97  const char* name() const { return "Topological_insulator_bothspins";}
98 
99  void init_H_params() ;
100  void init_ny_dependent_H_params(){};
101 };
102 
104 {
105 public:
108 private:
109  pencil::ref get_pencil_() const;
110  const std::string& get_pencil_name_() const;
111 
112  double dx_sh_() const;
113  double dy_sh_() const;
114  double width_sh_() const;
115  point_Positions::ref rxy_sh_() const;
117  size_t layers_() const {return 4;};
118  int ny_layer_sh_(size_t) const { return ny()/4;};
119  // size_t ny_layer_(const geometry_const_iterator& pos) const {return ny/2;}
120 
121  void createperiodicH0(Matrix&) const;
122  void createperiodicHI(Matrix&) const;
123  static const double hbar;
124  static const double q;
125  //double e_site;
126  double sep;
127  double m_eff;
128  double dx,dy;
129  double alpha,beta,gamma,U;
130  double leftlead_off,ny_lead,ny_cyl;
131  double B;
132  double Ax;
133  double Ay;
134  double force_leftlead_off,force_rightlead_off,force_ny_lead;
135  double spin_degeneracy;
136  double gh_norm, ge_norm, g_parallel, delta;
137  int cylinder;
138 
139 
140  const char* name() const { return "Topological_insulator_bothspins_vectorpot";}
141 
142  void init_H_params();
143  void init_ny_dependent_H_params(){};
144 };
145 
146 
147 /***class for different vector potential...***/
149 {
150 public:
153 private:
154  pencil::ref get_pencil_() const;
155  const std::string& get_pencil_name_() const;
156 
157  double dx_sh_() const;
158  double dy_sh_() const;
159  double width_sh_() const;
160  point_Positions::ref rxy_sh_() const;
162  size_t layers_() const {return 4;};
163  int ny_layer_sh_(size_t) const { return ny()/4;};
164  // size_t ny_layer_(const geometry_const_iterator& pos) const {return ny/2;}
165 
166  void createperiodicH0(Matrix&) const;
167  void createperiodicHI(Matrix&) const;
168  static const double hbar;
169  static const double q;
170  static const double BohrMagneton;
171  //double e_site;
172  double sep;
173  double m_eff;
174  double dx,dy;
175  double gE,gH,Delta;
176  double alpha,beta,gamma,U;
177  double leftlead_off,ny_lead,ny_cyl;
178  double B;
179  double Ax(int i, int j) const;
180  double Ay(int i, int j) const;
181  double force_leftlead_off,force_rightlead_off,force_ny_lead;
182  int cylinder;
183 
184 
185  const char* name() const { return "Topological_insulator_bothspins_vectorpot1";}
186 
187  void init_H_params();
188  void init_ny_dependent_H_params(){};
189 };
190 
191 struct pencil_TI{
192  explicit pencil_TI( int number_of_layers): layer_number(number_of_layers){};
193 
194  static const std::string& name() { return name_;};
195  void update(const geometry_const_Iterator&){};
196 
197  void update_at_slice() const {};
198 
199  void init_params( const loadable_Object::const_ref& );
200 
202  bool should_draw( int point_layer,
203  int drawing_layer) const;
204 
205  size_t number_of_drawing_layers() const;
206 
207 
208  double range_x() const {return dx;};
209  double range_y() const {return dy;};
210  complex get_value( const complex v, const double d_x, const double d_y, const size_t pos) const {
211  //return std::max(dy-fabs(d_y),0.) * std::max(dy-fabs(d_y),0.) * std::max(dx-fabs(d_x),0.)* std::max(dx-fabs(d_x),0.) * d_dxdy * d_dxdy * abs(v) * abs(v);
212  return std::max(dy-fabs(d_y),0.) * std::max(dx-fabs(d_x),0.)* d_dxdy *d_dxdy * abs(v) * abs(v); //changed!!!
213  };
214 
215 private:
216  int layer_number;
217 
218  double dx;
219  double dy;
220  int separate_layers;
221  double d_dxdy;
222  static const std::string name_;
223 };
224 
226 public:
227 
229  ~general_cylindrical_magnetic() throw() {}
230 
231 private:
232 
233  complex bpar;
234 
235  mutable point_Positions::ref rxy;
236  mutable double bx;
237  mutable double y0;
238  int ny_cyl;
239 
240  const char* name() const {return "general_cylindrical_Magnetic";};
241 
242  void init_Decorator();
243 
244  void prae_create_H0() const;
245  void post_create_H0() const;
246  void prae_create_HI() const;
247  void post_create_HI() const;
248  void prae_create_HIt() const;
249  void post_create_HIt() const;
250 
251  void prae_create() const;
252 
253  virtual void Inserting(row r, column c, complex v) const;
254  virtual void Adding(row r, column c, complex v) const;
255 };
256 
257 #endif
Definition: topologic_insulator.hpp:191
Definition: topologic_insulator.hpp:103
Definition: iterators.hpp:13
Wrap contained geometry together with periodic boundary conditions.
Definition: complicated_rectangle.hpp:101
double dy() const
vertical distance when going from one slice to the next, usually zero.
Definition: hamiltonian.hpp:169
Definition: topologic_insulator.hpp:148
Definition of abstract base class Hamiltonian_Decorator and simple_Hamiltonian_Decorator.
Single-spin Hamiltonian describing a topological insulator in an effective 2-band Kane model Paramete...
Definition: topologic_insulator.hpp:24
Base Matrix class for access to 2D number grids.
Definition: matrix.hpp:82
Definition: topologic_insulator.hpp:225
double dx() const
horizontal distance between adjacent sclices
Definition: hamiltonian.hpp:167
point_Positions::ref rxy() const
point_Positions of the grid-points at given position
Definition: hamiltonian.hpp:147
size_t ny() const
Number of total transverse points at given position.
Definition: hamiltonian.hpp:141
Definition: hamiltonian_decorator.hpp:13
Extended description of a Topological_insulator explicitly including both spin-parts Parameters: same...
Definition: topologic_insulator.hpp:64
The abstract base class for any periodic Hamiltonian.
Definition: hamiltonian.hpp:131
Definitions of abstract Hamiltonian base class.