ExtendedBidomainMassMatrixAssembler.cpp
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 #include "ExtendedBidomainMassMatrixAssembler.hpp"
00030 #include "HeartRegionCodes.hpp"
00031
00032
00033 template<unsigned DIM>
00034 c_matrix<double,3*(DIM+1),3*(DIM+1)> ExtendedBidomainMassMatrixAssembler<DIM>::ComputeMatrixTerm(
00035 c_vector<double, DIM+1> &rPhi,
00036 c_matrix<double, DIM, DIM+1> &rGradPhi,
00037 ChastePoint<DIM> &rX,
00038 c_vector<double,3> &rU,
00039 c_matrix<double,3,DIM> &rGradU ,
00040 Element<DIM,DIM>* pElement)
00041 {
00042
00043 c_matrix<double,3*(DIM+1),3*(DIM+1)> ret = zero_matrix<double>(3*(DIM+1),3*(DIM+1));
00044
00045 if (!HeartRegionCode::IsRegionBath( pElement->GetRegion() ))
00046 {
00047 c_matrix<double, DIM+1, DIM+1> basis_outer_prod = outer_prod(rPhi, rPhi);
00048
00049
00050 matrix_slice<c_matrix<double, 3*DIM+3, 3*DIM+3> >
00051 slice00(ret, slice (0, 3, DIM+1), slice (0, 3, DIM+1));
00052 slice00 = basis_outer_prod;
00053
00054
00055 matrix_slice<c_matrix<double, 3*DIM+3, 3*DIM+3> >
00056 slice11(ret, slice (1, 3, DIM+1), slice (1, 3, DIM+1));
00057 slice11 = basis_outer_prod;
00058
00059
00060 matrix_slice<c_matrix<double, 3*DIM+3, 3*DIM+3> >
00061 slice22(ret, slice (2, 3, DIM+1), slice (2, 3, DIM+1));
00062 slice22 = basis_outer_prod;
00063 }
00064 return ret;
00065 }
00066
00067
00068
00070
00072
00073 template class ExtendedBidomainMassMatrixAssembler<1>;
00074 template class ExtendedBidomainMassMatrixAssembler<2>;
00075 template class ExtendedBidomainMassMatrixAssembler<3>;