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

Class IBFEDirectForcingKinematics is a helper class that provides direct forcing IBMethod functionality to the IBFEMethod class. More...

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

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

Classes

struct  KinematicsFcnData
 

Public Types

using KinematicsFcnPtr = void(*)(double data_time, Eigen::Vector3d &U_com, Eigen::Vector3d &W_com, void *ctx)
 Typedef specifying interface for specifying rigid body velocities.
 

Public Member Functions

EIGEN_MAKE_ALIGNED_OPERATOR_NEW IBFEDirectForcingKinematics (std::string object_name, SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > input_db, SAMRAI::tbox::Pointer< IBAMR::IBFEMethod > ibfe_method_ops, int part, bool register_for_restart=true)
 Constructor. More...
 
virtual ~IBFEDirectForcingKinematics ()
 Destructor.
 
void registerKinematicsFunction (KinematicsFcnPtr comvelfcn, void *ctx=nullptr)
 Register user defined constrained velocity functions.
 
void registerKinematicsFunction (const KinematicsFcnData &data)
 Register user defined velocity function data.
 
virtual void setSolveRigidBodyVelocity (const IBTK::FreeRigidDOFVector &solve_rigid_dofs)
 Set what rigid DOFs need to be solved for this particular structure.
 
virtual void initializeKinematicsData (bool initial_time=true)
 
virtual void preprocessIntegrateData (double current_time, double new_time, int num_cycles)
 
virtual void forwardEulerStep (double current_time, double new_time, libMesh::PetscVector< double > &X_current_petsc, libMesh::PetscVector< double > &X_half_petsc, libMesh::PetscVector< double > &X_new_petsc)
 
virtual void midpointStep (double current_time, double new_time, libMesh::PetscVector< double > &X_current_petsc, libMesh::PetscVector< double > &X_half_petsc, libMesh::PetscVector< double > &X_new_petsc)
 
virtual void trapezoidalStep (double current_time, double new_time, libMesh::PetscVector< double > &X_current_petsc, libMesh::PetscVector< double > &X_half_petsc, libMesh::PetscVector< double > &X_new_petsc)
 
virtual void computeLagrangianForce (libMesh::PetscVector< double > &F_petsc, libMesh::PetscVector< double > &X_petsc, libMesh::PetscVector< double > &U_petsc, const double data_time)
 
virtual void postprocessIntegrateData (double current_time, double new_time, int num_cycles)
 
const Eigen::Vector3d & getStructureCOM () const
 
const Eigen::Vector3d & getCOMTransVelocity () const
 
const Eigen::Vector3d & getCOMRotVelocity () const
 
void putToDatabase (SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > db) override
 Write out object state to the given database.
 

Protected Member Functions

void computeCOMOfStructure (Eigen::Vector3d &X0)
 
void computeMOIOfStructure (Eigen::Matrix3d &I, const Eigen::Vector3d &X0)
 

Protected Attributes

double d_current_time
 
double d_new_time
 
double d_half_time
 
SAMRAI::tbox::Pointer< IBAMR::IBFEMethod > d_ibfe_method_ops
 
int d_part
 
std::string d_object_name
 
KinematicsFcnData d_kinematics
 
double d_rho
 
Eigen::Vector3d d_center_of_mass_initial = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_center_of_mass_current = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_center_of_mass_half = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_center_of_mass_new = Eigen::Vector3d::Zero()
 
Eigen::Quaterniond d_quaternion_current = Eigen::Quaterniond::Identity()
 
Eigen::Quaterniond d_quaternion_half = Eigen::Quaterniond::Identity()
 
Eigen::Quaterniond d_quaternion_new = Eigen::Quaterniond::Identity()
 
IBTK::FRDV d_solve_rigid_vel
 
Eigen::Vector3d d_trans_vel_current = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_trans_vel_half = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_trans_vel_new = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_rot_vel_current = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_rot_vel_half = Eigen::Vector3d::Zero()
 
Eigen::Vector3d d_rot_vel_new = Eigen::Vector3d::Zero()
 
Eigen::Matrix3d d_inertia_tensor_initial = Eigen::Matrix3d::Zero()
 
bool d_registered_for_restart
 

