Chaste Commit::baa90ac2819b962188b7562f2326be23c47859a7
ContinuumMechanicsProblemDefinition< DIM > Class Template Reference

#include <ContinuumMechanicsProblemDefinition.hpp>

+ Inheritance diagram for ContinuumMechanicsProblemDefinition< DIM >:
+ Collaboration diagram for ContinuumMechanicsProblemDefinition< DIM >:

Public Member Functions

 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)
 
virtual void Validate ()
 
void SetVerboseDuringSolve (bool verboseDuringSolve=true)
 
bool GetVerboseDuringSolve ()
 

Static Public Attributes

static const double FREE = std::numeric_limits<double>::max()
 

Protected Attributes

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 ContinuumMechanicsProblemDefinition< DIM >

A class for specifying various parts of a continuum mechanics problem, Dirichlet node information (which nodes are in space in a solid problem, which nodes have fixed flow in a fluids problem), the body force (per unit mass) (usually acceleration due to gravity or zero), the traction boundary conditions, and the density.

Definition at line 74 of file ContinuumMechanicsProblemDefinition.hpp.

Constructor & Destructor Documentation

◆ ContinuumMechanicsProblemDefinition()

Constructor initialises the body force to zero and density to 1.0

Parameters
rMeshis the mesh being solved on

Definition at line 47 of file ContinuumMechanicsProblemDefinition.cpp.

◆ ~ContinuumMechanicsProblemDefinition()

template<unsigned DIM>
virtual ContinuumMechanicsProblemDefinition< DIM >::~ContinuumMechanicsProblemDefinition ( )
inlinevirtual

Destructor

Definition at line 153 of file ContinuumMechanicsProblemDefinition.hpp.

Member Function Documentation

◆ EvaluateBodyForceFunction()

template<unsigned DIM>
c_vector< double, DIM > ContinuumMechanicsProblemDefinition< DIM >::EvaluateBodyForceFunction ( c_vector< double, DIM > &  rX,
double  t 
)
Returns
the body force function (error if GetBodyForceType()!=FUNCTIONAL_BODY_FORCE)
Parameters
rXspatial location
tcurrent time

Definition at line 98 of file ContinuumMechanicsProblemDefinition.cpp.

◆ EvaluateNormalPressureFunction()

template<unsigned DIM>
double ContinuumMechanicsProblemDefinition< DIM >::EvaluateNormalPressureFunction ( double  t)
Returns
the pressure boundary condition function (error if GetTractionBoundaryConditionType()!=FUNCTIONAL_PRESSURE_ON_DEFORMED)
Parameters
tcurrent time

Definition at line 225 of file ContinuumMechanicsProblemDefinition.cpp.

◆ EvaluateTractionFunction()

template<unsigned DIM>
c_vector< double, DIM > ContinuumMechanicsProblemDefinition< DIM >::EvaluateTractionFunction ( c_vector< double, DIM > &  rX,
double  t 
)
Returns
the traction boundary condition function (error if GetTractionBoundaryConditionType()!=FUNCTIONAL_TRACTION)
Parameters
rXspatial location
tcurrent time

Definition at line 218 of file ContinuumMechanicsProblemDefinition.cpp.

◆ GetBodyForce()

template<unsigned DIM>
c_vector< double, DIM > ContinuumMechanicsProblemDefinition< DIM >::GetBodyForce ( c_vector< double, DIM > &  rX,
double  t = 0.0 
)
Returns
the body force at a particular point and time. Note: The user can either call this, or check what type of body force has been set using GetBodyForceType() and then call GetConstantBodyForce() or EvaluateBodyForceFunction(X,t).
Parameters
rXspatial location
tcurrent time

Definition at line 105 of file ContinuumMechanicsProblemDefinition.cpp.

References NEVER_REACHED.

◆ GetBodyForceType()

template<unsigned DIM>
BodyForceType ContinuumMechanicsProblemDefinition< DIM >::GetBodyForceType ( )
Returns
the body force type

Definition at line 85 of file ContinuumMechanicsProblemDefinition.cpp.

◆ GetConstantBodyForce()

template<unsigned DIM>
c_vector< double, DIM > ContinuumMechanicsProblemDefinition< DIM >::GetConstantBodyForce ( )
Returns
the constant body force (error if GetBodyForceType()!=CONSTANT_BODY_FORCE)

