![]() |
|
#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) () |
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... | |
| Preconditioner * | Elastic_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... | |
| Mesh * | Elastic_mesh_pt |
| Pointer to the mesh containing the solid elements. More... | |
| Mesh * | Lagrange_multiplier_mesh_pt |
| Pointer to the mesh containing the Lagrange multiplier elements. More... | |
Friends | |
| class | PseudoElasticFSIPreconditioner |
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// 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)
| 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.
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 | |
|
inline |
Default (and only) constructor.
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.
|
inlinevirtual |
destructor
References clean_up_memory().
|
delete |
Broken copy constructor.
|
virtual |
Clears the memory.
Reimplemented from oomph::Preconditioner.
References oomph::BlockPreconditioner< CRDoubleMatrix >::clear_block_preconditioner_base(), Elastic_preconditioner_pt, i, and Lagrange_multiplier_preconditioner_pt.
Referenced by setup(), and ~PseudoElasticPreconditionerOld().
|
inline |
Call to use no scaling.
References Use_inf_norm_of_s_scaling.
|
private |
Apply the elastic subsidiary preconditioner.
References Elastic_preconditioner_pt, oomph::Preconditioner::preconditioner_solve(), and UniformPSDSelfTest::r.
Referenced by preconditioner_solve().
|
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.
References E_preconditioner_type.
|
inline |
Call to use the inf norm of S as scaling.
References Use_inf_norm_of_s_scaling.
|
private |
Apply the lagrange multiplier subsidiary preconditioner.
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().
|
inlinevirtual |
Apply the preconditioner. Method implemented in two other methods (elastic and lagrange multiplier subsidiary preocnditioner) for the PseudoElasticFSIPreconditioner
Implements oomph::Preconditioner.
References elastic_preconditioner_solve(), and lagrange_multiplier_preconditioner_solve().
|
inline |
Access function to mesh containing the block-preconditionable elastic elements
References Elastic_mesh_pt, and oomph::BlockPreconditioner< CRDoubleMatrix >::mesh_pt().
|
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.
References Elastic_subsidiary_preconditioner_function_pt.
|
inline |
Access function to mesh containing the block-preconditionable lagrange multiplier elements
References Lagrange_multiplier_mesh_pt, and oomph::BlockPreconditioner< CRDoubleMatrix >::mesh_pt().
|
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.
|
virtual |
Broken assignment operator.
Setup method for the PseudoElasticPreconditionerOld.
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
Implements oomph::Preconditioner.
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().
|
friend |
PseudoElasticFSIPreconditioner is a friend to access the private *_preconditioner_solve(...) method
|
private |
the dimension of the problem
Referenced by lagrange_multiplier_preconditioner_solve(), and setup().
|
private |
An unsigned indicating which method should be used for preconditioning the solid component.
Referenced by elastic_preconditioner_type(), PseudoElasticPreconditionerOld(), and setup().
|
private |
Pointer to the mesh containing the solid elements.
Referenced by PseudoElasticPreconditionerOld(), set_elastic_mesh(), and setup().
|
private |
storage for the preconditioner for the solid system
Referenced by clean_up_memory(), elastic_preconditioner_solve(), PseudoElasticPreconditionerOld(), and setup().
|
private |
The solid subsidiary preconditioner function pointer.
Referenced by PseudoElasticPreconditionerOld(), set_elastic_subsidiary_preconditioner(), and setup().
|
private |
Pointer to the mesh containing the Lagrange multiplier elements.
Referenced by PseudoElasticPreconditionerOld(), set_lagrange_multiplier_mesh(), and setup().
|
private |
lagrange multiplier preconditioner pt
Referenced by clean_up_memory(), lagrange_multiplier_preconditioner_solve(), and setup().
|
private |
The Lagrange multiplier subsidary preconditioner function pointer.
Referenced by PseudoElasticPreconditionerOld(), set_lagrange_multiplier_subsidiary_preconditioner(), and setup().
|
private |
The scaling. Defaults to infinity norm of S.
Referenced by lagrange_multiplier_preconditioner_solve(), and setup().
|
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().