AbstractCardiacCellFactory.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 "AbstractCardiacCellFactory.hpp"
00030 #include "FakeBathCell.hpp"
00031
00032 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00033 AbstractCardiacCell* AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::CreateCardiacCellForNode(
00034 unsigned nodeIndex)
00035 {
00036 if (HeartRegionCode::IsRegionBath( mpMesh->GetNodeOrHaloNode(nodeIndex)->GetRegion() ))
00037 {
00038 return new FakeBathCell(this->mpSolver, this->mpZeroStimulus);
00039 }
00040 else
00041 {
00042 return CreateCardiacCellForTissueNode(nodeIndex);
00043 }
00044 }
00045
00046 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00047 void AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::FinaliseCellCreation(
00048 std::vector< AbstractCardiacCell* >* pCellsDistributed,
00049 unsigned lo,
00050 unsigned hi)
00051 {
00052 }
00053
00054 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00055 void AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::FillInCellularTransmuralAreas()
00056 {
00057
00058 }
00059
00060 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00061 unsigned AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::GetNumberOfCells()
00062 {
00063 assert(mpMesh != NULL);
00064 return mpMesh->GetNumNodes();
00065 }
00066
00067 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00068 AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::AbstractCardiacCellFactory(
00069 boost::shared_ptr<AbstractIvpOdeSolver> pSolver)
00070 : mpMesh(NULL),
00071 mpHeartGeometryInformation(NULL),
00072 mpZeroStimulus(new ZeroStimulus),
00073 mpSolver(pSolver)
00074 {
00075 }
00076
00077 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00078 AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::~AbstractCardiacCellFactory()
00079 {
00080 }
00081
00082 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00083 void AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::SetMesh(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh)
00084 {
00085 mpMesh = pMesh;
00086 }
00087
00088 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00089 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::GetMesh()
00090 {
00091 if (mpMesh == NULL)
00092 {
00093 EXCEPTION("The mesh object has not been set in the cell factory");
00094 }
00095 return mpMesh;
00096 }
00097
00098 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00099 void AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::SetHeartGeometryInformation(HeartGeometryInformation<SPACE_DIM>* pHeartGeometryInformation)
00100 {
00101 mpHeartGeometryInformation = pHeartGeometryInformation;
00102 }
00103
00104 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00105 HeartGeometryInformation<SPACE_DIM>* AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::GetHeartGeometryInformation()
00106 {
00107 if (mpHeartGeometryInformation == NULL)
00108 {
00109 EXCEPTION("HeartGeometryInformation object has not been set in the cell factory");
00110 }
00111 return mpHeartGeometryInformation;
00112 }
00114
00116
00117 template class AbstractCardiacCellFactory<1,1>;
00118 template class AbstractCardiacCellFactory<1,2>;
00119 template class AbstractCardiacCellFactory<1,3>;
00120 template class AbstractCardiacCellFactory<2,2>;
00121 template class AbstractCardiacCellFactory<3,3>;