IBAMR
An adaptive and distributed-memory parallel implementation of the immersed boundary (IB) method
Public Member Functions | List of all members
IBAMR::ConstraintIBMethod Class Reference

Class ConstraintIBMethod implements the rigidity constraint for rigid and deforming bodies using the constraint based IB method. More...

#include </home/runner/work/IBAMR/IBAMR/include/ibamr/ConstraintIBMethod.h>

Inheritance diagram for IBAMR::ConstraintIBMethod:
Inheritance graph
[legend]

Public Member Functions

 ConstraintIBMethod (std::string object_name, SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > input_db, const int no_structures, bool register_for_restart=true)
 Constructor.
 
 ~ConstraintIBMethod ()
 Destructor.
 
void initializeHierarchyOperatorsandData ()
 Initialize Hierarchy operators and data at initial time.
 
virtual void registerEulerianVariables () override
 Register Eulerian variables with base IBStrategy class.
 
virtual void preprocessIntegrateData (double current_time, double new_time, int num_cycles) override
 Create Lagrangian workspace.
 
virtual void postprocessIntegrateData (double current_time, double new_time, int num_cycles) override
 Destroy Lagrangian workspace.
 
void registerConstraintIBKinematics (const std::vector< SAMRAI::tbox::Pointer< IBAMR::ConstraintIBKinematics > > &ib_kinematics_op)
 Register kinematics of the immersed structure(s) with this class.
 
void registerPreProcessSolveFluidEquationsCallBackFunction (void(*ptr_preprocess_callbackfnc)(const double, const double, const int, void *), void *ctx)
 Register any preprocess fluid solve callback functions.
 
virtual void preprocessSolveFluidEquations (double current_time, double new_time, int cycle_num) override
 Calculate any body forces for INS solver over here.
 
void registerPostProcessSolveFluidEquationsCallBackFunction (void(*ptr_postprocess_callbackfnc)(const double, const double, const int, void *), void *ctx)
 Register any postprocess fluid solve callback functions.
 
virtual void postprocessSolveFluidEquations (double current_time, double new_time, int cycle_num) override
 Apply the FuRMoRP algorithm in the postprocessSolveFluidEquations method.
 
virtual void forwardEulerStep (double current_time, double new_time) override
 Override the forwardEulerStep method of the base IBMethod class.
 
virtual void midpointStep (double current_time, double new_time) override
 Override the midpointStep method of the base IBMethod class.
 
virtual void putToDatabase (SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > db) override
 Override the putToDatabase method of the base Serializable class.
 
const std::vector< double > & getVolumeElement ()
 Get the volume element associated with material points of all structures.
 
const std::vector< std::vector< double > > & getCurrentCOMVelocity ()
 Get the current COM velocity associated with Lagrangian structures.
 
const std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > & getLagrangeMultiplier ()
 Get LData associated with Lagrange multiplier force field.
 
const std::vector< std::vector< double > > & getCurrentStructureCOM ()
 Get the current center of mass for all Lagrangian structures.
 
void setVelocityPhysBdryOp (IBTK::RobinPhysBdryPatchStrategy *u_phys_bdry_op)
 
void setVolumeElement (double vol_element, int struct_no)
 
void setVolumeElement (std::vector< double > vol_element)
 
const std::vector< double > & getStructureVolume ()
 
const std::vector< std::vector< double > > & getStructureMomentum ()
 Get the total linear momentum for all the Lagrangian structures.
 
const std::vector< std::vector< double > > & getStructureRotationalMomentum ()
 Get the total rotational momentum for all the Lagrangian structures with respect to their COM.
 
- 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::LDataManagergetLDataManager () const
 
SAMRAI::tbox::Pointer< IBInstrumentPanelgetIBInstrumentPanel () 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 preprocessIntegrateData (double current_time, double new_time, int num_cycles) override
 
void postprocessIntegrateData (double current_time, double new_time, int num_cycles) 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 forwardEulerStep (double current_time, double new_time) override
 
void backwardEulerStep (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 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 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 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 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 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
 
void putToDatabase (SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > db) 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 registerEulerianCommunicationAlgorithms ()
 
virtual double getMaxPointDisplacement () const
 
void setUseFixedLEOperators (bool use_fixed_coupling_ops=true)
 
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 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
 
void putToDatabase (SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > db) 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)
 

Additional Inherited Members

- Protected Member Functions inherited from IBAMR::IBMethod
void getPositionData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **X_data, bool **X_needs_ghost_fill, double data_time)
 
void getLinearizedPositionData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **X_data, bool **X_needs_ghost_fill)
 
void getLECouplingPositionData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **X_LE_data, bool **X_LE_needs_ghost_fill, double data_time)
 
void getVelocityData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **U_data, double data_time)
 
void getLinearizedVelocityData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **U_data)
 
