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 BIDOMAINWITHBATHMATRIXBASEDASSEMBLER_HPP_
00032 #define BIDOMAINWITHBATHMATRIXBASEDASSEMBLER_HPP_
00033
00034 #include "BidomainDg0Assembler.hpp"
00035 #include "BidomainMatrixBasedAssembler.hpp"
00036 #include "BidomainWithBathAssembler.hpp"
00037 #include "HeartConfig.hpp"
00038
00056 template<unsigned DIM>
00057 class BidomainWithBathRhsMatrixAssembler
00058 : public AbstractLinearAssembler<DIM, DIM, 2, false, BidomainWithBathRhsMatrixAssembler<DIM> >
00060
00061 {
00062 public:
00063 static const unsigned E_DIM = DIM;
00064 static const unsigned S_DIM = DIM;
00065 static const unsigned P_DIM = 2u;
00077 virtual c_matrix<double,2*(DIM+1),2*(DIM+1)> ComputeMatrixTerm(
00078 c_vector<double, DIM+1> &rPhi,
00079 c_matrix<double, DIM, DIM+1> &rGradPhi,
00080 ChastePoint<DIM> &rX,
00081 c_vector<double,2> &rU,
00082 c_matrix<double,2,DIM> &rGradU ,
00083 Element<DIM,DIM>* pElement);
00084
00096 virtual c_vector<double,2*(DIM+1)> ComputeVectorTerm(
00097 c_vector<double, DIM+1> &rPhi,
00098 c_matrix<double, DIM, DIM+1> &rGradPhi,
00099 ChastePoint<DIM> &rX,
00100 c_vector<double,2> &rU,
00101 c_matrix<double, 2, DIM> &rGradU ,
00102 Element<DIM,DIM>* pElement);
00103
00113 virtual c_vector<double, 2*DIM> ComputeVectorSurfaceTerm(
00114 const BoundaryElement<DIM-1,DIM> &rSurfaceElement,
00115 c_vector<double, DIM> &rPhi,
00116 ChastePoint<DIM> &rX);
00117
00123 BidomainWithBathRhsMatrixAssembler(AbstractTetrahedralMesh<DIM,DIM>* pMesh);
00124
00128 ~BidomainWithBathRhsMatrixAssembler();
00129
00133 Mat* GetMatrix();
00134 };
00135
00138 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00139 class BidomainWithBathMatrixBasedAssembler
00140 : public BidomainMatrixBasedAssembler<ELEMENT_DIM, SPACE_DIM>,
00141 public BidomainWithBathAssembler<ELEMENT_DIM, SPACE_DIM>
00142 {
00143 protected:
00145 BidomainWithBathRhsMatrixAssembler<SPACE_DIM>* mpBidomainWithBathRhsMatrixAssembler;
00146
00147 public:
00148
00157 BidomainWithBathMatrixBasedAssembler(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00158 BidomainPde<SPACE_DIM>* pPde,
00159 BoundaryConditionsContainer<ELEMENT_DIM, SPACE_DIM, 2>* pBcc,
00160 unsigned numQuadPoints = 2);
00161
00165 ~BidomainWithBathMatrixBasedAssembler();
00166
00172 void ConstructVectorForMatrixBasedRhsAssembly(Vec existingSolution);
00173
00174 };
00175
00176 #endif