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. Blocks are then re-assembled into one global matrix and solved with a direct solver (SuperLU in its incarnation as an exact preconditioner). By default we retain the fluid on solid off diagonal blocks. More...
#include <fsi_preconditioners.h>
Public Member Functions | |
SimpleFSIPreconditioner () | |
Constructor. More... | |
~SimpleFSIPreconditioner () | |
Destructor: Clean up. More... | |
SimpleFSIPreconditioner (const SimpleFSIPreconditioner &) | |
Broken copy constructor. More... | |
void | set_navier_stokes_mesh (Mesh *mesh_pt, const bool &allow_multiple_element_type_in_navier_stokes_mesh=false) |
Broken assignment operator. 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. More... | |
void | setup () |
Setup the preconditioner. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to r. 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... | |
Private Member Functions | |
virtual void | identify_required_blocks (DenseMatrix< bool > &required_blocks) |
Identify the required blocks: Here we only need the momentum, gradient and divergence blocks of the 2x2 block-structured fluid matrix, the 1x1 solid block and the selected FSI-off diagonals. More... | |
Private Attributes | |
Preconditioner * | Preconditioner_pt |
Preconditioner (inexact solver) 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... | |
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 for multiple element types in the Navier-Stokes mesh. More... | |
bool | Allow_multiple_element_type_in_wall_mesh |
Flag for multiple element types in the Wall mesh. More... | |
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. Blocks are then re-assembled into one global matrix and solved with a direct solver (SuperLU in its incarnation as an exact preconditioner). By default we retain the fluid on solid off diagonal blocks.
Definition at line 499 of file fsi_preconditioners.h.
|
inline |
Constructor.
Definition at line 505 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Allow_multiple_element_type_in_navier_stokes_mesh, oomph::FSIPreconditioner::Allow_multiple_element_type_in_wall_mesh, oomph::FSIPreconditioner::Navier_stokes_mesh_pt, oomph::FSIPreconditioner::Retain_fluid_onto_solid_terms, oomph::FSIPreconditioner::Retain_solid_onto_fluid_terms, and oomph::FSIPreconditioner::Wall_mesh_pt.
|
inline |
Destructor: Clean up.
Definition at line 527 of file fsi_preconditioners.h.
|
inline |
Broken copy constructor.
Definition at line 540 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::set_navier_stokes_mesh().
|
privatevirtual |
Identify the required blocks: Here we only need the momentum, gradient and divergence blocks of the 2x2 block-structured fluid matrix, the 1x1 solid block and the selected FSI-off diagonals.
Identify the required blocks: Here we only need the momentum, gradient and divergence blocks of the 2x2 block-structured fluid matrix, the 1x1 solid block and the selected FSI-off diagonals.
Definition at line 658 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Retain_fluid_onto_solid_terms, oomph::FSIPreconditioner::Retain_solid_onto_fluid_terms, and oomph::SimpleFSIPreconditioner< MATRIX >::setup().
void oomph::SimpleFSIPreconditioner< MATRIX >::preconditioner_solve | ( | const DoubleVector & | r, |
DoubleVector & | z | ||
) |
Apply preconditioner to r.
Apply preconditioner to Vector r.
Definition at line 797 of file fsi_preconditioners.h.
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::setup().
|
inline |
Broken assignment operator.
Setter function for the mesh containing the block-preconditionable Navier-Stokes elements.
Definition at line 555 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Allow_multiple_element_type_in_navier_stokes_mesh, oomph::FSIPreconditioner::Navier_stokes_mesh_pt, and oomph::FSIPreconditioner::set_wall_mesh().
|
inline |
Setter function for the mesh containing the block-preconditionable FSI solid elements.
Definition at line 569 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Allow_multiple_element_type_in_wall_mesh, oomph::FSIPreconditioner::preconditioner_solve(), oomph::FSIPreconditioner::setup(), and oomph::FSIPreconditioner::Wall_mesh_pt.
void oomph::SimpleFSIPreconditioner< MATRIX >::setup | ( | ) |
Setup the preconditioner.
Setup the preconditioner: Copy the upper/lower triangular block matrices back into a big matrix (with the entries re-ordered relative to the original Jacobian matrix).
Definition at line 712 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Allow_multiple_element_type_in_navier_stokes_mesh, oomph::FSIPreconditioner::Allow_multiple_element_type_in_wall_mesh, oomph::FSIPreconditioner::Navier_stokes_mesh_pt, oomph::SimpleFSIPreconditioner< MATRIX >::preconditioner_solve(), and oomph::FSIPreconditioner::Wall_mesh_pt.
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::identify_required_blocks().
|
inline |
Switch to block-diagonal preconditioner.
Definition at line 588 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Retain_fluid_onto_solid_terms, and oomph::FSIPreconditioner::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 596 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Retain_fluid_onto_solid_terms, and oomph::FSIPreconditioner::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 604 of file fsi_preconditioners.h.
References oomph::FSIPreconditioner::Retain_fluid_onto_solid_terms, and oomph::FSIPreconditioner::Retain_solid_onto_fluid_terms.
|
private |
Flag for multiple element types in the Navier-Stokes mesh.
Definition at line 636 of file fsi_preconditioners.h.
|
private |
Flag for multiple element types in the Wall mesh.
Definition at line 639 of file fsi_preconditioners.h.
|
private |
Pointer to the navier stokes mesh.
Definition at line 630 of file fsi_preconditioners.h.
|
private |
Preconditioner (inexact solver)
Definition at line 613 of file fsi_preconditioners.h.
|
private |
Boolean flag used to indicate that the fluid onto solid interaction terms are to be retained.
Definition at line 621 of file fsi_preconditioners.h.
|
private |
Boolean flag used to indicate that the solid onto fluid interaction terms are to be retained.
Definition at line 617 of file fsi_preconditioners.h.
|
private |
pointer to the solid mesh
Definition at line 633 of file fsi_preconditioners.h.