oomph::BiharmonicPreconditioner Class Reference

Biharmonic Preconditioner - for two dimensional problems. More...

#include <biharmonic_preconditioner.h>

+ Inheritance diagram for oomph::BiharmonicPreconditioner:

Public Member Functions

 BiharmonicPreconditioner ()
 Constructor - by default inexact preconditioning is used. More...
 
 ~BiharmonicPreconditioner ()
 destructor - cleans up preconditioners and delete matrices More...
 
void clean_up_memory ()
 Clean up memory (empty). Generic interface function. More...
 
 BiharmonicPreconditioner (const BiharmonicPreconditioner &)=delete
 Broken copy constructor. More...
 
void operator= (const BiharmonicPreconditioner &)=delete
 Broken assignment operator. More...
 
void setup ()
 Setup the preconditioner. More...
 
void preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 Apply preconditioner to r. More...
 
unsignedpreconditioner_type ()
 
Mesh *& bulk_element_mesh_pt ()
 
- Public Member Functions inherited from oomph::BlockPreconditioner< CRDoubleMatrix >
 BlockPreconditioner ()
 Constructor. More...
 
 BlockPreconditioner (const BlockPreconditioner &)=delete
 Broken copy constructor. More...
 
virtual ~BlockPreconditioner ()
 Destructor. More...
 
void operator= (const BlockPreconditioner &)=delete
 Broken assignment operator. More...
 
CRDoubleMatrixmatrix_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 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< 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< 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, 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 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 CRDoubleMatrix *block_matrix_pt) const
 
int get_index_of_value (const Vector< myType > &vec, const myType val, const bool sorted=false) 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)
 

Private Attributes

unsigned Preconditioner_type
 
PreconditionerSub_preconditioner_1_pt
 Exact Preconditioner Pointer. More...
 
PreconditionerSub_preconditioner_2_pt
 Inexact Preconditioner Pointer. More...
 
PreconditionerHijacked_sub_block_preconditioner_pt
 Preconditioner the diagonal block associated with hijacked elements. More...
 
MeshBulk_element_mesh_pt
 the bulk element mesh pt More...
 

Additional Inherited Members

- Protected Member Functions inherited from oomph::BlockPreconditioner< CRDoubleMatrix >
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< CRDoubleMatrix >
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

Biharmonic Preconditioner - for two dimensional problems.

Constructor & Destructor Documentation

◆ BiharmonicPreconditioner() [1/2]

oomph::BiharmonicPreconditioner::BiharmonicPreconditioner ( )
inline

Constructor - by default inexact preconditioning is used.

92  {
93  // initialise both preconditioners to zero
97 
98  // by default we use the inexact biharmonic preconditioner
99  // and if possible use Hypre preconditioner
100 #ifdef OOMPH_HAS_HYPRE
102 #else
104 #endif
105 
106  // size mesh pt correctly
107  this->set_nmesh(1);
109  }
Preconditioner * Hijacked_sub_block_preconditioner_pt
Preconditioner the diagonal block associated with hijacked elements.
Definition: biharmonic_preconditioner.h:171
Preconditioner * Sub_preconditioner_2_pt
Inexact Preconditioner Pointer.
Definition: biharmonic_preconditioner.h:168
unsigned Preconditioner_type
Definition: biharmonic_preconditioner.h:162
Mesh * Bulk_element_mesh_pt
the bulk element mesh pt
Definition: biharmonic_preconditioner.h:174
Preconditioner * Sub_preconditioner_1_pt
Exact Preconditioner Pointer.
Definition: biharmonic_preconditioner.h:165
void set_nmesh(const unsigned &n)
Definition: block_preconditioner.h:2851

References Bulk_element_mesh_pt, Hijacked_sub_block_preconditioner_pt, Preconditioner_type, oomph::BlockPreconditioner< CRDoubleMatrix >::set_nmesh(), Sub_preconditioner_1_pt, and Sub_preconditioner_2_pt.

◆ ~BiharmonicPreconditioner()

oomph::BiharmonicPreconditioner::~BiharmonicPreconditioner ( )
inline

destructor - cleans up preconditioners and delete matrices

113  {
114  this->clean_up_memory();
115  }
void clean_up_memory()
Clean up memory (empty). Generic interface function.
Definition: biharmonic_preconditioner.h:118

References clean_up_memory().

◆ BiharmonicPreconditioner() [2/2]

oomph::BiharmonicPreconditioner::BiharmonicPreconditioner ( const BiharmonicPreconditioner )
delete

Broken copy constructor.

Member Function Documentation

◆ bulk_element_mesh_pt()

Mesh*& oomph::BiharmonicPreconditioner::bulk_element_mesh_pt ( )
inline

Access function to the mesh pt for the bulk elements. The mesh should only contain BiharmonicElement<2> and Hijacked<BiharmonicElement<2> > elements

152  {
153  return Bulk_element_mesh_pt;
154  }

References Bulk_element_mesh_pt.

Referenced by main().

