25 for (std::list<Octree*>::iterator i = nodes.begin(), end = nodes.end(); i != end; ++i) {
26 if((*i)->isLeafNode())
27 leaf_nodes.push_back(*i);
36 for (std::list<Octree*>::iterator i = nodes.begin(), end = nodes.end(); i != end; ++i) {
37 if((*i)->isRootNode())
38 root_nodes.push_back(*i);
46 for (
unsigned level=0; level <=
max_level; level++) {
47 level_nodes[level].clear();
52 for (std::list<Octree*>::iterator j = nodes.begin(), end = nodes.end(); j != end; ++j) {
53 int level = (*j)->get_level();
54 level_nodes[level].push_back(*j);
60 void create_node(
int blocknumber,
double xmin,
double xmax,
double ymin,
double ymax,
double zmin,
double zmax,
int level,
NodeBc **bc) {
63 Octree r(xmin,xmax,ymin,ymax,zmin,zmax,level);
75 for(
int i=0;i<3;i++) {
76 for(
int j=0;j<2;j++) {
77 root->
bc[i][j] = bc[i][j];
81 root->
number = blocknumber;
92 for (
unsigned level=0; level <=
max_level; level++) {
95 for (std::list<Octree*>::iterator iter = level_nodes[level].begin(), end = level_nodes[level].end(); iter != end; ++iter) {
97 if(!((*iter)->isLeafNode())) {
100 for(
int k=0; k<2; k++) {
101 for(
int j=0; j<2; j++) {
102 for(
int i=0; i<2; i++) {
123 if((*iter)->neighbour[
XDIR][
LEFT] != NULL) (*iter)->get_child_at(i, j, k)->neighbour[
XDIR][
LEFT] = (*iter)->neighbour[
XDIR][
LEFT]->get_child_at(i+1, j, k);
126 if((*iter)->neighbour[
YDIR][
LEFT] != NULL) (*iter)->get_child_at(i, j, k)->neighbour[
YDIR][
LEFT] = (*iter)->neighbour[
YDIR][
LEFT]->get_child_at(i, j+1, k);
129 if((*iter)->neighbour[
ZDIR][
LEFT] != NULL) (*iter)->get_child_at(i, j, k)->neighbour[
ZDIR][
LEFT] = (*iter)->neighbour[
ZDIR][
LEFT]->get_child_at(i, j, k+1);
132 if((*iter)->neighbour[
XDIR][
RIGHT] != NULL) (*iter)->get_child_at(i, j, k)->neighbour[
XDIR][
RIGHT] = (*iter)->neighbour[
XDIR][
RIGHT]->get_child_at(i-1, j, k);
135 if((*iter)->neighbour[
YDIR][
RIGHT] != NULL) (*iter)->get_child_at(i, j, k)->neighbour[
YDIR][
RIGHT] = (*iter)->neighbour[
YDIR][
RIGHT]->get_child_at(i, j-1, k);
138 if((*iter)->neighbour[
ZDIR][
RIGHT] != NULL) (*iter)->get_child_at(i, j, k)->neighbour[
ZDIR][
RIGHT] = (*iter)->neighbour[
ZDIR][
RIGHT]->get_child_at(i, j, k-1);
153 for (std::list<Octree*>::iterator i = root_nodes.begin(), end = root_nodes.end(); i != end; ++i) {
155 double xmax = (*i)->x_max;
156 double ymax = (*i)->y_max;
157 double zmax = (*i)->z_max;
158 double xmin = (*i)->x_min;
159 double ymin = (*i)->y_min;
160 double zmin = (*i)->z_min;
162 for (std::list<Octree*>::iterator j = root_nodes.begin(), end = root_nodes.end(); j != end; ++j) {
164 double x_max = (*j)->x_max;
165 double y_max = (*j)->y_max;
166 double z_max = (*j)->z_max;
167 double x_min = (*j)->x_min;
168 double y_min = (*j)->y_min;
169 double z_min = (*j)->z_min;
188 if(xmax==x_min&&ymax==y_max&&zmax==z_max)
191 if(xmin==x_max&&ymax==y_max&&zmax==z_max)
194 if(xmax==x_max&&ymax==y_min&&zmax==z_max)
197 if(xmax==x_max&&ymin==y_max&&zmax==z_max)
200 if(xmax==x_max&&ymax==y_max&&zmax==z_min)
203 if(xmax==x_max&&ymax==y_max&&zmin==z_max)
217 for (std::list<Octree*>::iterator i = nodes.begin(), end = nodes.end(); i != end; ++i) {
219 printf(
"I am at %g %g %g\n",(*i)->x_centre,(*i)->y_centre,(*i)->z_centre);
226 if((*i)->neighbour[
XDIR][
RIGHT]!=NULL) printf(
"East neighbour at %g %g %g\n",(*i)->neighbour[
XDIR][
RIGHT]->x_centre,(*i)->neighbour[
XDIR][RIGHT]->y_centre,(*i)->neighbour[
XDIR][RIGHT]->z_centre);
227 if((*i)->neighbour[
XDIR][
LEFT]!=NULL) printf(
"West neighbour at %g %g %g\n",(*i)->neighbour[
XDIR][
LEFT]->x_centre,(*i)->neighbour[
XDIR][LEFT]->y_centre,(*i)->neighbour[
XDIR][LEFT]->z_centre);
228 if((*i)->neighbour[
YDIR][RIGHT]!=NULL) printf(
"North neighbour at %g %g %g\n",(*i)->neighbour[
YDIR][RIGHT]->x_centre,(*i)->neighbour[
YDIR][RIGHT]->y_centre,(*i)->neighbour[
YDIR][RIGHT]->z_centre);
229 if((*i)->neighbour[
YDIR][LEFT]!=NULL) printf(
"South neighbour at %g %g %g\n",(*i)->neighbour[
YDIR][LEFT]->x_centre,(*i)->neighbour[
YDIR][LEFT]->y_centre,(*i)->neighbour[
YDIR][LEFT]->z_centre);
230 if((*i)->neighbour[
ZDIR][RIGHT]!=NULL) printf(
"Top neighbour at %g %g %g\n",(*i)->neighbour[
ZDIR][RIGHT]->x_centre,(*i)->neighbour[
ZDIR][RIGHT]->y_centre,(*i)->neighbour[
ZDIR][RIGHT]->z_centre);
231 if((*i)->neighbour[
ZDIR][LEFT]!=NULL) printf(
"Bottom neighbour at %g %g %g\n",(*i)->neighbour[
ZDIR][LEFT]->x_centre,(*i)->neighbour[
ZDIR][LEFT]->y_centre,(*i)->neighbour[
ZDIR][LEFT]->z_centre);
253 std::cerr <<
"\n" <<
"Setting up grid" << std::endl;
std::vector< std::string > scalar_fields
std::list< Octree * > leaf_nodes
void create_list_of_root_nodes()
void set_root_neighbours()
std::list< Octree * > level_nodes[20]
std::list< Octree * > root_nodes
std::vector< std::string > vector_fields
void exchange_ghost_val(int level, std::string name)
void reassign_neighbours()
void create_list_of_leaf_nodes()
void print_neighbour_information(std::list< Octree * > &nodes)
Class to store octree datastructure as nodes of the tree.
std::list< Octree * > nodes
void create_node(int blocknumber, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, int level, NodeBc **bc)
void create_lists_of_level_nodes()
void exchange_ghost_values_of_level(int level)