oomph::PseudoElasticPreconditionerOld Class Reference

#include <pseudo_elastic_preconditioner.h>

+ Inheritance diagram for oomph::PseudoElasticPreconditionerOld:

Public Types

enum  Elastic_preconditioner_type { Exact_block_preconditioner , Block_diagonal_preconditioner , Block_lower_triangular_preconditioner , Block_upper_triangular_preconditioner }
 
typedef Preconditioner *(* SubsidiaryPreconditionerFctPt) ()
 

Public Member Functions

 PseudoElasticPreconditionerOld ()
 Default (and only) constructor. More...
 
virtual ~PseudoElasticPreconditionerOld ()
 destructor More...
 
 PseudoElasticPreconditionerOld (const PseudoElasticPreconditionerOld &)=delete
 Broken copy constructor. More...
 
void setup ()
 Broken assignment operator. More...
 
void preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 
void set_elastic_mesh (Mesh *mesh_pt)
 
void set_lagrange_multiplier_mesh (Mesh *mesh_pt)
 
void enable_inf_norm_of_s_scaling ()
 Call to use the inf norm of S as scaling. More...
 
void disable_inf_norm_of_s_scaling ()
 Call to use no scaling. More...
 
void set_lagrange_multiplier_subsidiary_preconditioner (SubsidiaryPreconditionerFctPt prec_fn)
 
void set_elastic_subsidiary_preconditioner (SubsidiaryPreconditionerFctPt prec_fn)
 
Elastic_preconditioner_typeelastic_preconditioner_type ()
 
void clean_up_memory ()
 Clears the memory. More...
 
- 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 Member Functions

void elastic_preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 Apply the elastic subsidiary preconditioner. More...
 
void lagrange_multiplier_preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 Apply the lagrange multiplier subsidiary preconditioner. More...
 

Private Attributes

double Scaling
 The scaling. Defaults to infinity norm of S. More...
 
bool Use_inf_norm_of_s_scaling
 
Elastic_preconditioner_type E_preconditioner_type
 
unsigned Dim
 the dimension of the problem More...
 
PreconditionerElastic_preconditioner_pt
 storage for the preconditioner for the solid system More...
 
Vector< Preconditioner * > Lagrange_multiplier_preconditioner_pt
 lagrange multiplier preconditioner pt More...
 
SubsidiaryPreconditionerFctPt Lagrange_multiplier_subsidiary_preconditioner_function_pt
 The Lagrange multiplier subsidary preconditioner function pointer. More...
 
SubsidiaryPreconditionerFctPt Elastic_subsidiary_preconditioner_function_pt
 The solid subsidiary preconditioner function pointer. More...
 
MeshElastic_mesh_pt
 Pointer to the mesh containing the solid elements. More...
 
MeshLagrange_multiplier_mesh_pt
 Pointer to the mesh containing the Lagrange multiplier elements. More...
 

Friends

class PseudoElasticFSIPreconditioner
 

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

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// A subsidiary preconditioner for the pseudo-elastic FSI preconditioner. Also a stand-alone preconditioner for the problem of non-linear elasticity subject to prescribed displacement by Lagrange multiplier.. Enumeration of Elastic DOF types in the Pseudo-Elastic Elements The method get_dof_types_for_unknowns() must be implemented such that DOFs subject be Lagrange multiplier and DOFs NOT subject to Lagrange multiplier have different labels. For example in a 3D problem there are 6 DOF types and the following labelling must be implemented: 0 - x displacement (without lagr mult traction) 1 - y displacement (without lagr mult traction) 2 - z displacement (without lagr mult traction) 4 - x displacement (with lagr mult traction) 5 - y displacement (with lagr mult traction) 6 - z displacement (with lagr mult traction)

Member Typedef Documentation

◆ SubsidiaryPreconditionerFctPt

typedef Preconditioner*(* oomph::PseudoElasticPreconditionerOld::SubsidiaryPreconditionerFctPt) ()

This preconditioner includes the option to use subsidiary operators other than SuperLUPreconditioner for this problem. This is the typedef of a function that should return an instance of a subsidiary preconditioning operator. This preconditioner is responsible for the destruction of the subsidiary preconditioners.

Member Enumeration Documentation

◆ Elastic_preconditioner_type

The augmented elasticity system can be preconditioned in one of four ways. 0 - Exact preconditioner 1 - Block diagonal preconditioning 2 - Block upper triangular preconditioner 3 - Block lower triangular preconditioner We group together the different components of the displacement vector field for the block decomposition.

Enumerator
Exact_block_preconditioner 
Block_diagonal_preconditioner 
Block_lower_triangular_preconditioner 
Block_upper_triangular_preconditioner 
325  {
330  };
@ Exact_block_preconditioner
Definition: pseudo_elastic_preconditioner.h:326
@ Block_upper_triangular_preconditioner
Definition: pseudo_elastic_preconditioner.h:329
@ Block_lower_triangular_preconditioner
Definition: pseudo_elastic_preconditioner.h:328
@ Block_diagonal_preconditioner
Definition: pseudo_elastic_preconditioner.h:327

Constructor & Destructor Documentation

◆ PseudoElasticPreconditionerOld() [1/2]

oomph::PseudoElasticPreconditionerOld::PseudoElasticPreconditionerOld ( )
inline

Default (and only) constructor.

334  {
335  // null pointers
339 
340  // set defaults
343 
344  // resize the Mesh_pt
346  Elastic_mesh_pt = 0;
347  }
Preconditioner * Elastic_preconditioner_pt
storage for the preconditioner for the solid system
Definition: pseudo_elastic_preconditioner.h:458
bool Use_inf_norm_of_s_scaling
Definition: pseudo_elastic_preconditioner.h:448
SubsidiaryPreconditionerFctPt Elastic_subsidiary_preconditioner_function_pt
The solid subsidiary preconditioner function pointer.
Definition: pseudo_elastic_preconditioner.h:468
Elastic_preconditioner_type E_preconditioner_type
Definition: pseudo_elastic_preconditioner.h:452
SubsidiaryPreconditionerFctPt Lagrange_multiplier_subsidiary_preconditioner_function_pt
The Lagrange multiplier subsidary preconditioner function pointer.
Definition: pseudo_elastic_preconditioner.h:465
Mesh * Elastic_mesh_pt
Pointer to the mesh containing the solid elements.
Definition: pseudo_elastic_preconditioner.h:471
Mesh * Lagrange_multiplier_mesh_pt
Pointer to the mesh containing the Lagrange multiplier elements.
Definition: pseudo_elastic_preconditioner.h:474

References E_preconditioner_type, Elastic_mesh_pt, Elastic_preconditioner_pt, Elastic_subsidiary_preconditioner_function_pt, Exact_block_preconditioner, Lagrange_multiplier_mesh_pt, Lagrange_multiplier_subsidiary_preconditioner_function_pt, and Use_inf_norm_of_s_scaling.

◆ ~PseudoElasticPreconditionerOld()

virtual oomph::PseudoElasticPreconditionerOld::~PseudoElasticPreconditionerOld ( )
inlinevirtual

destructor

351  {
352  this->clean_up_memory();
353  }
void clean_up_memory()
Clears the memory.
Definition: pseudo_elastic_preconditioner.cc:786

References clean_up_memory().

◆ PseudoElasticPreconditionerOld() [2/2]

oomph::PseudoElasticPreconditionerOld::PseudoElasticPreconditionerOld ( const PseudoElasticPreconditionerOld )
delete

Broken copy constructor.

Member Function Documentation

◆ clean_up_memory()

void oomph::PseudoElasticPreconditionerOld::clean_up_memory ( )
virtual

Clears the memory.

Reimplemented from oomph::Preconditioner.

787  {
788  // clean the block preconditioner base class memory
790 
791  // delete the solid preconditioner
794 
795  // delete the lagrange multiplier preconditioner pt
796  unsigned sz = Lagrange_multiplier_preconditioner_pt.size();
797  for (unsigned i = 0; i < sz; i++)
798  {
801  }
802  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
void clear_block_preconditioner_base()
Definition: block_preconditioner.h:2159
Vector< Preconditioner * > Lagrange_multiplier_preconditioner_pt
lagrange multiplier preconditioner pt
Definition: pseudo_elastic_preconditioner.h:461

References oomph::BlockPreconditioner< CRDoubleMatrix >::clear_block_preconditioner_base(), Elastic_preconditioner_pt, i, and Lagrange_multiplier_preconditioner_pt.

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

◆ disable_inf_norm_of_s_scaling()

void oomph::PseudoElasticPreconditionerOld::disable_inf_norm_of_s_scaling ( )
inline

Call to use no scaling.

396  {
398  }

References Use_inf_norm_of_s_scaling.

◆ elastic_preconditioner_solve()

void oomph::PseudoElasticPreconditionerOld::elastic_preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
private

Apply the elastic subsidiary preconditioner.

753  {
754  // apply the solid preconditioner
756  }
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)=0
r
Definition: UniformPSDSelfTest.py:20

