//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// 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 &)=delete | |
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 |
Flag to indicate if there are multiple element types in the Navier-Stokes mesh. More... | |
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 50 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 56 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 93 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.
|
delete |
Broken copy constructor.
|
inline |
Disable documentation of time.
Definition at line 211 of file fsi_preconditioners.h.
References Doc_time.
|
inline |
Enable documentation of time.
Definition at line 205 of file fsi_preconditioners.h.
References Doc_time.
|
inline |
Access function to the Navier Stokes preconditioner (inexact solver)
Definition at line 198 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 373 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.
|
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 164 of file fsi_preconditioners.h.
References Allow_multiple_element_type_in_navier_stokes_mesh, and Navier_stokes_mesh_pt.
|
inline |
Broken assignment operator.
Set solid preconditioner (deletes existing one)
Definition at line 121 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 179 of file fsi_preconditioners.h.
References Allow_multiple_element_type_in_wall_mesh, and Wall_mesh_pt.
void oomph::FSIPreconditioner::setup | ( | ) |
Setup the preconditioner.
///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////// Setup the preconditioner. Note: Matrix must be a CRDoubleMatrix.
Definition at line 269 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 |
Read-only access to solid preconditoner (use set_... to set it)
Definition at line 132 of file fsi_preconditioners.h.
References Solid_preconditioner_pt.
Referenced by set_solid_preconditioner_pt().
|
inline |
Switch to block-diagonal preconditioner.
Definition at line 139 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 147 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 155 of file fsi_preconditioners.h.
References Retain_fluid_onto_solid_terms, and Retain_solid_onto_fluid_terms.
|
private |
Flag to indicate if there are multiple element types in the Navier-Stokes mesh.
Definition at line 252 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_navier_stokes_mesh(), and setup().
|
private |
Definition at line 255 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_wall_mesh(), and setup().
|
private |
Set Doc_time to true for outputting results of timings.
Definition at line 242 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 225 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), setup(), and ~FSIPreconditioner().
|
private |
Pointer to solid/fluid solid interaction matrix.
Definition at line 228 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), setup(), and ~FSIPreconditioner().
|
private |
Pointer to the navier stokes mesh.
Definition at line 245 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_navier_stokes_mesh(), and setup().
|
private |
Pointer the Navier Stokes preconditioner (inexact solver)
Definition at line 219 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 231 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 239 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), setup(), use_block_diagonal_version(), use_block_triangular_version_with_fluid_on_solid(), and 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 235 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), preconditioner_solve(), setup(), use_block_diagonal_version(), use_block_triangular_version_with_fluid_on_solid(), and use_block_triangular_version_with_solid_on_fluid().
|
private |
Pointer to the solid preconditioner (inexact solver)
Definition at line 222 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 248 of file fsi_preconditioners.h.
Referenced by FSIPreconditioner(), set_wall_mesh(), and setup().