26#ifndef OOMPH_PSEUDO_ELASTIC_FSI_PRECONDITIONER
27#define OOMPH_PSEUDO_ELASTIC_FSI_PRECONDITIONER
30#include "generic/problem.h"
31#include "generic/block_preconditioner.h"
32#include "generic/preconditioner.h"
33#include "generic/SuperLU_preconditioner.h"
34#include "generic/matrix_vector_product.h"
35#include "../navier_stokes/navier_stokes_preconditioners.h"
36#include "generic/general_purpose_block_preconditioners.h"
61 :
public BlockPreconditioner<CRDoubleMatrix>
85 ExactPreconditionerFactory::create_exact_preconditioner();
87 new NavierStokesSchurComplementPreconditioner(problem_pt);
94 ExactPreconditionerFactory::create_exact_preconditioner();
215 NavierStokesSchurComplementPreconditioner*
Preconditioner for FSI problems with pseudo-elastic fluid node updates. Note: NavierStokesSchurComple...
MatrixVectorProduct * Solid_pseudo_elastic_matvec_pt
solid onto pseudo solid matrix vector operatio
Mesh * Lagrange_multiplier_mesh_pt
Mesh containing the lagrange multiplier elements.
MatrixVectorProduct * Lagrange_solid_matvec_pt
void enable_navier_stokes_schur_complement_preconditioner()
Call to use the Navier Stokes Schur complement preconditioner.
void clean_up_memory()
Broken assignment operator.
Preconditioner * Solid_preconditioner_pt
pointer to the solid preconditioner
NavierStokesSchurComplementPreconditioner * Navier_stokes_schur_complement_preconditioner_pt
Navier Stokes Schur complement preconditioner.
PseudoElasticPreconditioner *const pseudo_elastic_preconditioner_pt()
Access function to the pseudo elastic subsidiary preconditioner.
void setup()
Setup the precoonditioner.
Preconditioner * Navier_stokes_preconditioner_pt
pointer to the navier stokes precondtioner
MatrixVectorProduct * Fluid_pseudo_elastic_matvec_pt
fluid onto pseudosolid matrix vector operator
MatrixVectorProduct * Solid_fluid_matvec_pt
solid onto fluid matrix vector operatio
void set_fluid_and_pseudo_elastic_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the combined fluid/pseudo solid elements
virtual ~PseudoElasticFSIPreconditioner()
void set_solid_preconditioner(Preconditioner *prec_pt)
speicify a non default solid preconditioner. This preconditioner will not delete it
Mesh * Fluid_and_pseudo_elastic_mesh_pt
Mesh containing the combined fluid and pseudo solid element.
PseudoElasticFSIPreconditioner(const unsigned &dim, Problem *problem_pt)
constructor - just set defaults. Specify the spatial dimension of the fluid and a (non-const) problem...
bool Solid_preconditioner_is_block_preconditioner
boolean flag to indicate whether the Solid preconditioner is a block preconditioner
bool Use_navier_stokes_schur_complement_preconditioner
If true the Navier Stokes Schur complement preconditioner is used. Otherwise ExactPreconditioner is u...
bool Using_default_solid_preconditioner
boolean flag to indicate whether default Solid preconditioner is used
NavierStokesSchurComplementPreconditioner *const navier_stokes_schur_complement_preconditioner_pt()
Access function to the Navier Stokes Schur complement preconditioner.
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the preconditioner.
void set_lagrange_multiplier_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the lagrange multiplier elements
unsigned Dim
the dimension of the fluid
void disable_navier_stokes_schur_complement_preconditioner()
Call to use the ExactPreconditioner is used for the Navier Stokes subsidiary system.
void set_solid_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the solid elements
PseudoElasticFSIPreconditioner(const PseudoElasticFSIPreconditioner &)=delete
Broken copy constructor.
PseudoElasticPreconditioner * Pseudo_elastic_preconditioner_pt
pointer to the pseudo solid preconditioner
Mesh * Solid_mesh_pt
Mesh containing the solid elements.
A subsidiary preconditioner for the pseudo-elastic FSI preconditioner. Also a stand-alone preconditio...