Greens-code
A modular quantum transport code
hamiltonian.hpp
Go to the documentation of this file.
1 #ifndef HAMILTONIAN_CPP_H
2 #define HAMILTONIAN_CPP_H
3 
4 #include <vector>
5 
6 #include "shared_ptr.hpp"
7 #include "exceptions.hpp"
8 #include "input_file.hpp"
9 #include "points.hpp"
10 
11 class Rectangle;
12 class Matrix;
14 class pencil;
15 
16 class simple_Hamiltonian;
17 
45 public:
46 
47  typedef STD_TR1::shared_ptr<Hamiltonian> ref;
48  typedef STD_TR1::shared_ptr<const Hamiltonian> const_ref;
49 
50  Hamiltonian() {};
51  ~Hamiltonian() throw() {};
52 
53 
55  void create_H0(Matrix&,const geometry_const_Iterator&) const;
57  void create_HI(Matrix&,const geometry_const_Iterator&) const;
59  void create_HIt(Matrix& s, const geometry_const_Iterator& pos) const;
60 
62  size_t layers() const { return layers_();};
63 
65  int ny(const geometry_const_Iterator& pos) const;
67  int ny_layer(const geometry_const_Iterator& pos) const;
69  point_Positions::ref rxy(const geometry_const_Iterator& pos) const;
70 
72  double dx(const geometry_const_Iterator& pos) const;
74  double dy(const geometry_const_Iterator& pos) const;
76  double dphi(const geometry_const_Iterator& pos) const;
78  double width(const geometry_const_Iterator& pos) const;
79 
81  std::unique_ptr<pencil> get_pencil() const;
83  const std::string& pencil_name() const { return get_pencil_name_();};
84 
85  STD_TR1::shared_ptr<simple_Hamiltonian> get_simple_H() { return get_simple_H_();};
86  STD_TR1::shared_ptr<const simple_Hamiltonian> get_simple_H() const { return get_simple_H_();};
87 
88 private:
89 
90  mutable STD_TR1::shared_ptr<simple_Hamiltonian> mysimple;
91 
92  virtual std::unique_ptr<pencil> get_pencil_() const = 0;
93  virtual const std::string& get_pencil_name_() const = 0;
94 
95  virtual STD_TR1::shared_ptr<const simple_Hamiltonian> get_simple_H_() const;
96  virtual STD_TR1::shared_ptr<simple_Hamiltonian> get_simple_H_();
97 
98  virtual void createH0(Matrix&,const geometry_const_Iterator& pos) const = 0;
99  virtual void createHI(Matrix&,const geometry_const_Iterator& pos) const = 0;
100  virtual void createHIt(Matrix&,const geometry_const_Iterator& pos) const;
101 
102  virtual size_t layers_() const = 0;
103 
104  virtual int ny_(const geometry_const_Iterator& pos) const = 0;
105  virtual int ny_layer_(const geometry_const_Iterator& pos) const;
106  virtual point_Positions::ref rxy_(const geometry_const_Iterator& pos) const = 0;
107 
108  virtual double dx_(const geometry_const_Iterator& pos) const = 0;
109  virtual double dy_(const geometry_const_Iterator& pos) const = 0;
110  virtual double dphi_(const geometry_const_Iterator& pos) const { return 0.;};
111  virtual double width_(const geometry_const_Iterator& pos) const = 0;
112 };
113 
115 
132 public:
133 
134  typedef STD_TR1::shared_ptr<simple_Hamiltonian> ref;
135  typedef STD_TR1::shared_ptr<const simple_Hamiltonian> const_ref;
136 
138  ~simple_Hamiltonian() throw (){};
139 
141  size_t ny() const { return my_ny;};
143  size_t ny_layer(size_t layer) const { return ny_layer_sh_(layer);};
144  // ny_modes(?) includes the possibility that number of ny_
145 
147  point_Positions::ref rxy() const{ return rxy_sh_();};
148 
152 
154  void create_H0(Matrix& m) const { createperiodicH0(m);};
156  void create_HI(Matrix& m) const { createperiodicHI(m);};
158  void create_HIt(Matrix& m) const;
159 
161  void visit( simple_Hamiltonian_visitor& ) const;
162 
164  void set_new_ny(int ny);
165 
167  double dx() const { return dx_sh_();};
169  double dy() const { return dy_sh_();};
171  double width() const { return width_sh_();};
172 
173  bool do_generalized() const { return do_generalized_();};
175  virtual size_t slice_num() const {return 1;};
176 
178  virtual int lead_system_handler() const { return 0;};// 0 is default
179 
181  virtual int get_basistrans_size() const {return 1;};
182  virtual void fill_basistrans_mat(Matrix& m) const;
183  virtual size_t get_geometry_slice_num() const {return 1;};
184 
185 protected:
187  int my_ny;
188 
189 private:
190 
191  virtual bool do_generalized_() const { return false;};
192 
193  virtual void init_H_params() = 0;
194  virtual void init_ny_dependent_H_params() = 0;
195  void init();
196 
197  virtual STD_TR1::shared_ptr<const simple_Hamiltonian> get_simple_H_() const;
198  virtual STD_TR1::shared_ptr<simple_Hamiltonian> get_simple_H_();
199 
200  double dx_(const geometry_const_Iterator& pos) const { return dx_sh_();};
201  double dy_(const geometry_const_Iterator& pos) const { return dy_sh_();};
202  double width_(const geometry_const_Iterator& pos) const { return width_sh_();};
203 
204  virtual double dx_sh_() const = 0;
205  virtual double dy_sh_() const = 0;
206  virtual double width_sh_() const = 0;
207 
208  virtual void visit_(simple_Hamiltonian_visitor&) const;
209 
210  point_Positions::ref rxy_(const geometry_const_Iterator& pos) const {
211  return rxy_sh_();};
212  virtual point_Positions::ref rxy_sh_() const = 0;
213 
214  void createH0(Matrix& m,const geometry_const_Iterator&)
215  const { createperiodicH0(m);};
216  void createHI(Matrix& m,const geometry_const_Iterator&)
217  const { createperiodicHI(m);};
218  void createHIt(Matrix& m,const geometry_const_Iterator&)
219  const { createperiodicHIt(m);};
220 
221  virtual void createperiodicH0(Matrix&) const = 0;
222  virtual void createperiodicHI(Matrix&) const = 0;
223  virtual void createperiodicHIt(Matrix&) const;
224 
225  size_t layers_() const;
226  virtual size_t layers_sh_() const;
227 
228  int ny_(const geometry_const_Iterator&) const { return ny();};
229  int ny_layer_(const geometry_const_Iterator& p) const;
230  virtual int ny_layer_sh_(size_t) const;
231 };
232 
256 #endif
double width() const
width of the slice at given position
Definition: hamiltonian.hpp:171
virtual int get_basistrans_size() const
rule on how to transform the hamiltonian periodic unitcell into a 90 degree rotated basis ...
Definition: hamiltonian.hpp:181
std::unique_ptr< pencil > get_pencil() const
Return one instance of a pencil used to drawing this Hamiltonian.
Definition: hamiltonian.cpp:123
int ny(const geometry_const_Iterator &pos) const
Number of total transverse points at given position.
Definition: hamiltonian.cpp:213
int ny_layer(const geometry_const_Iterator &pos) const
Number of transverse points in specific layer at given position.
Definition: hamiltonian.cpp:219
Definition: pencils.hpp:61
The abstract base class for any Hamiltonian.
Definition: hamiltonian.hpp:44
double width(const geometry_const_Iterator &pos) const
width of the slice at given position
Definition: hamiltonian.cpp:231
Definition: iterators.hpp:13
void create_HI(Matrix &m) const
fill a Matrix with the block
Definition: hamiltonian.hpp:156
size_t ny_layer(size_t layer) const
Number of transverse points in specific layer at given position.
Definition: hamiltonian.hpp:143
double dphi(const geometry_const_Iterator &pos) const
directional change when going from one slice to the next, usually zero.
Definition: hamiltonian.cpp:249
double dx(const geometry_const_Iterator &pos) const
horizontal distance between adjacent sclices
Definition: hamiltonian.cpp:237
Definition: simpleHamiltonian_visitor.hpp:25
point_Positions::ref rxy(const geometry_const_Iterator &pos) const
point_Positions of the grid-points at given position
Definition: hamiltonian.cpp:225
Abstract class that defines a geomeetry.
Definition: rectangle.hpp:31
double dy() const
vertical distance when going from one slice to the next, usually zero.
Definition: hamiltonian.hpp:169
void create_H0(Matrix &, const geometry_const_Iterator &) const
fill a Matrix with the block
Definition: hamiltonian.cpp:144
void create_HI(Matrix &, const geometry_const_Iterator &) const
fill a Matrix with the block
Definition: hamiltonian.cpp:151
void create_H0(Matrix &m) const
fill a Matrix with the block
Definition: hamiltonian.hpp:154
An abstract base class supporting xml_file_reading of input parameters.
Definition: input_file.hpp:79
double dy(const geometry_const_Iterator &pos) const
vertical distance when going from one slice to the next, usually zero.
Definition: hamiltonian.cpp:243
Base Matrix class for access to 2D number grids.
Definition: matrix.hpp:82
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
virtual size_t slice_num() const
number of slices per hamiltonian
Definition: hamiltonian.hpp:175
size_t ny() const
Number of total transverse points at given position.
Definition: hamiltonian.hpp:141
size_t layers() const
Number of layers of this Hamiltonian.
Definition: hamiltonian.hpp:62
virtual int lead_system_handler() const
1=Tight binding, 2 = graphene - for modebasis
Definition: hamiltonian.hpp:178
int my_ny
If my_ny is calculated and not read from the input file ("ny"), the derived class can set it initiall...
Definition: hamiltonian.hpp:183
The abstract base class for any periodic Hamiltonian.
Definition: hamiltonian.hpp:131
const std::string & pencil_name() const
name of the pencil used to drawing this type of Hamiltonian.
Definition: hamiltonian.hpp:83
void create_HIt(Matrix &s, const geometry_const_Iterator &pos) const
fill a Matrix with the block
Definition: hamiltonian.cpp:128