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 _MONODOMAINDG0ASSEMBLER_HPP_
00031 #define _MONODOMAINDG0ASSEMBLER_HPP_
00032
00033
00034 #include "SimpleDg0ParabolicAssembler.hpp"
00035 #include "MonodomainPde.hpp"
00036
00037
00051 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00052 class MonodomainDg0Assembler
00053 : public SimpleDg0ParabolicAssembler<ELEMENT_DIM, SPACE_DIM, false, MonodomainDg0Assembler<ELEMENT_DIM, SPACE_DIM> >
00054 {
00055 public:
00056 static const unsigned E_DIM = ELEMENT_DIM;
00057 static const unsigned S_DIM = SPACE_DIM;
00058 static const unsigned P_DIM = 1u;
00059
00060 protected:
00061 double mSourceTerm;
00062
00063 MonodomainPde<SPACE_DIM>* mpMonodomainPde;
00064
00065
00066 typedef MonodomainDg0Assembler<ELEMENT_DIM, SPACE_DIM> SelfType;
00067 typedef SimpleDg0ParabolicAssembler<ELEMENT_DIM, SPACE_DIM, false, SelfType> BaseClassType;
00068
00070 friend class AbstractStaticAssembler<ELEMENT_DIM, SPACE_DIM, 1u, false, BaseClassType>;
00071
00072 protected:
00073
00083 virtual c_vector<double,1*(ELEMENT_DIM+1)> ComputeVectorTerm(
00084 c_vector<double, ELEMENT_DIM+1> &rPhi,
00085 c_matrix<double, ELEMENT_DIM, ELEMENT_DIM+1> &rGradPhi,
00086 ChastePoint<SPACE_DIM> &rX,
00087 c_vector<double,1> &u,
00088 c_matrix<double, 1, SPACE_DIM> &rGradU ,
00089 Element<ELEMENT_DIM,SPACE_DIM>* pElement);
00090
00091
00092 void ResetInterpolatedQuantities( void );
00093
00094
00095 void IncrementInterpolatedQuantities(double phi_i, const Node<SPACE_DIM> *pNode);
00096
00097
00098 virtual void PrepareForAssembleSystem(Vec currentSolution, double currentTime);
00099
00100
00101 void InitialiseForSolve(Vec initialSolution);
00102
00103
00104 public:
00108 MonodomainDg0Assembler(AbstractMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00109 MonodomainPde<SPACE_DIM>* pPde,
00110 BoundaryConditionsContainer<ELEMENT_DIM, SPACE_DIM, 1>* pBcc,
00111 unsigned numQuadPoints = 2);
00112
00113 ~MonodomainDg0Assembler();
00114 };
00115
00122 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00123 struct AssemblerTraits<MonodomainDg0Assembler<ELEMENT_DIM, SPACE_DIM> >
00124 {
00125 typedef MonodomainDg0Assembler<ELEMENT_DIM, SPACE_DIM> CVT_CLS;
00126 typedef SimpleDg0ParabolicAssembler<ELEMENT_DIM, SPACE_DIM, false, MonodomainDg0Assembler<ELEMENT_DIM, SPACE_DIM> >
00127 CMT_CLS;
00128 typedef MonodomainDg0Assembler<ELEMENT_DIM, SPACE_DIM> INTERPOLATE_CLS;
00129 };
00130
00131 #endif //_MONODOMAINDG0ASSEMBLER_HPP_