Preconditioner for FSI problems with pseudo-elastic fluid node updates. Note: NavierStokesSchurComplementPreconditioner is applied to the Navier Stokes subsidiary system. Default solid preconditioner is SuperLUPreconditioner. Enumeration of Elastic DOF types in the Pseudo-Elastic Elements The method get_dof_types_for_unknowns() must be implemented such that DOFs subject be Lagrange multiplier and DOFs NOT subject to Lagrange multiplier have different labels. For example in a 3D problem there are 6 DOF types and the following labelling must be implemented: 0 - x displacement (without lagr mult traction) 1 - y displacement (without lagr mult traction) 2 - z displacement (without lagr mult traction) 3 - x displacement (with lagr mult traction) 4 - y displacement (with lagr mult traction) 5 - z displacement (with lagr mult traction) More...
#include <pseudo_elastic_fsi_preconditioner.h>
Public Member Functions | |
PseudoElasticFSIPreconditioner (const unsigned &dim, Problem *problem_pt) | |
constructor - just set defaults. Specify the spatial dimension of the fluid and a (non-const) problem pointer needed for the underlying NavierStokesSchurComplementPreconditioner. More... | |
virtual | ~PseudoElasticFSIPreconditioner () |
PseudoElasticFSIPreconditioner (const PseudoElasticFSIPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | clean_up_memory () |
Broken assignment operator. More... | |
void | setup () |
Setup the precoonditioner. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply the preconditioner. More... | |
void | set_fluid_and_pseudo_elastic_mesh_pt (Mesh *mesh_pt) |
specify the mesh containing the combined fluid/pseudo solid elements More... | |
void | set_solid_mesh_pt (Mesh *mesh_pt) |
specify the mesh containing the solid elements More... | |
void | set_lagrange_multiplier_mesh_pt (Mesh *mesh_pt) |
specify the mesh containing the lagrange multiplier elements More... | |
void | set_solid_preconditioner (Preconditioner *prec_pt) |
speicify a non default solid preconditioner. This preconditioner will not delete it More... | |
PseudoElasticPreconditioner *const | pseudo_elastic_preconditioner_pt () |
Access function to the pseudo elastic subsidiary preconditioner. More... | |
NavierStokesSchurComplementPreconditioner *const | navier_stokes_schur_complement_preconditioner_pt () |
Access function to the Navier Stokes Schur complement preconditioner. More... | |
void | enable_navier_stokes_schur_complement_preconditioner () |
Call to use the Navier Stokes Schur complement preconditioner. More... | |
void | disable_navier_stokes_schur_complement_preconditioner () |
Call to use the SuperLUPreconditioner is used for the Navier Stokes subsidiary system. More... | |
Private Attributes | |
PseudoElasticPreconditioner * | Pseudo_elastic_preconditioner_pt |
pointer to the pseudo solid preconditioner More... | |
Preconditioner * | Navier_stokes_preconditioner_pt |
pointer to the navier stokes precondtioner More... | |
NavierStokesSchurComplementPreconditioner * | Navier_stokes_schur_complement_preconditioner_pt |
Navier Stokes Schur complement preconditioner. More... | |
Preconditioner * | Solid_preconditioner_pt |
pointer to the solid preconditioner More... | |
bool | Using_default_solid_preconditioner |
boolean flag to indicate whether default Solid preconditioner is used More... | |
bool | Solid_preconditioner_is_block_preconditioner |
boolean flag to indicate whether the Solid preconditioner is a block preconditioner More... | |
MatrixVectorProduct * | Fluid_pseudo_elastic_matvec_pt |
fluid onto pseudosolid matrix vector operator More... | |
MatrixVectorProduct * | Solid_fluid_matvec_pt |
solid onto fluid matrix vector operatio More... | |
MatrixVectorProduct * | Solid_pseudo_elastic_matvec_pt |
solid onto pseudo solid matrix vector operatio More... | |
MatrixVectorProduct * | Lagrange_solid_matvec_pt |
Mesh * | Fluid_and_pseudo_elastic_mesh_pt |
Mesh containing the combined fluid and pseudo solid element. More... | |
Mesh * | Solid_mesh_pt |
Mesh containing the solid elements. More... | |
Mesh * | Lagrange_multiplier_mesh_pt |
Mesh containing the lagrange multiplier elements. More... | |
unsigned | Dim |
the dimension of the fluid More... | |
bool | Use_navier_stokes_schur_complement_preconditioner |
If true the Navier Stokes Schur complement preconditioner is used. Otherwise SuperLUPreconditioner is used for the Navier Stokes subsidiary system. More... | |
Preconditioner for FSI problems with pseudo-elastic fluid node updates. Note: NavierStokesSchurComplementPreconditioner is applied to the Navier Stokes subsidiary system. Default solid preconditioner is SuperLUPreconditioner. Enumeration of Elastic DOF types in the Pseudo-Elastic Elements The method get_dof_types_for_unknowns() must be implemented such that DOFs subject be Lagrange multiplier and DOFs NOT subject to Lagrange multiplier have different labels. For example in a 3D problem there are 6 DOF types and the following labelling must be implemented: 0 - x displacement (without lagr mult traction) 1 - y displacement (without lagr mult traction) 2 - z displacement (without lagr mult traction) 3 - x displacement (with lagr mult traction) 4 - y displacement (with lagr mult traction) 5 - z displacement (with lagr mult traction)
Definition at line 60 of file pseudo_elastic_fsi_preconditioner.h.
|
inline |
constructor - just set defaults. Specify the spatial dimension of the fluid and a (non-const) problem pointer needed for the underlying NavierStokesSchurComplementPreconditioner.
Definition at line 67 of file pseudo_elastic_fsi_preconditioner.h.
References Fluid_and_pseudo_elastic_mesh_pt, Fluid_pseudo_elastic_matvec_pt, Lagrange_multiplier_mesh_pt, Lagrange_solid_matvec_pt, Navier_stokes_preconditioner_pt, Navier_stokes_schur_complement_preconditioner_pt, Pseudo_elastic_preconditioner_pt, Solid_fluid_matvec_pt, Solid_mesh_pt, Solid_preconditioner_pt, Solid_pseudo_elastic_matvec_pt, Use_navier_stokes_schur_complement_preconditioner, and Using_default_solid_preconditioner.
|
inlinevirtual |
Definition at line 102 of file pseudo_elastic_fsi_preconditioner.h.
References clean_up_memory(), Fluid_pseudo_elastic_matvec_pt, Lagrange_solid_matvec_pt, Navier_stokes_preconditioner_pt, Navier_stokes_schur_complement_preconditioner_pt, Pseudo_elastic_preconditioner_pt, Solid_fluid_matvec_pt, Solid_preconditioner_pt, Solid_pseudo_elastic_matvec_pt, and Using_default_solid_preconditioner.
|
delete |
Broken copy constructor.
void oomph::PseudoElasticFSIPreconditioner::clean_up_memory | ( | ) |
Broken assignment operator.
clean up memory method
Definition at line 34 of file pseudo_elastic_fsi_preconditioner.cc.
References oomph::PseudoElasticPreconditioner::clean_up_memory(), Fluid_pseudo_elastic_matvec_pt, Lagrange_solid_matvec_pt, Navier_stokes_preconditioner_pt, Navier_stokes_schur_complement_preconditioner_pt, Pseudo_elastic_preconditioner_pt, Solid_fluid_matvec_pt, Solid_preconditioner_pt, and Solid_pseudo_elastic_matvec_pt.
Referenced by setup(), and ~PseudoElasticFSIPreconditioner().
|
inline |
Call to use the SuperLUPreconditioner is used for the Navier Stokes subsidiary system.
Definition at line 200 of file pseudo_elastic_fsi_preconditioner.h.
References Use_navier_stokes_schur_complement_preconditioner.
|
inline |
Call to use the Navier Stokes Schur complement preconditioner.
Definition at line 193 of file pseudo_elastic_fsi_preconditioner.h.
References Use_navier_stokes_schur_complement_preconditioner.
|
inline |
Access function to the Navier Stokes Schur complement preconditioner.
Definition at line 186 of file pseudo_elastic_fsi_preconditioner.h.
References Navier_stokes_schur_complement_preconditioner_pt.
void oomph::PseudoElasticFSIPreconditioner::preconditioner_solve | ( | const DoubleVector & | r, |
DoubleVector & | z | ||
) |
Apply the preconditioner.
Definition at line 280 of file pseudo_elastic_fsi_preconditioner.cc.
References oomph::PseudoElasticPreconditioner::elastic_preconditioner_solve(), Fluid_pseudo_elastic_matvec_pt, oomph::PseudoElasticPreconditioner::lagrange_multiplier_preconditioner_solve(), Lagrange_solid_matvec_pt, Navier_stokes_preconditioner_pt, Navier_stokes_schur_complement_preconditioner_pt, Pseudo_elastic_preconditioner_pt, Solid_fluid_matvec_pt, Solid_preconditioner_is_block_preconditioner, Solid_preconditioner_pt, Solid_pseudo_elastic_matvec_pt, and Use_navier_stokes_schur_complement_preconditioner.
|
inline |
Access function to the pseudo elastic subsidiary preconditioner.
Definition at line 180 of file pseudo_elastic_fsi_preconditioner.h.
References Pseudo_elastic_preconditioner_pt.
|
inline |
specify the mesh containing the combined fluid/pseudo solid elements
Definition at line 150 of file pseudo_elastic_fsi_preconditioner.h.
References Fluid_and_pseudo_elastic_mesh_pt.
|
inline |
specify the mesh containing the lagrange multiplier elements
Definition at line 162 of file pseudo_elastic_fsi_preconditioner.h.
References Lagrange_multiplier_mesh_pt.
|
inline |
specify the mesh containing the solid elements
Definition at line 156 of file pseudo_elastic_fsi_preconditioner.h.
References Solid_mesh_pt.
|
inline |
speicify a non default solid preconditioner. This preconditioner will not delete it
Definition at line 169 of file pseudo_elastic_fsi_preconditioner.h.
References Solid_preconditioner_pt, and Using_default_solid_preconditioner.
void oomph::PseudoElasticFSIPreconditioner::setup | ( | ) |
Setup the precoonditioner.
Definition at line 52 of file pseudo_elastic_fsi_preconditioner.cc.
References clean_up_memory(), Dim, Fluid_and_pseudo_elastic_mesh_pt, Fluid_pseudo_elastic_matvec_pt, Lagrange_multiplier_mesh_pt, Lagrange_solid_matvec_pt, Navier_stokes_preconditioner_pt, Navier_stokes_schur_complement_preconditioner_pt, Pseudo_elastic_preconditioner_pt, oomph::PseudoElasticPreconditioner::set_elastic_mesh(), oomph::PseudoElasticPreconditioner::set_lagrange_multiplier_mesh(), Solid_fluid_matvec_pt, Solid_mesh_pt, Solid_preconditioner_is_block_preconditioner, Solid_preconditioner_pt, Solid_pseudo_elastic_matvec_pt, and Use_navier_stokes_schur_complement_preconditioner.
|
private |
the dimension of the fluid
Definition at line 249 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by setup().
|
private |
Mesh containing the combined fluid and pseudo solid element.
Definition at line 240 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by PseudoElasticFSIPreconditioner(), set_fluid_and_pseudo_elastic_mesh_pt(), and setup().
|
private |
fluid onto pseudosolid matrix vector operator
Definition at line 228 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
Mesh containing the lagrange multiplier elements.
Definition at line 246 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by PseudoElasticFSIPreconditioner(), set_lagrange_multiplier_mesh_pt(), and setup().
|
private |
Definition at line 237 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
pointer to the navier stokes precondtioner
Definition at line 210 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
Navier Stokes Schur complement preconditioner.
Definition at line 214 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), navier_stokes_schur_complement_preconditioner_pt(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
pointer to the pseudo solid preconditioner
Definition at line 207 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), pseudo_elastic_preconditioner_pt(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
solid onto fluid matrix vector operatio
Definition at line 231 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
Mesh containing the solid elements.
Definition at line 243 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by PseudoElasticFSIPreconditioner(), set_solid_mesh_pt(), and setup().
|
private |
boolean flag to indicate whether the Solid preconditioner is a block preconditioner
Definition at line 225 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by preconditioner_solve(), and setup().
|
private |
pointer to the solid preconditioner
Definition at line 217 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), set_solid_preconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
solid onto pseudo solid matrix vector operatio
Definition at line 234 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by clean_up_memory(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), setup(), and ~PseudoElasticFSIPreconditioner().
|
private |
If true the Navier Stokes Schur complement preconditioner is used. Otherwise SuperLUPreconditioner is used for the Navier Stokes subsidiary system.
Definition at line 254 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by disable_navier_stokes_schur_complement_preconditioner(), enable_navier_stokes_schur_complement_preconditioner(), preconditioner_solve(), PseudoElasticFSIPreconditioner(), and setup().
|
private |
boolean flag to indicate whether default Solid preconditioner is used
Definition at line 221 of file pseudo_elastic_fsi_preconditioner.h.
Referenced by PseudoElasticFSIPreconditioner(), set_solid_preconditioner(), and ~PseudoElasticFSIPreconditioner().