//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// More...
#include <pseudo_elastic_preconditioner.h>
Public Types | |
enum | Elastic_preconditioner_type { Exact_block_preconditioner , Block_diagonal_preconditioner , Block_lower_triangular_preconditioner , Block_upper_triangular_preconditioner } |
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. More... | |
typedef Preconditioner *(* | 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. More... | |
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) |
Apply the preconditioner. Method implemented in two other methods (elastic and lagrange multiplier subsidiary preocnditioner) for the PseudoElasticFSIPreconditioner. More... | |
void | set_elastic_mesh (Mesh *mesh_pt) |
Access function to mesh containing the block-preconditionable elastic elements. More... | |
void | set_lagrange_multiplier_mesh (Mesh *mesh_pt) |
Access function to mesh containing the block-preconditionable lagrange multiplier elements. More... | |
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) |
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. More... | |
void | set_elastic_subsidiary_preconditioner (SubsidiaryPreconditionerFctPt prec_fn) |
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. More... | |
Elastic_preconditioner_type & | elastic_preconditioner_type () |
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. More... | |
void | clean_up_memory () |
Clears the memory. More... | |
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 |
boolean indicating whether the inf-norm of S should be used as scaling. Default = true; More... | |
Elastic_preconditioner_type | E_preconditioner_type |
An unsigned indicating which method should be used for preconditioning the solid component. More... | |
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 |
PseudoElasticFSIPreconditioner is a friend to access the private *_preconditioner_solve(...) method. More... | |
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
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)
Definition at line 301 of file pseudo_elastic_preconditioner.h.
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.
Definition at line 314 of file pseudo_elastic_preconditioner.h.
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 |
Definition at line 324 of file pseudo_elastic_preconditioner.h.
|
inline |
Default (and only) constructor.
Definition at line 333 of file pseudo_elastic_preconditioner.h.
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
Definition at line 350 of file pseudo_elastic_preconditioner.h.
References clean_up_memory().
|
delete |
Broken copy constructor.
void oomph::PseudoElasticPreconditionerOld::clean_up_memory | ( | ) |
Clears the memory.
Definition at line 786 of file pseudo_elastic_preconditioner.cc.
References Elastic_preconditioner_pt, and Lagrange_multiplier_preconditioner_pt.
Referenced by setup(), and ~PseudoElasticPreconditionerOld().
|
inline |
Call to use no scaling.
Definition at line 395 of file pseudo_elastic_preconditioner.h.
References Use_inf_norm_of_s_scaling.
|
private |
Apply the elastic subsidiary preconditioner.
Definition at line 751 of file pseudo_elastic_preconditioner.cc.
References Elastic_preconditioner_pt.
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.
Definition at line 427 of file pseudo_elastic_preconditioner.h.
References E_preconditioner_type.
|
inline |
Call to use the inf norm of S as scaling.
Definition at line 389 of file pseudo_elastic_preconditioner.h.
References Use_inf_norm_of_s_scaling.
|
private |
Apply the lagrange multiplier subsidiary preconditioner.
Definition at line 762 of file pseudo_elastic_preconditioner.cc.
References Dim, Lagrange_multiplier_preconditioner_pt, and Scaling.
Referenced by preconditioner_solve().
|
inline |
Apply the preconditioner. Method implemented in two other methods (elastic and lagrange multiplier subsidiary preocnditioner) for the PseudoElasticFSIPreconditioner.
Definition at line 368 of file pseudo_elastic_preconditioner.h.
References elastic_preconditioner_solve(), and lagrange_multiplier_preconditioner_solve().
|
inline |
Access function to mesh containing the block-preconditionable elastic elements.
Definition at line 376 of file pseudo_elastic_preconditioner.h.
References Elastic_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.
Definition at line 414 of file pseudo_elastic_preconditioner.h.
References Elastic_subsidiary_preconditioner_function_pt.
|
inline |
Access function to mesh containing the block-preconditionable lagrange multiplier elements.
Definition at line 383 of file pseudo_elastic_preconditioner.h.
References Lagrange_multiplier_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.
Definition at line 404 of file pseudo_elastic_preconditioner.h.
References Lagrange_multiplier_subsidiary_preconditioner_function_pt.
void oomph::PseudoElasticPreconditionerOld::setup | ( | ) |
Broken assignment operator.
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
Setup method for the PseudoElasticPreconditionerOld.
Definition at line 552 of file pseudo_elastic_preconditioner.cc.
References Block_diagonal_preconditioner, Block_lower_triangular_preconditioner, Block_upper_triangular_preconditioner, clean_up_memory(), Dim, E_preconditioner_type, Elastic_mesh_pt, Elastic_preconditioner_pt, Elastic_subsidiary_preconditioner_function_pt, Exact_block_preconditioner, Lagrange_multiplier_mesh_pt, Lagrange_multiplier_preconditioner_pt, Lagrange_multiplier_subsidiary_preconditioner_function_pt, oomph::PseudoElasticPreconditionerScalingHelperOld::s_inf_norm(), Scaling, oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld::scaling(), oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::scaling(), oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld::set_subsidiary_preconditioner_function(), oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::set_subsidiary_preconditioner_function(), 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.
Definition at line 306 of file pseudo_elastic_preconditioner.h.
|
private |
the dimension of the problem
Definition at line 455 of file pseudo_elastic_preconditioner.h.
Referenced by lagrange_multiplier_preconditioner_solve(), and setup().
|
private |
An unsigned indicating which method should be used for preconditioning the solid component.
Definition at line 452 of file pseudo_elastic_preconditioner.h.
Referenced by elastic_preconditioner_type(), PseudoElasticPreconditionerOld(), and setup().
|
private |
Pointer to the mesh containing the solid elements.
Definition at line 471 of file pseudo_elastic_preconditioner.h.
Referenced by PseudoElasticPreconditionerOld(), set_elastic_mesh(), and setup().
|
private |
storage for the preconditioner for the solid system
Definition at line 458 of file pseudo_elastic_preconditioner.h.
Referenced by clean_up_memory(), elastic_preconditioner_solve(), PseudoElasticPreconditionerOld(), and setup().
|
private |
The solid subsidiary preconditioner function pointer.
Definition at line 468 of file pseudo_elastic_preconditioner.h.
Referenced by PseudoElasticPreconditionerOld(), set_elastic_subsidiary_preconditioner(), and setup().
|
private |
Pointer to the mesh containing the Lagrange multiplier elements.
Definition at line 474 of file pseudo_elastic_preconditioner.h.
Referenced by PseudoElasticPreconditionerOld(), set_lagrange_multiplier_mesh(), and setup().
|
private |
lagrange multiplier preconditioner pt
Definition at line 461 of file pseudo_elastic_preconditioner.h.
Referenced by clean_up_memory(), lagrange_multiplier_preconditioner_solve(), and setup().
|
private |
The Lagrange multiplier subsidary preconditioner function pointer.
Definition at line 465 of file pseudo_elastic_preconditioner.h.
Referenced by PseudoElasticPreconditionerOld(), set_lagrange_multiplier_subsidiary_preconditioner(), and setup().
|
private |
The scaling. Defaults to infinity norm of S.
Definition at line 444 of file pseudo_elastic_preconditioner.h.
Referenced by lagrange_multiplier_preconditioner_solve(), and setup().
|
private |
boolean indicating whether the inf-norm of S should be used as scaling. Default = true;
Definition at line 448 of file pseudo_elastic_preconditioner.h.
Referenced by disable_inf_norm_of_s_scaling(), enable_inf_norm_of_s_scaling(), PseudoElasticPreconditionerOld(), and setup().