13 #include "libmesh/libmesh_config.h" 14 #include <petscsnes.h> 29 #if PETSC_RELEASE_GREATER_EQUALS(3, 20, 0) const bool _have_mass_matrix
Whether the user attached a mass matrix.
const std::vector< unsigned int > & _schur_fs_index
The length of this vector should correspond to the number of split nesting levels there are in the fi...
void clearIndexSets()
Clear the field split index sets.
std::vector< IS > _index_sets
This will end up being the same length as _schur_fs_index.
Mat _L
The Poisson operator.
virtual ~NavierStokesProblem()
Will destroy any matrices we allocated.
KSP findSchurKSP(KSP node, unsigned int tree_position)
virtual TagID getMatrixTagID(const TagName &tag_name) const
NavierStokesProblem(const InputParameters ¶meters)
const bool _commute_lsc
Whether to commute operators in the style of Olshanskii.
A problem that handles Schur complement preconditioning of the incompressible Navier-Stokes equations...
const bool _pressure_mass_matrix_as_pre
Whether to directly use the pressure mass matrix to form the Schur complement preconditioner.
virtual void initPetscOutputAndSomeSolverSettings() override
Reinitialize PETSc output for proper linear/nonlinear iteration display.
Mat _Q_scale
The mass matrix used for scaling.
const TagName & _L_matrix
The tag name of the Poisson operator.
TagID LMatrixTagID() const
const TagName & _mass_matrix
The tag name of the mass matrix.
void setupLSCMatrices(KSP schur_ksp)
Setup the Least Squares Commutator (LSC) preconditioner given the Schur complement KSP object...
const InputParameters & parameters() const
static InputParameters validParams()
TagID massMatrixTagID() const
const bool _have_L_matrix
Whether the user attached a Poisson operator matrix.