BidomainNeumannSurfaceTermAssembler.hpp
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 #ifndef BIDOMAINNEUMANNSURFACETERMASSEMBLER_HPP_
00030 #define BIDOMAINNEUMANNSURFACETERMASSEMBLER_HPP_
00031
00032 #include "AbstractFeSurfaceIntegralAssembler.hpp"
00033
00034
00035
00048 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00049 class BidomainNeumannSurfaceTermAssembler : public AbstractFeSurfaceIntegralAssembler<ELEMENT_DIM,SPACE_DIM,2>
00050 {
00051 protected:
00063 virtual c_vector<double, 2*ELEMENT_DIM> ComputeVectorSurfaceTerm(
00064 const BoundaryElement<ELEMENT_DIM-1,SPACE_DIM>& rSurfaceElement,
00065 c_vector<double, ELEMENT_DIM>& rPhi,
00066 ChastePoint<SPACE_DIM>& rX);
00067
00068 public:
00076 BidomainNeumannSurfaceTermAssembler(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00077 BoundaryConditionsContainer<ELEMENT_DIM,SPACE_DIM,2>* pBoundaryConditions,
00078 unsigned numQuadPoints = 2)
00079 : AbstractFeSurfaceIntegralAssembler<ELEMENT_DIM,SPACE_DIM,2>(pMesh, pBoundaryConditions, numQuadPoints)
00080 {
00081 }
00082 };
00083
00084
00085
00086 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00087 c_vector<double, 2*ELEMENT_DIM> BidomainNeumannSurfaceTermAssembler<ELEMENT_DIM, SPACE_DIM>::ComputeVectorSurfaceTerm(
00088 const BoundaryElement<ELEMENT_DIM-1,SPACE_DIM>& rSurfaceElement,
00089 c_vector<double, ELEMENT_DIM>& rPhi,
00090 ChastePoint<SPACE_DIM>& rX)
00091 {
00092
00093 double sigma_i_times_grad_phi_i_dot_n = this->mpBoundaryConditions->GetNeumannBCValue(&rSurfaceElement, rX, 0);
00094 double sigma_e_times_grad_phi_e_dot_n = this->mpBoundaryConditions->GetNeumannBCValue(&rSurfaceElement, rX, 1);
00095
00096 c_vector<double, 2*ELEMENT_DIM> ret;
00097 for (unsigned i=0; i<ELEMENT_DIM; i++)
00098 {
00099 ret(2*i) = rPhi(i)*sigma_i_times_grad_phi_i_dot_n;
00100 ret(2*i+1) = rPhi(i)*(sigma_i_times_grad_phi_i_dot_n + sigma_e_times_grad_phi_e_dot_n);
00101 }
00102
00103 return ret;
00104 }
00105
00106 #endif // BIDOMAINNEUMANNSURFACETERMASSEMBLER_HPP_