References Elastic_preconditioner_pt, oomph::Preconditioner::preconditioner_solve(), and UniformPSDSelfTest::r.

Referenced by preconditioner_solve().

◆ elastic_preconditioner_type()

Elastic_preconditioner_type& oomph::PseudoElasticPreconditionerOld::elastic_preconditioner_type ( )
inline

Set the type of preconditioner applied to the elastic: 0 - Exact preconditioner 1 - Block diagonal preconditioning 2 - Block upper triangular preconditioner 3 - Block lower triangular preconditioner We group together the different components of the displacement vector field for the block decomposition.

428  {
429  return E_preconditioner_type;
430  }

References E_preconditioner_type.

◆ enable_inf_norm_of_s_scaling()

void oomph::PseudoElasticPreconditionerOld::enable_inf_norm_of_s_scaling ( )
inline

Call to use the inf norm of S as scaling.

390  {
392  }

References Use_inf_norm_of_s_scaling.

◆ lagrange_multiplier_preconditioner_solve()

void oomph::PseudoElasticPreconditionerOld::lagrange_multiplier_preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
private

Apply the lagrange multiplier subsidiary preconditioner.

764  {
765  // apply the lagrange multiplier preconditioner
766  for (unsigned d = 0; d < Dim; d++)
767  {
768  DoubleVector x;
769  this->get_block_vector(Dim * 2 + d, r, x);
770  DoubleVector y;
771  Lagrange_multiplier_preconditioner_pt[d]->preconditioner_solve(x, y);
772  Lagrange_multiplier_preconditioner_pt[d]->preconditioner_solve(y, x);
773  unsigned nrow_local = x.nrow_local();
774  double* x_pt = x.values_pt();
775  for (unsigned i = 0; i < nrow_local; i++)
776  {
777  x_pt[i] = x_pt[i] * Scaling;
778  }
779  this->return_block_vector(Dim * 2 + d, x, z);
780  }
781  }
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 nrow_local() const
access function for the num of local rows on this processor.
Definition: linear_algebra_distribution.h:469
double Scaling
The scaling. Defaults to infinity norm of S.
Definition: pseudo_elastic_preconditioner.h:444
unsigned Dim
the dimension of the problem
Definition: pseudo_elastic_preconditioner.h:455
Scalar * y
Definition: level1_cplx_impl.h:128
list x
Definition: plotDoE.py:28

References Dim, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block_vector(), i, Lagrange_multiplier_preconditioner_pt, oomph::DistributableLinearAlgebraObject::nrow_local(), UniformPSDSelfTest::r, oomph::BlockPreconditioner< CRDoubleMatrix >::return_block_vector(), Scaling, plotDoE::x, and y.

Referenced by preconditioner_solve().

◆ preconditioner_solve()

void oomph::PseudoElasticPreconditionerOld::preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
inlinevirtual

Apply the preconditioner. Method implemented in two other methods (elastic and lagrange multiplier subsidiary preocnditioner) for the PseudoElasticFSIPreconditioner

Implements oomph::Preconditioner.

369  {
372  }
void lagrange_multiplier_preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the lagrange multiplier subsidiary preconditioner.
Definition: pseudo_elastic_preconditioner.cc:762
void elastic_preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the elastic subsidiary preconditioner.
Definition: pseudo_elastic_preconditioner.cc:751

References elastic_preconditioner_solve(), and lagrange_multiplier_preconditioner_solve().

◆ set_elastic_mesh()

void oomph::PseudoElasticPreconditionerOld::set_elastic_mesh ( Mesh mesh_pt)
inline

Access function to mesh containing the block-preconditionable elastic elements

377  {
379  }
const Mesh * mesh_pt(const unsigned &i) const
Definition: block_preconditioner.h:1782

References Elastic_mesh_pt, and oomph::BlockPreconditioner< CRDoubleMatrix >::mesh_pt().

◆ set_elastic_subsidiary_preconditioner()

