Chaste  Release::2018.1
ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM > Class Template Reference

#include <ExplicitCardiacMechanicsSolver.hpp>

+ Inheritance diagram for ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >:
+ Collaboration diagram for ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >:

Public Member Functions

 ExplicitCardiacMechanicsSolver (QuadraticMesh< DIM > &rQuadMesh, ElectroMechanicsProblemDefinition< DIM > &rProblemDefinition, std::string outputDirectory)
 
virtual ~ExplicitCardiacMechanicsSolver ()
 
void Solve (double time, double nextTime, double odeTimestep)
 
- Public Member Functions inherited from AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >
 AbstractCardiacMechanicsSolver (QuadraticMesh< DIM > &rQuadMesh, ElectroMechanicsProblemDefinition< DIM > &rProblemDefinition, std::string outputDirectory)
 
virtual ~AbstractCardiacMechanicsSolver ()
 
void SetFineCoarseMeshPair (FineCoarseMeshPair< DIM > *pMeshPair)
 
unsigned GetTotalNumQuadPoints ()
 
virtual GaussianQuadratureRule
< DIM > * 
GetQuadratureRule ()
 
std::map< unsigned,
DataAtQuadraturePoint > & 
rGetQuadPointToDataAtQuadPointMap ()
 
void SetConstantFibreSheetDirections (const c_matrix< double, DIM, DIM > &rFibreSheetMatrix)
 
void SetVariableFibreSheetDirections (const FileFinder &rOrthoFile, bool definedPerQuadraturePoint)
 
void SetCalciumAndVoltage (std::vector< double > &rCalciumConcentrations, std::vector< double > &rVoltages)
 
void ComputeDeformationGradientAndStretchInEachElement (std::vector< c_matrix< double, DIM, DIM > > &rDeformationGradients, std::vector< double > &rStretches)
 
- Public Member Functions inherited from AbstractCardiacMechanicsSolverInterface< DIM >
 AbstractCardiacMechanicsSolverInterface ()
 
virtual ~AbstractCardiacMechanicsSolverInterface ()
 

Private Member Functions

bool IsImplicitSolver ()
 
void GetActiveTensionAndTensionDerivs (double currentFibreStretch, unsigned currentQuadPointGlobalIndex, bool assembleJacobian, double &rActiveTension, double &rDerivActiveTensionWrtLambda, double &rDerivActiveTensionWrtDLambdaDt)
 

Friends

class TestExplicitCardiacMechanicsSolver
 

Additional Inherited Members

- Protected Member Functions inherited from AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >
void AddActiveStressAndStressDerivative (c_matrix< double, DIM, DIM > &rC, unsigned elementIndex, unsigned currentQuadPointGlobalIndex, c_matrix< double, DIM, DIM > &rT, FourthOrderTensor< DIM, DIM, DIM, DIM > &rDTdE, bool addToDTdE)
 
void SetupChangeOfBasisMatrix (unsigned elementIndex, unsigned currentQuadPointGlobalIndex)
 
void Initialise ()
 
- Protected Attributes inherited from AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >
std::map< unsigned,
DataAtQuadraturePoint
mQuadPointToDataAtQuadPointMap
 
std::map< unsigned,
DataAtQuadraturePoint >
::iterator 
mMapIterator
 
FineCoarseMeshPair< DIM > * mpMeshPair
 
unsigned mTotalQuadPoints
 
double mCurrentTime
 
double mNextTime
 
double mOdeTimestep
 
c_matrix< double, DIM, DIM > mConstantFibreSheetDirections
 
std::vector< c_matrix< double,
DIM, DIM > > * 
mpVariableFibreSheetDirections
 
bool mFibreSheetDirectionsDefinedByQuadraturePoint
 
c_vector< double, DIM > mCurrentElementFibreDirection
 
c_vector< double, DIM > mCurrentElementSheetDirection
 
c_vector< double, DIM > mCurrentElementSheetNormalDirection
 
ElectroMechanicsProblemDefinition
< DIM > & 
mrElectroMechanicsProblemDefinition
 
- Static Protected Attributes inherited from AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >
static const unsigned NUM_VERTICES_PER_ELEMENT = ELASTICITY_SOLVER::NUM_VERTICES_PER_ELEMENT
 