Definition at line 91 of file ContinuumMechanicsProblemDefinition.cpp.

◆ GetDensity()

template<unsigned DIM>
double ContinuumMechanicsProblemDefinition< DIM >::GetDensity ( )
Returns
the density

Definition at line 65 of file ContinuumMechanicsProblemDefinition.cpp.

◆ GetNormalPressure()

template<unsigned DIM>
double ContinuumMechanicsProblemDefinition< DIM >::GetNormalPressure ( )
Returns
the pressure for the boundary elements (corresponding to vector returned by rGetTractionBoundaryElements()) (error if GetTractionBoundaryConditionType()!=PRESSURE_ON_DEFORMED)

Definition at line 211 of file ContinuumMechanicsProblemDefinition.cpp.

◆ GetTractionBoundaryConditionType()

template<unsigned DIM>
TractionBoundaryConditionType ContinuumMechanicsProblemDefinition< DIM >::GetTractionBoundaryConditionType ( )
Returns
the traction (Neumann) boundary condition type

Definition at line 123 of file ContinuumMechanicsProblemDefinition.cpp.

◆ GetVerboseDuringSolve()

template<unsigned DIM>
bool ContinuumMechanicsProblemDefinition< DIM >::GetVerboseDuringSolve ( )
inline
Returns
whether the solver should be verbose or not

Definition at line 340 of file ContinuumMechanicsProblemDefinition.hpp.

References ContinuumMechanicsProblemDefinition< DIM >::mVerboseDuringSolve.

◆ rGetDirichletNodes()

template<unsigned DIM>
std::vector< unsigned > & ContinuumMechanicsProblemDefinition< DIM >::rGetDirichletNodes ( )
Returns
the Dirichlet nodes

Definition at line 186 of file ContinuumMechanicsProblemDefinition.cpp.

◆ rGetDirichletNodeValues()

template<unsigned DIM>
std::vector< c_vector< double, DIM > > & ContinuumMechanicsProblemDefinition< DIM >::rGetDirichletNodeValues ( )
Returns
the Dirichlet node values.

Definition at line 192 of file ContinuumMechanicsProblemDefinition.cpp.

◆ rGetElementwiseTractions()

template<unsigned DIM>
std::vector< c_vector< double, DIM > > & ContinuumMechanicsProblemDefinition< DIM >::rGetElementwiseTractions ( )
Returns
the element-wise tractions vector (corresponding to vector returned by rGetTractionBoundaryElements()) (error if GetTractionBoundaryConditionType()!=ELEMENTWISE_TRACTION)

Definition at line 204 of file ContinuumMechanicsProblemDefinition.cpp.

◆ rGetTractionBoundaryElements()

template<unsigned DIM>
std::vector< BoundaryElement< DIM-1, DIM > * > & ContinuumMechanicsProblemDefinition< DIM >::rGetTractionBoundaryElements ( )
Returns
the vector of traction boundary elements

Definition at line 198 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetApplyNormalPressureOnDeformedSurface() [1/2]

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetApplyNormalPressureOnDeformedSurface ( std::vector< BoundaryElement< DIM-1, DIM > * > &  rTractionBoundaryElements,
double  normalPressure 
)

Set traction (Neumann) boundary conditions. This version says that pressures should be applied on surfaces in the DEFORMED body in the outward normal direction.

Parameters
rTractionBoundaryElementsThe boundary elements
normalPressurethe corresponding pressure

Definition at line 149 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetApplyNormalPressureOnDeformedSurface() [2/2]

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetApplyNormalPressureOnDeformedSurface ( std::vector< BoundaryElement< DIM-1, DIM > * > &  rTractionBoundaryElements,
double(*)(double t)  pFunction 
)

Set traction (Neumann) boundary conditions. This version says that pressures should be applied on surfaces in the DEFORMED body in the outward normal direction, and here the pressure is specified in FUNCTIONAL FORM

Parameters
rTractionBoundaryElementsThe boundary elements
pFunctionthe pressure function (a function of time, returning a double)

Definition at line 160 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetBodyForce() [1/2]

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetBodyForce ( c_vector< double, DIM >  bodyForce)

Set the body force to be used - this version sets a constant body force

Parameters
bodyForcethe constant body force

