AMR-Solver  1.0
Block-based Octree AMR grid flow solver
boundary.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include "boundary.h"
3 #include "octree.h"
4 #include "direction.h"
5 
6 namespace myOctree {
7 
9 void set_FieldBc_FieldBcVal(int number, std::string name, FieldBc **bc, double **bcval ) {
10 
11  for (std::list<Octree*>::iterator it = nodes.begin(), end = nodes.end(); it != end; ++it) {
12 
13 
14  if((*it)->number==number) {
15 
16  std::cerr << "Block " << (*it)->number << std::endl;
17 
18 
19  for(int l = 0; l<scalar_fields.size() ; l++) {
20 
21  Field *f = (*it)->get_block_data()->scalarfields[l];
22 
23  if( f->name == name ) {
24 
25  //setting BC
26  //std::cerr << "Setting BC to " << (*it)->get_block_data()->scalarfields[l]->name << std::endl;
27  for (int i=0; i<3; i++) {
28  for (int j=0; j<2; j++) {
29  f->bc[i][j] = bc[i][j];
30 
31  //std::cerr << (*it)->get_block_data()->scalarfields[l]->bc[i][j];
32  }
33  }
34 
35 
36  //Setting BC values
37  for(int i=0; i<f->Nx; i++) {
38  for(int j=0; j<f->Ny; j++) {
39  for(int k=0; k<f->Nz; k++) {
40  if(i<pad) f->val[i][j][k] = bcval[XDIR][LEFT];
41  if(i>=(nx_block + pad)) f->val[i][j][k] = bcval[XDIR][RIGHT];
42  if(j<pad) f->val[i][j][k] = bcval[YDIR][LEFT];
43  if(j>=(ny_block + pad)) f->val[i][j][k] = bcval[YDIR][RIGHT];
44  if(k<pad) f->val[i][j][k] = bcval[ZDIR][LEFT];
45  if(k>=(nz_block + pad)) f->val[i][j][k] = bcval[ZDIR][RIGHT];
46 
47  }
48  }
49  }
50  }
51  }
52  }
53  }
54 }
55 
57 void set_VecFieldBc_VecFieldBcVal(int number, std::string name, FieldBc **xbc, FieldBc **ybc, FieldBc **zbc, double** xbcval, double** ybcval, double** zbcval ) {
58 
59 
60  for (std::list<Octree*>::iterator it = nodes.begin(), end = nodes.end(); it != end; ++it) {
61 
62 
63  if((*it)->number==number) {
64 
65  std::cerr << "Block " << (*it)->number << std::endl;
66 
67 
68  for(int l = 0; l<vector_fields.size() ; l++) {
69 
70  VecField *f = (*it)->get_block_data()->vectorfields[l];
71 
72  if( f->name == name ) {
73 
74  //std::cerr << "Setting BC to " << (*it)->get_block_data()->vectorfields[l]->name << std::endl;
75  for (int i=0; i<3; i++) {
76  for (int j=0; j<2; j++) {
77  f->xbc[i][j] = xbc[i][j];
78  f->ybc[i][j] = ybc[i][j];
79  f->zbc[i][j] = zbc[i][j];
80 
81  //std::cerr << (*it)->get_block_data()->scalarfields[l]->bc[i][j];
82  }
83  }
84 
85  //Setting BC values
86  for(int i=0; i<f->Nx; i++) {
87  for(int j=0; j<f->Ny; j++) {
88  for(int k=0; k<f->Nz; k++) {
89  if(i<pad) {
90  f->x[i][j][k] = xbcval[XDIR][LEFT];
91  f->y[i][j][k] = ybcval[XDIR][LEFT];
92  f->z[i][j][k] = zbcval[XDIR][LEFT];
93  }
94  if(i>=(f->Nx + pad)) {
95  f->x[i][j][k] = xbcval[XDIR][RIGHT];
96  f->y[i][j][k] = ybcval[XDIR][RIGHT];
97  f->z[i][j][k] = zbcval[XDIR][RIGHT];
98  }
99  if(j<pad) {
100  f->x[i][j][k] = xbcval[YDIR][LEFT];
101  f->y[i][j][k] = ybcval[YDIR][LEFT];
102  f->z[i][j][k] = zbcval[YDIR][LEFT];
103  }
104  if(j>=(f->Ny + pad)) {
105  f->x[i][j][k] = xbcval[YDIR][RIGHT];
106  f->y[i][j][k] = ybcval[YDIR][RIGHT];
107  f->z[i][j][k] = zbcval[YDIR][RIGHT];
108  }
109  if(k<pad) {
110  f->x[i][j][k] = xbcval[ZDIR][LEFT];
111  f->y[i][j][k] = ybcval[ZDIR][LEFT];
112  f->z[i][j][k] = zbcval[ZDIR][LEFT];
113  }
114  if(k>=(f->Nz + pad)) {
115  f->x[i][j][k] = xbcval[ZDIR][RIGHT];
116  f->y[i][j][k] = ybcval[ZDIR][RIGHT];
117  f->z[i][j][k] = zbcval[ZDIR][RIGHT];
118  }
119  }
120  }
121  }
122  }
123  }
124  }
125  }
126 }
127 
128 
129 }
130 
std::vector< std::string > scalar_fields
Definition: block.cpp:8
int ny_block
Definition: block.cpp:11
FieldBc zbc[3][2]
Definition: vecfield.h:37
std::string name
Definition: field.h:21
double *** z
Definition: vecfield.h:27
void set_FieldBc_FieldBcVal(int number, std::string name, FieldBc **bc, double **bcval)
Definition: boundary.cpp:9
Template class for any vector field variable in the domain.
Definition: vecfield.h:13
FieldBc bc[3][2]
Definition: field.h:22
Template class for any scalar field variable in the domain.
Definition: field.h:11
std::vector< std::string > vector_fields
Definition: block.cpp:9
int pad
Definition: block.cpp:7
void set_VecFieldBc_VecFieldBcVal(int number, std::string name, FieldBc **xbc, FieldBc **ybc, FieldBc **zbc, double **xbcval, double **ybcval, double **zbcval)
Definition: boundary.cpp:57
double *** val
Definition: field.h:20
int nz_block
Definition: block.cpp:12
int nx_block
Definition: block.cpp:10
AMR grid stuff.
Definition: adapt.cpp:6
std::list< Octree * > nodes
Definition: octreegrid.cpp:14
std::string name
Definition: vecfield.h:31
double *** x
Definition: vecfield.h:25
double *** y
Definition: vecfield.h:26
FieldBc xbc[3][2]
Definition: vecfield.h:35
FieldBc ybc[3][2]
Definition: vecfield.h:36
field_boundary_flags
Definition: boundary.h:16