oomph::ExactBlockPreconditioner< MATRIX > Class Template Reference

#include <general_purpose_block_preconditioners.h>

+ Inheritance diagram for oomph::ExactBlockPreconditioner< MATRIX >:

Public Member Functions

 ExactBlockPreconditioner ()
 constructor More...
 
virtual ~ExactBlockPreconditioner ()
 Destructor. More...
 
 ExactBlockPreconditioner (const ExactBlockPreconditioner &)=delete
 Broken copy constructor. More...
 
void operator= (const ExactBlockPreconditioner &)=delete
 Broken assignment operator. More...
 
void preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 Apply preconditioner to r. More...
 
void setup ()
 Setup the preconditioner. More...
 
Preconditioner *& preconditioner_pt ()
 
- Public Member Functions inherited from oomph::GeneralPurposeBlockPreconditioner< MATRIX >
 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)
 
Preconditionersubsidiary_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 ()
 
- Public Member Functions inherited from oomph::BlockPreconditioner< MATRIX >
 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 Meshmesh_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 LinearAlgebraDistributionblock_distribution_pt (const unsigned &b) const
 Access function to the block distributions (const version). More...
 
LinearAlgebraDistributionblock_distribution_pt (const unsigned b)
 Access function to the block distributions (non-const version). More...
 
LinearAlgebraDistributiondof_block_distribution_pt (const unsigned &b)
 Access function to the dof-level block distributions. More...
 
const LinearAlgebraDistributionmaster_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< unsignedget_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 LinearAlgebraDistributioninternal_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
 
- Public Member Functions inherited from oomph::Preconditioner
 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 OomphCommunicatorcomm_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)
 
- Public Member Functions inherited from oomph::DistributableLinearAlgebraObject
 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...
 
LinearAlgebraDistributiondistribution_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)
 

Additional Inherited Members

- Public Types inherited from oomph::GeneralPurposeBlockPreconditioner< MATRIX >
typedef Preconditioner *(* SubsidiaryPreconditionerFctPt) ()
 
- Protected Member Functions inherited from oomph::GeneralPurposeBlockPreconditioner< MATRIX >
void gp_preconditioner_set_all_meshes ()
 Set the mesh in the block preconditioning framework. More...
 
void gp_preconditioner_block_setup ()
 Modified block setup for general purpose block preconditioners. More...
 
void fill_in_subsidiary_preconditioners (const unsigned &nprec_needed)
 
- Protected Member Functions inherited from oomph::BlockPreconditioner< MATRIX >
void set_nmesh (const unsigned &n)
 
void set_mesh (const unsigned &i, const Mesh *const mesh_pt, const bool &allow_multiple_element_type_in_mesh=false)
 
void set_replacement_dof_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix *replacement_dof_block_pt)
 
bool any_mesh_distributed () const
 
int internal_dof_number (const unsigned &i_dof) const
 
unsigned internal_index_in_dof (const unsigned &i_dof) const
 
unsigned internal_block_dimension (const unsigned &b) const
 
unsigned internal_dof_block_dimension (const unsigned &i) const
 
unsigned master_nrow () const
 
unsigned internal_master_dof_number (const unsigned &b) const
 
const LinearAlgebraDistributioninternal_preconditioner_matrix_distribution_pt () const
 
const LinearAlgebraDistributionpreconditioner_matrix_distribution_pt () const
 
- Protected Member Functions inherited from oomph::DistributableLinearAlgebraObject
void clear_distribution ()
 
- Protected Attributes inherited from oomph::GeneralPurposeBlockPreconditioner< MATRIX >
Vector< Preconditioner * > Subsidiary_preconditioner_pt
 List of preconditioners to use for the blocks to be solved. More...
 
SubsidiaryPreconditionerFctPt Subsidiary_preconditioner_creation_function_pt
 
- Protected Attributes inherited from oomph::BlockPreconditioner< MATRIX >
MapMatrix< unsigned, CRDoubleMatrix * > Replacement_dof_block_pt
 The replacement dof-level blocks. More...
 
Vector< LinearAlgebraDistribution * > Block_distribution_pt
 The distribution for the blocks. More...
 
Vector< Vector< unsigned > > Block_to_dof_map_coarse
 
Vector< Vector< unsigned > > Block_to_dof_map_fine
 Mapping for the block types to the most fine grain dof types. More...
 
Vector< Vector< unsigned > > Doftype_coarsen_map_coarse
 
Vector< Vector< unsigned > > Doftype_coarsen_map_fine
 
Vector< LinearAlgebraDistribution * > Internal_block_distribution_pt
 Storage for the default distribution for each internal block. More...
 
Vector< LinearAlgebraDistribution * > Dof_block_distribution_pt
 
Vector< unsignedAllow_multiple_element_type_in_mesh
 
Vector< const Mesh * > Mesh_pt
 
Vector< unsignedNdof_types_in_mesh
 
unsigned Internal_nblock_types
 
unsigned Internal_ndof_types
 
- Protected Attributes inherited from oomph::Preconditioner
bool Silent_preconditioner_setup
 Boolean to indicate whether or not the build should be done silently. More...
 
std::ostream * Stream_pt
 Pointer to the output stream – defaults to std::cout. More...
 

Detailed Description

template<typename MATRIX>
class oomph::ExactBlockPreconditioner< MATRIX >

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// Exact block preconditioner - block preconditioner assembled from all blocks associated with the preconditioner and solved by SuperLU.

Constructor & Destructor Documentation

◆ ExactBlockPreconditioner() [1/2]

template<typename MATRIX >
oomph::ExactBlockPreconditioner< MATRIX >::ExactBlockPreconditioner ( )
inline

