MCPcopy Create free account
hub / github.com/IBAMR/IBAMR / initializePatchHierarchy

Method initializePatchHierarchy

src/IB/GeneralizedIBMethod.cpp:570–638  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

568} // spreadForce
569
570void
571GeneralizedIBMethod::initializePatchHierarchy(Pointer<PatchHierarchy<NDIM>> hierarchy,
572 Pointer<GriddingAlgorithm<NDIM>> gridding_alg,
573 int u_data_idx,
574 const std::vector<Pointer<CoarsenSchedule<NDIM>>>& u_synch_scheds,
575 const std::vector<Pointer<RefineSchedule<NDIM>>>& u_ghost_fill_scheds,
576 int integrator_step,
577 double init_data_time,
578 bool initial_time)
579{
580 // Initialize various Lagrangian data objects required by the conventional
581 // IB method.
582 IBMethod::initializePatchHierarchy(hierarchy,
583 gridding_alg,
584 u_data_idx,
585 u_synch_scheds,
586 u_ghost_fill_scheds,
587 integrator_step,
588 init_data_time,
589 initial_time);
590
591 // Initialize various Lagrangian data objects required by the gIB method.
592 if (initial_time)
593 {
594 // Lookup the range of hierarchy levels.
595 const int coarsest_ln = 0;
596 const int finest_ln = d_hierarchy->getFinestLevelNumber();
597
598 // Initialize the interpolated angular velocity field.
599 std::vector<Pointer<LData>> W_data(finest_ln + 1);
600 std::vector<Pointer<LData>> X_data(finest_ln + 1);
601 for (int ln = coarsest_ln; ln <= finest_ln; ++ln)
602 {
603 if (!d_l_data_manager->levelContainsLagrangianData(ln)) continue;
604 X_data[ln] = d_l_data_manager->getLData(LDataManager::POSN_DATA_NAME, ln);
605 W_data[ln] = d_l_data_manager->getLData("W", ln);
606 }
607 Pointer<Variable<NDIM>> u_var = d_ib_solver->getVelocityVariable();
608 Pointer<CellVariable<NDIM, double>> u_cc_var = u_var;
609 Pointer<SideVariable<NDIM, double>> u_sc_var = u_var;
610 if (u_cc_var)
611 {
612 Pointer<CellVariable<NDIM, double>> w_cc_var = d_w_var;
613 getHierarchyMathOps()->curl(d_w_idx, w_cc_var, u_data_idx, u_cc_var, nullptr, init_data_time);
614 }
615 else if (u_sc_var)
616 {
617 Pointer<SideVariable<NDIM, double>> w_sc_var = d_w_var;
618 getHierarchyMathOps()->curl(d_w_idx, w_sc_var, u_data_idx, u_sc_var, nullptr, init_data_time);
619 }
620 else
621 {
622 TBOX_ERROR(d_object_name << "::initializePatchHierarchy():\n"
623 << " unsupported velocity data centering" << std::endl);
624 }
625 getVelocityHierarchyDataOps()->scale(d_w_idx, 0.5, d_w_idx);
626 d_l_data_manager->interp(d_w_idx,
627 W_data,

Callers

nothing calls this directly

Calls 6

getLDataMethod · 0.80
getFinestLevelNumberMethod · 0.45
getVelocityVariableMethod · 0.45
curlMethod · 0.45
interpMethod · 0.45

Tested by

no test coverage detected