#include <ExplicitCardiacMechanicsSolver.hpp>
Public Member Functions | |
ExplicitCardiacMechanicsSolver (ContractionModel contractionModel, QuadraticMesh< DIM > *pQuadMesh, std::string outputDirectory, std::vector< unsigned > &rFixedNodes, AbstractMaterialLaw< DIM > *pMaterialLaw) | |
virtual | ~ExplicitCardiacMechanicsSolver () |
void | Solve (double time, double nextTime, double odeTimestep) |
Private Member Functions | |
bool | IsImplicitSolver () |
void | GetActiveTensionAndTensionDerivs (double currentFibreStretch, unsigned currentQuadPointGlobalIndex, bool assembleJacobian, double &rActiveTension, double &rDerivActiveTensionWrtLambda, double &rDerivActiveTensionWrtDLambdaDt) |
Friends | |
class | TestExplicitCardiacMechanicsSolver |
The first template parameter should be either NonlinearElasticitySolver 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 54 of file ExplicitCardiacMechanicsSolver.hpp.
ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::ExplicitCardiacMechanicsSolver | ( | ContractionModel | contractionModel, | |
QuadraticMesh< DIM > * | pQuadMesh, | |||
std::string | outputDirectory, | |||
std::vector< unsigned > & | rFixedNodes, | |||
AbstractMaterialLaw< DIM > * | pMaterialLaw | |||
) | [inline] |
Constructor
contractionModel | The contraction model. | |
pQuadMesh | A pointer to the mesh. | |
outputDirectory | The output directory, relative to TEST_OUTPUT | |
rFixedNodes | The fixed nodes | |
pMaterialLaw | The material law for the tissue. Defaults to NULL, in which case a default material law is used. |
Definition at line 38 of file ExplicitCardiacMechanicsSolver.cpp.
References EXCEPTION, AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mContractionModelSystems, and AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mTotalQuadPoints.
ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::~ExplicitCardiacMechanicsSolver | ( | ) | [inline, virtual] |
Destructor
Definition at line 87 of file ExplicitCardiacMechanicsSolver.cpp.
References AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mContractionModelSystems.
bool ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::IsImplicitSolver | ( | ) | [inline, private, virtual] |
This solver is an explicit solver (overloaded pure method)
Implements AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >.
Definition at line 60 of file ExplicitCardiacMechanicsSolver.hpp.
void ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::GetActiveTensionAndTensionDerivs | ( | double | currentFibreStretch, | |
unsigned | currentQuadPointGlobalIndex, | |||
bool | assembleJacobian, | |||
double & | rActiveTension, | |||
double & | rDerivActiveTensionWrtLambda, | |||
double & | rDerivActiveTensionWrtDLambdaDt | |||
) | [inline, private, virtual] |
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.
currentFibreStretch | The stretch in the fibre direction | |
currentQuadPointGlobalIndex | Quadrature point integrand currently being evaluated at in AssembleOnElement. | |
assembleJacobian | A bool stating whether to assemble the Jacobian matrix. | |
rActiveTension | The returned active tension. | |
rDerivActiveTensionWrtLambda | The returned dT_dLam, derivative of active tension wrt stretch. Unset in this explicit solver. | |
rDerivActiveTensionWrtDLambdaDt | The returned dT_dLamDot, derivative of active tension wrt stretch rate. Unset in this explicit solver. |
Implements AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >.
Definition at line 96 of file ExplicitCardiacMechanicsSolver.cpp.
References AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mContractionModelSystems, and AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mStretches.
void ExplicitCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::Solve | ( | double | time, | |
double | nextTime, | |||
double | odeTimestep | |||
) | [inline, 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
time | the current time | |
nextTime | the next time | |
odeTimestep | the ODE timestep |
Implements AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >.
Definition at line 117 of file ExplicitCardiacMechanicsSolver.cpp.
References AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mContractionModelSystems, AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mCurrentTime, AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mNextTime, AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mOdeTimestep, and AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::mStretches.