Definition at line 71 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetBodyForce() [2/2]

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetBodyForce ( c_vector< double, DIM >(*)(c_vector< double, DIM > &rX, double t)  pFunction)

Set the body force to be used - this version sets a functional body force

Parameters
pFunctiona function of space and time returning a vector

Definition at line 78 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetDensity()

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetDensity ( double  density)

Set the density

Parameters
density

Definition at line 58 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetPressureScaling()

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetPressureScaling ( double  scaleFactor)

Set the value that will be returned by GetNormalPressure() to be a fraction of its full value.

Note: you don't have to take into account previous calls when calling this. SetPressureScaling(0.1); SetPressureScaling(1); will lead to the original pressure being used

(Error if GetTractionBoundaryConditionType()!=PRESSURE_ON_DEFORMED)

Parameters
scaleFactorscale factor

Definition at line 232 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetTractionBoundaryConditions() [1/2]

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetTractionBoundaryConditions ( std::vector< BoundaryElement< DIM-1, DIM > * > &  rTractionBoundaryElements,
c_vector< double, DIM >(*)(c_vector< double, DIM > &rX, double t)  pFunction 
)

Set traction (Neumann) boundary conditions. This version takes in a vector of boundary elements, and a function to be evaluated at points in these boundary elements

Parameters
rTractionBoundaryElementsthe boundary elements
pFunctionthe traction function (a function of space and time, returning a vector)

Definition at line 140 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetTractionBoundaryConditions() [2/2]

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetTractionBoundaryConditions ( std::vector< BoundaryElement< DIM-1, DIM > * > &  rTractionBoundaryElements,
std::vector< c_vector< double, DIM > > &  rElementwiseTractions 
)

Set traction (Neumann) boundary conditions. This version takes in a vector of boundary elements, and corresponding tractions for each one.

Parameters
rTractionBoundaryElementsthe boundary elements
rElementwiseTractionscorresponding tractions

Definition at line 129 of file ContinuumMechanicsProblemDefinition.cpp.

◆ SetVerboseDuringSolve()

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetVerboseDuringSolve ( bool  verboseDuringSolve = true)
inline

Tell the solver to be verbose (print details on how the solve is progressing), or not.

Parameters
verboseDuringSolvebe verbose or not.

Definition at line 332 of file ContinuumMechanicsProblemDefinition.hpp.

References ContinuumMechanicsProblemDefinition< DIM >::mVerboseDuringSolve.

◆ SetZeroDirichletNodes()

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::SetZeroDirichletNodes ( std::vector< unsigned > &  rZeroDirichletNodes)

Set a list of nodes (indices) to be given zero Dirichlet boundary condition

Parameters
rZeroDirichletNodesthe nodes at which the value (displacement/flow) is zero

Definition at line 169 of file ContinuumMechanicsProblemDefinition.cpp.

Referenced by SolidMechanicsProblemDefinition< DIM >::SetZeroDisplacementNodes(), and StokesFlowProblemDefinition< DIM >::SetZeroFlowNodes().

◆ Validate()

template<unsigned DIM>
void ContinuumMechanicsProblemDefinition< DIM >::Validate ( )
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 in SolidMechanicsProblemDefinition< DIM >, StokesFlowProblemDefinition< DIM >, and ElectroMechanicsProblemDefinition< DIM >.

Definition at line 239 of file ContinuumMechanicsProblemDefinition.cpp.

References EXCEPTION.

Referenced by SolidMechanicsProblemDefinition< DIM >::Validate(), and StokesFlowProblemDefinition< DIM >::Validate().

Member Data Documentation

◆ FREE

template<unsigned DIM>
const double ContinuumMechanicsProblemDefinition< DIM >::FREE = std::numeric_limits<double>::max()
static

Special value for Dirichlet nodes, indicating that a Dirichlet boundary condition in a particular dimension is not specified

Definition at line 79 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mBodyForceType

template<unsigned DIM>
BodyForceType ContinuumMechanicsProblemDefinition< DIM >::mBodyForceType
protected

The body force type

Definition at line 93 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mConstantBodyForce

template<unsigned DIM>
c_vector<double,DIM> ContinuumMechanicsProblemDefinition< DIM >::mConstantBodyForce
protected

The constant body force, only used if mBodyForceType is set appropriately

Definition at line 96 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mDensity