constructor

545 : GeneralPurposeBlockPreconditioner<MATRIX>() {}

◆ ~ExactBlockPreconditioner()

template<typename MATRIX >
virtual oomph::ExactBlockPreconditioner< MATRIX >::~ExactBlockPreconditioner ( )
inlinevirtual

Destructor.

548 {}

◆ ExactBlockPreconditioner() [2/2]

template<typename MATRIX >
oomph::ExactBlockPreconditioner< MATRIX >::ExactBlockPreconditioner ( const ExactBlockPreconditioner< MATRIX > &  )
delete

Broken copy constructor.

Member Function Documentation

◆ operator=()

template<typename MATRIX >
void oomph::ExactBlockPreconditioner< MATRIX >::operator= ( const ExactBlockPreconditioner< MATRIX > &  )
delete

Broken assignment operator.

◆ preconditioner_pt()

template<typename MATRIX >
Preconditioner*& oomph::ExactBlockPreconditioner< MATRIX >::preconditioner_pt ( )
inline

Access for the preconditioner pointer used to solve the system (stored in the vector of pointers in the base class);

565  {
566  return this->Subsidiary_preconditioner_pt[0];
567  }
Vector< Preconditioner * > Subsidiary_preconditioner_pt
List of preconditioners to use for the blocks to be solved.
Definition: general_purpose_block_preconditioners.h:294

References oomph::GeneralPurposeBlockPreconditioner< MATRIX >::Subsidiary_preconditioner_pt.

◆ preconditioner_solve()

template<typename MATRIX >
void oomph::ExactBlockPreconditioner< MATRIX >::preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
virtual

Apply preconditioner to r.

Preconditioner solve for the exact block preconditioner.

Implements oomph::Preconditioner.

588  {
589  // get the block ordered components of the r vector for this preconditioner
590  DoubleVector block_order_r;
591  this->get_block_ordered_preconditioner_vector(r, block_order_r);
592 
593  // vector for solution
594  DoubleVector block_order_z;
595 
596  // apply the preconditioner
597  preconditioner_pt()->preconditioner_solve(block_order_r, block_order_z);
598 
599  // copy solution back to z vector
600  this->return_block_ordered_preconditioner_vector(block_order_z, z);
601  }
std::vector< double > DoubleVector
loads clump configuration
Definition: ClumpInput.h:26
void return_block_ordered_preconditioner_vector(const DoubleVector &w, DoubleVector &v) const
Definition: block_preconditioner.cc:5046
void get_block_ordered_preconditioner_vector(const DoubleVector &v, DoubleVector &w)
Definition: block_preconditioner.cc:4793
Preconditioner *& preconditioner_pt()
Definition: general_purpose_block_preconditioners.h:564
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)=0
r
Definition: UniformPSDSelfTest.py:20

References UniformPSDSelfTest::r.

◆ setup()

template<typename MATRIX >
void oomph::ExactBlockPreconditioner< MATRIX >::setup
virtual

Setup the preconditioner.

Setup for the exact block preconditioner.

Implements oomph::Preconditioner.

533  {
534  // If this is a master block preconditioner,
535  // we give the mesh pointers to the BlockPreconditioner base class.
536  // Subsidiary preconditioners don't need meshes...
537  if (this->is_master_block_preconditioner())
538  {
539 #ifdef PARANOID
540  if (this->gp_nmesh() == 0)
541  {
542  std::ostringstream err_msg;
543  err_msg << "There are no meshes set.\n"
544  << "Did you remember to call add_mesh(...)?";
545  throw OomphLibError(
547  }
548 #endif
549 
550  // Set all meshes if this is master block preconditioner
552  }
553 
554  // Set up the block look up schemes
556 
557  // get the number of DOF types
558  unsigned nblock_types = this->nblock_types();
559 
560  // Build the preconditioner matrix
561  VectorMatrix<BlockSelector> required_blocks(nblock_types, nblock_types);
562 
563  // boolean indicating if we want the block, stored for readability.
564  const bool want_block = true;
565  for (unsigned b_i = 0; b_i < nblock_types; b_i++)
566  {
567  for (unsigned b_j = 0; b_j < nblock_types; b_j++)
568  {
569  required_blocks[b_i][b_j].select_block(b_i, b_j, want_block);
570  }
571  }
572 
573  // Get the concatenated blocks
574  CRDoubleMatrix exact_block_matrix =
575  this->get_concatenated_block(required_blocks);
576 
577  // Setup the preconditioner.
578  this->fill_in_subsidiary_preconditioners(1); // Only need one preconditioner
579  preconditioner_pt()->setup(&exact_block_matrix);
580  }
MATRIX get_concatenated_block(const VectorMatrix< BlockSelector > &selected_block)
Definition: block_preconditioner.h:1134
bool is_master_block_preconditioner() const
Definition: block_preconditioner.h:2068
unsigned nblock_types() const
Return the number of block types.
Definition: block_preconditioner.h:1670
void gp_preconditioner_set_all_meshes()
Set the mesh in the block preconditioning framework.
Definition: general_purpose_block_preconditioners.h:218
void fill_in_subsidiary_preconditioners(const unsigned &nprec_needed)
Definition: general_purpose_block_preconditioners.h:256
void gp_preconditioner_block_setup()
Modified block setup for general purpose block preconditioners.
Definition: general_purpose_block_preconditioners.h:241
unsigned gp_nmesh()
Definition: general_purpose_block_preconditioners.h:211
void setup(DoubleMatrixBase *matrix_pt)
Definition: preconditioner.h:94
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.


The documentation for this class was generated from the following files: