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"
80 template<
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);
void ComputeDeformationGradientAndStretchInEachElement(std::vector< c_matrix< double, DIM, DIM > > &rDeformationGradients, std::vector< double > &rStretches)
c_vector< double, DIM > mCurrentElementSheetNormalDirection
virtual bool IsImplicitSolver()=0
std::vector< c_matrix< double, DIM, DIM > > * mpVariableFibreSheetDirections
void SetConstantFibreSheetDirections(const c_matrix< double, DIM, DIM > &rFibreSheetMatrix)
AbstractCardiacMechanicsSolver(QuadraticMesh< DIM > &rQuadMesh, ElectroMechanicsProblemDefinition< DIM > &rProblemDefinition, std::string outputDirectory)
c_vector< double, DIM > mCurrentElementFibreDirection
std::map< unsigned, DataAtQuadraturePoint >::iterator mMapIterator
ElectroMechanicsProblemDefinition< DIM > & mrElectroMechanicsProblemDefinition
virtual void Solve(double time, double nextTime, double odeTimestep)=0
std::map< unsigned, DataAtQuadraturePoint > mQuadPointToDataAtQuadPointMap
double StretchLastTimeStep
c_matrix< double, DIM, DIM > mConstantFibreSheetDirections
FineCoarseMeshPair< DIM > * mpMeshPair
virtual void GetActiveTensionAndTensionDerivs(double currentFibreStretch, unsigned currentQuadPointGlobalIndex, bool assembleJacobian, double &rActiveTension, double &rDerivActiveTensionWrtLambda, double &rDerivActiveTensionWrtDLambdaDt)=0
unsigned mTotalQuadPoints
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 SetFineCoarseMeshPair(FineCoarseMeshPair< DIM > *pMeshPair)
virtual GaussianQuadratureRule< DIM > * GetQuadratureRule()
AbstractContractionModel * ContractionModel
static const unsigned NUM_VERTICES_PER_ELEMENT
void SetCalciumAndVoltage(std::vector< double > &rCalciumConcentrations, std::vector< double > &rVoltages)
void SetVariableFibreSheetDirections(const FileFinder &rOrthoFile, bool definedPerQuadraturePoint)
virtual ~AbstractCardiacMechanicsSolver()
std::map< unsigned, DataAtQuadraturePoint > & rGetQuadPointToDataAtQuadPointMap()
c_vector< double, DIM > mCurrentElementSheetDirection
bool mFibreSheetDirectionsDefinedByQuadraturePoint
unsigned GetTotalNumQuadPoints()
void SetupChangeOfBasisMatrix(unsigned elementIndex, unsigned currentQuadPointGlobalIndex)