AbstractPurkinjeCellFactory.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
00030 #include "AbstractPurkinjeCellFactory.hpp"
00031
00032
00033
00034 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00035 AbstractPurkinjeCellFactory<ELEMENT_DIM,SPACE_DIM>::AbstractPurkinjeCellFactory()
00036 : AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>(),
00037 mpMixedDimensionMesh(NULL)
00038 {
00039 }
00040
00041
00042 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00043 void AbstractPurkinjeCellFactory<ELEMENT_DIM,SPACE_DIM>::SetMesh(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh)
00044 {
00045 mpMixedDimensionMesh = dynamic_cast<MixedDimensionMesh<ELEMENT_DIM,SPACE_DIM>*>(pMesh);
00046 if (mpMixedDimensionMesh ==NULL)
00047 {
00048 EXCEPTION("AbstractPurkinjeCellFactory must take a MixedDimensionMesh");
00049 }
00050 mLocalPurkinjeNodes.clear();
00051 for (typename MixedDimensionMesh<ELEMENT_DIM,SPACE_DIM>::CableElementIterator iter = mpMixedDimensionMesh->GetCableElementIteratorBegin();
00052 iter != mpMixedDimensionMesh->GetCableElementIteratorEnd();
00053 ++iter)
00054 {
00055 mLocalPurkinjeNodes.insert((*iter)->GetNodeGlobalIndex(0u));
00056 mLocalPurkinjeNodes.insert((*iter)->GetNodeGlobalIndex(1u));
00057 }
00058 AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::SetMesh(pMesh);
00059 }
00060
00061
00062 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00063 AbstractCardiacCell* AbstractPurkinjeCellFactory<ELEMENT_DIM,SPACE_DIM>::CreatePurkinjeCellForNode(
00064 unsigned nodeIndex)
00065 {
00066 if(mLocalPurkinjeNodes.count(nodeIndex)>0)
00067 {
00068 return CreatePurkinjeCellForTissueNode(nodeIndex);
00069 }
00070 else
00071 {
00072 return new FakeBathCell(this->mpSolver, this->mpZeroStimulus);
00073 }
00074 }
00075
00076
00077 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00078 MixedDimensionMesh<ELEMENT_DIM,SPACE_DIM>* AbstractPurkinjeCellFactory<ELEMENT_DIM,SPACE_DIM>::GetMixedDimensionMesh()
00079 {
00080 if (mpMixedDimensionMesh == NULL)
00081 {
00082 EXCEPTION("The mixed dimension mesh object has not been set in the cell factory");
00083 }
00084 return mpMixedDimensionMesh;
00085 }
00086
00088
00090
00091 template class AbstractPurkinjeCellFactory<1,1>;
00092 template class AbstractPurkinjeCellFactory<2,2>;
00093 template class AbstractPurkinjeCellFactory<3,3>;
00094 template class AbstractPurkinjeCellFactory<1,2>;
00095 template class AbstractPurkinjeCellFactory<1,3>;