◆ clean_up_memory()

void oomph::BiharmonicPreconditioner::clean_up_memory ( )
inlinevirtual

Clean up memory (empty). Generic interface function.

Reimplemented from oomph::Preconditioner.

119  {
120  // delete the sub preconditioners
124  }

References Hijacked_sub_block_preconditioner_pt, Sub_preconditioner_1_pt, and Sub_preconditioner_2_pt.

Referenced by setup(), and ~BiharmonicPreconditioner().

◆ operator=()

void oomph::BiharmonicPreconditioner::operator= ( const BiharmonicPreconditioner )
delete

Broken assignment operator.

◆ preconditioner_solve()

void oomph::BiharmonicPreconditioner::preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
virtual

Apply preconditioner to r.

preconditioner solve for the biharmonic preconditioner

Implements oomph::Preconditioner.

245  {
246  // zero z
247  z.initialise(0.0);
248 
249  // solve sub preconditioner 1
251 
252  // solve sub preconditioner 2
253  DoubleVector block_r;
254  get_block_vector(3, r, block_r);
255  DoubleVector block_z;
257  return_block_vector(3, block_z, z);
258 
259  // solve the hijacked sub block preconditioner if required
260  if (this->nblock_types() == 5)
261  {
262  block_r.clear();
263  block_z.clear();
264  get_block_vector(4, r, block_r);
266  block_z);
267  return_block_vector(4, block_z, z);
268  }
269  }
std::vector< double > DoubleVector
loads clump configuration
Definition: ClumpInput.h:26
void return_block_vector(const unsigned &n, const DoubleVector &b, DoubleVector &v) const
Definition: block_preconditioner.cc:4489
void get_block_vector(const unsigned &n, const DoubleVector &v, DoubleVector &b) const
Definition: block_preconditioner.cc:4186
unsigned nblock_types() const
Return the number of block types.
Definition: block_preconditioner.h:1670
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)=0
r
Definition: UniformPSDSelfTest.py:20

References oomph::DoubleVector::clear(), oomph::BlockPreconditioner< CRDoubleMatrix >::get_block_vector(), Hijacked_sub_block_preconditioner_pt, oomph::DoubleVector::initialise(), oomph::BlockPreconditioner< CRDoubleMatrix >::nblock_types(), oomph::Preconditioner::preconditioner_solve(), UniformPSDSelfTest::r, oomph::BlockPreconditioner< CRDoubleMatrix >::return_block_vector(), Sub_preconditioner_1_pt, and Sub_preconditioner_2_pt.

◆ preconditioner_type()

unsigned& oomph::BiharmonicPreconditioner::preconditioner_type ( )
inline

Access function to the preconditioner type

  • 0 : exact BBD
  • 1 : inexact BBD w/ SuperLU
  • 2 : inexact BBD w/ AMG (Hypre Boomer AMG)
  • 3 : block diagonal (3x3)+(1x1)
144  {
145  return Preconditioner_type;
146  }

References Preconditioner_type.

Referenced by main().

◆ setup()

void oomph::BiharmonicPreconditioner::setup ( )
virtual

Setup the preconditioner.

setup for the biharmonic preconditioner

Exact BD

Implements oomph::Preconditioner.

