43 for (std::list<Octree*>::iterator i =
leaf_nodes.begin(), end =
leaf_nodes.end(); i != end; ++i) {
89 for (std::list<Octree*>::iterator i =
nodes.begin(), end =
nodes.end(); i != end;) {
91 if((*i)->setToCoarsen && !((*i)->isRootNode()) && ((*i)->isLeafNode())) {
95 for(
int n=0; n<2; n++) {
96 for(
int m=0; m<2; m++) {
97 for(
int l=0; l<2; l++) {
98 (*i)->get_parent()->set_child_null_at(l, m, n);
118 for (std::list<Octree*>::iterator i =
nodes.begin(), end =
nodes.end(); i != end; ++i) {
120 (*i)->setToRefine =
false;
130 for (std::list<Octree*>::iterator i =
nodes.begin(), end =
nodes.end(); i != end; ++i) {
132 (*i)->setToCoarsen =
false;
140 double x_grad, y_grad, z_grad;
144 double max_of_max_gradient = 0.0;
151 for (std::list<Octree*>::iterator it =
leaf_nodes.begin(), end =
leaf_nodes.end(); it != end; ++it) {
154 Field* f = (*it)->get_block_data()->field;
155 dx = (*it)->get_block_data()->dx;
156 dy = (*it)->get_block_data()->dy;
157 dz = (*it)->get_block_data()->dz;
166 x_grad = (f->
val[i+1][j][k] - f->
val[i-1][j][k]) / (2.0*dx);
167 y_grad = (f->
val[i][j+1][k] - f->
val[i][j-1][k]) / (2.0*dy);
168 z_grad = (f->
val[i][j][k+1] - f->
val[i][j][k-1]) / (2.0*dz);
170 tg = std::abs(x_grad) + std::abs(y_grad) + std::abs(z_grad);
177 (*it)->get_block_data()->max_gradient = mg;
178 if(mg>max_of_max_gradient) max_of_max_gradient = mg;
182 for (std::list<Octree*>::iterator it =
leaf_nodes.begin(), end =
leaf_nodes.end(); it != end; ++it) {
184 if((*it)->get_block_data()->max_gradient > max_of_max_gradient*0.2) {
185 (*it)->set_to_refine_with_nesting();
195 double x_grad, y_grad, z_grad;
199 double max_of_max_gradient = 0.0;
205 for (std::list<Octree*>::iterator it =
leaf_nodes.begin(), end =
leaf_nodes.end(); it != end; ++it) {
208 Field* f = (*it)->get_block_data()->field;
209 dx = (*it)->get_block_data()->dx;
210 dy = (*it)->get_block_data()->dy;
211 dz = (*it)->get_block_data()->dz;
220 x_grad = (f->
val[i+1][j][k] - f->
val[i-1][j][k]) / (2.0*dx);
221 y_grad = (f->
val[i][j+1][k] - f->
val[i][j-1][k]) / (2.0*dy);
222 z_grad = (f->
val[i][j][k+1] - f->
val[i][j][k-1]) / (2.0*dz);
224 tg = std::abs(x_grad) + std::abs(y_grad) + std::abs(z_grad);
231 (*it)->get_block_data()->max_gradient = mg;
232 if(mg>max_of_max_gradient) max_of_max_gradient = mg;
236 for (std::list<Octree*>::iterator it =
leaf_nodes.begin(), end =
leaf_nodes.end(); it != end; ++it) {
242 if((*it)->get_block_data()->max_gradient < max_of_max_gradient*0.2 && (!(*it)->isRootNode())) {
243 (*it)->set_to_coarsen_with_nesting();
258 for (std::list<Octree*>::iterator it =
leaf_nodes.begin(), end =
leaf_nodes.end(); it != end; ++it) {
260 if((*it)->setToCoarsen ==
true) {
262 for(
int n=0; n<2; n++) {
263 for(
int m=0; m<2; m++) {
264 for(
int l=0; l<2; l++) {
265 if((*it)->get_parent()->get_child_at(l,m,n)->setToCoarsen ==
false)
266 (*it)->setToCoarsen =
false;
void reset_refine_flags()
std::list< Octree * > leaf_nodes
void reset_coarsen_flags()
void recheck_siblings_coarsen_flags()
void set_refine_flag_based_on_gradient()
void set_coarsen_flag_based_on_gradient()
Template class for any scalar field variable in the domain.
void create_list_of_leaf_nodes()
std::list< Octree * > nodes