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 ABSTRACTCARDIACPDE_HPP_
00031 #define ABSTRACTCARDIACPDE_HPP_
00032
00033 #include <vector>
00034 #include <boost/numeric/ublas/matrix.hpp>
00035
00036 #include "AbstractCardiacCell.hpp"
00037 #include "AbstractCardiacCellFactory.hpp"
00038 #include "AbstractConductivityTensors.hpp"
00039
00040 #include "ReplicatableVector.hpp"
00041 #include "HeartConfig.hpp"
00042
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 template <unsigned SPACE_DIM>
00062 class AbstractCardiacPde
00063 {
00064 protected:
00065
00066 AbstractConductivityTensors<SPACE_DIM> *mpIntracellularConductivityTensors;
00067
00069 std::vector< AbstractCardiacCell* > mCellsDistributed;
00070
00075 ReplicatableVector mIionicCacheReplicated;
00076 ReplicatableVector mIntracellularStimulusCacheReplicated;
00077
00084 const unsigned mStride;
00085
00086 HeartConfig* mpConfig;
00087
00097 bool mDoCacheReplication;
00103 bool mDoOneCacheReplication;
00104
00105 public:
00115 AbstractCardiacPde(AbstractCardiacCellFactory<SPACE_DIM>* pCellFactory, const unsigned stride=1);
00116
00117 virtual ~AbstractCardiacPde();
00118
00124 void SetCacheReplication(bool doCacheReplication);
00125
00126 const c_matrix<double, SPACE_DIM, SPACE_DIM>& rGetIntracellularConductivityTensor(unsigned elementIndex);
00127
00132 AbstractCardiacCell* GetCardiacCell( unsigned globalIndex );
00133
00134
00144 virtual void SolveCellSystems(Vec currentSolution, double currentTime, double nextTime);
00145
00146 ReplicatableVector& rGetIionicCacheReplicated();
00147
00148 ReplicatableVector& rGetIntracellularStimulusCacheReplicated();
00149
00150
00154 void UpdateCaches(unsigned globalIndex, unsigned localIndex, double nextTime);
00155
00159 void ReplicateCaches();
00160 };
00161
00162 #endif
00163