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
00031 #ifndef BIDOMAINASSEMBLER_HPP_
00032 #define BIDOMAINASSEMBLER_HPP_
00033
00034 #include "AbstractCardiacFeObjectAssembler.hpp"
00035 #include "BidomainTissue.hpp"
00036 #include "HeartConfig.hpp"
00037
00042 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00043 class BidomainAssembler : public AbstractCardiacFeObjectAssembler<ELEMENT_DIM,SPACE_DIM,2,true,true,CARDIAC>
00044 {
00045 protected:
00047 HeartConfig* mpConfig;
00049 double mIionic;
00051 double mIIntracellularStimulus;
00053 double mIExtracellularStimulus;
00054
00058 void ResetInterpolatedQuantities();
00059
00066 void IncrementInterpolatedQuantities(double phiI, const Node<SPACE_DIM>* pNode);
00067
00068
00082 virtual c_matrix<double,2*(ELEMENT_DIM+1),2*(ELEMENT_DIM+1)> ComputeMatrixTerm(
00083 c_vector<double, ELEMENT_DIM+1> &rPhi,
00084 c_matrix<double, SPACE_DIM, ELEMENT_DIM+1> &rGradPhi,
00085 ChastePoint<SPACE_DIM> &rX,
00086 c_vector<double,2> &rU,
00087 c_matrix<double, 2, SPACE_DIM> &rGradU ,
00088 Element<ELEMENT_DIM,SPACE_DIM>* pElement);
00089
00103 virtual c_vector<double,2*(ELEMENT_DIM+1)> ComputeVectorTerm(
00104 c_vector<double, ELEMENT_DIM+1> &rPhi,
00105 c_matrix<double, SPACE_DIM, ELEMENT_DIM+1> &rGradPhi,
00106 ChastePoint<SPACE_DIM> &rX,
00107 c_vector<double,2> &u,
00108 c_matrix<double, 2, SPACE_DIM> &rGradU ,
00109 Element<ELEMENT_DIM,SPACE_DIM>* pElement);
00110
00122 virtual c_vector<double, 2*ELEMENT_DIM> ComputeVectorSurfaceTerm(
00123 const BoundaryElement<ELEMENT_DIM-1,SPACE_DIM> &rSurfaceElement,
00124 c_vector<double,ELEMENT_DIM> &rPhi,
00125 ChastePoint<SPACE_DIM> &rX);
00126
00127 public:
00128
00136 BidomainAssembler(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00137 BidomainTissue<SPACE_DIM>* pTissue,
00138 unsigned numQuadPoints = 2);
00139
00143 ~BidomainAssembler()
00144 {
00145 }
00146 };
00147
00148 #endif