void oomph::PseudoElasticPreconditionerOld::set_elastic_subsidiary_preconditioner ( SubsidiaryPreconditionerFctPt  prec_fn)
inline

By default the elastic subsidiary systems are preconditioner with SuperLUPreconditioner. For a different preconditioner, pass a function to this method returning a different subsidiary operator.

416  {
418  }

References Elastic_subsidiary_preconditioner_function_pt.

◆ set_lagrange_multiplier_mesh()

void oomph::PseudoElasticPreconditionerOld::set_lagrange_multiplier_mesh ( Mesh mesh_pt)
inline

Access function to mesh containing the block-preconditionable lagrange multiplier elements

384  {
386  }

References Lagrange_multiplier_mesh_pt, and oomph::BlockPreconditioner< CRDoubleMatrix >::mesh_pt().

◆ set_lagrange_multiplier_subsidiary_preconditioner()

void oomph::PseudoElasticPreconditionerOld::set_lagrange_multiplier_subsidiary_preconditioner ( SubsidiaryPreconditionerFctPt  prec_fn)
inline

By default the Lagrange multiplier subsidiary systems are preconditioner with SuperLUPreconditioner. For a different preconditioner, pass a function to this method returning a different subsidiary operator.

References Lagrange_multiplier_subsidiary_preconditioner_function_pt.

◆ setup()

void oomph::PseudoElasticPreconditionerOld::setup ( )
virtual

Broken assignment operator.

Setup method for the PseudoElasticPreconditionerOld.

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////

Implements oomph::Preconditioner.

