| 1393 | } // postprocessData |
| 1394 | |
| 1395 | void |
| 1396 | IBMethod::initializePatchHierarchy(Pointer<PatchHierarchy<NDIM>> hierarchy, |
| 1397 | Pointer<GriddingAlgorithm<NDIM>> gridding_alg, |
| 1398 | int u_data_idx, |
| 1399 | const std::vector<Pointer<CoarsenSchedule<NDIM>>>& u_synch_scheds, |
| 1400 | const std::vector<Pointer<RefineSchedule<NDIM>>>& u_ghost_fill_scheds, |
| 1401 | int integrator_step, |
| 1402 | double init_data_time, |
| 1403 | bool initial_time) |
| 1404 | { |
| 1405 | // Cache pointers to the patch hierarchy and gridding algorithm. |
| 1406 | d_hierarchy = hierarchy; |
| 1407 | d_gridding_alg = gridding_alg; |
| 1408 | |
| 1409 | // Lookup the range of hierarchy levels. |
| 1410 | const int coarsest_ln = 0; |
| 1411 | const int finest_ln = d_hierarchy->getFinestLevelNumber(); |
| 1412 | |
| 1413 | // Initialize various Lagrangian data objects. |
| 1414 | if (initial_time) |
| 1415 | { |
| 1416 | // Initialize the interpolated velocity field. |
| 1417 | std::vector<Pointer<LData>> X_data(finest_ln + 1); |
| 1418 | std::vector<Pointer<LData>> U_data(finest_ln + 1); |
| 1419 | for (int ln = coarsest_ln; ln <= finest_ln; ++ln) |
| 1420 | { |
| 1421 | if (!d_l_data_manager->levelContainsLagrangianData(ln)) continue; |
| 1422 | X_data[ln] = d_l_data_manager->getLData(LDataManager::POSN_DATA_NAME, ln); |
| 1423 | U_data[ln] = d_l_data_manager->getLData(LDataManager::VEL_DATA_NAME, ln); |
| 1424 | } |
| 1425 | d_l_data_manager->interp(u_data_idx, U_data, X_data, u_synch_scheds, u_ghost_fill_scheds, init_data_time); |
| 1426 | resetAnchorPointValues(U_data, coarsest_ln, finest_ln); |
| 1427 | |
| 1428 | // Initialize source/sink data. |
| 1429 | for (int ln = coarsest_ln; ln <= finest_ln; ++ln) |
| 1430 | { |
| 1431 | if (d_ib_source_fcn) |
| 1432 | { |
| 1433 | d_ib_source_fcn->initializeLevelData(d_hierarchy, ln, init_data_time, initial_time, d_l_data_manager); |
| 1434 | d_n_src[ln] = d_ib_source_fcn->getNumSources(d_hierarchy, ln, init_data_time, d_l_data_manager); |
| 1435 | d_X_src[ln].resize(d_n_src[ln], Point::Constant(std::numeric_limits<double>::quiet_NaN())); |
| 1436 | d_r_src[ln].resize(d_n_src[ln], std::numeric_limits<double>::quiet_NaN()); |
| 1437 | d_P_src[ln].resize(d_n_src[ln], std::numeric_limits<double>::quiet_NaN()); |
| 1438 | d_Q_src[ln].resize(d_n_src[ln], std::numeric_limits<double>::quiet_NaN()); |
| 1439 | d_ib_source_fcn->getSourceLocations( |
| 1440 | d_X_src[ln], d_r_src[ln], X_data[ln], d_hierarchy, ln, init_data_time, d_l_data_manager); |
| 1441 | } |
| 1442 | } |
| 1443 | } |
| 1444 | |
| 1445 | // Initialize the instrumentation data. |
| 1446 | d_instrument_panel->initializeHierarchyIndependentData(d_hierarchy, d_l_data_manager); |
| 1447 | if (d_instrument_panel->isInstrumented()) |
| 1448 | { |
| 1449 | d_instrument_panel->initializeHierarchyDependentData( |
| 1450 | d_hierarchy, d_l_data_manager, integrator_step, init_data_time); |
| 1451 | if (d_total_flow_volume.empty()) |
| 1452 | { |
no test coverage detected