![]() |
Chaste
Release::3.4
|
#include <SolidMechanicsProblemDefinition.hpp>
Inheritance diagram for SolidMechanicsProblemDefinition< DIM >:
Collaboration diagram for SolidMechanicsProblemDefinition< DIM >:Public Member Functions | |
| SolidMechanicsProblemDefinition (AbstractTetrahedralMesh< DIM, DIM > &rMesh) | |
| virtual | ~SolidMechanicsProblemDefinition () |
| void | SetMaterialLaw (CompressibilityType compressibilityType, AbstractMaterialLaw< DIM > *pMaterialLaw) |
| void | SetMaterialLaw (CompressibilityType compressibilityType, std::vector< AbstractMaterialLaw< DIM > * > &rMaterialLaws) |
| bool | IsHomogeneousMaterial () |
| CompressibilityType | GetCompressibilityType () |
| AbstractIncompressibleMaterialLaw < DIM > * | GetIncompressibleMaterialLaw (unsigned elementIndex) |
| AbstractCompressibleMaterialLaw < DIM > * | GetCompressibleMaterialLaw (unsigned elementIndex) |
| void | SetZeroDisplacementNodes (std::vector< unsigned > &rFixedNodes) |
| void | SetFixedNodes (std::vector< unsigned > &rFixedNodes, std::vector< c_vector< double, DIM > > &rFixedNodeLocation) |
| virtual void | Validate () |
| void | SetSolveUsingSnes (bool solveUsingSnes=true) |
| bool | GetSolveUsingSnes () |
Public Member Functions inherited from ContinuumMechanicsProblemDefinition< DIM > | |
| ContinuumMechanicsProblemDefinition (AbstractTetrahedralMesh< DIM, DIM > &rMesh) | |
| virtual | ~ContinuumMechanicsProblemDefinition () |
| void | SetDensity (double density) |
| double | GetDensity () |
| void | SetZeroDirichletNodes (std::vector< unsigned > &rZeroDirichletNodes) |
| std::vector< unsigned > & | rGetDirichletNodes () |
| std::vector< c_vector< double, DIM > > & | rGetDirichletNodeValues () |
| void | SetBodyForce (c_vector< double, DIM > bodyForce) |
| void | SetBodyForce (c_vector< double, DIM >(*pFunction)(c_vector< double, DIM > &rX, double t)) |
| c_vector< double, DIM > | GetBodyForce (c_vector< double, DIM > &rX, double t=0.0) |
| BodyForceType | GetBodyForceType () |
| c_vector< double, DIM > | GetConstantBodyForce () |
| c_vector< double, DIM > | EvaluateBodyForceFunction (c_vector< double, DIM > &rX, double t) |
| TractionBoundaryConditionType | GetTractionBoundaryConditionType () |
| void | SetTractionBoundaryConditions (std::vector< BoundaryElement< DIM-1, DIM > * > &rTractionBoundaryElements, std::vector< c_vector< double, DIM > > &rElementwiseTractions) |
| void | SetTractionBoundaryConditions (std::vector< BoundaryElement< DIM-1, DIM > * > &rTractionBoundaryElements, c_vector< double, DIM >(*pFunction)(c_vector< double, DIM > &rX, double t)) |
| void | SetApplyNormalPressureOnDeformedSurface (std::vector< BoundaryElement< DIM-1, DIM > * > &rTractionBoundaryElements, double normalPressure) |
| void | SetApplyNormalPressureOnDeformedSurface (std::vector< BoundaryElement< DIM-1, DIM > * > &rTractionBoundaryElements, double(*pFunction)(double t)) |
| std::vector< BoundaryElement < DIM-1, DIM > * > & | rGetTractionBoundaryElements () |
| std::vector< c_vector< double, DIM > > & | rGetElementwiseTractions () |
| double | GetNormalPressure () |
| void | SetPressureScaling (double scaleFactor) |
| c_vector< double, DIM > | EvaluateTractionFunction (c_vector< double, DIM > &rX, double t) |
| double | EvaluateNormalPressureFunction (double t) |
| void | SetVerboseDuringSolve (bool verboseDuringSolve=true) |
| bool | GetVerboseDuringSolve () |
Private Member Functions | |
| void | CheckCastSuccess (CompressibilityType compressibilityType, AbstractMaterialLaw< DIM > *pMaterialLaw) |
Private Attributes | |
| std::vector < AbstractIncompressibleMaterialLaw < DIM > * > | mIncompressibleMaterialLaws |
| std::vector < AbstractCompressibleMaterialLaw < DIM > * > | mCompressibleMaterialLaws |
| bool | mIsHomogeneousMaterial |
| CompressibilityType | mCompressibilityType |
| bool | mSolveUsingSnes |
Additional Inherited Members | |
Static Public Attributes inherited from ContinuumMechanicsProblemDefinition< DIM > | |
| static const double | FREE = std::numeric_limits<double>::max() |
Protected Attributes inherited from ContinuumMechanicsProblemDefinition< DIM > | |
| AbstractTetrahedralMesh< DIM, DIM > & | mrMesh |
| double | mDensity |
| BodyForceType | mBodyForceType |
| c_vector< double, DIM > | mConstantBodyForce |
| c_vector< double, DIM >(* | mpBodyForceFunction )(c_vector< double, DIM > &rX, double t) |
| TractionBoundaryConditionType | mTractionBoundaryConditionType |
| std::vector< BoundaryElement < DIM-1, DIM > * > | mTractionBoundaryElements |
| std::vector< c_vector< double, DIM > > | mElementwiseTractions |
| double | mNormalPressure |
| double | mOriginalNormalPressure |
| c_vector< double, DIM >(* | mpTractionBoundaryConditionFunction )(c_vector< double, DIM > &rX, double t) |
| double(* | mpNormalPressureFunction )(double t) |
| std::vector< unsigned > | mDirichletNodes |
| std::vector< c_vector< double, DIM > > | mDirichletNodeValues |
| bool | mVerboseDuringSolve |
A class for specifying various parts of a solid mechanics problem, in particular the material laws for the deforming body, and (inheriting functionality from a base class): fixed nodes information, the body force (per unit mass) (usually acceleration due to gravity or zero), the traction boundary conditions, and the density.
Definition at line 50 of file SolidMechanicsProblemDefinition.hpp.
| SolidMechanicsProblemDefinition< DIM >::SolidMechanicsProblemDefinition | ( | AbstractTetrahedralMesh< DIM, DIM > & | rMesh | ) |
Constructor. Note body force initialised to zero and density to 1.0
| rMesh | Tesh being solved on |
Definition at line 43 of file SolidMechanicsProblemDefinition.cpp.
|
inlinevirtual |
Destructor
Definition at line 95 of file SolidMechanicsProblemDefinition.hpp.
|
private |
Helper function for checking whether a dynamic_cast succeeded or not, and throwing an exception if it failed.
| compressibilityType | compressibility type |
| pMaterialLaw | material law |
Definition at line 202 of file SolidMechanicsProblemDefinition.cpp.
References EXCEPTION.
| CompressibilityType SolidMechanicsProblemDefinition< DIM >::GetCompressibilityType | ( | ) |
Definition at line 155 of file SolidMechanicsProblemDefinition.cpp.
Referenced by CompressibleNonlinearElasticitySolver< DIM >::CompressibleNonlinearElasticitySolver(), and IncompressibleNonlinearElasticitySolver< DIM >::IncompressibleNonlinearElasticitySolver().
| AbstractCompressibleMaterialLaw< DIM > * SolidMechanicsProblemDefinition< DIM >::GetCompressibleMaterialLaw | ( | unsigned | elementIndex | ) |
| elementIndex | index of element |
Definition at line 184 of file SolidMechanicsProblemDefinition.cpp.
| AbstractIncompressibleMaterialLaw< DIM > * SolidMechanicsProblemDefinition< DIM >::GetIncompressibleMaterialLaw | ( | unsigned | elementIndex | ) |
| elementIndex | index of element |
Definition at line 166 of file SolidMechanicsProblemDefinition.cpp.
|
inline |
Definition at line 196 of file SolidMechanicsProblemDefinition.hpp.
References SolidMechanicsProblemDefinition< DIM >::mSolveUsingSnes.
| bool SolidMechanicsProblemDefinition< DIM >::IsHomogeneousMaterial | ( | ) |
Definition at line 147 of file SolidMechanicsProblemDefinition.cpp.
| void SolidMechanicsProblemDefinition< DIM >::SetFixedNodes | ( | std::vector< unsigned > & | rFixedNodes, |
| std::vector< c_vector< double, DIM > > & | rFixedNodeLocation | ||
| ) |
Set a list of nodes to be fixed, with their corresponding new LOCATIONS (not displacements). (This class will store as displacements though, and it is displacements that will be returned by rGetDirichletNodeValues).
| rFixedNodes | the fixed node indices |
| rFixedNodeLocation | corresponding locations |
Definition at line 52 of file SolidMechanicsProblemDefinition.cpp.
| void SolidMechanicsProblemDefinition< DIM >::SetMaterialLaw | ( | CompressibilityType | compressibilityType, |
| AbstractMaterialLaw< DIM > * | pMaterialLaw | ||
| ) |
Set a material law for the entire body (ie the homogeneous case). If compressibilityType==INCOMPRESSIBLE, the material law pointer will be checked at run-time that it is of type `AbstractIncompressibleMaterialLaw`, and similarly for the compressible case. Any previous material information will be deleted.
| compressibilityType | either 'INCOMPRESSIBLE' or 'COMPRESSIBLE' |
| pMaterialLaw | The material law for the entire body |
Definition at line 83 of file SolidMechanicsProblemDefinition.cpp.
| void SolidMechanicsProblemDefinition< DIM >::SetMaterialLaw | ( | CompressibilityType | compressibilityType, |
| std::vector< AbstractMaterialLaw< DIM > * > & | rMaterialLaws | ||
| ) |
Set a vector of material laws for the body, one for each element in the mesh (the heterogeneous case). If compressibilityType==INCOMPRESSIBLE, the material law pointer will be checked at run-time that it is of type `AbstractIncompressibleMaterialLaw`, and similarly for the compressible case. Any previous material information will be deleted.
| compressibilityType | either 'INCOMPRESSIBLE' or 'COMPRESSIBLE' |
| rMaterialLaws | Vector of pointers to material laws |
Definition at line 110 of file SolidMechanicsProblemDefinition.cpp.
|
inline |
Tell the solver class whether to use the PETSc SNES solver (the petsc nonlinear solver) or its own nonlinear solve implementation.
| solveUsingSnes | solve using Snes or not |
Definition at line 188 of file SolidMechanicsProblemDefinition.hpp.
References SolidMechanicsProblemDefinition< DIM >::mSolveUsingSnes.
|
inline |
Set a list of nodes (indices) to be fixed in space with zero displacement
| rFixedNodes | the fixed nodes |
Definition at line 155 of file SolidMechanicsProblemDefinition.hpp.
References ContinuumMechanicsProblemDefinition< DIM >::SetZeroDirichletNodes().
|
virtual |
Check all variables are set appropriately. Exceptions are thrown if any are not. Derived classes can override but should call this version as well.
Reimplemented from ContinuumMechanicsProblemDefinition< DIM >.
Reimplemented in ElectroMechanicsProblemDefinition< DIM >.
Definition at line 220 of file SolidMechanicsProblemDefinition.cpp.
References EXCEPTION, and ContinuumMechanicsProblemDefinition< DIM >::Validate().
Referenced by ElectroMechanicsProblemDefinition< DIM >::Validate().
|
private |
Whether the material is incompressible or compressible. (CompressibilityType is an enumeration).
Definition at line 73 of file SolidMechanicsProblemDefinition.hpp.
|
private |
The material law, in the case of compressible material laws. This vector is either of size 1, representing a homogeneous material, or of size num_elements, representing a heterogeneous material, with a material law per element. If the material is incompressible, this vector will be of size zero.
Definition at line 67 of file SolidMechanicsProblemDefinition.hpp.
|
private |
The material law, in the case of incompressible material laws. This vector is either of size 1, representing a homogeneous material, or of size num_elements, representing a heterogeneous material, with a material law per element. If he material is compressible, this vector will be of size zero.
Definition at line 61 of file SolidMechanicsProblemDefinition.hpp.
|
private |
Whether the material is homogeneous (same material law everywhere) or heterogeneous
Definition at line 70 of file SolidMechanicsProblemDefinition.hpp.
|
private |
Whether the solver will use Petsc SNES or not. See dox for Set method below
Definition at line 76 of file SolidMechanicsProblemDefinition.hpp.
Referenced by SolidMechanicsProblemDefinition< DIM >::GetSolveUsingSnes(), and SolidMechanicsProblemDefinition< DIM >::SetSolveUsingSnes().