|
IBAMR
IBAMR version 0.20.
|
Class CIBMobilitySolver solves for the constraint forces \( \vec{\lambda}\) and rigid body velocity \( \vec{U}\) of the structure(s). Specifically, the class solves two types of matrix-equations. More...
#include <ibamr/CIBMobilitySolver.h>

Public Member Functions | |
| CIBMobilitySolver (std::string object_name, SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > input_db, SAMRAI::tbox::Pointer< IBAMR::INSStaggeredHierarchyIntegrator > navier_stokes_integrator, SAMRAI::tbox::Pointer< IBAMR::CIBStrategy > cib_strategy) | |
| The only constructor of this class. More... | |
| virtual | ~CIBMobilitySolver () |
| Destructor for this class. More... | |
| void | setSolutionTime (const double solution_time) |
| Set the time at which the solution is to be evaluated. More... | |
| void | setTimeInterval (const double current_time, const double new_time) |
| Set the time interval of integration. More... | |
| void | setInterpScale (const double interp_scale) |
| Set scale for interp operator. More... | |
| void | setSpreadScale (const double spread_scale) |
| Set scale for spread operator. More... | |
| void | setRegularizeMobilityScale (const double reg_mob_scale) |
| Set scale for regularizing mobility matrix. More... | |
| void | setNormalizeSpreadForce (const bool normalize_force) |
| Set if the mean of the Lagrangian force is to be subtracted from the Eulerian force variable. More... | |
| void | setVelocityPoissonSpecifications (const SAMRAI::solv::PoissonSpecifications &u_problem_coefs) |
| Set the PoissonSpecifications object used to specify the coefficients for the momentum equation in the incompressible Stokes operator. More... | |
| void | setPhysicalBcCoefs (const std::vector< SAMRAI::solv::RobinBcCoefStrategy< NDIM > * > &u_bc_coefs, SAMRAI::solv::RobinBcCoefStrategy< NDIM > *p_bc_coef) |
| Set the SAMRAI::solv::RobinBcCoefStrategy objects used to specify physical boundary conditions. More... | |
| void | setPhysicalBoundaryHelper (SAMRAI::tbox::Pointer< IBAMR::StaggeredStokesPhysicalBoundaryHelper > bc_helper) |
| Set the StokesSpecifications object and timestep size used to specify the coefficients for the time-dependent incompressible Stokes operator. More... | |
| bool | solveMobilitySystem (Vec x, Vec b) |
| Solves the mobility problem. More... | |
| bool | solveBodyMobilitySystem (Vec x, Vec b) |
| Solves the mobility problem. More... | |
| void | initializeSolverState (Vec x, Vec b) |
| Initialize the mobility solver. More... | |
| void | deallocateSolverState () |
| Deallocate the mobility solver. More... | |
| void | getMobilitySolvers (IBAMR::KrylovMobilitySolver **km_solver=nullptr, IBAMR::DirectMobilitySolver **dm_solver=nullptr, IBAMR::KrylovFreeBodyMobilitySolver **fbm_solver=nullptr) |
| Get access to mobility solvers. More... | |
Private Types | |
| enum | MobilitySolverType { DIRECT , KRYLOV , UNKNOWN_MOBILITY_SOLVER_TYPE = -1 } |
Private Member Functions | |
| void | getFromInput (SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > input_db) |
| Get various options from input db. More... | |
Private Attributes | |
| std::string | d_object_name |
| unsigned | d_num_rigid_parts |
| SAMRAI::tbox::Pointer< IBAMR::CIBStrategy > | d_cib_strategy |
| SAMRAI::tbox::Pointer< IBAMR::DirectMobilitySolver > | d_direct_mob_solver |
| SAMRAI::tbox::Pointer< IBAMR::KrylovMobilitySolver > | d_krylov_mob_solver |
| SAMRAI::tbox::Pointer< IBAMR::KrylovFreeBodyMobilitySolver > | d_krylov_freebody_mob_solver |
| double | d_solution_time |
| double | d_current_time |
| double | d_new_time |
| bool | d_is_initialized = false |
| bool | d_reinitializing_solver |
| bool | d_has_free_parts |
| double | d_interp_scale = 1.0 |
| double | d_spread_scale = 1.0 |
| double | d_reg_mob_scale |
| MobilitySolverType | d_mobility_solver_type |
\begin{eqnarray*} \beta J L^{-1} S \gamma \vec{\lambda} &=& M \vec{\lambda} = \vec{w} \\ T M T^* \vec{U} &=& \vec{F}. \end{eqnarray*}
Here, \( J \) is the interpolation operator, \( S \) is the spreading operator, \( L \) is the incompressible Stokes operator, \( T \) is the rigid body operator, \( \vec{w} \) is the desired velocity at the nodes of the structure(s), and \( \vec{F} \) is the net external force and torque on the body.
This class employs direct solver for the approximate mobility and body-mobility sub-problems. The approximate mobility matrix is intended to be used in the preconditioning step of the overall constraint solver. The overall preconditioner is implemented in
|
private |
| IBAMR::CIBMobilitySolver::CIBMobilitySolver | ( | std::string | object_name, |
| SAMRAI::tbox::Pointer< SAMRAI::tbox::Database > | input_db, | ||
| SAMRAI::tbox::Pointer< IBAMR::INSStaggeredHierarchyIntegrator > | navier_stokes_integrator, | ||
| SAMRAI::tbox::Pointer< IBAMR::CIBStrategy > | cib_strategy | ||
| ) |
|
virtual |
| void IBAMR::CIBMobilitySolver::setSolutionTime | ( | const double | solution_time | ) |
| void IBAMR::CIBMobilitySolver::setTimeInterval | ( | const double | current_time, |
| const double | new_time | ||
| ) |
| void IBAMR::CIBMobilitySolver::setInterpScale | ( | const double | interp_scale | ) |
| void IBAMR::CIBMobilitySolver::setSpreadScale | ( | const double | spread_scale | ) |
| void IBAMR::CIBMobilitySolver::setRegularizeMobilityScale | ( | const double | reg_mob_scale | ) |
| void IBAMR::CIBMobilitySolver::setNormalizeSpreadForce | ( | const bool | normalize_force | ) |
| void IBAMR::CIBMobilitySolver::setVelocityPoissonSpecifications | ( | const SAMRAI::solv::PoissonSpecifications & | u_problem_coefs | ) |
| void IBAMR::CIBMobilitySolver::setPhysicalBcCoefs | ( | const std::vector< SAMRAI::solv::RobinBcCoefStrategy< NDIM > * > & | u_bc_coefs, |
| SAMRAI::solv::RobinBcCoefStrategy< NDIM > * | p_bc_coef | ||
| ) |
| u_bc_coefs | IBTK::Vector of pointers to objects that can set the Robin boundary condition coefficients for the velocity. |
| p_bc_coef | Pointer to object that can set the Robin boundary condition coefficients for the pressure. |
| void IBAMR::CIBMobilitySolver::setPhysicalBoundaryHelper | ( | SAMRAI::tbox::Pointer< IBAMR::StaggeredStokesPhysicalBoundaryHelper > | bc_helper | ) |
| bool IBAMR::CIBMobilitySolver::solveMobilitySystem | ( | Vec | x, |
| Vec | b | ||
| ) |
| x | Vec storing the Lagrange multiplier. |
| b | Vec storing the desired velocity. |
true if the solver converged to the specified tolerances, false otherwise | bool IBAMR::CIBMobilitySolver::solveBodyMobilitySystem | ( | Vec | x, |
| Vec | b | ||
| ) |
| x | Vec storing the rigid body velocity |
| b | Vec storing the net external generalized force |
true if the solver converged to the specified tolerances, false otherwise | void IBAMR::CIBMobilitySolver::initializeSolverState | ( | Vec | x, |
| Vec | b | ||
| ) |
| x | Vec storing the Lagrange multiplier |
| b | Vec storing the desired velocity |
| void IBAMR::CIBMobilitySolver::deallocateSolverState | ( | ) |
| void IBAMR::CIBMobilitySolver::getMobilitySolvers | ( | IBAMR::KrylovMobilitySolver ** | km_solver = nullptr, |
| IBAMR::DirectMobilitySolver ** | dm_solver = nullptr, |
||
| IBAMR::KrylovFreeBodyMobilitySolver ** | fbm_solver = nullptr |
||
| ) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |