00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef EXPLICITCARDIACMECHANICSSOLVER_HPP_
00030 #define EXPLICITCARDIACMECHANICSSOLVER_HPP_
00031
00032 #include "AbstractCardiacMechanicsSolver.hpp"
00033 #include "AbstractCardiacMechanicsSolverInterface.hpp"
00034 #include "AbstractContractionModel.hpp"
00035
00036
00053 template<class ELASTICITY_SOLVER,unsigned DIM>
00054 class ExplicitCardiacMechanicsSolver : public AbstractCardiacMechanicsSolver<ELASTICITY_SOLVER,DIM>
00055 {
00056 friend class TestExplicitCardiacMechanicsSolver;
00057
00058 private:
00060 bool IsImplicitSolver()
00061 {
00062 return false;
00063 }
00064
00065
00078 void GetActiveTensionAndTensionDerivs(double currentFibreStretch,
00079 unsigned currentQuadPointGlobalIndex,
00080 bool assembleJacobian,
00081 double& rActiveTension,
00082 double& rDerivActiveTensionWrtLambda,
00083 double& rDerivActiveTensionWrtDLambdaDt);
00084
00085 public:
00096 ExplicitCardiacMechanicsSolver(ContractionModel contractionModel,
00097 QuadraticMesh<DIM>* pQuadMesh,
00098 std::string outputDirectory,
00099 std::vector<unsigned>& rFixedNodes,
00100 AbstractMaterialLaw<DIM>* pMaterialLaw);
00101
00105 virtual ~ExplicitCardiacMechanicsSolver();
00106
00107
00119 void Solve(double time, double nextTime, double odeTimestep);
00120 };
00121
00122 #endif