Chaste  Release::2017.1
SolidMechanicsProblemDefinition< DIM > Class Template Reference

#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< unsignedmDirichletNodes
 
std::vector< c_vector< double, DIM > > mDirichletNodeValues
 
bool mVerboseDuringSolve
 

Detailed Description

template<unsigned DIM>
class SolidMechanicsProblemDefinition< DIM >

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.

Constructor & Destructor Documentation

template<unsigned DIM>
SolidMechanicsProblemDefinition< DIM >::SolidMechanicsProblemDefinition ( AbstractTetrahedralMesh< DIM, DIM > &  rMesh)

Constructor. Note body force initialised to zero and density to 1.0

Parameters
rMeshTesh being solved on

Definition at line 42 of file SolidMechanicsProblemDefinition.cpp.

Member Function Documentation

template<unsigned DIM>
void SolidMechanicsProblemDefinition< DIM >::CheckCastSuccess ( CompressibilityType  compressibilityType,
AbstractMaterialLaw< DIM > *  pMaterialLaw 
)
private

Helper function for checking whether a dynamic_cast succeeded or not, and throwing an exception if it failed.

Parameters
compressibilityTypecompressibility type
pMaterialLawmaterial law

Definition at line 190 of file SolidMechanicsProblemDefinition.cpp.

References EXCEPTION.

Referenced by SolidMechanicsProblemDefinition< DIM >::SetMaterialLaw().

template<unsigned DIM>
AbstractCompressibleMaterialLaw< DIM > * SolidMechanicsProblemDefinition< DIM >::GetCompressibleMaterialLaw ( unsigned  elementIndex)
template<unsigned DIM>
AbstractIncompressibleMaterialLaw< DIM > * SolidMechanicsProblemDefinition< DIM >::GetIncompressibleMaterialLaw ( unsigned  elementIndex)
template<unsigned DIM>
bool SolidMechanicsProblemDefinition< DIM >::GetSolveUsingSnes ( )
inline
Returns
whether solver should use PETSc SNES nonlinear solver or not

Definition at line 196 of file SolidMechanicsProblemDefinition.hpp.

References SolidMechanicsProblemDefinition< DIM >::mSolveUsingSnes.

template<unsigned DIM>
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).

Parameters
rFixedNodesthe fixed node indices
rFixedNodeLocationcorresponding locations

Definition at line 49 of file SolidMechanicsProblemDefinition.cpp.

References ContinuumMechanicsProblemDefinition< DIM >::FREE, AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNode(), ContinuumMechanicsProblemDefinition< DIM >::mDirichletNodes, ContinuumMechanicsProblemDefinition< DIM >::mDirichletNodeValues, and ContinuumMechanicsProblemDefinition< DIM >::mrMesh.

Referenced by SolidMechanicsProblemDefinition< DIM >::SetZeroDisplacementNodes().

template<unsigned DIM>
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.

Parameters
compressibilityTypeeither 'INCOMPRESSIBLE' or 'COMPRESSIBLE'
pMaterialLawThe material law for the entire body

Definition at line 78 of file SolidMechanicsProblemDefinition.cpp.

References SolidMechanicsProblemDefinition< DIM >::CheckCastSuccess(), SolidMechanicsProblemDefinition< DIM >::mCompressibilityType, SolidMechanicsProblemDefinition< DIM >::mCompressibleMaterialLaws, SolidMechanicsProblemDefinition< DIM >::mIncompressibleMaterialLaws, and SolidMechanicsProblemDefinition< DIM >::mIsHomogeneousMaterial.

Referenced by ElectroMechanicsProblemDefinition< DIM >::SetUseDefaultCardiacMaterialLaw(), and SolidMechanicsProblemDefinition< DIM >::~SolidMechanicsProblemDefinition().

template<unsigned DIM>
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.

Parameters
compressibilityTypeeither 'INCOMPRESSIBLE' or 'COMPRESSIBLE'
rMaterialLawsVector of pointers to material laws

Definition at line 104 of file SolidMechanicsProblemDefinition.cpp.

References SolidMechanicsProblemDefinition< DIM >::CheckCastSuccess(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), SolidMechanicsProblemDefinition< DIM >::mCompressibilityType, SolidMechanicsProblemDefinition< DIM >::mCompressibleMaterialLaws, SolidMechanicsProblemDefinition< DIM >::mIncompressibleMaterialLaws, SolidMechanicsProblemDefinition< DIM >::mIsHomogeneousMaterial, and ContinuumMechanicsProblemDefinition< DIM >::mrMesh.

template<unsigned DIM>
void SolidMechanicsProblemDefinition< DIM >::SetSolveUsingSnes ( bool  solveUsingSnes = true)
inline

Tell the solver class whether to use the PETSc SNES solver (the petsc nonlinear solver) or its own nonlinear solve implementation.

Parameters
solveUsingSnessolve using Snes or not

Definition at line 188 of file SolidMechanicsProblemDefinition.hpp.

template<unsigned DIM>
void SolidMechanicsProblemDefinition< DIM >::SetZeroDisplacementNodes ( std::vector< unsigned > &  rFixedNodes)
inline

Set a list of nodes (indices) to be fixed in space with zero displacement

Parameters
rFixedNodesthe fixed nodes

Definition at line 155 of file SolidMechanicsProblemDefinition.hpp.

References SolidMechanicsProblemDefinition< DIM >::SetFixedNodes(), ContinuumMechanicsProblemDefinition< DIM >::SetZeroDirichletNodes(), and SolidMechanicsProblemDefinition< DIM >::Validate().

template<unsigned DIM>
void SolidMechanicsProblemDefinition< DIM >::Validate ( )
virtual

Member Data Documentation

template<unsigned DIM>
CompressibilityType SolidMechanicsProblemDefinition< DIM >::mCompressibilityType
private
template<unsigned DIM>
std::vector<AbstractCompressibleMaterialLaw<DIM>*> SolidMechanicsProblemDefinition< DIM >::mCompressibleMaterialLaws
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.

Referenced by SolidMechanicsProblemDefinition< DIM >::GetCompressibilityType(), SolidMechanicsProblemDefinition< DIM >::GetCompressibleMaterialLaw(), SolidMechanicsProblemDefinition< DIM >::GetIncompressibleMaterialLaw(), SolidMechanicsProblemDefinition< DIM >::IsHomogeneousMaterial(), SolidMechanicsProblemDefinition< DIM >::SetMaterialLaw(), and SolidMechanicsProblemDefinition< DIM >::Validate().

template<unsigned DIM>
std::vector<AbstractIncompressibleMaterialLaw<DIM>*> SolidMechanicsProblemDefinition< DIM >::mIncompressibleMaterialLaws
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.

Referenced by SolidMechanicsProblemDefinition< DIM >::GetCompressibilityType(), SolidMechanicsProblemDefinition< DIM >::GetCompressibleMaterialLaw(), SolidMechanicsProblemDefinition< DIM >::GetIncompressibleMaterialLaw(), SolidMechanicsProblemDefinition< DIM >::IsHomogeneousMaterial(), SolidMechanicsProblemDefinition< DIM >::SetMaterialLaw(), and SolidMechanicsProblemDefinition< DIM >::Validate().

template<unsigned DIM>
bool SolidMechanicsProblemDefinition< DIM >::mSolveUsingSnes
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().


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