Detailed Description

Class IBFEDirectForcingKinematics is a helper class that provides direct forcing IBMethod functionality to the IBFEMethod class.

Constructor & Destructor Documentation

◆ IBFEDirectForcingKinematics()

EIGEN_MAKE_ALIGNED_OPERATOR_NEW IBAMR::IBFEDirectForcingKinematics::IBFEDirectForcingKinematics ( std::string  object_name,
SAMRAI::tbox::Pointer< SAMRAI::tbox::Database input_db,
SAMRAI::tbox::Pointer< IBAMR::IBFEMethod >  ibfe_method_ops,
int  part,
bool  register_for_restart = true 
)

Constructor.

Since this class has Eigen object members, which have special alignment requirements, we must explicitly override operator new to get the correct aligment for the object as a whole.

Member Function Documentation

◆ computeCOMOfStructure()

void IBAMR::IBFEDirectForcingKinematics::computeCOMOfStructure ( Eigen::Vector3d &  X0)
protected

Compute center of mass of the structure.

◆ computeLagrangianForce()

void IBAMR::IBFEDirectForcingKinematics::computeLagrangianForce ( libMesh::PetscVector< double > &  F_petsc,
libMesh::PetscVector< double > &  X_petsc,
libMesh::PetscVector< double > &  U_petsc,
const double  data_time 
)
virtual

Compute the Lagrangian force at the specified time within the current time interval.

◆ computeMOIOfStructure()

void IBAMR::IBFEDirectForcingKinematics::computeMOIOfStructure ( Eigen::Matrix3d &  I,
const Eigen::Vector3d &  X0 
)
protected

Compute moment of inertia tensor for the structure.

◆ forwardEulerStep()

void IBAMR::IBFEDirectForcingKinematics::forwardEulerStep ( double  current_time,
double  new_time,
libMesh::PetscVector< double > &  X_current_petsc,
libMesh::PetscVector< double > &  X_half_petsc,
libMesh::PetscVector< double > &  X_new_petsc 
)
virtual

Advance the positions of the Lagrangian structure using the forward Euler method.

◆ getCOMRotVelocity()

const Eigen::Vector3d& IBAMR::IBFEDirectForcingKinematics::getCOMRotVelocity ( ) const
inline

Get COM rotational velocity.

◆ getCOMTransVelocity()

const Eigen::Vector3d& IBAMR::IBFEDirectForcingKinematics::getCOMTransVelocity ( ) const
inline

Get COM translational velocity.

◆ getStructureCOM()

const Eigen::Vector3d& IBAMR::IBFEDirectForcingKinematics::getStructureCOM ( ) const
inline

Get COM position.

◆ initializeKinematicsData()

void IBAMR::IBFEDirectForcingKinematics::initializeKinematicsData ( bool  initial_time = true)
virtual

Initialize kinematics data only initially.

◆ midpointStep()

void IBAMR::IBFEDirectForcingKinematics::midpointStep ( double  current_time,
double  new_time,
libMesh::PetscVector< double > &  X_current_petsc,
libMesh::PetscVector< double > &  X_half_petsc,
libMesh::PetscVector< double > &  X_new_petsc 
)
virtual

Advance the positions of the Lagrangian structure using the (explicit) midpoint rule.

◆ postprocessIntegrateData()

void IBAMR::IBFEDirectForcingKinematics::postprocessIntegrateData ( double  current_time,
double  new_time,
int  num_cycles 
)
virtual

Postprocess kinematics after hierarchy integrates.

◆ preprocessIntegrateData()

void IBAMR::IBFEDirectForcingKinematics::preprocessIntegrateData ( double  current_time,
double  new_time,
int  num_cycles 
)
virtual

Preprocess kinematics before hierarchy integrates.

◆ trapezoidalStep()

void IBAMR::IBFEDirectForcingKinematics::trapezoidalStep ( double  current_time,
double  new_time,
libMesh::PetscVector< double > &  X_current_petsc,
libMesh::PetscVector< double > &  X_half_petsc,
libMesh::PetscVector< double > &  X_new_petsc 
)
virtual

Advance the positions of the Lagrangian structure using the (explicit) trapezoidal rule.


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