![]() |
|
#include <general_purpose_space_time_subsidiary_block_preconditioner.h>
Public Member Functions | |
SpaceTimeNavierStokesSubsidiaryPreconditioner () | |
Constructor. (By default this preconditioner is upper triangular). More... | |
virtual | ~SpaceTimeNavierStokesSubsidiaryPreconditioner () |
Destructor - delete the preconditioner matrices. More... | |
virtual void | clean_up_memory () |
Clean up the memory. More... | |
SpaceTimeNavierStokesSubsidiaryPreconditioner (const SpaceTimeNavierStokesSubsidiaryPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const SpaceTimeNavierStokesSubsidiaryPreconditioner &)=delete |
Broken assignment operator. More... | |
void | setup () |
Setup the preconditioner. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to r. More... | |
void | enable_doc_memory_usage () |
Document the memory usage. More... | |
void | disable_doc_memory_usage () |
Don't document the memory usage! More... | |
double | get_memory_usage_in_bytes () |
Get the memory statistics. More... | |
SpaceTimeNavierStokesSubsidiaryPreconditioner () | |
Constructor. (By default this preconditioner is upper triangular). More... | |
virtual | ~SpaceTimeNavierStokesSubsidiaryPreconditioner () |
Destructor - delete the preconditioner matrices. More... | |
virtual void | clean_up_memory () |
Clean up the memory. More... | |
SpaceTimeNavierStokesSubsidiaryPreconditioner (const SpaceTimeNavierStokesSubsidiaryPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const SpaceTimeNavierStokesSubsidiaryPreconditioner &)=delete |
Broken assignment operator. More... | |
void | setup () |
Setup the preconditioner. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to r. More... | |
void | enable_doc_memory_usage () |
Document the memory usage. More... | |
void | disable_doc_memory_usage () |
Don't document the memory usage! More... | |
double | get_memory_usage_in_bytes () |
Get the memory statistics. More... | |
void | setup (DoubleMatrixBase *matrix_pt) |
void | setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt) |
virtual void | setup ()=0 |
void | setup (DoubleMatrixBase *matrix_pt) |
void | setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt) |
virtual void | setup ()=0 |
![]() | |
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 Attributes | |
Preconditioner * | F_preconditioner_pt |
Pointer to the 'preconditioner' for the F matrix. More... | |
Preconditioner * | P_preconditioner_pt |
Pointer to the 'preconditioner' for the pressure 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 | Compute_memory_statistics |
double | Memory_usage_in_bytes |
MatrixVectorProduct * | F_mat_vec_pt |
MatrixVectorProduct operator for F. More... | |
MatrixVectorProduct * | G_mat_vec_pt |
MatrixVectorProduct operator for G. More... | |
General purpose block triangular preconditioner. By default this is Upper triangular. Also, by default SuperLUPreconditioner (or SuperLUDistPreconditioner) is used to solve the subsidiary systems, but other preconditioners can be used by setting them using passing a pointer to a function of type SubsidiaryPreconditionerFctPt to the method subsidiary_preconditioner_function_pt().
|
inline |
Constructor. (By default this preconditioner is upper triangular).
References Compute_memory_statistics, F_mat_vec_pt, F_preconditioner_pt, G_mat_vec_pt, Memory_usage_in_bytes, P_preconditioner_pt, Preconditioner_has_been_setup, Using_default_f_preconditioner, and Using_default_p_preconditioner.
|
inlinevirtual |
|
delete |
Broken copy constructor.
|
inline |
Constructor. (By default this preconditioner is upper triangular).
References Compute_memory_statistics, F_mat_vec_pt, F_preconditioner_pt, G_mat_vec_pt, Memory_usage_in_bytes, P_preconditioner_pt, Preconditioner_has_been_setup, Using_default_f_preconditioner, and Using_default_p_preconditioner.
|
inlinevirtual |
|
delete |
Broken copy constructor.
|
inlinevirtual |
Clean up the memory.
Reimplemented from oomph::Preconditioner.
References F_mat_vec_pt, F_preconditioner_pt, G_mat_vec_pt, P_preconditioner_pt, and Preconditioner_has_been_setup.
Referenced by setup(), and ~SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
inlinevirtual |
Clean up the memory.
Reimplemented from oomph::Preconditioner.
References F_mat_vec_pt, F_preconditioner_pt, G_mat_vec_pt, P_preconditioner_pt, Preconditioner_has_been_setup, Using_default_f_preconditioner, and Using_default_p_preconditioner.
|
inline |
Don't document the memory usage!
Set the appropriate flag to false
References Compute_memory_statistics.
|
inline |
Don't document the memory usage!
Set the appropriate flag to false
References Compute_memory_statistics.
|
inline |
Document the memory usage.
Set the appropriate flag to true
References Compute_memory_statistics.
Referenced by oomph::GMRESBlockPreconditioner::setup().
|
inline |
|
inline |
Get the memory statistics.
References Compute_memory_statistics, Memory_usage_in_bytes, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and Preconditioner_has_been_setup.
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::setup().
|
inline |
Get the memory statistics.
References Compute_memory_statistics, Memory_usage_in_bytes, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and Preconditioner_has_been_setup.
|
delete |
Broken assignment operator.
|
delete |
Broken assignment operator.
|
virtual |
Apply preconditioner to r.
Preconditioner solve for the block triangular preconditioner.
Implements oomph::Preconditioner.
References oomph::DoubleVector::build(), oomph::LinearAlgebraDistribution::built(), oomph::DoubleVector::clear(), oomph::DistributableLinearAlgebraObject::distribution_pt(), F_mat_vec_pt, F_preconditioner_pt, G_mat_vec_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block_vector(), oomph::MatrixVectorProduct::multiply(), oomph::MatrixVectorProduct::multiply_transpose(), P_preconditioner_pt, oomph::Preconditioner::preconditioner_solve(), UniformPSDSelfTest::r, and oomph::BlockPreconditioner< CRDoubleMatrix >::return_block_vector().
Referenced by oomph::GMRESBlockPreconditioner::preconditioner_solve(), and oomph::GMRESBlockPreconditioner::update().
|
virtual |
Apply preconditioner to r.
Implements oomph::Preconditioner.
|
virtual |
Setup the preconditioner.
Setup for the block triangular preconditioner.
///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
Implements oomph::Preconditioner.
References oomph::BlockPreconditioner< CRDoubleMatrix >::block_setup(), clean_up_memory(), Compute_memory_statistics, oomph::CRDoubleMatrixHelpers::concatenate(), F_mat_vec_pt, F_preconditioner_pt, G_mat_vec_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block(), i, int(), oomph::BlockPreconditioner< CRDoubleMatrix >::is_subsidiary_block_preconditioner(), j, oomph::BlockPreconditioner< CRDoubleMatrix >::matrix_pt(), Memory_usage_in_bytes, oomph::CRDoubleMatrix::multiply(), oomph::BlockPreconditioner< CRDoubleMatrix >::nblock_types(), oomph::BlockPreconditioner< CRDoubleMatrix >::ndof_types(), oomph::CRDoubleMatrix::nnz(), oomph::CRDoubleMatrix::nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::oomph_nullstream, P_preconditioner_pt, Preconditioner_has_been_setup, oomph::Hypre_default_settings::set_defaults_for_2D_poisson_problem(), oomph::Preconditioner::setup(), oomph::BlockPreconditioner< CRDoubleMatrix >::setup_matrix_vector_product(), oomph::Preconditioner::Silent_preconditioner_setup, oomph::CRDoubleMatrix::sparse_indexed_output_with_offset(), oomph::OomphInfo::stream_pt(), oomph::Preconditioner::Stream_pt, oomph::Global_string_for_annotation::string(), oomph::TimingHelpers::timer(), Using_default_f_preconditioner, and Using_default_p_preconditioner.
Referenced by oomph::GMRESBlockPreconditioner::setup().
|
virtual |
Setup the preconditioner.
Implements oomph::Preconditioner.
|
virtual |
For some reason we need to remind the compiler that there is also a function named setup in the base class.
Implements oomph::Preconditioner.
|
virtual |
For some reason we need to remind the compiler that there is also a function named setup in the base class.
Implements oomph::Preconditioner.
|
inlinevirtual |
For some reason we need to remind the compiler that there is also a function named setup in the base class.
Implements oomph::Preconditioner.
|
inlinevirtual |
For some reason we need to remind the compiler that there is also a function named setup in the base class.
Implements oomph::Preconditioner.
|
inlinevirtual |
For some reason we need to remind the compiler that there is also a function named setup in the base class.
Implements oomph::Preconditioner.
|
inlinevirtual |
For some reason we need to remind the compiler that there is also a function named setup in the base class.
Implements oomph::Preconditioner.
|
private |
Flag to indicate whether or not to record the memory statistics this preconditioner
Referenced by disable_doc_memory_usage(), enable_doc_memory_usage(), get_memory_usage_in_bytes(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
MatrixVectorProduct operator for F.
Referenced by clean_up_memory(), preconditioner_solve(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
Pointer to the 'preconditioner' for the F matrix.
Referenced by clean_up_memory(), preconditioner_solve(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
MatrixVectorProduct operator for G.
Referenced by clean_up_memory(), preconditioner_solve(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
Storage for the memory usage of the solver if the flag above is set to true (in bytes)
Referenced by get_memory_usage_in_bytes(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
Pointer to the 'preconditioner' for the pressure matrix.
Referenced by clean_up_memory(), preconditioner_solve(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
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(), get_memory_usage_in_bytes(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
Flag indicating whether the default F preconditioner is used.
Referenced by clean_up_memory(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().
|
private |
Flag indicating whether the default P preconditioner is used.
Referenced by clean_up_memory(), setup(), and SpaceTimeNavierStokesSubsidiaryPreconditioner().