oomph::UpperTriangular< MATRIX > Class Template Reference

#include <multi_poisson_block_preconditioners.h>

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

Public Member Functions

 UpperTriangular ()
 Constructor. More...
 
virtual ~UpperTriangular ()
 Destructor - delete the preconditioner matrices. More...
 
virtual void clean_up_my_memory ()
 clean up the memory More...
 
 UpperTriangular (const UpperTriangular &)
 Broken copy constructor. More...
 
void operator= (const UpperTriangular &)
 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_multi_poisson_mesh (Mesh *multi_poisson_mesh_pt)
 Specify the mesh that contains multi-poisson elements. More...
 
void setup (DoubleMatrixBase *matrix_pt)
 
void setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt)
 
virtual void setup ()=0
 
- 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 clean_up_memory ()
 Clean up memory (empty). Generic interface function. 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)
 

Private Attributes

DenseMatrix< MatrixVectorProduct * > Off_diagonal_matrix_vector_product_pt
 Pointers to matrix vector product operators for the off diagonals. More...
 
Vector< Preconditioner * > Block_preconditioner_pt
 
MeshMulti_poisson_mesh_pt
 

Additional Inherited Members

- 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::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::UpperTriangular< MATRIX >

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// Upper triangular preconditioner for a system with any number of dof types.

Constructor & Destructor Documentation

◆ UpperTriangular() [1/2]

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

Constructor.

859  : BlockPreconditioner<MATRIX>()
860  {
862  }
Mesh * Multi_poisson_mesh_pt
Definition: multi_poisson_block_preconditioners.h:912

References oomph::UpperTriangular< MATRIX >::Multi_poisson_mesh_pt.

◆ ~UpperTriangular()

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

Destructor - delete the preconditioner matrices.

866  {
867  this->clean_up_my_memory();
868  }
virtual void clean_up_my_memory()
clean up the memory
Definition: multi_poisson_block_preconditioners.h:1048

References oomph::UpperTriangular< MATRIX >::clean_up_my_memory().

◆ UpperTriangular() [2/2]

template<typename MATRIX >
oomph::UpperTriangular< MATRIX >::UpperTriangular ( const UpperTriangular< MATRIX > &  )
inline

Broken copy constructor.

875  {
876  BrokenCopy::broken_copy("UpperTriangular");
877  }
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:212

References oomph::BrokenCopy::broken_copy().

Member Function Documentation

◆ clean_up_my_memory()

template<typename MATRIX >
void oomph::UpperTriangular< MATRIX >::clean_up_my_memory
virtual

clean up the memory

The clean up function.

1049  {
1050  // Delete anything in Off_diagonal_matrix_vector_products
1051  for(unsigned i=0,ni=Off_diagonal_matrix_vector_product_pt.nrow();i<ni;i++)
1052  {
1053  for(unsigned j=0,nj=Off_diagonal_matrix_vector_product_pt.ncol();j<nj;j++)
1054  {
1056  {
1059  }
1060  }
1061  }
1062 
1063  // Delete preconditioners (approximate solvers)
1064  unsigned n_block = Block_preconditioner_pt.size();
1065  for (unsigned i=0;i<n_block;i++)
1066  {
1067  if(Block_preconditioner_pt[i]!=0)
1068  {
1069  delete Block_preconditioner_pt[i];
1071  }
1072  }
1073  } // End of clean_up_my_memory function.
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Vector< Preconditioner * > Block_preconditioner_pt
Definition: multi_poisson_block_preconditioners.h:908
DenseMatrix< MatrixVectorProduct * > Off_diagonal_matrix_vector_product_pt
Pointers to matrix vector product operators for the off diagonals.
Definition: multi_poisson_block_preconditioners.h:904
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References i, and j.

Referenced by oomph::UpperTriangular< MATRIX >::~UpperTriangular().

◆ operator=()

template<typename MATRIX >
void oomph::UpperTriangular< MATRIX >::operator= ( const UpperTriangular< MATRIX > &  )
inline

Broken assignment operator.

881  {
882  BrokenCopy::broken_assign("UpperTriangular");
883  }
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:195

References oomph::BrokenCopy::broken_assign().

◆ preconditioner_solve()

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

Apply preconditioner to r.

Preconditioner solve for the upper triangular preconditioner: Apply preconditioner to r and return z, so that P z = r, where P is the block diagonal matrix constructed from the original linear system.

Implements oomph::Preconditioner.

