FSI preconditioner. This extracts upper/lower triangular blocks in the 3x3 overall block matrix structure arising from the monolithic discretisation of FSI problems with algebraic node updates. Dofs are decomposed into fluid velocity, pressure and solid unknowns. NavierStokesSchurComplementPreconditioner is used as the inexact solver for the fluid block; SuperLU (in its incarnation as an "exact" preconditioner) is used for the solid block. By default we retain the fluid on solid off diagonal blocks. More...
#include <fsi_preconditioners.h>
Public Member Functions | |
FSIPreconditioner (Problem *problem_pt) | |
Constructor: By default use block triangular form with retained fluid on solid terms. A problem pointer is required for the underlying NavierStokesSchurComplementPreconditioner. More... | |
~FSIPreconditioner () | |
Destructor: Clean up. More... | |
FSIPreconditioner (const FSIPreconditioner &) | |
Broken copy constructor. More... | |
void | set_solid_preconditioner_pt (Preconditioner *solid_preconditioner_pt) |
Broken assignment operator. More... | |
Preconditioner * | solid_preconditioner_pt () const |
Read-only access to solid preconditoner (use set_... to set it) More... | |
void | use_block_diagonal_version () |
Switch to block-diagonal preconditioner. More... | |
void | use_block_triangular_version_with_fluid_on_solid () |
Switch to block-triangular preconditioner in which action of fluid dofs onto solid equations is retained. More... | |
void | use_block_triangular_version_with_solid_on_fluid () |
Switch to block-triangular preconditioner in which action of solid dofs onto fluid equations is retained. More... | |
void | set_navier_stokes_mesh (Mesh *mesh_pt, const bool &allow_multiple_element_type_in_navier_stokes_mesh=false) |
Setter function for the mesh containing the block-preconditionable Navier-Stokes elements. The optional argument indicates if there are more than one type of elements in same mesh. More... | |
void | set_wall_mesh (Mesh *mesh_pt, const bool &allow_multiple_element_type_in_wall_mesh=false) |
Setter function for the mesh containing the block-preconditionable FSI solid elements. The optional argument indicates if there are more than one type of elements in the same mesh. More... | |
void | setup () |
Setup the preconditioner. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to r. More... | |
NavierStokesSchurComplementPreconditioner * | navier_stokes_preconditioner_pt () const |
Access function to the Navier Stokes preconditioner (inexact solver) More... | |
void | enable_doc_time () |
Enable documentation of time. More... | |
void | disable_doc_time () |
Disable documentation of time. More... | |
Private Attributes | |
NavierStokesSchurComplementPreconditioner * | Navier_stokes_preconditioner_pt |
Pointer the Navier Stokes preconditioner (inexact solver) More... | |
Preconditioner * | Solid_preconditioner_pt |
Pointer to the solid preconditioner (inexact solver) More... | |
MatrixVectorProduct * | Matrix_vector_product_0_1_pt |
Pointer to fluid/solid interaction matrix. More... | |
MatrixVectorProduct * | Matrix_vector_product_1_0_pt |
Pointer to solid/fluid solid interaction matrix. More... | |
bool | Preconditioner_has_been_setup |
Boolean indicating the preconditioner has been set up. More... | |
bool | Retain_solid_onto_fluid_terms |
Boolean flag used to indicate that the solid onto fluid interaction terms are to be retained. More... | |
bool | Retain_fluid_onto_solid_terms |
Boolean flag used to indicate that the fluid onto solid interaction terms are to be retained. More... | |
bool | Doc_time |
Set Doc_time to true for outputting results of timings. More... | |
Mesh * | Navier_stokes_mesh_pt |
Pointer to the navier stokes mesh. More... | |
Mesh * | Wall_mesh_pt |
pointer to the solid mesh More... | |
bool | Allow_multiple_element_type_in_navier_stokes_mesh |
bool | Allow_multiple_element_type_in_wall_mesh |
FSI preconditioner. This extracts upper/lower triangular blocks in the 3x3 overall block matrix structure arising from the monolithic discretisation of FSI problems with algebraic node updates. Dofs are decomposed into fluid velocity, pressure and solid unknowns. NavierStokesSchurComplementPreconditioner is used as the inexact solver for the fluid block; SuperLU (in its incarnation as an "exact" preconditioner) is used for the solid block. By default we retain the fluid on solid off diagonal blocks.
Definition at line 58 of file fsi_preconditioners.h.
|
inline |
Constructor: By default use block triangular form with retained fluid on solid terms. A problem pointer is required for the underlying NavierStokesSchurComplementPreconditioner.
Definition at line 66 of file fsi_preconditioners.h.
References Allow_multiple_element_type_in_navier_stokes_mesh, Allow_multiple_element_type_in_wall_mesh, Doc_time, Matrix_vector_product_0_1_pt, Matrix_vector_product_1_0_pt, Navier_stokes_mesh_pt, Navier_stokes_preconditioner_pt, Preconditioner_has_been_setup, Retain_fluid_onto_solid_terms, Retain_solid_onto_fluid_terms, Solid_preconditioner_pt, and Wall_mesh_pt.
|
inline |
Destructor: Clean up.
Definition at line 102 of file fsi_preconditioners.h.
References Matrix_vector_product_0_1_pt, Matrix_vector_product_1_0_pt, Navier_stokes_preconditioner_pt, and Solid_preconditioner_pt.
|
inline |
Broken copy constructor.
Definition at line 117 of file fsi_preconditioners.h.
|
inline |
Disable documentation of time.
Definition at line 221 of file fsi_preconditioners.h.
References Doc_time.
|
inline |
Enable documentation of time.
Definition at line 218 of file fsi_preconditioners.h.
References Doc_time.
|
inline |
Access function to the Navier Stokes preconditioner (inexact solver)
Definition at line 212 of file fsi_preconditioners.h.
References Navier_stokes_preconditioner_pt.
void oomph::FSIPreconditioner::preconditioner_solve | ( | const DoubleVector & | r, |
DoubleVector & | z | ||
) |
Apply preconditioner to r.
Apply preconditioner to Vector r.
Definition at line 385 of file fsi_preconditioners.h.
References Matrix_vector_product_0_1_pt, Matrix_vector_product_1_0_pt, Navier_stokes_preconditioner_pt, Retain_fluid_onto_solid_terms, Retain_solid_onto_fluid_terms, and Solid_preconditioner_pt.
Referenced by set_wall_mesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::set_wall_mesh().
|
inline |
Setter function for the mesh containing the block-preconditionable Navier-Stokes elements. The optional argument indicates if there are more than one type of elements in same mesh.
Definition at line 178 of file fsi_preconditioners.h.
References Allow_multiple_element_type_in_navier_stokes_mesh, and Navier_stokes_mesh_pt.
Referenced by setup(), oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner(), and use_block_triangular_version_with_solid_on_fluid().
|
inline |
Broken assignment operator.
Set solid preconditioner (deletes existing one)
Definition at line 134 of file fsi_preconditioners.h.
References solid_preconditioner_pt(), and Solid_preconditioner_pt.
|
inline |
Setter function for the mesh containing the block-preconditionable FSI solid elements. The optional argument indicates if there are more than one type of elements in the same mesh.
Definition at line 192 of file fsi_preconditioners.h.
References Allow_multiple_element_type_in_wall_mesh, preconditioner_solve(), setup(), and Wall_mesh_pt.
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::set_navier_stokes_mesh().
void oomph::FSIPreconditioner::setup | ( | ) |
Setup the preconditioner.
Setup the preconditioner. Note: Matrix must be a CRDoubleMatrix.
Definition at line 279 of file fsi_preconditioners.h.
References Allow_multiple_element_type_in_navier_stokes_mesh, Allow_multiple_element_type_in_wall_mesh, Doc_time, Matrix_vector_product_0_1_pt, Matrix_vector_product_1_0_pt, Navier_stokes_mesh_pt, Navier_stokes_preconditioner_pt, Preconditioner_has_been_setup, Retain_fluid_onto_solid_terms, Retain_solid_onto_fluid_terms, set_navier_stokes_mesh(), Solid_preconditioner_pt, and Wall_mesh_pt.
Referenced by set_wall_mesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::set_wall_mesh().
|
inline |
Read-only access to solid preconditoner (use set_... to set it)
Definition at line 145 of file fsi_preconditioners.h.
References Solid_preconditioner_pt.
Referenced by set_solid_preconditioner_pt().
|
inline |
Switch to block-diagonal preconditioner.
Definition at line 152 of file fsi_preconditioners.h.
References Retain_fluid_onto_solid_terms, and Retain_solid_onto_fluid_terms.
|
inline |
Switch to block-triangular preconditioner in which action of fluid dofs onto solid equations is retained.
Definition at line 160 of file fsi_preconditioners.h.
References Retain_fluid_onto_solid_terms, and Retain_solid_onto_fluid_terms.
|
inline |
Switch to block-triangular preconditioner in which action of solid dofs onto fluid equations is retained.
Definition at line 168 of file fsi_preconditioners.h.
References Retain_fluid_onto_solid_terms, Retain_solid_onto_fluid_terms, and set_navier_stokes_mesh().
|
private |
Flag to indicate if there are multiple element types in the Navier-Stokes mesh.
Definition at line 260 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_navier_stokes_mesh(), oomph::SimpleFSIPreconditioner< MATRIX >::set_navier_stokes_mesh(), setup(), oomph::SimpleFSIPreconditioner< MATRIX >::setup(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().
|
private |
|
private |
Set Doc_time to true for outputting results of timings.
Definition at line 250 of file fsi_preconditioners.h.
Referenced by disable_doc_time(), enable_doc_time(), FSIPreconditioner(), and setup().
|
private |
Pointer to fluid/solid interaction matrix.
Definition at line 233 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), setup(), and ~FSIPreconditioner().
|
private |
Pointer to solid/fluid solid interaction matrix.
Definition at line 236 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), setup(), and ~FSIPreconditioner().
|
private |
Pointer to the navier stokes mesh.
Definition at line 253 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_navier_stokes_mesh(), oomph::SimpleFSIPreconditioner< MATRIX >::set_navier_stokes_mesh(), setup(), oomph::SimpleFSIPreconditioner< MATRIX >::setup(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().
|
private |
Pointer the Navier Stokes preconditioner (inexact solver)
Definition at line 227 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), navier_stokes_preconditioner_pt(), preconditioner_solve(), setup(), and ~FSIPreconditioner().
|
private |
Boolean indicating the preconditioner has been set up.
Definition at line 239 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), and setup().
|
private |
Boolean flag used to indicate that the fluid onto solid interaction terms are to be retained.
Definition at line 247 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), oomph::SimpleFSIPreconditioner< MATRIX >::identify_required_blocks(), preconditioner_solve(), setup(), oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner(), use_block_diagonal_version(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_diagonal_version(), use_block_triangular_version_with_fluid_on_solid(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_fluid_on_solid(), use_block_triangular_version_with_solid_on_fluid(), and oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_solid_on_fluid().
|
private |
Boolean flag used to indicate that the solid onto fluid interaction terms are to be retained.
Definition at line 243 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), oomph::SimpleFSIPreconditioner< MATRIX >::identify_required_blocks(), preconditioner_solve(), setup(), oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner(), use_block_diagonal_version(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_diagonal_version(), use_block_triangular_version_with_fluid_on_solid(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_fluid_on_solid(), use_block_triangular_version_with_solid_on_fluid(), and oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_solid_on_fluid().
|
private |
Pointer to the solid preconditioner (inexact solver)
Definition at line 230 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), set_solid_preconditioner_pt(), setup(), solid_preconditioner_pt(), and ~FSIPreconditioner().
|
private |
pointer to the solid mesh
Definition at line 256 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_wall_mesh(), oomph::SimpleFSIPreconditioner< MATRIX >::set_wall_mesh(), setup(), oomph::SimpleFSIPreconditioner< MATRIX >::setup(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().