![]() |
|
#include <solid_preconditioners.h>
Public Member Functions | |
PressureBasedSolidLSCPreconditioner () | |
Constructor - sets defaults for control flags. More... | |
~PressureBasedSolidLSCPreconditioner () | |
Destructor. More... | |
PressureBasedSolidLSCPreconditioner (const PressureBasedSolidLSCPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | setup () |
Broken assignment operator. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to Vector r. More... | |
void | set_solid_mesh (Mesh *mesh_pt) |
void | enable_p_matrix_scaling () |
void | disable_p_matrix_scaling () |
bool | is_p_matrix_using_scaling () const |
void | set_p_preconditioner (Preconditioner *new_p_preconditioner_pt) |
Function to set a new pressure matrix preconditioner (inexact solver) More... | |
void | set_p_superlu_preconditioner () |
void | set_f_preconditioner (Preconditioner *new_f_preconditioner_pt) |
Function to set a new momentum matrix preconditioner (inexact solver) More... | |
void | set_f_superlu_preconditioner () |
void | enable_doc_time () |
Enable documentation of time. More... | |
void | disable_doc_time () |
Disable documentation of time. More... | |
void | enable_form_BFBt_product () |
void | disable_form_BFBt_product () |
void | clean_up_memory () |
Helper function to delete preconditioner data. More... | |
![]() | |
BlockPreconditioner () | |
Constructor. More... | |
BlockPreconditioner (const BlockPreconditioner &)=delete | |
Broken copy constructor. More... | |
virtual | ~BlockPreconditioner () |
Destructor. More... | |
void | operator= (const BlockPreconditioner &)=delete |
Broken assignment operator. More... | |
CRDoubleMatrix * | matrix_pt () const |
void | turn_on_recursive_debug_flag () |
void | turn_off_recursive_debug_flag () |
void | turn_on_debug_flag () |
Toggles on the debug flag. More... | |
void | turn_off_debug_flag () |
Toggles off the debug flag. More... | |
void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse) |
void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse) |
virtual void | block_setup () |
void | block_setup (const Vector< unsigned > &dof_to_block_map) |
void | get_block (const unsigned &i, const unsigned &j, CRDoubleMatrix &output_matrix, const bool &ignore_replacement_block=false) const |
CRDoubleMatrix | get_block (const unsigned &i, const unsigned &j, const bool &ignore_replacement_block=false) const |
void | set_master_matrix_pt (CRDoubleMatrix *in_matrix_pt) |
Set the matrix_pt in the upper-most master preconditioner. More... | |
void | get_block_other_matrix (const unsigned &i, const unsigned &j, CRDoubleMatrix *in_matrix_pt, CRDoubleMatrix &output_matrix) |
void | get_blocks (DenseMatrix< bool > &required_blocks, DenseMatrix< CRDoubleMatrix * > &block_matrix_pt) const |
void | get_dof_level_block (const unsigned &i, const unsigned &j, CRDoubleMatrix &output_block, const bool &ignore_replacement_block=false) const |
void | get_dof_level_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block, const bool &ignore_replacement_block) const |
CRDoubleMatrix | get_concatenated_block (const VectorMatrix< BlockSelector > &selected_block) |
void | get_concatenated_block_vector (const Vector< unsigned > &block_vec_number, const DoubleVector &v, DoubleVector &b) |
void | return_concatenated_block_vector (const Vector< unsigned > &block_vec_number, const DoubleVector &b, DoubleVector &v) const |
Takes concatenated block ordered vector, b, and copies its. More... | |
void | get_block_vectors (const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const |
void | get_block_vectors (const DoubleVector &v, Vector< DoubleVector > &s) const |
void | return_block_vectors (const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const |
void | return_block_vectors (const Vector< DoubleVector > &s, DoubleVector &v) const |
void | get_block_vector (const unsigned &n, const DoubleVector &v, DoubleVector &b) const |
void | return_block_vector (const unsigned &n, const DoubleVector &b, DoubleVector &v) const |
void | get_block_ordered_preconditioner_vector (const DoubleVector &v, DoubleVector &w) |
void | return_block_ordered_preconditioner_vector (const DoubleVector &w, DoubleVector &v) const |
unsigned | nblock_types () const |
Return the number of block types. More... | |
unsigned | ndof_types () const |
Return the total number of DOF types. More... | |
const Mesh * | mesh_pt (const unsigned &i) const |
unsigned | nmesh () const |
int | block_number (const unsigned &i_dof) const |
Return the block number corresponding to a global index i_dof. More... | |
int | index_in_block (const unsigned &i_dof) const |
const LinearAlgebraDistribution * | block_distribution_pt (const unsigned &b) const |
Access function to the block distributions (const version). More... | |
LinearAlgebraDistribution * | block_distribution_pt (const unsigned b) |
Access function to the block distributions (non-const version). More... | |
LinearAlgebraDistribution * | dof_block_distribution_pt (const unsigned &b) |
Access function to the dof-level block distributions. More... | |
const LinearAlgebraDistribution * | master_distribution_pt () const |
unsigned | ndof_types_in_mesh (const unsigned &i) const |
bool | is_subsidiary_block_preconditioner () const |
bool | is_master_block_preconditioner () const |
void | set_block_output_to_files (const std::string &basefilename) |
void | disable_block_output_to_files () |
Turn off output of blocks (by clearing the basefilename string). More... | |
bool | block_output_on () const |
Test if output of blocks is on or not. More... | |
void | output_blocks_to_files (const std::string &basefilename, const unsigned &precision=8) const |
void | post_block_matrix_assembly_partial_clear () |
BlockPreconditioner< CRDoubleMatrix > * | master_block_preconditioner_pt () const |
Access function to the master block preconditioner pt. More... | |
void | clear_block_preconditioner_base () |
void | document () |
Vector< Vector< unsigned > > | doftype_coarsen_map_fine () const |
Vector< unsigned > | get_fine_grain_dof_types_in (const unsigned &i) const |
unsigned | nfine_grain_dof_types_in (const unsigned &i) const |
MapMatrix< unsigned, CRDoubleMatrix * > | replacement_dof_block_pt () const |
Access function to the replaced dof-level blocks. More... | |
void | setup_matrix_vector_product (MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const Vector< unsigned > &block_col_indices) |
void | setup_matrix_vector_product (MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const unsigned &block_col_index) |
void | internal_get_block_ordered_preconditioner_vector (const DoubleVector &v, DoubleVector &w) const |
void | internal_return_block_ordered_preconditioner_vector (const DoubleVector &w, DoubleVector &v) const |
unsigned | internal_nblock_types () const |
unsigned | internal_ndof_types () const |
void | internal_return_block_vector (const unsigned &n, const DoubleVector &b, DoubleVector &v) const |
void | internal_get_block_vector (const unsigned &n, const DoubleVector &v, DoubleVector &b) const |
void | internal_get_block_vectors (const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const |
void | internal_get_block_vectors (const DoubleVector &v, Vector< DoubleVector > &s) const |
void | internal_return_block_vectors (const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const |
void | internal_return_block_vectors (const Vector< DoubleVector > &s, DoubleVector &v) const |
void | internal_get_block (const unsigned &i, const unsigned &j, CRDoubleMatrix &output_block) const |
void | internal_get_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block) const |
int | internal_block_number (const unsigned &i_dof) const |
int | internal_index_in_block (const unsigned &i_dof) const |
const LinearAlgebraDistribution * | internal_block_distribution_pt (const unsigned &b) const |
Access function to the internal block distributions. More... | |
void | insert_auxiliary_block_distribution (const Vector< unsigned > &block_vec_number, LinearAlgebraDistribution *dist_pt) |
void | block_matrix_test (const unsigned &i, const unsigned &j, const CRDoubleMatrix *block_matrix_pt) const |
int | get_index_of_value (const Vector< myType > &vec, const myType val, const bool sorted=false) const |
![]() | |
Preconditioner () | |
Constructor. More... | |
Preconditioner (const Preconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const Preconditioner &)=delete |
Broken assignment operator. More... | |
virtual | ~Preconditioner () |
Destructor (empty) More... | |
virtual void | preconditioner_solve_transpose (const DoubleVector &r, DoubleVector &z) |
void | setup (DoubleMatrixBase *matrix_pt) |
void | setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt) |
void | enable_silent_preconditioner_setup () |
Set up the block preconditioner quietly! More... | |
void | disable_silent_preconditioner_setup () |
Be verbose in the block preconditioner setup. More... | |
virtual void | set_matrix_pt (DoubleMatrixBase *matrix_pt) |
Set the matrix pointer. More... | |
virtual const OomphCommunicator * | comm_pt () const |
Get function for comm pointer. More... | |
virtual void | set_comm_pt (const OomphCommunicator *const comm_pt) |
Set the communicator pointer. More... | |
double | setup_time () const |
Returns the time to setup the preconditioner. More... | |
virtual void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse) |
virtual void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse) |
![]() | |
DistributableLinearAlgebraObject () | |
Default constructor - create a distribution. More... | |
DistributableLinearAlgebraObject (const DistributableLinearAlgebraObject &matrix)=delete | |
Broken copy constructor. More... | |
void | operator= (const DistributableLinearAlgebraObject &)=delete |
Broken assignment operator. More... | |
virtual | ~DistributableLinearAlgebraObject () |
Destructor. More... | |
LinearAlgebraDistribution * | distribution_pt () const |
access to the LinearAlgebraDistribution More... | |
unsigned | nrow () const |
access function to the number of global rows. More... | |
unsigned | nrow_local () const |
access function for the num of local rows on this processor. More... | |
unsigned | nrow_local (const unsigned &p) const |
access function for the num of local rows on this processor. More... | |
unsigned | first_row () const |
access function for the first row on this processor More... | |
unsigned | first_row (const unsigned &p) const |
access function for the first row on this processor More... | |
bool | distributed () const |
distribution is serial or distributed More... | |
bool | distribution_built () const |
void | build_distribution (const LinearAlgebraDistribution *const dist_pt) |
void | build_distribution (const LinearAlgebraDistribution &dist) |
Private Member Functions | |
CRDoubleMatrix * | assemble_mass_matrix_diagonal () |
Private Attributes | |
Preconditioner * | P_preconditioner_pt |
Pointer to the 'preconditioner' for the pressure matrix. More... | |
Preconditioner * | F_preconditioner_pt |
Pointer to the 'preconditioner' for the F matrix. More... | |
bool | Using_default_f_preconditioner |
flag indicating whether the default F preconditioner is used More... | |
bool | Using_default_p_preconditioner |
flag indicating whether the default P preconditioner is used More... | |
bool | Preconditioner_has_been_setup |
bool | P_matrix_using_scaling |
bool | F_preconditioner_is_block_preconditioner |
bool | Doc_time |
Set Doc_time to true for outputting results of timings. More... | |
MatrixVectorProduct * | F_mat_vec_pt |
MatrixVectorProduct operator for F if BFBt is not to be formed. More... | |
MatrixVectorProduct * | QBt_mat_vec_pt |
MatrixVectorProduct operator for QBt if BFBt is not to be formed. More... | |
MatrixVectorProduct * | Bt_mat_vec_pt |
MatrixVectorProduct operator for Bt;. More... | |
MatrixVectorProduct * | E_mat_vec_pt |
MatrixVectorProduct operator for E (BFBt) if BFBt is to be formed. More... | |
bool | Form_BFBt_product |
Mesh * | Solid_mesh_pt |
The least-squares commutator (LSC; formerly BFBT) preconditioner. It uses blocks corresponding to the displacement/position and pressure unknowns, i.e. there are a total of 2x2 blocks, and all displacement/position components are treated as a single block of unknowns.
Here are the details: An "ideal" preconditioner would solve the saddle point system
\[ \left( \begin{array}{cc} {\bf F} & {\bf G} \\ {\bf D} & {\bf 0} \end{array} \right) \left( \begin{array}{c} {\bf z}_u \\ {\bf z}_p \end{array} \right) = \left( \begin{array}{c} {\bf r}_u \\ {\bf r}_p \end{array} \right) \]
where \( {\bf F}\), \( {\bf G} \), and \( {\bf D}\) are the blocks that arise in the Jacobian of the pressure-based equations of linear and nonlinear elasticity (with dofs in order of displacement/position and pressure). The use of this preconditioner would ensure the convergence of any iterative linear solver in a single iteration but its application is, of course, exactly as expensive as a direct solve. The LSC/BFBT preconditioner replaces the exact Jacobian by a block-triangular approximation
\[ \left( \begin{array}{cc} {\bf F} & {\bf G} \\ {\bf 0} & -{\bf M}_s \end{array} \right) \left( \begin{array}{c} {\bf z}_u \\ {\bf z}_p \end{array} \right) = \left( \begin{array}{c} {\bf r}_u \\ {\bf r}_p \end{array} \right), \]
where \({\bf M}_s\) is an approximation to the pressure Schur-complement \( {\bf S} = {\bf D} {\bf F}^{-1}{\bf G}. \) This system can be solved in two steps:
\[ {\bf z}_p = - {\bf M}_s^{-1} {\bf r}_p \]
\[ {\bf z}_u = {\bf F}^{-1} \big( {\bf r}_u - {\bf G} {\bf z}_p \big) \]
. In the LSC/BFBT preconditioner, the action of the inverse pressure Schur complement\[ {\bf z}_p = - {\bf M}_s^{-1} {\bf r}_p \]
is approximated by\[ {\bf z}_p = - \big({\bf D} \widehat{\bf Q}^{-1}{\bf G} \big)^{-1} \big({\bf D} \widehat{\bf Q}^{-1}{\bf F} \widehat{\bf Q}^{-1}{\bf G}\big) \big({\bf D} \widehat{\bf Q}^{-1}{\bf G} \big)^{-1} {\bf r}_p, \]
where \( \widehat{\bf Q} \) is the diagonal of the displacement/position mass matrix. The evaluation of this expression involves two linear solves involving the matrix\[ {\bf P} = \big({\bf D} \widehat{\bf Q}^{-1}{\bf G} \big) \]
which has the character of a matrix arising from the discretisation of a Poisson problem on the pressure space. We also have to evaluate matrix-vector products with the matrix\[ {\bf E}={\bf D}\widehat{\bf Q}^{-1}{\bf F}\widehat{\bf Q}^{-1}{\bf G} \]
Details of the theory can be found in "Finite Elements and Fast Iterative Solvers with Applications in Incompressible Fluid Dynamics" by Howard C. Elman, David J. Silvester, and Andrew J. Wathen, published by Oxford University Press, 2006.In our implementation of the preconditioner, the linear systems can either be solved "exactly", using SuperLU (in its incarnation as an exact preconditioner; this is the default) or by any other Preconditioner (inexact solver) specified via the access functions
or
|
inline |
Constructor - sets defaults for control flags.
References Bt_mat_vec_pt, Doc_time, E_mat_vec_pt, F_mat_vec_pt, F_preconditioner_pt, Form_BFBt_product, P_matrix_using_scaling, P_preconditioner_pt, Preconditioner_has_been_setup, QBt_mat_vec_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::set_nmesh(), Solid_mesh_pt, Using_default_f_preconditioner, and Using_default_p_preconditioner.
|
inline |
Destructor.
References clean_up_memory().
|
delete |
Broken copy constructor.
|
private |
Helper function to assemble the diagonal of the mass matrix from the elemental contributions defined in PressureBasedSolidEquations<DIM>::get_mass_matrix_diagonal(...).
Helper function to assemble the diagonal of the mass matrix from the elemental contributions defined in SolidElementWithDiagonalMassMatrix::get_mass_matrix_diagonal(...).
References oomph::BlockPreconditioner< CRDoubleMatrix >::any_mesh_distributed(), oomph::BlockPreconditioner< CRDoubleMatrix >::block_distribution_pt(), oomph::BlockPreconditioner< CRDoubleMatrix >::block_number(), oomph::CRDoubleMatrix::build_without_copy(), oomph::Preconditioner::comm_pt(), oomph::DistributableLinearAlgebraObject::distributed(), e(), oomph::Mesh::element_pt(), oomph::GeneralisedElement::eqn_number(), oomph::LinearAlgebraDistribution::first_row(), oomph::DistributableLinearAlgebraObject::first_row(), oomph::SolidElementWithDiagonalMassMatrix::get_mass_matrix_diagonal(), i, oomph::BlockPreconditioner< CRDoubleMatrix >::index_in_block(), oomph::BlockPreconditioner< CRDoubleMatrix >::master_distribution_pt(), oomph::OomphCommunicator::my_rank(), plotDoE::name, oomph::GeneralisedElement::ndof(), oomph::Mesh::nelement(), oomph::OomphCommunicator::nproc(), oomph::LinearAlgebraDistribution::nrow(), oomph::DistributableLinearAlgebraObject::nrow(), oomph::LinearAlgebraDistribution::nrow_local(), oomph::DistributableLinearAlgebraObject::nrow_local(), OOMPH_EXCEPTION_LOCATION, p, Solid_mesh_pt, and v.
Referenced by setup().
|
virtual |
Helper function to delete preconditioner data.
Reimplemented from oomph::Preconditioner.
References Bt_mat_vec_pt, E_mat_vec_pt, F_mat_vec_pt, F_preconditioner_pt, Form_BFBt_product, P_preconditioner_pt, Preconditioner_has_been_setup, QBt_mat_vec_pt, Using_default_f_preconditioner, and Using_default_p_preconditioner.
Referenced by setup(), and ~PressureBasedSolidLSCPreconditioner().
|
inline |
|
inline |
if this function is called then: in setup(...) : the matrices B, F are assembled and stored (the default behaviour) . in preconditioner_solve(...) : a sequence of matrix vector products with B, F, and Bt is performed. (Note: in this discussion no scaling was considered but B and Bt are replaced with BQ and QBt with scaling)
References Form_BFBt_product.
|
inline |
Enable mass matrix diagonal scaling in the Schur complement approximation
References P_matrix_using_scaling.
|
inline |
|
inline |
If this function is called then: in setup(...) : BFBt is computed. in preconditioner_solve(...) : a single matrix vector product with BFBt is performed.
References Form_BFBt_product.
|
inline |
Enable mass matrix diagonal scaling in the Schur complement approximation
References P_matrix_using_scaling.
|
inline |
Return whether the mass matrix is using diagonal scaling or not
References P_matrix_using_scaling.
|
virtual |
Apply preconditioner to Vector r.
Apply preconditioner to r.
Implements oomph::Preconditioner.
References Bt_mat_vec_pt, oomph::DoubleVector::build(), oomph::DoubleVector::built(), oomph::DoubleVector::clear(), oomph::DistributableLinearAlgebraObject::distribution_pt(), Doc_time, E_mat_vec_pt, F_mat_vec_pt, F_preconditioner_is_block_preconditioner, F_preconditioner_pt, Form_BFBt_product, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block_vector(), oomph::MatrixVectorProduct::multiply(), oomph::MatrixVectorProduct::multiply_transpose(), oomph::DistributableLinearAlgebraObject::nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, P_preconditioner_pt, Preconditioner_has_been_setup, oomph::Preconditioner::preconditioner_solve(), QBt_mat_vec_pt, UniformPSDSelfTest::r, oomph::BlockPreconditioner< CRDoubleMatrix >::return_block_vector(), and oomph::TimingHelpers::timer().
|
inline |
Function to set a new momentum matrix preconditioner (inexact solver)
References F_preconditioner_pt, and Using_default_f_preconditioner.
|
inline |
Function to (re-)set momentum matrix preconditioner (inexact solver) to SuperLU
References F_preconditioner_pt, and Using_default_f_preconditioner.
|
inline |
Function to set a new pressure matrix preconditioner (inexact solver)
References P_preconditioner_pt, and Using_default_p_preconditioner.
|
inline |
Function to (re-)set pressure matrix preconditioner (inexact solver) to SuperLU
References P_preconditioner_pt, and Using_default_p_preconditioner.
|
inline |
specify the mesh containing the mesh containing the block-preconditionable solid elements. The dimension of the problem must also be specified.
References oomph::BlockPreconditioner< CRDoubleMatrix >::mesh_pt(), and Solid_mesh_pt.
|
virtual |
Broken assignment operator.
Setup the preconditioner
Setup the least-squares commutator solid preconditioner. This extracts blocks corresponding to the position/displacement and pressure unknowns, creates the matrices actually needed in the application of the preconditioner and deletes what can be deleted... Note that this preconditioner needs a CRDoubleMatrix.
Implements oomph::Preconditioner.
References assemble_mass_matrix_diagonal(), oomph::BlockPreconditioner< CRDoubleMatrix >::block_setup(), Bt_mat_vec_pt, clean_up_memory(), Doc_time, E_mat_vec_pt, F_mat_vec_pt, F_preconditioner_is_block_preconditioner, F_preconditioner_pt, Form_BFBt_product, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block(), i, oomph::BlockPreconditioner< CRDoubleMatrix >::is_subsidiary_block_preconditioner(), oomph::BlockPreconditioner< CRDoubleMatrix >::matrix_pt(), oomph::CRDoubleMatrix::multiply(), oomph::BlockPreconditioner< CRDoubleMatrix >::ndof_types(), oomph::BlockPreconditioner< CRDoubleMatrix >::ndof_types_in_mesh(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, P_matrix_using_scaling, P_preconditioner_pt, Preconditioner_has_been_setup, QBt_mat_vec_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::set_mesh(), oomph::Preconditioner::setup(), oomph::BlockPreconditioner< CRDoubleMatrix >::setup_matrix_vector_product(), Solid_mesh_pt, oomph::TimingHelpers::timer(), oomph::BlockPreconditioner< MATRIX >::turn_into_subsidiary_block_preconditioner(), Using_default_f_preconditioner, and Using_default_p_preconditioner.
|
private |
MatrixVectorProduct operator for Bt;.
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
Set Doc_time to true for outputting results of timings.
Referenced by disable_doc_time(), enable_doc_time(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
MatrixVectorProduct operator for E (BFBt) if BFBt is to be formed.
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
MatrixVectorProduct operator for F if BFBt is not to be formed.
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
Boolean indicating whether the momentum system preconditioner is a block preconditioner
Referenced by preconditioner_solve(), and setup().
|
private |
Pointer to the 'preconditioner' for the F matrix.
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), set_f_preconditioner(), set_f_superlu_preconditioner(), and setup().
|
private |
indicates whether BFBt should be formed or the component matrices should be retained. If true then: in setup(...) : BFBt is computed. in preconditioner_solve(...) : a single matrix vector product with BFBt is performed. if false then: in setup(...) : the matrices B, F are assembled and stored. in preconditioner_solve(...) : a sequence of matrix vector products with B, F, and Bt is performed. (Note: in this discussion no scaling was considered but B and Bt are replaced with BQ and QBt with scaling)
Referenced by clean_up_memory(), disable_form_BFBt_product(), enable_form_BFBt_product(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
Control flag is true if mass matrix diagonal scaling is used in the Schur complement approximation
Referenced by disable_p_matrix_scaling(), enable_p_matrix_scaling(), is_p_matrix_using_scaling(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
Pointer to the 'preconditioner' for the pressure matrix.
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), set_p_preconditioner(), set_p_superlu_preconditioner(), and setup().
|
private |
Control flag is true if the preconditioner has been setup (used so we can wipe the data when the preconditioner is called again)
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
MatrixVectorProduct operator for QBt if BFBt is not to be formed.
Referenced by clean_up_memory(), preconditioner_solve(), PressureBasedSolidLSCPreconditioner(), and setup().
|
private |
the pointer to the mesh of block preconditionable solid elements.
Referenced by assemble_mass_matrix_diagonal(), PressureBasedSolidLSCPreconditioner(), set_solid_mesh(), and setup().
|
private |
flag indicating whether the default F preconditioner is used
Referenced by clean_up_memory(), PressureBasedSolidLSCPreconditioner(), set_f_preconditioner(), set_f_superlu_preconditioner(), and setup().
|
private |
flag indicating whether the default P preconditioner is used
Referenced by clean_up_memory(), PressureBasedSolidLSCPreconditioner(), set_p_preconditioner(), set_p_superlu_preconditioner(), and setup().