![]() |
|
#include <general_purpose_space_time_block_preconditioner.h>
Public Member Functions | |
BandedBlockTriangularPreconditioner () | |
Constructor. (By default this preconditioner is upper triangular). More... | |
virtual | ~BandedBlockTriangularPreconditioner () |
Destructor - delete the preconditioner matrices. More... | |
virtual void | clean_up_memory () |
Clean up the memory. More... | |
BandedBlockTriangularPreconditioner (const BandedBlockTriangularPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const BandedBlockTriangularPreconditioner &)=delete |
Broken assignment operator. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to r. More... | |
void | setup () |
Setup the preconditioner. More... | |
void | set_block_bandwidth (const int &block_bandwidth) |
Set the block bandwidth of the preconditioner. More... | |
int | block_bandwidth () |
Get the block bandwidth of the preconditioner. More... | |
void | upper_triangular () |
Use as an upper triangular preconditioner. More... | |
void | lower_triangular () |
Use as a lower triangular preconditioner. More... | |
bool | is_upper_triangular () |
Is this being used as an upper triangular preconditioner? 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... | |
![]() | |
GeneralPurposeBlockPreconditioner () | |
constructor More... | |
virtual | ~GeneralPurposeBlockPreconditioner () |
GeneralPurposeBlockPreconditioner (const GeneralPurposeBlockPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const GeneralPurposeBlockPreconditioner &)=delete |
Broken assignment operator. More... | |
void | set_subsidiary_preconditioner_function (SubsidiaryPreconditionerFctPt sub_prec_fn) |
access function to set the subsidiary preconditioner function. More... | |
void | reset_subsidiary_preconditioner_function_to_default () |
Reset the subsidiary preconditioner function to its default. More... | |
void | set_subsidiary_preconditioner_pt (Preconditioner *prec, const unsigned &i) |
Preconditioner * | subsidiary_preconditioner_pt (const unsigned &i) const |
void | set_dof_to_block_map (Vector< unsigned > &dof_to_block_map) |
Specify a DOF to block map. More... | |
void | add_mesh (const Mesh *mesh_pt, const bool &allow_multiple_element_type_in_mesh=false) |
unsigned | gp_nmesh () |
![]() | |
BlockPreconditioner () | |
Constructor. More... | |
virtual | ~BlockPreconditioner () |
Destructor. More... | |
BlockPreconditioner (const BlockPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const BlockPreconditioner &)=delete |
Broken assignment operator. More... | |
MATRIX * | 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< MATRIX > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse) |
void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< MATRIX > *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, MATRIX &output_matrix, const bool &ignore_replacement_block=false) const |
MATRIX | get_block (const unsigned &i, const unsigned &j, const bool &ignore_replacement_block=false) const |
void | set_master_matrix_pt (MATRIX *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, MATRIX *in_matrix_pt, MATRIX &output_matrix) |
void | get_blocks (DenseMatrix< bool > &required_blocks, DenseMatrix< MATRIX * > &block_matrix_pt) const |
void | get_dof_level_block (const unsigned &i, const unsigned &j, MATRIX &output_block, const bool &ignore_replacement_block=false) const |
MATRIX | 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< MATRIX > * | 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, MATRIX &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 MATRIX *block_matrix_pt) const |
template<typename myType > | |
int | get_index_of_value (const Vector< myType > &vec, const myType val, const bool sorted=false) const |
void | internal_get_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block) const |
void | get_dof_level_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block, const bool &ignore_replacement_block) 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 | |
int | Block_bandwidth |
bool | Upper_triangular |
Boolean indicating upper or lower triangular. More... | |
bool | Preconditioner_has_been_setup |
bool | Compute_memory_statistics |
double | Memory_usage_in_bytes |
General purpose block triangular preconditioner. By default this operates as an upper triangular preconditioner. 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 oomph::BandedBlockTriangularPreconditioner< MATRIX >::Block_bandwidth, oomph::BandedBlockTriangularPreconditioner< MATRIX >::Compute_memory_statistics, oomph::BandedBlockTriangularPreconditioner< MATRIX >::Memory_usage_in_bytes, oomph::BandedBlockTriangularPreconditioner< MATRIX >::Preconditioner_has_been_setup, and oomph::BandedBlockTriangularPreconditioner< MATRIX >::Upper_triangular.
|
inlinevirtual |
Destructor - delete the preconditioner matrices.
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::clean_up_memory().
|
delete |
Broken copy constructor.
|
inline |
Get the block bandwidth of the preconditioner.
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Block_bandwidth.
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::set_block_bandwidth().
|
inlinevirtual |
Clean up the memory.
Reimplemented from oomph::GeneralPurposeBlockPreconditioner< MATRIX >.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::clean_up_memory(), i, j, and oomph::BandedBlockTriangularPreconditioner< MATRIX >::Off_diagonal_matrix_vector_products.
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::~BandedBlockTriangularPreconditioner().
|
inline |
Don't document the memory usage!
Set the appropriate flag to false
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Compute_memory_statistics.
|
inline |
Document the memory usage.
Set the appropriate flag to true
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Compute_memory_statistics.
Referenced by UnsteadyHeatProblem< ELEMENT >::set_up_spacetime_solver().
|
inline |
Get the memory statistics.
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Compute_memory_statistics, oomph::BandedBlockTriangularPreconditioner< MATRIX >::Memory_usage_in_bytes, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::BandedBlockTriangularPreconditioner< MATRIX >::Preconditioner_has_been_setup.
|
inline |
Is this being used as an upper triangular preconditioner?
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Upper_triangular.
|
inline |
Use as a lower triangular preconditioner.
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Upper_triangular.
Referenced by UnsteadyHeatProblem< ELEMENT >::set_up_spacetime_solver().
|
delete |
Broken assignment operator.
|
virtual |
Apply preconditioner to r.
Preconditioner solve for the block triangular preconditioner.
Implements oomph::Preconditioner.
References Eigen::placeholders::end, i, j, max, min, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, Eigen::bfloat16_impl::pow(), UniformPSDSelfTest::r, sqrt(), and oomph::CumulativeTimings::start().
|
inline |
Set the block bandwidth of the preconditioner.
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::block_bandwidth(), and oomph::BandedBlockTriangularPreconditioner< MATRIX >::Block_bandwidth.
Referenced by UnsteadyHeatProblem< ELEMENT >::set_up_spacetime_solver().
|
virtual |
Setup the preconditioner.
Set up the block triangular preconditioner.
Implements oomph::Preconditioner.
References oomph::TerminateHelper::clean_up_memory(), oomph::SpaceTimeNavierStokesSubsidiaryPreconditioner::get_memory_usage_in_bytes(), oomph::GMRESBlockPreconditioner::get_memory_usage_in_bytes(), i, int(), j, max, min, oomph::GMRESBlockPreconditioner::navier_stokes_subsidiary_preconditioner_pt(), oomph::CRDoubleMatrix::nnz(), oomph::CRDoubleMatrix::nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::oomph_nullstream, GlobalParameters::Stream_pt, oomph::OomphInfo::stream_pt(), and oomph::TimingHelpers::timer().
|
inline |
Use as an upper triangular preconditioner.
References oomph::BandedBlockTriangularPreconditioner< MATRIX >::Upper_triangular.
|
private |
Storage for the block bandwidth of the matrix. Defaults to -1 indicating that we assume every off-diagonal block is non-empty. If the matrix is block diagonal then the value is zero
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::BandedBlockTriangularPreconditioner(), oomph::BandedBlockTriangularPreconditioner< MATRIX >::block_bandwidth(), and oomph::BandedBlockTriangularPreconditioner< MATRIX >::set_block_bandwidth().
|
private |
Flag to indicate whether or not to record the memory statistics this preconditioner
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::BandedBlockTriangularPreconditioner(), oomph::BandedBlockTriangularPreconditioner< MATRIX >::disable_doc_memory_usage(), oomph::BandedBlockTriangularPreconditioner< MATRIX >::enable_doc_memory_usage(), and oomph::BandedBlockTriangularPreconditioner< MATRIX >::get_memory_usage_in_bytes().
|
private |
Storage for the memory usage of the solver if the flag above is set to true (in bytes)
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::BandedBlockTriangularPreconditioner(), and oomph::BandedBlockTriangularPreconditioner< MATRIX >::get_memory_usage_in_bytes().
|
protected |
Matrix of matrix-vector product operators for the off diagonals.
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::clean_up_memory().
|
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 oomph::BandedBlockTriangularPreconditioner< MATRIX >::BandedBlockTriangularPreconditioner(), and oomph::BandedBlockTriangularPreconditioner< MATRIX >::get_memory_usage_in_bytes().
|
private |
Boolean indicating upper or lower triangular.
Referenced by oomph::BandedBlockTriangularPreconditioner< MATRIX >::BandedBlockTriangularPreconditioner(), oomph::BandedBlockTriangularPreconditioner< MATRIX >::is_upper_triangular(), oomph::BandedBlockTriangularPreconditioner< MATRIX >::lower_triangular(), and oomph::BandedBlockTriangularPreconditioner< MATRIX >::upper_triangular().