Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

QuadTreeNodeNM.h
Go to the documentation of this file.
1 
32 #pragma once
33 
34 #include <ogdf/basic/Graph.h>
35 #include <ogdf/basic/List.h>
36 #include <ogdf/basic/geometry.h>
38 
39 #include <complex>
40 
41 namespace ogdf {
42 namespace energybased {
43 namespace fmmm {
44 
49  friend std::ostream& operator<<(std::ostream&, const QuadTreeNodeNM&);
50 
52  friend std::istream& operator>>(std::istream&, QuadTreeNodeNM&);
53 
54 public:
55  QuadTreeNodeNM();
56  ~QuadTreeNodeNM();
57 
58  void set_Sm_level(int level) { Sm_level = level; }
59 
61 
62  void set_Sm_boxlength(double len) { Sm_boxlength = len; }
63 
64  void set_x_List_ptr(List<ParticleInfo>* x_ptr) { L_x_ptr = x_ptr; }
65 
66  void set_y_List_ptr(List<ParticleInfo>* y_ptr) { L_y_ptr = y_ptr; }
67 
69 
70  void set_Sm_center(std::complex<double> c) { Sm_center = c; }
71 
73 
75 
76  node pop_contained_nodes() { return contained_nodes.popFrontRet(); }
77 
78  bool contained_nodes_empty() { return contained_nodes.empty(); }
79 
80  void set_I(List<QuadTreeNodeNM*>& list) { I = list; }
81 
82  void set_D1(List<QuadTreeNodeNM*>& list) { D1 = list; }
83 
84  void set_D2(List<QuadTreeNodeNM*>& list) { D2 = list; }
85 
86  void set_M(List<QuadTreeNodeNM*>& list) { M = list; }
87 
89  void set_locale_exp(Array<std::complex<double>>& local, int precision) {
90  int i;
91  LE = new std::complex<double>[precision + 1];
92  for (i = 0; i <= precision; i++) {
93  LE[i] = local[i];
94  }
95  }
96 
98  void set_multipole_exp(Array<std::complex<double>>& multi, int precision) {
99  int i;
100  ME = new std::complex<double>[precision + 1];
101  for (i = 0; i <= precision; i++) {
102  ME[i] = multi[i];
103  }
104  }
105 
107  void replace_multipole_exp(Array<std::complex<double>>& multi, int precision) {
108  int i;
109  for (i = 0; i <= precision; i++) {
110  ME[i] = multi[i];
111  }
112  }
113 
115 
117 
119 
121 
123 
124  bool is_root() { return father_ptr == nullptr; }
125 
126  bool is_leaf() {
127  return child_lt_ptr == nullptr && child_rt_ptr == nullptr && child_lb_ptr == nullptr
128  && child_rb_ptr == nullptr;
129  }
130 
131  bool child_lt_exists() { return child_lt_ptr != nullptr; }
132 
133  bool child_rt_exists() { return child_rt_ptr != nullptr; }
134 
135  bool child_lb_exists() { return child_lb_ptr != nullptr; }
136 
137  bool child_rb_exists() { return child_rb_ptr != nullptr; }
138 
139  int get_Sm_level() const { return Sm_level; }
140 
142 
143  double get_Sm_boxlength() const { return Sm_boxlength; }
144 
146 
148 
150 
151  std::complex<double> get_Sm_center() const { return Sm_center; }
152 
153  std::complex<double>* get_local_exp() const { return LE; }
154 
155  std::complex<double>* get_multipole_exp() const { return ME; }
156 
157  void get_contained_nodes(List<node>& list) const { list = contained_nodes; }
158 
159  void get_I(List<QuadTreeNodeNM*>& list) const { list = I; }
160 
161  void get_D1(List<QuadTreeNodeNM*>& list) const { list = D1; }
162 
163  void get_D2(List<QuadTreeNodeNM*>& list) const { list = D2; }
164 
165  void get_M(List<QuadTreeNodeNM*>& list) const { list = M; }
166 
168 
170 
172 
174 
176 
177 private:
178  int Sm_level;
180  double Sm_boxlength;
186  std::complex<double> Sm_center;
188  std::complex<double>* ME;
189  std::complex<double>* LE;
203 };
204 
205 }
206 }
207 }
ogdf::energybased::fmmm::QuadTreeNodeNM::Sm_center
std::complex< double > Sm_center
center of the small cell
Definition: QuadTreeNodeNM.h:187
ogdf::energybased::fmmm::QuadTreeNodeNM::get_multipole_exp
std::complex< double > * get_multipole_exp() const
Definition: QuadTreeNodeNM.h:155
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::energybased::fmmm::QuadTreeNodeNM::L_x_ptr
List< ParticleInfo > * L_x_ptr
points to the lists that contain each Particle of G with its x(y)coordinate in increasing order
Definition: QuadTreeNodeNM.h:181
ogdf::energybased::fmmm::QuadTreeNodeNM::replace_multipole_exp
void replace_multipole_exp(Array< std::complex< double >> &multi, int precision)
ME[i] is set to multi[i] for i = 0 to precision and no space for LE is reserved.
Definition: QuadTreeNodeNM.h:107
ogdf::energybased::fmmm::QuadTreeNodeNM::set_child_rb_ptr
void set_child_rb_ptr(QuadTreeNodeNM *c)
Definition: QuadTreeNodeNM.h:122
ogdf::energybased::fmmm::QuadTreeNodeNM::pushBack_contained_nodes
void pushBack_contained_nodes(node v)
Definition: QuadTreeNodeNM.h:74
ogdf::energybased::fmmm::QuadTreeNodeNM::set_Sm_level
void set_Sm_level(int level)
Definition: QuadTreeNodeNM.h:58
Graph.h
Includes declaration of graph class.
ogdf::GenericPoint< double >
ogdf::energybased::fmmm::QuadTreeNodeNM::get_father_ptr
QuadTreeNodeNM * get_father_ptr() const
Definition: QuadTreeNodeNM.h:167
ogdf::energybased::fmmm::QuadTreeNodeNM::child_lt_exists
bool child_lt_exists()
Definition: QuadTreeNodeNM.h:131
ogdf::energybased::fmmm::QuadTreeNodeNM::set_Sm_downleftcorner
void set_Sm_downleftcorner(DPoint dlc)
Definition: QuadTreeNodeNM.h:60
geometry.h
Declaration of classes GenericPoint, GenericPolyline, GenericLine, GenericSegment,...
ogdf::energybased::fmmm::QuadTreeNodeNM::get_child_rt_ptr
QuadTreeNodeNM * get_child_rt_ptr() const
Definition: QuadTreeNodeNM.h:171
ogdf::energybased::fmmm::QuadTreeNodeNM::set_multipole_exp
void set_multipole_exp(Array< std::complex< double >> &multi, int precision)
ME[i] is set to multi[i] for i = 0 to precision and space for LE is reserved.
Definition: QuadTreeNodeNM.h:98
ogdf::energybased::fmmm::QuadTreeNodeNM::child_rb_ptr
QuadTreeNodeNM * child_rb_ptr
points to right bottom child
Definition: QuadTreeNodeNM.h:202
ogdf::energybased::fmmm::QuadTreeNodeNM::set_x_List_ptr
void set_x_List_ptr(List< ParticleInfo > *x_ptr)
Definition: QuadTreeNodeNM.h:64
ogdf::energybased::fmmm::QuadTreeNodeNM::ME
std::complex< double > * ME
Multipole Expansion terms.
Definition: QuadTreeNodeNM.h:188
ogdf::energybased::fmmm::QuadTreeNodeNM::get_contained_nodes
void get_contained_nodes(List< node > &list) const
Definition: QuadTreeNodeNM.h:157
ogdf::energybased::fmmm::QuadTreeNodeNM::get_Sm_level
int get_Sm_level() const
Definition: QuadTreeNodeNM.h:139
ogdf::energybased::fmmm::QuadTreeNodeNM::pop_contained_nodes
node pop_contained_nodes()
Definition: QuadTreeNodeNM.h:76
ogdf::energybased::fmmm::QuadTreeNodeNM::operator<<
friend std::ostream & operator<<(std::ostream &, const QuadTreeNodeNM &)
Outputstream for QuadTreeNodeNM.
ogdf::energybased::fmmm::QuadTreeNodeNM::QuadTreeNodeNM
QuadTreeNodeNM()
constructor
ogdf::energybased::fmmm::QuadTreeNodeNM::Sm_downleftcorner
DPoint Sm_downleftcorner
coords of the down left corner of the small cell
Definition: QuadTreeNodeNM.h:179
ogdf::energybased::fmmm::QuadTreeNodeNM::set_child_rt_ptr
void set_child_rt_ptr(QuadTreeNodeNM *c)
Definition: QuadTreeNodeNM.h:118
ogdf::energybased::fmmm::QuadTreeNodeNM::is_root
bool is_root()
Definition: QuadTreeNodeNM.h:124
ogdf::energybased::fmmm::QuadTreeNodeNM::LE
std::complex< double > * LE
Locale Expansion terms.
Definition: QuadTreeNodeNM.h:189
ogdf::energybased::fmmm::QuadTreeNodeNM::child_lb_exists
bool child_lb_exists()
Definition: QuadTreeNodeNM.h:135
ogdf::energybased::fmmm::QuadTreeNodeNM::Sm_level
int Sm_level
level of the small cell
Definition: QuadTreeNodeNM.h:178
ogdf::energybased::fmmm::QuadTreeNodeNM::set_Sm_boxlength
void set_Sm_boxlength(double len)
Definition: QuadTreeNodeNM.h:62
ogdf::energybased::fmmm::QuadTreeNodeNM::get_D2
void get_D2(List< QuadTreeNodeNM * > &list) const
Definition: QuadTreeNodeNM.h:163
ogdf::energybased::fmmm::QuadTreeNodeNM::get_Sm_center
std::complex< double > get_Sm_center() const
Definition: QuadTreeNodeNM.h:151
ogdf::energybased::fmmm::QuadTreeNodeNM::father_ptr
QuadTreeNodeNM * father_ptr
points to the father node
Definition: QuadTreeNodeNM.h:198
ogdf::energybased::fmmm::QuadTreeNodeNM::set_locale_exp
void set_locale_exp(Array< std::complex< double >> &local, int precision)
LE[i] is set to local[i] for i = 0 to precision and space for LE is reserved.
Definition: QuadTreeNodeNM.h:89
ogdf::energybased::fmmm::QuadTreeNodeNM::D1
List< QuadTreeNodeNM * > D1
Definition: QuadTreeNodeNM.h:194
ogdf::energybased::fmmm::QuadTreeNodeNM::get_y_List_ptr
List< ParticleInfo > * get_y_List_ptr()
Definition: QuadTreeNodeNM.h:147
ParticleInfo.h
Declaration of class ParticleInfo.
ogdf::energybased::fmmm::QuadTreeNodeNM::get_Sm_boxlength
double get_Sm_boxlength() const
Definition: QuadTreeNodeNM.h:143
ogdf::energybased::fmmm::QuadTreeNodeNM::contained_nodes_empty
bool contained_nodes_empty()
Definition: QuadTreeNodeNM.h:78
ogdf::energybased::fmmm::QuadTreeNodeNM::I
List< QuadTreeNodeNM * > I
the list of min.
Definition: QuadTreeNodeNM.h:193
ogdf::energybased::fmmm::QuadTreeNodeNM::set_contained_nodes
void set_contained_nodes(List< node > &list)
Definition: QuadTreeNodeNM.h:72
ogdf::energybased::fmmm::QuadTreeNodeNM::child_rb_exists
bool child_rb_exists()
Definition: QuadTreeNodeNM.h:137
ogdf::Array
The parameterized class Array implements dynamic arrays of type E.
Definition: Array.h:214
ogdf::energybased::fmmm::QuadTreeNodeNM::M
List< QuadTreeNodeNM * > M
list of nodes with multipole force contribution like in DIM2
Definition: QuadTreeNodeNM.h:196
ogdf::energybased::fmmm::QuadTreeNodeNM::is_leaf
bool is_leaf()
Definition: QuadTreeNodeNM.h:126
ogdf::energybased::fmmm::QuadTreeNodeNM::Sm_boxlength
double Sm_boxlength
length of small cell
Definition: QuadTreeNodeNM.h:180
ogdf::energybased::fmmm::QuadTreeNodeNM::set_I
void set_I(List< QuadTreeNodeNM * > &list)
Definition: QuadTreeNodeNM.h:80
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::energybased::fmmm::QuadTreeNodeNM
Helping data structure that stores the information needed to represent a node of the reduced quad tre...
Definition: QuadTreeNodeNM.h:47
ogdf::energybased::fmmm::QuadTreeNodeNM::set_particlenumber_in_subtree
void set_particlenumber_in_subtree(int p)
Definition: QuadTreeNodeNM.h:68
ogdf::energybased::fmmm::QuadTreeNodeNM::set_child_lt_ptr
void set_child_lt_ptr(QuadTreeNodeNM *c)
Definition: QuadTreeNodeNM.h:116
ogdf::energybased::fmmm::QuadTreeNodeNM::get_local_exp
std::complex< double > * get_local_exp() const
Definition: QuadTreeNodeNM.h:153
ogdf::energybased::fmmm::QuadTreeNodeNM::get_child_lt_ptr
QuadTreeNodeNM * get_child_lt_ptr() const
Definition: QuadTreeNodeNM.h:169
ogdf::energybased::fmmm::QuadTreeNodeNM::contained_nodes
List< node > contained_nodes
list of nodes of G that are contained in this QuadTreeNode (emty if it is not a leave of the ModQuadT...
Definition: QuadTreeNodeNM.h:190
ogdf::energybased::fmmm::QuadTreeNodeNM::~QuadTreeNodeNM
~QuadTreeNodeNM()
destructor
ogdf::energybased::fmmm::QuadTreeNodeNM::operator>>
friend std::istream & operator>>(std::istream &, QuadTreeNodeNM &)
Inputstream for QuadTreeNodeNM.
ogdf::energybased::fmmm::QuadTreeNodeNM::get_I
void get_I(List< QuadTreeNodeNM * > &list) const
Definition: QuadTreeNodeNM.h:159
ogdf::energybased::fmmm::QuadTreeNodeNM::subtreeparticlenumber
int subtreeparticlenumber
the number of particles in the subtree rooted at this node
Definition: QuadTreeNodeNM.h:185
ogdf::energybased::fmmm::QuadTreeNodeNM::child_rt_exists
bool child_rt_exists()
Definition: QuadTreeNodeNM.h:133
ogdf::energybased::fmmm::QuadTreeNodeNM::get_M
void get_M(List< QuadTreeNodeNM * > &list) const
Definition: QuadTreeNodeNM.h:165
ogdf::energybased::fmmm::QuadTreeNodeNM::get_x_List_ptr
List< ParticleInfo > * get_x_List_ptr()
Definition: QuadTreeNodeNM.h:145
ogdf::energybased::fmmm::QuadTreeNodeNM::D2
List< QuadTreeNodeNM * > D2
list of neighbouring(=D1) and not adjacent(=D2) leaves for direct force calculation in DIM2
Definition: QuadTreeNodeNM.h:194
ogdf::energybased::fmmm::QuadTreeNodeNM::set_Sm_center
void set_Sm_center(std::complex< double > c)
Definition: QuadTreeNodeNM.h:70
ogdf::energybased::fmmm::QuadTreeNodeNM::get_child_lb_ptr
QuadTreeNodeNM * get_child_lb_ptr() const
Definition: QuadTreeNodeNM.h:173
ogdf::energybased::fmmm::QuadTreeNodeNM::get_D1
void get_D1(List< QuadTreeNodeNM * > &list) const
Definition: QuadTreeNodeNM.h:161
ogdf::energybased::fmmm::QuadTreeNodeNM::get_particlenumber_in_subtree
int get_particlenumber_in_subtree() const
Definition: QuadTreeNodeNM.h:149
ogdf::energybased::fmmm::QuadTreeNodeNM::child_rt_ptr
QuadTreeNodeNM * child_rt_ptr
points to right bottom child
Definition: QuadTreeNodeNM.h:200
ogdf::energybased::fmmm::QuadTreeNodeNM::child_lt_ptr
QuadTreeNodeNM * child_lt_ptr
points to left top child
Definition: QuadTreeNodeNM.h:199
List.h
Declaration of doubly linked lists and iterators.
ogdf::energybased::fmmm::QuadTreeNodeNM::set_D2
void set_D2(List< QuadTreeNodeNM * > &list)
Definition: QuadTreeNodeNM.h:84
ogdf::energybased::fmmm::QuadTreeNodeNM::child_lb_ptr
QuadTreeNodeNM * child_lb_ptr
points to left bottom child
Definition: QuadTreeNodeNM.h:201
ogdf::energybased::fmmm::QuadTreeNodeNM::set_y_List_ptr
void set_y_List_ptr(List< ParticleInfo > *y_ptr)
Definition: QuadTreeNodeNM.h:66
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::energybased::fmmm::QuadTreeNodeNM::get_Sm_downleftcorner
DPoint get_Sm_downleftcorner() const
Definition: QuadTreeNodeNM.h:141
ogdf::energybased::fmmm::QuadTreeNodeNM::L_y_ptr
List< ParticleInfo > * L_y_ptr
and a cross reference to the list_item in the list with the other coordinate
Definition: QuadTreeNodeNM.h:183
ogdf::energybased::fmmm::QuadTreeNodeNM::get_child_rb_ptr
QuadTreeNodeNM * get_child_rb_ptr() const
Definition: QuadTreeNodeNM.h:175
ogdf::energybased::fmmm::QuadTreeNodeNM::set_father_ptr
void set_father_ptr(QuadTreeNodeNM *f)
Definition: QuadTreeNodeNM.h:114
ogdf::energybased::fmmm::QuadTreeNodeNM::set_M
void set_M(List< QuadTreeNodeNM * > &list)
Definition: QuadTreeNodeNM.h:86
ogdf::energybased::fmmm::QuadTreeNodeNM::set_child_lb_ptr
void set_child_lb_ptr(QuadTreeNodeNM *c)
Definition: QuadTreeNodeNM.h:120
ogdf::energybased::fmmm::QuadTreeNodeNM::set_D1
void set_D1(List< QuadTreeNodeNM * > &list)
Definition: QuadTreeNodeNM.h:82