template<unsigned DIM>
double ContinuumMechanicsProblemDefinition< DIM >::mDensity
protected

Density of the body (constant throughout body)

Definition at line 86 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mDirichletNodes

template<unsigned DIM>
std::vector<unsigned> ContinuumMechanicsProblemDefinition< DIM >::mDirichletNodes
protected

All nodes (including non-vertices) which have a dirichlet boundary condition (ie position prescribed in solid mechanics problems, flow prescribed in fluids problems).

Definition at line 137 of file ContinuumMechanicsProblemDefinition.hpp.

Referenced by StokesFlowProblemDefinition< DIM >::SetPrescribedFlowNodes().

◆ mDirichletNodeValues

template<unsigned DIM>
std::vector<c_vector<double,DIM> > ContinuumMechanicsProblemDefinition< DIM >::mDirichletNodeValues
protected

The values at the nodes with Dirichlet boundary conditions (displacement

Definition at line 140 of file ContinuumMechanicsProblemDefinition.hpp.

Referenced by StokesFlowProblemDefinition< DIM >::SetPrescribedFlowNodes().

◆ mElementwiseTractions

template<unsigned DIM>
std::vector<c_vector<double,DIM> > ContinuumMechanicsProblemDefinition< DIM >::mElementwiseTractions
protected

The tractions on each surface element (only used if mTractionBoundaryConditionType is set appropriately)

Definition at line 112 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mNormalPressure

template<unsigned DIM>
double ContinuumMechanicsProblemDefinition< DIM >::mNormalPressure
protected

If the tractions are specified to correspond to a pressure acting on the surface: the pressure for the given boundary elements (only used if mTractionBoundaryConditionType is set appropriately)

Definition at line 116 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mOriginalNormalPressure

template<unsigned DIM>
double ContinuumMechanicsProblemDefinition< DIM >::mOriginalNormalPressure
protected

If the user asks this class to increment the pressure, the variable mNormalPressure will be altered depending on which increment it is. Here we store the original (full) pressure.

Definition at line 121 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mpBodyForceFunction

template<unsigned DIM>
c_vector< double, DIM >(* ContinuumMechanicsProblemDefinition< DIM >::mpBodyForceFunction) (c_vector< double, DIM > &rX, double t)
protected

The body force as a function of space and time, only used if mBodyForceType is set appropriately

Definition at line 96 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mpNormalPressureFunction

template<unsigned DIM>
double(* ContinuumMechanicsProblemDefinition< DIM >::mpNormalPressureFunction) (double t)
protected

The normal pressure as a function if time (only used if mTractionBoundaryConditionType is set appropriately)

Definition at line 127 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mpTractionBoundaryConditionFunction

template<unsigned DIM>
c_vector< double, DIM >(* ContinuumMechanicsProblemDefinition< DIM >::mpTractionBoundaryConditionFunction) (c_vector< double, DIM > &rX, double t)
protected

The tractions as a function of space and time (only used if mTractionBoundaryConditionType is set appropriately)

Definition at line 121 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mrMesh

template<unsigned DIM>
AbstractTetrahedralMesh<DIM,DIM>& ContinuumMechanicsProblemDefinition< DIM >::mrMesh
protected

The mesh being solved on

Definition at line 83 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mTractionBoundaryConditionType

template<unsigned DIM>
TractionBoundaryConditionType ContinuumMechanicsProblemDefinition< DIM >::mTractionBoundaryConditionType
protected

The traction (Neumann) boundary condition type

Definition at line 106 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mTractionBoundaryElements

template<unsigned DIM>
std::vector<BoundaryElement<DIM-1,DIM>*> ContinuumMechanicsProblemDefinition< DIM >::mTractionBoundaryElements
protected

The surface elements on which tractions are applied

Definition at line 109 of file ContinuumMechanicsProblemDefinition.hpp.

◆ mVerboseDuringSolve

template<unsigned DIM>
bool ContinuumMechanicsProblemDefinition< DIM >::mVerboseDuringSolve
protected

Whether the solver will be verbose or not. See dox for Set method below

Definition at line 143 of file ContinuumMechanicsProblemDefinition.hpp.

Referenced by ContinuumMechanicsProblemDefinition< DIM >::GetVerboseDuringSolve(), and ContinuumMechanicsProblemDefinition< DIM >::SetVerboseDuringSolve().


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