IBAMR
An adaptive and distributed-memory parallel implementation of the immersed boundary (IB) method
|
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>
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::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 | 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) |
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).