36#ifndef ABSTRACTCARDIACMECHANICSSOLVER_HPP_
37#define ABSTRACTCARDIACMECHANICSSOLVER_HPP_
40#include "IncompressibleNonlinearElasticitySolver.hpp"
41#include "CompressibleNonlinearElasticitySolver.hpp"
42#include "QuadraticBasisFunction.hpp"
43#include "LinearBasisFunction.hpp"
44#include "AbstractContractionModel.hpp"
45#include "FibreReader.hpp"
46#include "FineCoarseMeshPair.hpp"
47#include "AbstractCardiacMechanicsSolverInterface.hpp"
48#include "HeartRegionCodes.hpp"
49#include "ElectroMechanicsProblemDefinition.hpp"
80template<
class ELASTICITY_SOLVER,
unsigned DIM>
173 unsigned elementIndex,
174 unsigned currentQuadPointGlobalIndex,
175 c_matrix<double,DIM,DIM>& rT,
209 unsigned currentQuadPointGlobalIndex,
210 bool assembleJacobian,
211 double& rActiveTension,
212 double& rDerivActiveTensionWrtLambda,
213 double& rDerivActiveTensionWrtDLambdaDt)=0;
224 std::string outputDirectory);
249 return this->mpQuadratureRule;
295 std::vector<double>& rVoltages);
304 virtual void Solve(
double time,
double nextTime,
double odeTimestep)=0;
326 std::vector<double>& rStretches);
c_matrix< double, DIM, DIM > mConstantFibreSheetDirections
std::map< unsigned, DataAtQuadraturePoint > mQuadPointToDataAtQuadPointMap
void SetCalciumAndVoltage(std::vector< double > &rCalciumConcentrations, std::vector< double > &rVoltages)
virtual bool IsImplicitSolver()=0
virtual void Solve(double time, double nextTime, double odeTimestep)=0
void ComputeDeformationGradientAndStretchInEachElement(std::vector< c_matrix< double, DIM, DIM > > &rDeformationGradients, std::vector< double > &rStretches)
std::map< unsigned, DataAtQuadraturePoint >::iterator mMapIterator
virtual GaussianQuadratureRule< DIM > * GetQuadratureRule()
bool mFibreSheetDirectionsDefinedByQuadraturePoint
c_vector< double, DIM > mCurrentElementSheetNormalDirection
std::map< unsigned, DataAtQuadraturePoint > & rGetQuadPointToDataAtQuadPointMap()
unsigned GetTotalNumQuadPoints()
void SetFineCoarseMeshPair(FineCoarseMeshPair< DIM > *pMeshPair)
std::vector< c_matrix< double, DIM, DIM > > * mpVariableFibreSheetDirections
virtual ~AbstractCardiacMechanicsSolver()
c_vector< double, DIM > mCurrentElementSheetDirection
FineCoarseMeshPair< DIM > * mpMeshPair
static const unsigned NUM_VERTICES_PER_ELEMENT
void SetVariableFibreSheetDirections(const FileFinder &rOrthoFile, bool definedPerQuadraturePoint)
unsigned mTotalQuadPoints
virtual void GetActiveTensionAndTensionDerivs(double currentFibreStretch, unsigned currentQuadPointGlobalIndex, bool assembleJacobian, double &rActiveTension, double &rDerivActiveTensionWrtLambda, double &rDerivActiveTensionWrtDLambdaDt)=0
ElectroMechanicsProblemDefinition< DIM > & mrElectroMechanicsProblemDefinition
void SetupChangeOfBasisMatrix(unsigned elementIndex, unsigned currentQuadPointGlobalIndex)
c_vector< double, DIM > mCurrentElementFibreDirection
void SetConstantFibreSheetDirections(const c_matrix< double, DIM, DIM > &rFibreSheetMatrix)
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)
double StretchLastTimeStep
AbstractContractionModel * ContractionModel