553  {
554  // clean
555  this->clean_up_memory();
556 
557 #ifdef PARANOID
558  // paranoid check that meshes have been set
559  if (Elastic_mesh_pt == 0)
560  {
561  std::ostringstream error_message;
562  error_message << "The elastic mesh must be set.";
563  throw OomphLibError(
564  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
565  }
567  {
568  std::ostringstream error_message;
569  error_message << "The Lagrange multiplier mesh must be set.";
570  throw OomphLibError(
571  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
572  }
573 #endif
574 
575  // set the mesh
576  unsigned n_solid_dof_types = 0;
577  unsigned n_dof_types = 0;
578  this->set_mesh(0, Elastic_mesh_pt);
580  if (this->is_master_block_preconditioner())
581  {
582  // get the number of solid dof types from the first element
583  n_solid_dof_types = this->ndof_types_in_mesh(0);
584 
585  // get the total number of dof types
586  n_dof_types = n_solid_dof_types + this->ndof_types_in_mesh(1);
587  }
588  else
589  {
590  n_dof_types = this->ndof_types();
591  n_solid_dof_types = n_dof_types - (n_dof_types / 3);
592  }
593 #ifdef PARANOID
594  if (n_dof_types % 3 != 0)
595  {
596  std::ostringstream error_message;
597  error_message << "This preconditioner requires DIM*3 types of DOF";
598  throw OomphLibError(
599  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
600  }
601 #endif
602 
603  // determine the dimension
604  Dim = n_dof_types / 3;
605 
606  // Recast Jacobian matrix to CRDoubleMatrix
607  CRDoubleMatrix* cr_matrix_pt = dynamic_cast<CRDoubleMatrix*>(matrix_pt());
608 
609 #ifdef PARANOID
610  if (cr_matrix_pt == 0)
611  {
612  std::ostringstream error_message;
613  error_message << "FSIPreconditioner only works with"
614  << " CRDoubleMatrix matrices" << std::endl;
615  throw OomphLibError(
616  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
617  }
618 #endif
619 
620  // Setup the block ordering.
621  this->block_setup();
622 
623  // Create dof_list for subsidiary preconditioner. This will be used later
624  // in turn_into_subsidiary_block_preconditioner(...)
625  Vector<unsigned> dof_list_for_subsidiary_prec(n_solid_dof_types);
626  for (unsigned i = 0; i < n_solid_dof_types; i++)
627  {
628  dof_list_for_subsidiary_prec[i] = i;
629  }
630 
631  // compute the scaling (if required)
633  {
634  Vector<unsigned> dof_list(n_solid_dof_types);
635  for (unsigned i = 0; i < n_solid_dof_types; i++)
636  {
637  dof_list[i] = i;
638  }
639 
640  PseudoElasticPreconditionerScalingHelperOld* helper_pt =
641  new PseudoElasticPreconditionerScalingHelperOld(
642  this, cr_matrix_pt, dof_list, Elastic_mesh_pt, comm_pt());
643  Scaling = helper_pt->s_inf_norm();
644  delete helper_pt;
645  helper_pt = 0;
646  }
647  else
648  {
649  Scaling = 1.0;
650  }
651 
652 
653  // setup the solid subsidiary preconditioner
654  // //////////////////////////////// this preconditioner uses the full S
655  // matrix
657  {
658  PseudoElasticPreconditionerSubsidiaryPreconditionerOld* s_prec_pt =
659  new PseudoElasticPreconditionerSubsidiaryPreconditionerOld;
660  Vector<unsigned> dof_list(n_solid_dof_types);
661  for (unsigned i = 0; i < n_solid_dof_types; i++)
662  {
663  dof_list[i] = i;
664  }
665  s_prec_pt->turn_into_subsidiary_block_preconditioner(this, dof_list);
667  {
668  s_prec_pt->set_subsidiary_preconditioner_function(
670  }
671  s_prec_pt->scaling() = Scaling;
672  s_prec_pt->Preconditioner::setup(matrix_pt());
673  Elastic_preconditioner_pt = s_prec_pt;
674  }
675 
676  // otherwise it is a block based preconditioner
677  else
678  {
679  // create the preconditioner
680  PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld* s_prec_pt =
681  new PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld;
682  Vector<unsigned> dof_list(n_solid_dof_types);
683  for (unsigned i = 0; i < n_solid_dof_types; i++)
684  {
685  dof_list[i] = i;
686  }
687  s_prec_pt->turn_into_subsidiary_block_preconditioner(this, dof_list);
688 
689  // set the subsidiary solve method
691  {
692  s_prec_pt->set_subsidiary_preconditioner_function(
694  }
695 
696  // set the scaling
697  s_prec_pt->scaling() = Scaling;
698 
699  // set the block preconditioning method
700  switch (E_preconditioner_type)
701  {
703  s_prec_pt->use_block_diagonal_approximation();
704  break;
706  s_prec_pt->use_upper_triangular_approximation();
707  break;
709  s_prec_pt->use_lower_triangular_approximation();
710  break;
711  default:
712  break;
713  }
714 
715  // setup
716  s_prec_pt->Preconditioner::setup(matrix_pt());
717  Elastic_preconditioner_pt = s_prec_pt;
718  }
719 
720  // next setup the lagrange multiplier preconditioners
722  for (unsigned d = 0; d < Dim; d++)
723  {
724  CRDoubleMatrix* b_pt = new CRDoubleMatrix;
725  this->get_block(2 * Dim + d, Dim + d, *b_pt);
726 
727  // if a non default preconditioner is specified create
728  // the preconditioners
730  {
732  (*Lagrange_multiplier_subsidiary_preconditioner_function_pt)();
733  }
734 
735  // else use default superlu preconditioner
736  else
737  {
738  Lagrange_multiplier_preconditioner_pt[d] = new SuperLUPreconditioner;
739  }
740 
741  // and setup
743  delete b_pt;
744  b_pt = 0;
745  }
746  }
unsigned ndof_types_in_mesh(const unsigned &i) const
Definition: block_preconditioner.h:2037
void get_block(const unsigned &i, const unsigned &j, CRDoubleMatrix &output_matrix, const bool &ignore_replacement_block=false) const
Definition: block_preconditioner.h:673
bool is_master_block_preconditioner() const
Definition: block_preconditioner.h:2068
CRDoubleMatrix * matrix_pt() const
Definition: block_preconditioner.h:520
unsigned ndof_types() const
Return the total number of DOF types.
Definition: block_preconditioner.h:1694
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
virtual const OomphCommunicator * comm_pt() const
Get function for comm pointer.
Definition: preconditioner.h:171
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References Block_diagonal_preconditioner, Block_lower_triangular_preconditioner, oomph::BlockPreconditioner< CRDoubleMatrix >::block_setup(), Block_upper_triangular_preconditioner, clean_up_memory(), oomph::Preconditioner::comm_pt(), Dim, E_preconditioner_type, Elastic_mesh_pt, Elastic_preconditioner_pt, Elastic_subsidiary_preconditioner_function_pt, Exact_block_preconditioner, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block(), i, oomph::BlockPreconditioner< CRDoubleMatrix >::is_master_block_preconditioner(), Lagrange_multiplier_mesh_pt, Lagrange_multiplier_preconditioner_pt, Lagrange_multiplier_subsidiary_preconditioner_function_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::matrix_pt(), oomph::BlockPreconditioner< CRDoubleMatrix >::ndof_types(), oomph::BlockPreconditioner< CRDoubleMatrix >::ndof_types_in_mesh(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::PseudoElasticPreconditionerScalingHelperOld::s_inf_norm(), Scaling, oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld::scaling(), oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::scaling(), oomph::BlockPreconditioner< CRDoubleMatrix >::set_mesh(), oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld::set_subsidiary_preconditioner_function(), oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::set_subsidiary_preconditioner_function(), oomph::BlockPreconditioner< MATRIX >::turn_into_subsidiary_block_preconditioner(), oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::use_block_diagonal_approximation(), Use_inf_norm_of_s_scaling, oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::use_lower_triangular_approximation(), and oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::use_upper_triangular_approximation().

Friends And Related Function Documentation

◆ PseudoElasticFSIPreconditioner

friend class PseudoElasticFSIPreconditioner
friend

PseudoElasticFSIPreconditioner is a friend to access the private *_preconditioner_solve(...) method

Member Data Documentation

◆ Dim

unsigned oomph::PseudoElasticPreconditionerOld::Dim
private

the dimension of the problem

Referenced by lagrange_multiplier_preconditioner_solve(), and setup().

◆ E_preconditioner_type

Elastic_preconditioner_type oomph::PseudoElasticPreconditionerOld::E_preconditioner_type
private

An unsigned indicating which method should be used for preconditioning the solid component.

Referenced by elastic_preconditioner_type(), PseudoElasticPreconditionerOld(), and setup().

◆ Elastic_mesh_pt

Mesh* oomph::PseudoElasticPreconditionerOld::Elastic_mesh_pt
private

Pointer to the mesh containing the solid elements.

Referenced by PseudoElasticPreconditionerOld(), set_elastic_mesh(), and setup().

◆ Elastic_preconditioner_pt

Preconditioner* oomph::PseudoElasticPreconditionerOld::Elastic_preconditioner_pt
private

storage for the preconditioner for the solid system

Referenced by clean_up_memory(), elastic_preconditioner_solve(), PseudoElasticPreconditionerOld(), and setup().

◆ Elastic_subsidiary_preconditioner_function_pt

SubsidiaryPreconditionerFctPt oomph::PseudoElasticPreconditionerOld::Elastic_subsidiary_preconditioner_function_pt
private

The solid subsidiary preconditioner function pointer.

Referenced by PseudoElasticPreconditionerOld(), set_elastic_subsidiary_preconditioner(), and setup().

◆ Lagrange_multiplier_mesh_pt

Mesh* oomph::PseudoElasticPreconditionerOld::Lagrange_multiplier_mesh_pt
private

Pointer to the mesh containing the Lagrange multiplier elements.

Referenced by PseudoElasticPreconditionerOld(), set_lagrange_multiplier_mesh(), and setup().

◆ Lagrange_multiplier_preconditioner_pt

Vector<Preconditioner*> oomph::PseudoElasticPreconditionerOld::Lagrange_multiplier_preconditioner_pt
private

lagrange multiplier preconditioner pt

Referenced by clean_up_memory(), lagrange_multiplier_preconditioner_solve(), and setup().

◆ Lagrange_multiplier_subsidiary_preconditioner_function_pt

SubsidiaryPreconditionerFctPt oomph::PseudoElasticPreconditionerOld::Lagrange_multiplier_subsidiary_preconditioner_function_pt
private

The Lagrange multiplier subsidary preconditioner function pointer.

Referenced by PseudoElasticPreconditionerOld(), set_lagrange_multiplier_subsidiary_preconditioner(), and setup().

◆ Scaling

double oomph::PseudoElasticPreconditionerOld::Scaling
private

The scaling. Defaults to infinity norm of S.

Referenced by lagrange_multiplier_preconditioner_solve(), and setup().

◆ Use_inf_norm_of_s_scaling

bool oomph::PseudoElasticPreconditionerOld::Use_inf_norm_of_s_scaling
private

boolean indicating whether the inf-norm of S should be used as scaling. Default = true;

Referenced by disable_inf_norm_of_s_scaling(), enable_inf_norm_of_s_scaling(), PseudoElasticPreconditionerOld(), and setup().


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