Greens-code
A modular quantum transport code
rectangle.hpp
Go to the documentation of this file.
1 #ifndef ABSTRACT_RECTANGLE_HPP
2 #define ABSTRACT_RECTANGLE_HPP
3 
4 #include "parallel.hpp"
5 #include "iterators.hpp"
6 
7 class Hamiltonian;
9 class Interface;
10 class index_connector;
11 
12 typedef STD_TR1::shared_ptr<const Interface> Interface_const_ref;
13 
31 class Rectangle: public loadable_Object{
32 public:
33 
34  typedef STD_TR1::shared_ptr<Rectangle> ref;
35  typedef STD_TR1::shared_ptr<const Rectangle> const_ref;
36 
37  Rectangle() {};
38  virtual ~Rectangle() throw() {};
39 
42  return geometry_Iterator(get_dynamic_ref<Rectangle>());};
45  return geometry_Iterator(get_dynamic_ref<Rectangle>(), size());};
48  return geometry_Iterator(get_dynamic_ref<Rectangle>(), size()-1, true);};
49 
52  return geometry_const_Iterator(get_dynamic_ref<const Rectangle>());};
55  return geometry_const_Iterator(get_dynamic_ref<const Rectangle>(), size());};
58  return geometry_const_Iterator(get_dynamic_ref<const Rectangle>(), size()-1, true);};
59 
60  void create_H(Matrix& m) const;
61  void create_H(Matrix& m, const geometry_const_Iterator& pos, size_t nx) const;
62 
64  void visit( Rectangle_Visitor&) const;
65 
67  size_t layers() const {return layers_();};
69  size_t drawing_layers() const {return drawing_layers_();};
70 
72  size_t grid_points() const{ return grid_points_();};
74  size_t blocks() const{ if (leaf()) return 1; return size();};
76  const_ref block(size_t block_number) const;
78  Interface_const_ref interface(size_t block_number) const;
79 
81  STD_TR1::shared_ptr<index_connector> left(size_t index) const;
82  STD_TR1::shared_ptr<index_connector> right(size_t index) const;
83 
84 // total number of slices
85  size_t nx() const{ return nx(size());};
86 // total number of slices up to a given block index
87  size_t nx(size_t block_max) const{
88  if (block_max == geometry_Iterator::npos) return 0;
89  return nx_(block_max);};
90 
92  double dy(const geometry_const_Iterator& ci) const {return dy_(ci);};
94  double dx(const geometry_const_Iterator& ci) const {return dx_(ci);};
96  double dphi(const geometry_const_Iterator& ci) const {return dphi_(ci);};
97 
99  double rotation() const { return rotation_();};
100 
101  virtual bool leaf() const = 0;
102  virtual size_t size() const = 0;
103 
104  Rectangle::const_ref get_R(size_t pos) const;
105  Hamiltonian::const_ref get_H(size_t pos) const;
106 
107  Rectangle::ref get_R(size_t pos);
108  Hamiltonian::ref get_H(size_t pos);
109 
110 private:
111  const char* name() const { return "Abstract_Rectangle";}
112 
113  friend class geometry_Iterator;
114  friend class geometry_const_Iterator;
115 
116  virtual Interface_const_ref get_I(size_t pos) const {throw (E_Is_Leaf());};
117 
118  virtual Rectangle::const_ref am_no_leaf_get_R(size_t pos) const { throw (E_Is_Leaf());};
119  virtual Hamiltonian::const_ref am_leaf_get_H(size_t pos) const { throw (E_Is_No_Leaf());};
120 
121  virtual Rectangle::ref am_no_leaf_get_R(size_t pos) { throw (E_Is_Leaf());};
122  virtual Hamiltonian::ref am_leaf_get_H(size_t pos) { throw (E_Is_No_Leaf());};
123 
124  bool valid(size_t p) const {return p <= size();};
125 
126  virtual double dy_(const geometry_const_Iterator&) const = 0;
127  virtual double dx_(const geometry_const_Iterator&) const = 0;
128  virtual double dphi_(const geometry_const_Iterator&) const { return 0.;};
129 
130  virtual double rotation_() const { return 0.;};
131 
132  virtual void createH(Matrix& m) const;
133  virtual void createH(Matrix& m,
134  const geometry_const_Iterator& pos, size_t nx) const = 0;
135  virtual void RectangleVisitor( Rectangle_Visitor&) const = 0;
136 
137  virtual size_t grid_points_() const = 0;
138  virtual size_t nx_(size_t) const = 0;
139 
140  virtual size_t layers_() const = 0;
141  virtual size_t drawing_layers_() const = 0;
142 
143 };
144 
146 
147  size_t Ncore;
148  size_t whoami;
149 
150  std::vector<size_t> nx_sizes;
151  std::vector<size_t> N_sizes;
152  std::vector<size_t> N_offsets;
153  std::vector<complex*> state_starts;
154  std::vector<geometry_const_Iterator> positions;
155  size_t N;
156 
157  explicit
158  rect_distribution_info(MPI_Comm,
159  Rectangle::const_ref,
160  complex* state = NULL);
161  explicit
162  rect_distribution_info(Rectangle::const_ref, complex* state = NULL);
163 
164  void create_distributed_H_block( Matrix& m) const;
165  void create_distributed_H_supermatrix( Matrix& m) const;
166  void add_distributed_diagonal(std::complex<double>, Matrix& m) const;
167 
168 
169 private:
172 };
173 
174 #endif
double dx(const geometry_const_Iterator &ci) const
return offset in x direction to next slice
Definition: rectangle.hpp:94
Definition: rectangle.hpp:145
Definition: exceptions.hpp:167
size_t blocks() const
number of building blocks
Definition: rectangle.hpp:74
Definition: iterators.hpp:83
The abstract base class for any Hamiltonian.
Definition: hamiltonian.hpp:44
geometry_const_Iterator begin() const
Return a const iterator to the first rectangle slice.
Definition: rectangle.hpp:51
void visit(Rectangle_Visitor &) const
Perform a visit using a angle_Visitor.
Definition: rectangle.cpp:229
geometry_Iterator begin()
Return an iterator to the first rectangle slice.
Definition: rectangle.hpp:41
Definition: iterators.hpp:13
double dy(const geometry_const_Iterator &ci) const
return offset in y direction to next slice, usually zero
Definition: rectangle.hpp:92
Abstract class that defines a geomeetry.
Definition: rectangle.hpp:31
geometry_const_Iterator end() const
Return a const iterator to one behind the last slice.
Definition: rectangle.hpp:54
Definition: interface.hpp:21
size_t layers() const
number of physical layers
Definition: rectangle.hpp:67
Interface_const_ref interface(size_t block_number) const
const_ref to the interfaces between the blocks
Definition: rectangle.cpp:153
geometry_Iterator end()
Return an iterator to one behind the last slice.
Definition: rectangle.hpp:44
Definition: rectangle_visitor.hpp:21
An abstract base class supporting xml_file_reading of input parameters.
Definition: input_file.hpp:79
STD_TR1::shared_ptr< index_connector > left(size_t index) const
const_ref to the index connectors of interfaces between blocks
Definition: rectangle.cpp:164
size_t drawing_layers() const
number of drawing layers of the Hamiltonians
Definition: rectangle.hpp:69
double rotation() const
return total rotation of rectangle
Definition: rectangle.hpp:99
Abstract base class describing the interface between adjacent Rectangles.
Definition: interface.hpp:104
Base Matrix class for access to 2D number grids.
Definition: matrix.hpp:82
Definition: state.hpp:24
geometry_const_Iterator rbegin() const
Return a const iterator to the last slice.
Definition: rectangle.hpp:57
Definition: exceptions.hpp:173
double dphi(const geometry_const_Iterator &ci) const
return rotation change to next slice
Definition: rectangle.hpp:96
geometry_Iterator rbegin()
Return an iterator to the last slice.
Definition: rectangle.hpp:47
const_ref block(size_t block_number) const
const_ref to building block (is ref to self if no such block there
Definition: rectangle.cpp:141
size_t grid_points() const
total number of grid points
Definition: rectangle.hpp:72