| 357 | } // setPatchHierarchy |
| 358 | |
| 359 | void |
| 360 | HierarchyMathOps::resetLevels(const int coarsest_ln, const int finest_ln) |
| 361 | { |
| 362 | #if !defined(NDEBUG) |
| 363 | TBOX_ASSERT(d_hierarchy); |
| 364 | TBOX_ASSERT((coarsest_ln >= 0) && (finest_ln >= coarsest_ln) && (finest_ln <= d_hierarchy->getFinestLevelNumber())); |
| 365 | #endif |
| 366 | // Reset the level numbers. |
| 367 | d_coarsest_ln = coarsest_ln; |
| 368 | d_finest_ln = finest_ln; |
| 369 | d_cached_eulerian_data.resetLevels(d_coarsest_ln, d_finest_ln); |
| 370 | d_hier_cc_data_ops->resetLevels(d_coarsest_ln, d_finest_ln); |
| 371 | d_hier_fc_data_ops->resetLevels(d_coarsest_ln, d_finest_ln); |
| 372 | d_hier_sc_data_ops->resetLevels(d_coarsest_ln, d_finest_ln); |
| 373 | |
| 374 | // Reset the CoarsenSchedule vectors. |
| 375 | d_of_coarsen_scheds.resize(d_finest_ln); |
| 376 | d_on_s_coarsen_scheds.resize(d_finest_ln); |
| 377 | d_on_v_coarsen_scheds.resize(d_finest_ln); |
| 378 | d_os_coarsen_scheds.resize(d_finest_ln); |
| 379 | d_oe_coarsen_scheds.resize(d_finest_ln); |
| 380 | for (int dst_ln = d_coarsest_ln; dst_ln < d_finest_ln; ++dst_ln) |
| 381 | { |
| 382 | Pointer<PatchLevel<NDIM>> src_level = d_hierarchy->getPatchLevel(dst_ln + 1); |
| 383 | Pointer<PatchLevel<NDIM>> dst_level = d_hierarchy->getPatchLevel(dst_ln); |
| 384 | d_of_coarsen_scheds[dst_ln] = d_of_coarsen_alg->createSchedule(dst_level, src_level); |
| 385 | d_on_s_coarsen_scheds[dst_ln] = d_on_s_coarsen_alg->createSchedule(dst_level, src_level); |
| 386 | d_on_v_coarsen_scheds[dst_ln] = d_on_v_coarsen_alg->createSchedule(dst_level, src_level); |
| 387 | d_os_coarsen_scheds[dst_ln] = d_os_coarsen_alg->createSchedule(dst_level, src_level); |
| 388 | d_oe_coarsen_scheds[dst_ln] = d_oe_coarsen_alg->createSchedule(dst_level, src_level); |
| 389 | } |
| 390 | |
| 391 | // Reset the cell weights and compute the volume of the domain. |
| 392 | resetCellWeights(d_coarsest_ln, d_finest_ln); |
| 393 | if (d_using_wgt_fc) resetFaceWeights(d_coarsest_ln, d_finest_ln); |
| 394 | if (d_using_wgt_sc) resetSideWeights(d_coarsest_ln, d_finest_ln); |
| 395 | d_volume = d_hier_cc_data_ops->sumControlVolumes(d_wgt_cc_idx, d_wgt_cc_idx); |
| 396 | |
| 397 | // Deallocate scratch data. |
| 398 | if (!d_using_wgt_cc) |
| 399 | { |
| 400 | for (int ln = d_coarsest_ln; ln <= d_finest_ln; ++ln) |
| 401 | { |
| 402 | Pointer<PatchLevel<NDIM>> level = d_hierarchy->getPatchLevel(ln); |
| 403 | level->deallocatePatchData(d_wgt_cc_idx); |
| 404 | } |
| 405 | } |
| 406 | return; |
| 407 | } // resetLevels |
| 408 | |
| 409 | Pointer<CellVariable<NDIM, double>> |
| 410 | HierarchyMathOps::getCellWeightVariable() const |