| 568 | } // spreadForce |
| 569 | |
| 570 | void |
| 571 | GeneralizedIBMethod::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, |
nothing calls this directly
no test coverage detected