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>
84 static const unsigned NUM_VERTICES_PER_ELEMENT = ELASTICITY_SOLVER::NUM_VERTICES_PER_ELEMENT;
155 virtual bool IsImplicitSolver()=0;
172 void AddActiveStressAndStressDerivative(c_matrix<double,DIM,DIM>& rC,
173 unsigned elementIndex,
174 unsigned currentQuadPointGlobalIndex,
175 c_matrix<double,DIM,DIM>& rT,
187 void SetupChangeOfBasisMatrix(
unsigned elementIndex,
unsigned currentQuadPointGlobalIndex);
208 virtual void GetActiveTensionAndTensionDerivs(
double currentFibreStretch,
209 unsigned currentQuadPointGlobalIndex,
210 bool assembleJacobian,
211 double& rActiveTension,
212 double& rDerivActiveTensionWrtLambda,
213 double& rDerivActiveTensionWrtDLambdaDt)=0;
224 std::string outputDirectory);
243 return mTotalQuadPoints;
249 return this->mpQuadratureRule;
257 return mQuadPointToDataAtQuadPointMap;
267 void SetConstantFibreSheetDirections(
const c_matrix<double,DIM,DIM>& rFibreSheetMatrix);
280 void SetVariableFibreSheetDirections(
const FileFinder& rOrthoFile,
bool definedPerQuadraturePoint);
294 void SetCalciumAndVoltage(std::vector<double>& rCalciumConcentrations,
295 std::vector<double>& rVoltages);
304 virtual void Solve(
double time,
double nextTime,
double odeTimestep)=0;
325 void ComputeDeformationGradientAndStretchInEachElement(std::vector<c_matrix<double,DIM,DIM> >& rDeformationGradients,
326 std::vector<double>& rStretches);
c_vector< double, DIM > mCurrentElementSheetNormalDirection
std::vector< c_matrix< double, DIM, DIM > > * mpVariableFibreSheetDirections
c_vector< double, DIM > mCurrentElementFibreDirection
std::map< unsigned, DataAtQuadraturePoint >::iterator mMapIterator
ElectroMechanicsProblemDefinition< DIM > & mrElectroMechanicsProblemDefinition
std::map< unsigned, DataAtQuadraturePoint > mQuadPointToDataAtQuadPointMap
double StretchLastTimeStep
c_matrix< double, DIM, DIM > mConstantFibreSheetDirections
FineCoarseMeshPair< DIM > * mpMeshPair
unsigned mTotalQuadPoints
virtual GaussianQuadratureRule< DIM > * GetQuadratureRule()
AbstractContractionModel * ContractionModel
std::map< unsigned, DataAtQuadraturePoint > & rGetQuadPointToDataAtQuadPointMap()
c_vector< double, DIM > mCurrentElementSheetDirection
bool mFibreSheetDirectionsDefinedByQuadraturePoint
unsigned GetTotalNumQuadPoints()