1010  {
1011  // Get number of blocks
1012  unsigned n_block = this->nblock_types();
1013 
1014  // vector of vectors for each section of rhs vector
1015  Vector<DoubleVector> block_r;
1016 
1017  // rearrange the vector r into the vector of block vectors block_r
1018  this->get_block_vectors(r,block_r);
1019 
1020  // Vector of vectors for the solution block vectors
1021  Vector<DoubleVector> block_z(n_block);
1022 
1023  // Required to be an int due to an unsigned being unable to be compared to a
1024  // negative number (because it would roll over).
1025  for (int i=n_block-1;i>-1;i--)
1026  {
1027  // Back substitute
1028  for (unsigned j=i+1;j<n_block;j++)
1029  {
1030  DoubleVector temp;
1031  Off_diagonal_matrix_vector_product_pt(i,j)->multiply(block_z[j],temp);
1032  block_r[i] -= temp;
1033  } // End for over j
1034 
1035  // Solve on the block
1036  this->Block_preconditioner_pt[i]->
1037  preconditioner_solve(block_r[i], block_z[i]);
1038  } // End for over i
1039 
1040  // Copy solution in block vectors block_r back to z
1041  this->return_block_vectors(block_z,z);
1042  }
std::vector< double > DoubleVector
loads clump configuration
Definition: ClumpInput.h:26
void return_block_vectors(const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const
Definition: block_preconditioner.cc:3443
unsigned nblock_types() const
Return the number of block types.
Definition: block_preconditioner.h:1670
void get_block_vectors(const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const
Definition: block_preconditioner.cc:2939
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply preconditioner to r.
Definition: multi_poisson_block_preconditioners.h:1009
r
Definition: UniformPSDSelfTest.py:20

References i, j, and UniformPSDSelfTest::r.

◆ set_multi_poisson_mesh()

◆ setup() [1/4]

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

Setup the preconditioner.

The setup function.

Implements oomph::Preconditioner.

921  {
922  // clean the memory
923  this->clean_up_my_memory();
924 
925 #ifdef PARANOID
926  if (Multi_poisson_mesh_pt == 0)
927  {
928  std::stringstream err;
929  err << "Please set pointer to mesh using set_multi_poisson_mesh(...).\n";
930  throw OomphLibError(err.str(),
933  }
934 #endif
935 
936  // The preconditioner works with one mesh; set it!
937  this->set_nmesh(1);
939 
940  // Set up the block look up schemes
941  this->block_setup();
942 
943  // Number of block types
944  unsigned nblock_types = this->nblock_types();
945 
946  // Storage for the pointers to the off diagonal matrix vector products
947  // and the the subsidiary preconditioners (inexact solvers) for the diagonal
948  // blocks
951 
952  // Build the preconditioners and matrix vector products
953  for(unsigned i = 0; i < nblock_types; i++)
954  {
955  // Create the subsidiary preconditioners
956  Block_preconditioner_pt[i] = new SuperLUPreconditioner;
957 
958  // Put in braces so block matrix goes out of scope when done...
959  {
960  // Get block -- this makes a deep copy of the relevant entries in the
961  // full Jacobian (i.e. the matrix of the linear system we're
962  // actually trying to solve); we can do with this copy whatever
963  // we want...
964  CRDoubleMatrix block;
965  this->get_block(i,i,block);
966 
967  // Set up preconditioner (i.e. lu-decompose the block)
968  Block_preconditioner_pt[i]->setup(&block);
969 
970  // Done with this block now, so the diagonal block that we extracted
971  // above can go out of scope. Its LU decomposition (which is the only
972  // thing we need to apply the preconditioner in the
973  // preconditioner_solve(...) function) is retained in the associated
974  // sub-preconditioner/(in)exact solver(SuperLU).
975 
976  } // end of brace to make block go out of scope
977 
978  // Next set up the off diagonal mat vec operators
979  for(unsigned j=i+1;j<nblock_types;j++)
980  {
981  // Get the off diagonal block
982  CRDoubleMatrix block_matrix = this->get_block(i,j);
983 
984  // Create a matrix vector product operator
985  Off_diagonal_matrix_vector_product_pt(i,j) = new MatrixVectorProduct;
986 
987  // Setup the matrix vector product for the currrent block matrix
988  // and specify the column in the "big matrix" as final argument.
989  // This is needed for things to work properly in parallel -- don't ask!
991  Off_diagonal_matrix_vector_product_pt(i,j),&block_matrix,j);
992 
993  // Done with this block now, so the diagonal block that we extracted
994  // above can go out of scope. The MatrixVectorProduct operator retains
995  // its own copy of whatever data it needs.
996 
997  } // End for loop over j
998  } // End for loop over i
999  } // End setup(...)
m m block(1, 0, 2, 2)<< 4
void get_block(const unsigned &i, const unsigned &j, MATRIX &output_matrix, const bool &ignore_replacement_block=false) const
Definition: block_preconditioner.h:673
void setup_matrix_vector_product(MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const Vector< unsigned > &block_col_indices)
Definition: block_preconditioner.h:2397
void set_nmesh(const unsigned &n)
Definition: block_preconditioner.h:2851
virtual void block_setup()
Definition: block_preconditioner.cc:2483
void set_mesh(const unsigned &i, const Mesh *const mesh_pt, const bool &allow_multiple_element_type_in_mesh=false)
Definition: block_preconditioner.h:2866
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References block(), i, j, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by oomph::TwoPlusThreeUpperTriangularWithOneLevelSubsidiary< MATRIX >::setup(), oomph::TwoPlusOneUpperTriangularPreconditioner< MATRIX >::setup(), oomph::TwoPlusThreeUpperTriangularWithTwoLevelSubsidiary< MATRIX >::setup(), oomph::TwoPlusThreeUpperTriangularWithReplace< MATRIX >::setup(), oomph::CoarseTwoPlusTwoPlusOne< MATRIX >::setup(), and oomph::OnePlusFourWithTwoCoarse< MATRIX >::setup().

◆ setup() [2/4]

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

Setup the preconditioner. Pure virtual generic interface function.

Implements oomph::Preconditioner.

◆ setup() [3/4]

template<typename MATRIX >
void oomph::Preconditioner::setup
inlinevirtual

Compatability layer for old preconditioners where problem pointers were needed. The problem pointer is only used to get a communicator pointer.

Implements oomph::Preconditioner.

121  {
123  setup(matrix_pt);
124  }
MATRIX * matrix_pt() const
Definition: block_preconditioner.h:520
void setup()
Setup the preconditioner.
Definition: multi_poisson_block_preconditioners.h:920
void obsolete()
Output warning message.
Definition: oomph_utilities.cc:1102

◆ setup() [4/4]

template<typename MATRIX >
void oomph::Preconditioner::setup
inlinevirtual

Setup the preconditioner: store the matrix pointer and the communicator pointer then call preconditioner specific setup() function.

Implements oomph::Preconditioner.

95  {
96  // Store matrix pointer
98 
99  // Extract and store communicator pointer
100  DistributableLinearAlgebraObject* dist_obj_pt =
102  if (dist_obj_pt != 0)
103  {
104  set_comm_pt(dist_obj_pt->distribution_pt()->communicator_pt());
105  }
106  else
107  {
108  set_comm_pt(0);
109  }
110 
111  double setup_time_start = TimingHelpers::timer();
112  setup();
113  double setup_time_finish = TimingHelpers::timer();
114  Setup_time = setup_time_finish - setup_time_start;
115  }
DistributableLinearAlgebraObject()
Default constructor - create a distribution.
Definition: linear_algebra_distribution.h:438
double Setup_time
The time it takes to set up this preconditioner.
Definition: preconditioner.h:243
virtual void set_comm_pt(const OomphCommunicator *const comm_pt)
Set the communicator pointer.
Definition: preconditioner.h:193
virtual void set_matrix_pt(DoubleMatrixBase *matrix_pt)
Set the matrix pointer.
Definition: preconditioner.h:165
double timer()
returns the time in seconds after some point in past
Definition: oomph_utilities.cc:1295

Member Data Documentation

◆ Block_preconditioner_pt

template<typename MATRIX >
Vector<Preconditioner*> oomph::UpperTriangular< MATRIX >::Block_preconditioner_pt
private

Vector of pointers to preconditioners/inexact solvers for each diagonal block

◆ Multi_poisson_mesh_pt

template<typename MATRIX >
Mesh* oomph::UpperTriangular< MATRIX >::Multi_poisson_mesh_pt
private

Pointer to mesh with preconditionable elements used for classification of dof types.

Referenced by oomph::UpperTriangular< MATRIX >::set_multi_poisson_mesh(), and oomph::UpperTriangular< MATRIX >::UpperTriangular().

◆ Off_diagonal_matrix_vector_product_pt

template<typename MATRIX >
DenseMatrix<MatrixVectorProduct*> oomph::UpperTriangular< MATRIX >::Off_diagonal_matrix_vector_product_pt
private

Pointers to matrix vector product operators for the off diagonals.


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