IBAMR
An adaptive and distributed-memory parallel implementation of the immersed boundary (IB) method
|
Class PenaltyIBMethod is an implementation of the abstract base class IBStrategy that provides functionality required by the penalty IB (pIB) method. More...
#include </home/runner/work/IBAMR/IBAMR/include/ibamr/PenaltyIBMethod.h>
Public Member Functions | |
PenaltyIBMethod (std::string object_name, SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > input_db, bool register_for_restart=true) | |
Constructor. | |
~PenaltyIBMethod ()=default | |
Destructor. | |
void | preprocessIntegrateData (double current_time, double new_time, int num_cycles) override |
void | postprocessIntegrateData (double current_time, double new_time, int num_cycles) override |
void | forwardEulerStep (double current_time, double new_time) override |
void | midpointStep (double current_time, double new_time) override |
void | trapezoidalStep (double current_time, double new_time) override |
void | computeLagrangianForce (double data_time) override |
void | initializePatchHierarchy (SAMRAI::tbox::Pointer< SAMRAI::hier::PatchHierarchy< NDIM > > hierarchy, SAMRAI::tbox::Pointer< SAMRAI::mesh::GriddingAlgorithm< NDIM > > gridding_alg, int u_data_idx, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenSchedule< NDIM > > > &u_synch_scheds, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &u_ghost_fill_scheds, int integrator_step, double init_data_time, bool initial_time) override |
void | initializeLevelData (SAMRAI::tbox::Pointer< SAMRAI::hier::BasePatchHierarchy< NDIM > > hierarchy, int level_number, double init_data_time, bool can_be_refined, bool initial_time, SAMRAI::tbox::Pointer< SAMRAI::hier::BasePatchLevel< NDIM > > old_level, bool allocate_data) override |
void | putToDatabase (SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > db) override |
Public Member Functions inherited from IBAMR::IBMethod | |
IBMethod (std::string object_name, SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > input_db, bool register_for_restart=true) | |
Constructor. | |
~IBMethod () | |
Destructor. | |
void | registerIBLagrangianForceFunction (SAMRAI::tbox::Pointer< IBLagrangianForceStrategy > ib_force_fcn) |
void | registerIBLagrangianSourceFunction (SAMRAI::tbox::Pointer< IBLagrangianSourceStrategy > ib_source_fcn) |
void | registerLInitStrategy (SAMRAI::tbox::Pointer< IBTK::LInitStrategy > l_initializer) |
void | freeLInitStrategy () |
void | registerIBMethodPostProcessor (SAMRAI::tbox::Pointer< IBMethodPostProcessStrategy > post_processor) |
IBTK::LDataManager * | getLDataManager () const |
SAMRAI::tbox::Pointer< IBInstrumentPanel > | getIBInstrumentPanel () const |
void | registerLSiloDataWriter (SAMRAI::tbox::Pointer< IBTK::LSiloDataWriter > silo_writer) |
const SAMRAI::hier::IntVector< NDIM > & | getMinimumGhostCellWidth () const override |
void | setupTagBuffer (SAMRAI::tbox::Array< int > &tag_buffer, SAMRAI::tbox::Pointer< SAMRAI::mesh::GriddingAlgorithm< NDIM > > gridding_alg) const override |
virtual void | inactivateLagrangianStructure (int structure_number=0, int level_number=std::numeric_limits< int >::max()) override |
virtual void | activateLagrangianStructure (int structure_number=0, int level_number=std::numeric_limits< int >::max()) override |
virtual bool | getLagrangianStructureIsActivated (int structure_number=0, int level_number=std::numeric_limits< int >::max()) const override |
void | createSolverVecs (Vec *X_vec, Vec *F_vec) override |
void | setupSolverVecs (Vec *X_vec, Vec *F_vec) override |
void | setUpdatedPosition (Vec &X_new_vec) override |
void | setLinearizedPosition (Vec &X_vec, double data_time) override |
void | computeResidual (Vec &R_vec) override |
void | computeLinearizedResidual (Vec &X_vec, Vec &R_vec) override |
void | updateFixedLEOperators () override |
void | interpolateVelocity (int u_data_idx, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenSchedule< NDIM > > > &u_synch_scheds, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &u_ghost_fill_scheds, double data_time) override |
void | interpolateLinearizedVelocity (int u_data_idx, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenSchedule< NDIM > > > &u_synch_scheds, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &u_ghost_fill_scheds, double data_time) override |
void | backwardEulerStep (double current_time, double new_time) override |
void | computeLinearizedLagrangianForce (Vec &X_vec, double data_time) override |
void | constructLagrangianForceJacobian (Mat &A, MatType mat_type, double data_time) override |
void | spreadForce (int f_data_idx, IBTK::RobinPhysBdryPatchStrategy *f_phys_bdry_op, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &f_prolongation_scheds, double data_time) override |
void | spreadLinearizedForce (int f_data_idx, IBTK::RobinPhysBdryPatchStrategy *f_phys_bdry_op, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &f_prolongation_scheds, double data_time) override |
void | constructInterpOp (Mat &J, void(*spread_fnc)(const double, double *), int stencil_width, const std::vector< int > &num_dofs_per_proc, int dof_index_idx, double data_time) override |
bool | hasFluidSources () const override |
void | computeLagrangianFluidSource (double data_time) override |
void | spreadFluidSource (int q_data_idx, IBTK::RobinPhysBdryPatchStrategy *q_phys_bdry_op, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &q_prolongation_scheds, double data_time) override |
void | interpolatePressure (int p_data_idx, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenSchedule< NDIM > > > &p_synch_scheds, const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > &p_ghost_fill_scheds, double data_time) override |
void | postprocessData () override |
void | registerLoadBalancer (SAMRAI::tbox::Pointer< SAMRAI::mesh::LoadBalancer< NDIM > > load_balancer, int workload_data_idx) override |
void | addWorkloadEstimate (SAMRAI::tbox::Pointer< SAMRAI::hier::PatchHierarchy< NDIM > > hierarchy, const int workload_data_idx) override |
void | beginDataRedistribution (SAMRAI::tbox::Pointer< SAMRAI::hier::PatchHierarchy< NDIM > > hierarchy, SAMRAI::tbox::Pointer< SAMRAI::mesh::GriddingAlgorithm< NDIM > > gridding_alg) override |
void | endDataRedistribution (SAMRAI::tbox::Pointer< SAMRAI::hier::PatchHierarchy< NDIM > > hierarchy, SAMRAI::tbox::Pointer< SAMRAI::mesh::GriddingAlgorithm< NDIM > > gridding_alg) override |
void | resetHierarchyConfiguration (SAMRAI::tbox::Pointer< SAMRAI::hier::BasePatchHierarchy< NDIM > > hierarchy, int coarsest_level, int finest_level) override |
void | applyGradientDetector (SAMRAI::tbox::Pointer< SAMRAI::hier::BasePatchHierarchy< NDIM > > hierarchy, int level_number, double error_data_time, int tag_index, bool initial_time, bool uses_richardson_extrapolation_too) override |
Public Member Functions inherited from IBAMR::IBImplicitStrategy | |
IBImplicitStrategy ()=default | |
Constructor. | |
virtual | ~IBImplicitStrategy ()=default |
Virtual destructor. | |
Public Member Functions inherited from IBAMR::IBStrategy | |
IBStrategy ()=default | |
Constructor. | |
virtual void | registerIBHierarchyIntegrator (IBHierarchyIntegrator *ib_solver) |
virtual void | registerEulerianVariables () |
virtual void | registerEulerianCommunicationAlgorithms () |
virtual double | getMaxPointDisplacement () const |
void | setUseFixedLEOperators (bool use_fixed_coupling_ops=true) |
virtual void | preprocessSolveFluidEquations (double current_time, double new_time, int cycle_num) |
virtual void | postprocessSolveFluidEquations (double current_time, double new_time, int cycle_num) |
void | resetHierarchyConfiguration (SAMRAI::tbox::Pointer< SAMRAI::hier::BasePatchHierarchy< NDIM > > hierarchy, int coarsest_level, int finest_level) override |
void | applyGradientDetector (SAMRAI::tbox::Pointer< SAMRAI::hier::BasePatchHierarchy< NDIM > > hierarchy, int level_number, double error_data_time, int tag_index, bool initial_time, bool uses_richardson_extrapolation_too) override |
Public Member Functions inherited from SAMRAI::mesh::StandardTagAndInitStrategy< NDIM > | |
virtual double | getLevelDt (const tbox::Pointer< hier::BasePatchLevel< NDIM > > level, const double dt_time, const bool initial_time) |
virtual double | advanceLevel (const tbox::Pointer< hier::BasePatchLevel< NDIM > > level, const tbox::Pointer< hier::BasePatchHierarchy< NDIM > > hierarchy, const double current_time, const double new_time, const bool first_step, const bool last_step, const bool regrid_advance=false) |
virtual void | resetTimeDependentData (const tbox::Pointer< hier::BasePatchLevel< NDIM > > level, const double new_time, const bool can_be_refined) |
virtual void | resetDataToPreadvanceState (const tbox::Pointer< hier::BasePatchLevel< NDIM > > level) |
virtual void | applyRichardsonExtrapolation (const tbox::Pointer< hier::PatchLevel< NDIM > > level, const double error_data_time, const int tag_index, const double deltat, const int error_coarsen_ratio, const bool initial_time, const bool uses_gradient_detector_too) |
virtual void | coarsenDataForRichardsonExtrapolation (const tbox::Pointer< hier::PatchHierarchy< NDIM > > hierarchy, const int level_number, const tbox::Pointer< hier::PatchLevel< NDIM > > coarser_level, const double coarsen_data_time, const bool before_advance) |
Protected Attributes | |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_K_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_M_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_Y_current_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_Y_new_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_V_current_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_V_new_data |
IBTK::Vector | d_gravitational_acceleration |
Protected Attributes inherited from IBAMR::IBMethod | |
bool | d_do_log = false |
SAMRAI::tbox::Pointer< SAMRAI::hier::PatchHierarchy< NDIM > > | d_hierarchy |
SAMRAI::tbox::Pointer< SAMRAI::mesh::GriddingAlgorithm< NDIM > > | d_gridding_alg |
double | d_current_time = std::numeric_limits<double>::quiet_NaN() |
double | d_new_time = std::numeric_limits<double>::quiet_NaN() |
double | d_half_time = std::numeric_limits<double>::quiet_NaN() |
bool | d_X_current_needs_ghost_fill = true |
bool | d_X_new_needs_ghost_fill = true |
bool | d_X_half_needs_ghost_fill = true |
bool | d_X_jac_needs_ghost_fill = true |
bool | d_X_LE_new_needs_ghost_fill = true |
bool | d_X_LE_half_needs_ghost_fill = true |
bool | d_F_current_needs_ghost_fill = true |
bool | d_F_new_needs_ghost_fill = true |
bool | d_F_half_needs_ghost_fill = true |
bool | d_F_jac_needs_ghost_fill = true |
IBTK::LDataManager * | d_l_data_manager |
std::string | d_interp_kernel_fcn = "IB_4" |
std::string | d_spread_kernel_fcn = "IB_4" |
bool | d_error_if_points_leave_domain = false |
SAMRAI::hier::IntVector< NDIM > | d_ghosts |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_X_current_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_X_new_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_X_half_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_X_jac_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_X_LE_new_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_X_LE_half_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_U_current_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_U_new_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_U_half_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_U_jac_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_F_current_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_F_new_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_F_half_data |
std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > | d_F_jac_data |
std::vector< std::set< int > > | d_anchor_point_local_idxs |
SAMRAI::tbox::Pointer< IBInstrumentPanel > | d_instrument_panel |
std::vector< double > | d_total_flow_volume |
SAMRAI::tbox::Pointer< IBTK::LInitStrategy > | d_l_initializer |
SAMRAI::tbox::Pointer< IBLagrangianForceStrategy > | d_ib_force_fcn |
bool | d_ib_force_fcn_needs_init = true |
SAMRAI::tbox::Pointer< IBLagrangianSourceStrategy > | d_ib_source_fcn |
bool | d_ib_source_fcn_needs_init = true |
std::vector< std::vector< IBTK::Point > > | d_X_src |
std::vector< std::vector< double > > | d_r_src |
std::vector< std::vector< double > > | d_P_src |
std::vector< std::vector< double > > | d_Q_src |
std::vector< int > | d_n_src |
bool | d_normalize_source_strength = false |
SAMRAI::tbox::Pointer< IBMethodPostProcessStrategy > | d_post_processor |
SAMRAI::tbox::Pointer< IBTK::LSiloDataWriter > | d_silo_writer |
SAMRAI::tbox::Pointer< SAMRAI::mesh::LoadBalancer< NDIM > > | d_load_balancer |
int | d_workload_idx = IBTK::invalid_index |
std::string | d_object_name |
bool | d_registered_for_restart |
Protected Attributes inherited from IBAMR::IBStrategy | |
IBHierarchyIntegrator * | d_ib_solver = nullptr |
bool | d_use_fixed_coupling_ops = false |
Class PenaltyIBMethod is an implementation of the abstract base class IBStrategy that provides functionality required by the penalty IB (pIB) method.
|
overridevirtual |
Compute the Lagrangian force at the specified time within the current time interval.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Advance the positions of the Lagrangian structure using the forward Euler method.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Initialize data on a new level after it is inserted into an AMR patch hierarchy by the gridding algorithm.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Initialize Lagrangian data corresponding to the given AMR patch hierarchy at the start of a computation. If the computation is begun from a restart file, data may be read from the restart databases.
A patch data descriptor is provided for the Eulerian velocity in case initialization requires interpolating Eulerian data. Ghost cells for Eulerian data will be filled upon entry to this function.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Advance the positions of the Lagrangian structure using the (explicit) midpoint rule.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Method to clean up data following call(s) to integrateHierarchy().
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Method to prepare to advance data from current_time to new_time.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Write out object state to the given database.
Reimplemented from IBAMR::IBMethod.
|
overridevirtual |
Advance the positions of the Lagrangian structure using the (explicit) trapezoidal rule.
Reimplemented from IBAMR::IBMethod.