AbstractExtendedBidomainSolver.hpp
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
00030 #ifndef ABSTRACTEXTENDEDBIDOMAINSOLVER_HPP_
00031 #define ABSTRACTEXTENDEDBIDOMAINSOLVER_HPP_
00032
00033 #include "AbstractDynamicLinearPdeSolver.hpp"
00034 #include "ExtendedBidomainTissue.hpp"
00035 #include "HeartConfig.hpp"
00036 #include "ExtendedBidomainAssembler.hpp"
00037
00042 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00043 class AbstractExtendedBidomainSolver
00044 : public AbstractDynamicLinearPdeSolver<ELEMENT_DIM,SPACE_DIM,3>
00045 {
00046
00047 protected:
00048
00050 bool mBathSimulation;
00051
00052
00054 ExtendedBidomainTissue<SPACE_DIM>* mpExtendedBidomainTissue;
00055
00057 BoundaryConditionsContainer<ELEMENT_DIM,SPACE_DIM,3>* mpBoundaryConditions;
00058
00063 unsigned mNumQuadPoints;
00064
00069 ExtendedBidomainAssembler<ELEMENT_DIM,SPACE_DIM>* mpExtendedBidomainAssembler;
00070
00072 HeartConfig* mpConfig;
00073
00075 bool mNullSpaceCreated;
00076
00081 std::vector<unsigned> mFixedExtracellularPotentialNodes;
00082
00089 unsigned mRowForAverageOfPhiZeroed;
00090
00091
00098 void InitialiseForSolve(Vec initialSolution);
00099
00100
00112 virtual void CheckCompatibilityCondition();
00113
00114
00122 void PrepareForSetupLinearSystem(Vec existingSolution);
00123
00132 virtual void FinaliseLinearSystem(Vec existingSolution);
00133
00134
00141 virtual Vec GenerateNullBasis() const;
00142
00143 public:
00144
00154 AbstractExtendedBidomainSolver(bool bathSimulation,
00155 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00156 ExtendedBidomainTissue<SPACE_DIM>* pTissue,
00157 BoundaryConditionsContainer<ELEMENT_DIM, SPACE_DIM, 3>* pBcc,
00158 unsigned numQuadPoints = 2);
00159
00163 virtual ~AbstractExtendedBidomainSolver();
00164
00175 void SetFixedExtracellularPotentialNodes(std::vector<unsigned> fixedExtracellularPotentialNodes);
00176
00182 void SetRowForAverageOfPhiZeroed(unsigned rowMeanPhiEZero);
00183
00187 BoundaryConditionsContainer<ELEMENT_DIM,SPACE_DIM,3>* GetBoundaryConditions()
00188 {
00189 return mpBoundaryConditions;
00190 }
00191
00192 };
00193
00194 #endif