![]() |
|
#include <general_purpose_block_preconditioners.h>
Public Types | |
typedef Preconditioner *(* | SubsidiaryPreconditionerFctPt) () |
Public Member Functions | |
GeneralPurposeBlockPreconditioner () | |
constructor More... | |
virtual | ~GeneralPurposeBlockPreconditioner () |
virtual void | clean_up_memory () |
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 (const DoubleVector &r, DoubleVector &z)=0 |
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 | setup ()=0 |
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 | |
Vector< unsigned > | Dof_to_block_map |
the set of dof to block maps for this preconditioner More... | |
Vector< std::pair< const Mesh *, bool > > | Gp_mesh_pt |
Base class for general purpose block preconditioners. Deals with setting subsidiary preconditioners and dof to block maps. Subsidiary preconditioners can be set in two ways: 1) A pointer to a subsidiary preconditioner for block i can be passed to set_subsidiary_preconditioner_pt(prec, i). 2) A default subsidiary preconditioner can be set up by providing a function pointer to a function which creates a preconditioner. During setup() all unset subsidiary preconditioner pointers will be filled in using this function. By default this uses SuperLU.
typedef Preconditioner*(* oomph::GeneralPurposeBlockPreconditioner< MATRIX >::SubsidiaryPreconditionerFctPt) () |
typedef for a function that allows other preconditioners to be employed to solve the subsidiary linear systems. The function should return a pointer to the required subsidiary preconditioner generated using new. This preconditioner is responsible for the destruction of the subsidiary preconditioners.
|
inline |
constructor
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Gp_mesh_pt.
|
inlinevirtual |
Destructor: clean up memory then delete all subsidiary preconditioners.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::clean_up_memory(), j, and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_pt.
|
delete |
Broken copy constructor.
|
inline |
Adds a mesh to be used by the block preconditioning framework for classifying DOF types. Optional boolean argument (default: false) allows the mesh to contain multiple element types.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Gp_mesh_pt, oomph::BlockPreconditioner< MATRIX >::mesh_pt(), OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.
Referenced by main(), PreconditionedFSICollapsibleChannelProblem< ELEMENT >::PreconditionedFSICollapsibleChannelProblem(), NavierStokesProblem< ELEMENT >::set_up_spacetime_solver(), UnsteadyHeatProblem< ELEMENT >::set_up_spacetime_solver(), and TorusProblem< ELEMENT >::TorusProblem().
|
inlinevirtual |
??ds I think clean_up_memory is supposed to clear out any stuff that doesn't need to be stored between solves. Call clean up on any non-null subsidiary preconditioners.
Reimplemented from oomph::Preconditioner.
Reimplemented in oomph::BandedBlockTriangularPreconditioner< MATRIX >, oomph::ExactDGPBlockPreconditioner< MATRIX >, oomph::BlockTriangularPreconditioner< MATRIX >, and oomph::BlockDiagonalPreconditioner< MATRIX >.
References oomph::BlockPreconditioner< MATRIX >::clear_block_preconditioner_base(), j, and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_pt.
Referenced by oomph::BlockDiagonalPreconditioner< MATRIX >::clean_up_memory(), oomph::BlockTriangularPreconditioner< MATRIX >::clean_up_memory(), oomph::ExactDGPBlockPreconditioner< MATRIX >::clean_up_memory(), oomph::BandedBlockTriangularPreconditioner< MATRIX >::clean_up_memory(), oomph::BlockDiagonalPreconditioner< MATRIX >::~BlockDiagonalPreconditioner(), oomph::BlockTriangularPreconditioner< MATRIX >::~BlockTriangularPreconditioner(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::~GeneralPurposeBlockPreconditioner().
|
inlineprotected |
Create any subsidiary preconditioners needed. Usually nprec_needed = nblock_types, except for the ExactBlockPreconditioner which only requires one preconditioner.
References j, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::Global_string_for_annotation::string(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_pt, and oomph::StringConversion::to_string().
Referenced by oomph::BlockDiagonalPreconditioner< MATRIX >::fill_in_subsidiary_preconditioners().
|
inline |
Returns the number of meshes currently set in the GeneralPurposeBlockPreconditioner base class.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Gp_mesh_pt.
Referenced by oomph::GeneralPurposeBlockPreconditioner< MATRIX >::gp_preconditioner_set_all_meshes().
|
inlineprotected |
Modified block setup for general purpose block preconditioners.
References oomph::BlockPreconditioner< MATRIX >::block_setup(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Dof_to_block_map.
|
inlineprotected |
Set the mesh in the block preconditioning framework.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Gp_mesh_pt, oomph::GeneralPurposeBlockPreconditioner< MATRIX >::gp_nmesh(), oomph::BlockPreconditioner< MATRIX >::nmesh(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::BlockPreconditioner< MATRIX >::set_mesh(), and oomph::BlockPreconditioner< MATRIX >::set_nmesh().
|
delete |
Broken assignment operator.
|
inline |
Reset the subsidiary preconditioner function to its default.
References oomph::PreconditionerCreationFunctions::create_super_lu_preconditioner(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_creation_function_pt.
|
inline |
Specify a DOF to block map.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Dof_to_block_map.
Referenced by NavierStokesProblem< ELEMENT >::set_up_spacetime_solver(), UnsteadyHeatProblem< ELEMENT >::set_up_spacetime_solver(), and oomph::PseudoElasticPreconditioner::setup().
|
inline |
access function to set the subsidiary preconditioner function.
References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_creation_function_pt.
Referenced by main(), FSIChannelWithLeafletProblem< ELEMENT >::set_iterative_solver(), PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::set_pseudo_elastic_fsi_solver(), set_pseudo_elastic_fsi_solver(), NavierStokesProblem< ELEMENT >::set_up_spacetime_solver(), and oomph::PseudoElasticPreconditioner::setup().
|
inline |
Set the subsidiary preconditioner to use for block i. The subsidiary preconditioner should have been created using new (the general purpose block preconditioner will delete it later). If null the general purpose block preconditioner will use the Subsidiary_preconditioner_creation_function_pt to create the preconditioner during setup().
References i, and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_pt.
|
inline |
Get the subsidiary precondtioner pointer in block i (is allowed to be null if not yet set).
References i, and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_pt.
|
private |
the set of dof to block maps for this preconditioner
Referenced by oomph::GeneralPurposeBlockPreconditioner< MATRIX >::gp_preconditioner_block_setup(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::set_dof_to_block_map().
|
private |
Vector of mesh pointers and a boolean indicating if we allow multiple element types in the same mesh.
Referenced by oomph::GeneralPurposeBlockPreconditioner< MATRIX >::add_mesh(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::GeneralPurposeBlockPreconditioner(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::gp_nmesh(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::gp_preconditioner_set_all_meshes().
|
protected |
Function to create any subsidiary preconditioners not set in Subsidiary_preconditioner_pt.
Referenced by oomph::GeneralPurposeBlockPreconditioner< MATRIX >::reset_subsidiary_preconditioner_function_to_default(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::set_subsidiary_preconditioner_function().
|
protected |
List of preconditioners to use for the blocks to be solved.
Referenced by oomph::GeneralPurposeBlockPreconditioner< MATRIX >::clean_up_memory(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::fill_in_subsidiary_preconditioners(), oomph::BlockDiagonalPreconditioner< MATRIX >::fill_in_subsidiary_preconditioners(), oomph::ExactBlockPreconditioner< MATRIX >::preconditioner_pt(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::set_subsidiary_preconditioner_pt(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::subsidiary_preconditioner_pt(), and oomph::GeneralPurposeBlockPreconditioner< MATRIX >::~GeneralPurposeBlockPreconditioner().