13#include "libmesh/libmesh_config.h"
29#if PETSC_RELEASE_GREATER_EQUALS(3, 20, 0)
const InputParameters & parameters() const
A problem that handles Schur complement preconditioning of the incompressible Navier-Stokes equations...
void setupLSCMatrices(PC schur_pc)
Set up the Least Squares Commutator (LSC) preconditioner for the Schur complement.
TagID massMatrixTagID() const
virtual void initialSetup() override
std::vector< IS > _index_sets
This will end up being the same length as _schur_fs_index.
const TagName & _mass_matrix
The tag name of the mass matrix.
void setFieldSplitPostSetUp(PC pc, std::size_t tree_position)
Install the post-setup callback and its context on a field split PC.
static PetscErrorCode fieldSplitPostSetUpCallback(PC pc)
Run after PETSc sets up a field split in the tree leading to the Schur complement.
const bool _commute_lsc
Whether to commute operators in the style of Olshanskii.
Mat _L
The Poisson operator.
SetSchurPreType
Whether and what to set as the user-provided Schur complement preconditioner MASS is only appropriate...
enum NavierStokesProblem::SetSchurPreType _set_schur_pre
Mat _Q_scale
The mass matrix used for scaling.
const bool _have_L_matrix
Whether the user attached a Poisson operator matrix.
static InputParameters validParams()
const bool _have_mass_matrix
Whether the user attached a mass matrix.
std::vector< FieldSplitPostSetUpContext > _field_split_post_setup_contexts
Stable callback contexts for each level of the field split tree and its terminal node.
virtual ~NavierStokesProblem()
Will destroy any matrices we allocated.
virtual void initPetscOutputAndSomeSolverSettings() override
Reinitialize PETSc output for proper linear/nonlinear iteration display.
void fieldSplitPostSetUp(PC pc, std::size_t tree_position)
Continue through the field split tree or set up the target Schur complement matrices.
const TagName & _L_matrix
The tag name of the Poisson operator.
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...
TagID LMatrixTagID() const
virtual TagID getMatrixTagID(const TagName &tag_name) const
Context object attached to a field split PC via PCSetApplicationContext so that the static fieldSplit...
NavierStokesProblem * problem
The problem that owns the field split tree being set up.
std::size_t tree_position
The position of this PC within the field split tree; see _schur_fs_index.