void getForceData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **F_data, bool **F_needs_ghost_fill, double data_time)
 
void getLinearizedForceData (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > **F_data, bool **F_needs_ghost_fill)
 
void reinitMidpointData (const std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > &current_data, const std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > &new_data, const std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > &half_data)
 
void resetAnchorPointValues (std::vector< SAMRAI::tbox::Pointer< IBTK::LData > > U_data, int coarsest_ln, int finest_ln)
 
PetscErrorCode computeForce (Vec X, Vec F)
 
- Protected Member Functions inherited from IBAMR::IBStrategy
INSHierarchyIntegratorgetINSHierarchyIntegrator () const
 
SAMRAI::tbox::Pointer< SAMRAI::math::HierarchyDataOpsReal< NDIM, double > > getVelocityHierarchyDataOps () const
 
SAMRAI::tbox::Pointer< SAMRAI::math::HierarchyDataOpsReal< NDIM, double > > getPressureHierarchyDataOps () const
 
SAMRAI::tbox::Pointer< IBTK::HierarchyMathOpsgetHierarchyMathOps () const
 
void registerVariable (int &current_idx, int &new_idx, int &scratch_idx, SAMRAI::tbox::Pointer< SAMRAI::hier::Variable< NDIM > > variable, const SAMRAI::hier::IntVector< NDIM > &scratch_ghosts=SAMRAI::hier::IntVector< NDIM >(0), const std::string &coarsen_name="NO_COARSEN", const std::string &refine_name="NO_REFINE", SAMRAI::tbox::Pointer< IBTK::CartGridFunction > init_fcn=SAMRAI::tbox::Pointer< IBTK::CartGridFunction >(NULL))
 
void registerVariable (int &idx, SAMRAI::tbox::Pointer< SAMRAI::hier::Variable< NDIM > > variable, const SAMRAI::hier::IntVector< NDIM > &ghosts=SAMRAI::hier::IntVector< NDIM >(0), SAMRAI::tbox::Pointer< SAMRAI::hier::VariableContext > ctx=SAMRAI::tbox::Pointer< SAMRAI::hier::VariableContext >(NULL))
 
void registerGhostfillRefineAlgorithm (const std::string &name, SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineAlgorithm< NDIM > > ghostfill_alg, std::unique_ptr< SAMRAI::xfer::RefinePatchStrategy< NDIM > > ghostfill_patch_strategy=nullptr)
 
void registerProlongRefineAlgorithm (const std::string &name, SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineAlgorithm< NDIM > > prolong_alg, std::unique_ptr< SAMRAI::xfer::RefinePatchStrategy< NDIM > > prolong_patch_strategy=nullptr)
 
void registerCoarsenAlgorithm (const std::string &name, SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenAlgorithm< NDIM > > coarsen_alg, std::unique_ptr< SAMRAI::xfer::CoarsenPatchStrategy< NDIM > > coarsen_patch_strategy=nullptr)
 
SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineAlgorithm< NDIM > > getGhostfillRefineAlgorithm (const std::string &name) const
 
SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineAlgorithm< NDIM > > getProlongRefineAlgorithm (const std::string &name) const
 
SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenAlgorithm< NDIM > > getCoarsenAlgorithm (const std::string &name) const
 
const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > & getGhostfillRefineSchedules (const std::string &name) const
 
const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::RefineSchedule< NDIM > > > & getProlongRefineSchedules (const std::string &name) const
 
const std::vector< SAMRAI::tbox::Pointer< SAMRAI::xfer::CoarsenSchedule< NDIM > > > & getCoarsenSchedules (const std::string &name) const
 
- Static Protected Member Functions inherited from IBAMR::IBMethod
static PetscErrorCode computeForce_SAMRAI (void *ctx, Vec X, Vec F)
 
- 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::LDataManagerd_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< IBInstrumentPaneld_instrument_panel
 
std::vector< double > d_total_flow_volume
 
SAMRAI::tbox::Pointer< IBTK::LInitStrategyd_l_initializer
 
SAMRAI::tbox::Pointer< IBLagrangianForceStrategyd_ib_force_fcn
 
bool d_ib_force_fcn_needs_init = true
 
SAMRAI::tbox::Pointer< IBLagrangianSourceStrategyd_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< IBMethodPostProcessStrategyd_post_processor
 
SAMRAI::tbox::Pointer< IBTK::LSiloDataWriterd_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
IBHierarchyIntegratord_ib_solver = nullptr
 
bool d_use_fixed_coupling_ops = false
 

Detailed Description

Class ConstraintIBMethod implements the rigidity constraint for rigid and deforming bodies using the constraint based IB method.

References Bhalla et al. A unified mathematical framework and an adaptive numerical method for fluid-structure interaction with rigid, deforming, and elastic bodies. J Comput Phys, 250:446-476 (2013).


The documentation for this class was generated from the following files: