1 #ifndef ABSTRACT_RECTANGLE_HPP 2 #define ABSTRACT_RECTANGLE_HPP 4 #include "parallel.hpp" 5 #include "iterators.hpp" 12 typedef STD_TR1::shared_ptr<const Interface> Interface_const_ref;
34 typedef STD_TR1::shared_ptr<Rectangle> ref;
35 typedef STD_TR1::shared_ptr<const Rectangle> const_ref;
60 void create_H(
Matrix& m)
const;
67 size_t layers()
const {
return layers_();};
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;
81 STD_TR1::shared_ptr<index_connector>
left(
size_t index)
const;
82 STD_TR1::shared_ptr<index_connector> right(
size_t index)
const;
85 size_t nx()
const{
return nx(size());};
87 size_t nx(
size_t block_max)
const{
88 if (block_max == geometry_Iterator::npos)
return 0;
89 return nx_(block_max);};
99 double rotation()
const {
return rotation_();};
101 virtual bool leaf()
const = 0;
102 virtual size_t size()
const = 0;
104 Rectangle::const_ref get_R(
size_t pos)
const;
105 Hamiltonian::const_ref get_H(
size_t pos)
const;
107 Rectangle::ref get_R(
size_t pos);
108 Hamiltonian::ref get_H(
size_t pos);
111 const char* name()
const {
return "Abstract_Rectangle";}
116 virtual Interface_const_ref get_I(
size_t pos)
const {
throw (
E_Is_Leaf());};
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());};
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());};
124 bool valid(
size_t p)
const {
return p <= size();};
130 virtual double rotation_()
const {
return 0.;};
132 virtual void createH(
Matrix& m)
const;
133 virtual void createH(
Matrix& m,
137 virtual size_t grid_points_()
const = 0;
138 virtual size_t nx_(
size_t)
const = 0;
140 virtual size_t layers_()
const = 0;
141 virtual size_t drawing_layers_()
const = 0;
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;
159 Rectangle::const_ref,
160 complex*
state = NULL);
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;
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
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