Detailed Description

template<class ELASTICITY_SOLVER, unsigned DIM>
class ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >

Explicit cardiac mechanics solver for solving electromechanic problems where the contraction model is not stretch-rate-dependent (for those the implicit solver is needed).

The first template parameter should be either IncompressibleNonlinearElasticitySolver or CompressibleNonlinearElasticityAssembler; this will be the class that this class ultimately inherits from.

The general explicit solution procedure is to do, each timestep: (0) [solve the electrics and interpolate Ca and voltage onto quad points (i) pass Ca and voltage to the contraction models (ii) pass the fibre stretch to the contraction models in case this is needed. (iii) integrate the contraction models in order to get the active tension (iv) solve for the deformation using this active tension.

Definition at line 61 of file ExplicitCardiacMechanicsSolver.hpp.

Constructor & Destructor Documentation

template<class ELASTICITY_SOLVER , unsigned DIM>
ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::ExplicitCardiacMechanicsSolver ( QuadraticMesh< DIM > &  rQuadMesh,
ElectroMechanicsProblemDefinition< DIM > &  rProblemDefinition,
std::string  outputDirectory 
)

Constructor

Parameters
rQuadMeshA reference to the mesh.
rProblemDefinitionObject defining body force and boundary conditions
outputDirectoryThe output directory, relative to TEST_OUTPUT

Definition at line 39 of file ExplicitCardiacMechanicsSolver.cpp.

template<class ELASTICITY_SOLVER , unsigned DIM>
ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::~ExplicitCardiacMechanicsSolver ( )
virtual

Destructor

Definition at line 50 of file ExplicitCardiacMechanicsSolver.cpp.

Member Function Documentation

template<class ELASTICITY_SOLVER , unsigned DIM>
void ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::GetActiveTensionAndTensionDerivs ( double  currentFibreStretch,
unsigned  currentQuadPointGlobalIndex,
bool  assembleJacobian,
double rActiveTension,
double rDerivActiveTensionWrtLambda,
double rDerivActiveTensionWrtDLambdaDt 
)
privatevirtual

Get the active tension and other info at the given quadrature point. This is an explicit solver so just sets the active tension, it doesn't set the derivatives. It stores the stretch for the next timestep.

Parameters
currentFibreStretchThe stretch in the fibre direction
currentQuadPointGlobalIndexQuadrature point integrand currently being evaluated at in AssembleOnElement.
assembleJacobianA bool stating whether to assemble the Jacobian matrix.
rActiveTensionThe returned active tension.
rDerivActiveTensionWrtLambdaThe returned dT_dLam, derivative of active tension wrt stretch. Unset in this explicit solver.
rDerivActiveTensionWrtDLambdaDtThe returned dT_dLamDot, derivative of active tension wrt stretch rate. Unset in this explicit solver.

Implements AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >.

Definition at line 55 of file ExplicitCardiacMechanicsSolver.cpp.

References DataAtQuadraturePoint_::ContractionModel, AbstractContractionModel::GetActiveTension(), and DataAtQuadraturePoint_::Stretch.

template<class ELASTICITY_SOLVER, unsigned DIM>
bool ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::IsImplicitSolver ( )
inlineprivatevirtual
Returns
true if this solver is an explicit solver (overloaded pure method)

Implements AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >.

Definition at line 67 of file ExplicitCardiacMechanicsSolver.hpp.

template<class ELASTICITY_SOLVER , unsigned DIM>
void ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::Solve ( double  time,
double  nextTime,
double  odeTimestep 
)
virtual

Solve for the deformation using quasi-static nonlinear elasticity. (not dynamic nonlinear elasticity, despite the times taken in - just ONE deformation is solved for. The cell models are integrated explicitly over the time range using the ODE timestep provided then the active tension used to solve for the deformation

Parameters
timethe current time
nextTimethe next time
odeTimestepthe ODE timestep

Implements AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >.

Definition at line 88 of file ExplicitCardiacMechanicsSolver.cpp.

References AbstractContractionModel::RunAndUpdate(), and AbstractContractionModel::SetStretchAndStretchRate().


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