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;
00066
00070 virtual c_matrix<double,2*(DIM+1),2*(DIM+1)> ComputeMatrixTerm(
00071 c_vector<double, DIM+1> &rPhi,
00072 c_matrix<double, DIM, DIM+1> &rGradPhi,
00073 ChastePoint<DIM> &rX,
00074 c_vector<double,2> &u,
00075 c_matrix<double,2,DIM> &rGradU ,
00076 Element<DIM,DIM>* pElement);
00077
00082 virtual c_vector<double,2*(DIM+1)> ComputeVectorTerm(
00083 c_vector<double, DIM+1> &rPhi,
00084 c_matrix<double, DIM, DIM+1> &rGradPhi,
00085 ChastePoint<DIM> &rX,
00086 c_vector<double,2> &u,
00087 c_matrix<double, 2, DIM> &rGradU ,
00088 Element<DIM,DIM>* pElement);
00089
00095 virtual c_vector<double, 2*DIM> ComputeVectorSurfaceTerm(
00096 const BoundaryElement<DIM-1,DIM> &rSurfaceElement,
00097 c_vector<double, DIM> &rPhi,
00098 ChastePoint<DIM> &rX );
00099
00100 public:
00104 BidomainWithBathRhsMatrixAssembler(AbstractMesh<DIM,DIM>* pMesh);
00105
00106 ~BidomainWithBathRhsMatrixAssembler();
00107
00111 Mat* GetMatrix();
00112 };
00113
00114
00115 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00116 class BidomainWithBathMatrixBasedAssembler
00117 : public BidomainMatrixBasedAssembler<ELEMENT_DIM, SPACE_DIM>,
00118 public BidomainWithBathAssembler<ELEMENT_DIM, SPACE_DIM>
00119 {
00120 protected:
00122 BidomainWithBathRhsMatrixAssembler<SPACE_DIM>* mpBidomainWithBathRhsMatrixAssembler;
00123
00124 public:
00125
00129 BidomainWithBathMatrixBasedAssembler(AbstractMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00130 BidomainPde<SPACE_DIM>* pPde,
00131 BoundaryConditionsContainer<ELEMENT_DIM, SPACE_DIM, 2>* pBcc,
00132 unsigned numQuadPoints = 2);
00133
00134 ~BidomainWithBathMatrixBasedAssembler();
00135
00136
00141 void ConstructVectorForMatrixBasedRhsAssembly(Vec currentSolution);
00142
00143 };
00144
00145 #endif