108  {
109  // clean up
110  this->clean_up_memory();
111 
112  // paranoid check that teh bulk element mesh has been set
113 #ifdef PARANOID
114  if (Bulk_element_mesh_pt == 0)
115  {
116  std::ostringstream error_message;
117  error_message << "The bulk element mesh has not been passed to "
118  "bulk_element_mesh_pt()";
119  throw OomphLibError(
120  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
121  }
122 #endif
123 
124  // setup the mesh
125  this->set_mesh(0, Bulk_element_mesh_pt);
126 
127  // setup the blocks look up schemes
128  this->block_setup();
129 
130  // determine whether this preconditioner has 4 or 5 block types and set
131  // Nblock_types if neccessary
132  // unsigned n_row = this->master_nrow();
133  // bool nblock_type_check = true;
134  // for (unsigned i = 0; i < n_row; i++)
135  // {
136  // if (this->block_number(i) == 4) { nblock_type_check = false; }
137  // }
138  // if (nblock_type_check) { Nblock_types = 4; }
139  //
140 
141  // check the preconditioner type is acceptable
142 #ifdef PARANOID
143  if (Preconditioner_type != 0 && Preconditioner_type != 1 &&
145  {
146  std::ostringstream error_message;
147  error_message << "Preconditioner_type must be equal to 0 (BBD exact), 1 "
148  "(inexact BBD with LU),"
149  << " 2 (inexact BBD with AMG) or 3 (exact BD).";
150  throw OomphLibError(
151  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
152  }
153 #endif
154 
155  // create the preconditioners
156  bool use_amg = true;
157  bool retain_all_blocks = false;
158  switch (Preconditioner_type)
159  {
160  // Exact BBD
161  case 0:
162 
163  retain_all_blocks = false;
165  new ExactSubBiharmonicPreconditioner(this, retain_all_blocks);
166  Sub_preconditioner_2_pt = new SuperLUPreconditioner;
167 
168  oomph_info << "Using exact BBD\n";
169  break;
170 
171  // Inexact BBD with LU
172  case 1:
173 
174  use_amg = false;
176  new InexactSubBiharmonicPreconditioner(this, use_amg);
177  Sub_preconditioner_2_pt = new MatrixBasedDiagPreconditioner;
178  oomph_info << "Using inexact BBD with LU\n";
179  break;
180 
181 
182  // Inexact BBD with AMG
183  case 2:
184 
185  use_amg = true;
187  new InexactSubBiharmonicPreconditioner(this, use_amg);
188  Sub_preconditioner_2_pt = new MatrixBasedDiagPreconditioner;
189  oomph_info << "Using inexact BBD with AMG\n";
190  break;
191 
193  case 3:
194 
195  retain_all_blocks = true;
197  new ExactSubBiharmonicPreconditioner(this, retain_all_blocks);
198  Sub_preconditioner_2_pt = new SuperLUPreconditioner;
199 
200  oomph_info << "Using exact BD\n";
201  break;
202 
203  default:
204 
205  throw OomphLibError("Wrong type of preconditioner.",
208  }
209 
210 
211  // setup sub preconditioner pt 1
213 
214  // get the matrix ans setup sub preconditioner pt 2
215  CRDoubleMatrix* j_33_pt = new CRDoubleMatrix;
216  this->get_block(3, 3, *j_33_pt);
217  Sub_preconditioner_2_pt->setup(j_33_pt);
218  delete j_33_pt;
219  j_33_pt = 0;
220 
221  // if the block preconditioner has 5 block types setup the preconditioner
222  // for the 5th block diagonal block (Matrix is also diagonal hence a
223  // diagonal preconditioner is sufficient in the exact biharmonic
224  // preconditioner case as well)
225  if (this->nblock_types() == 5)
226  {
227  // get the matrix for block J_33
228  CRDoubleMatrix* j_44_pt = new CRDoubleMatrix;
229  this->get_block(4, 4, *j_44_pt);
230 
231  // setup the hijacked sub preconditioner
232  Hijacked_sub_block_preconditioner_pt = new MatrixBasedDiagPreconditioner;
234  delete j_44_pt;
235  j_44_pt = 0;
236  }
237  }
void get_block(const unsigned &i, const unsigned &j, CRDoubleMatrix &output_matrix, const bool &ignore_replacement_block=false) const
Definition: block_preconditioner.h:673
CRDoubleMatrix * matrix_pt() const
Definition: block_preconditioner.h:520
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
void setup(DoubleMatrixBase *matrix_pt)
Definition: preconditioner.h:94
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::BlockPreconditioner< CRDoubleMatrix >::block_setup(), Bulk_element_mesh_pt, clean_up_memory(), oomph::BlockPreconditioner< CRDoubleMatrix >::get_block(), Hijacked_sub_block_preconditioner_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::matrix_pt(), oomph::BlockPreconditioner< CRDoubleMatrix >::nblock_types(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, Preconditioner_type, oomph::BlockPreconditioner< CRDoubleMatrix >::set_mesh(), oomph::Preconditioner::setup(), Sub_preconditioner_1_pt, and Sub_preconditioner_2_pt.

Member Data Documentation

◆ Bulk_element_mesh_pt

Mesh* oomph::BiharmonicPreconditioner::Bulk_element_mesh_pt
private

the bulk element mesh pt

Referenced by BiharmonicPreconditioner(), bulk_element_mesh_pt(), and setup().

◆ Hijacked_sub_block_preconditioner_pt

Preconditioner* oomph::BiharmonicPreconditioner::Hijacked_sub_block_preconditioner_pt
private

Preconditioner the diagonal block associated with hijacked elements.

Referenced by BiharmonicPreconditioner(), clean_up_memory(), preconditioner_solve(), and setup().

◆ Preconditioner_type

unsigned oomph::BiharmonicPreconditioner::Preconditioner_type
private

preconditioner type

  • 0 : exact BBD
  • 1 : inexact BBD w/ SuperLU
  • 2 : inexact BBD w/ AMG
  • 3 : block diagonal (3x3)+(1x1)

Referenced by BiharmonicPreconditioner(), preconditioner_type(), and setup().

◆ Sub_preconditioner_1_pt

Preconditioner* oomph::BiharmonicPreconditioner::Sub_preconditioner_1_pt
private

Exact Preconditioner Pointer.

Referenced by BiharmonicPreconditioner(), clean_up_memory(), preconditioner_solve(), and setup().

◆ Sub_preconditioner_2_pt

Preconditioner* oomph::BiharmonicPreconditioner::Sub_preconditioner_2_pt
private

Inexact Preconditioner Pointer.

Referenced by BiharmonicPreconditioner(), clean_up_memory(), preconditioner_solve(), and setup().


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