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 "HeartRegionCodes.hpp"
00031
00032 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00033 AbstractCardiacCell* AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::CreateCardiacCellForNode(
00034 unsigned nodeIndex)
00035 {
00036 if (mpMesh->GetNode(nodeIndex)->GetRegion() == HeartRegionCode::BATH)
00037 {
00038 return mpFakeCell;
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 mpFakeCell(new FakeBathCell(mpSolver, mpZeroStimulus))
00075 {
00076 }
00077
00078 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00079 AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::~AbstractCardiacCellFactory()
00080 {
00081 delete mpFakeCell;
00082 }
00083
00084 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00085 void AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::SetMesh(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh)
00086 {
00087 mpMesh = pMesh;
00088 }
00089
00090 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00091 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::GetMesh()
00092 {
00093 if (mpMesh == NULL)
00094 {
00095 EXCEPTION("The mesh object has not been set in the cell factory");
00096 }
00097 return mpMesh;
00098 }
00099
00100 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00101 void AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::SetHeartGeometryInformation(HeartGeometryInformation<SPACE_DIM>* pHeartGeometryInformation)
00102 {
00103 mpHeartGeometryInformation = pHeartGeometryInformation;
00104 }
00105
00106 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00107 HeartGeometryInformation<SPACE_DIM>* AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>::GetHeartGeometryInformation()
00108 {
00109 if (mpHeartGeometryInformation == NULL)
00110 {
00111 EXCEPTION("HeartGeometryInformation object has not been set in the cell factory");
00112 }
00113 return mpHeartGeometryInformation;
00114 }
00116
00118
00119 template class AbstractCardiacCellFactory<1,1>;
00120 template class AbstractCardiacCellFactory<1,2>;
00121 template class AbstractCardiacCellFactory<1,3>;
00122 template class AbstractCardiacCellFactory<2,2>;
00123 template class AbstractCardiacCellFactory<3,3>;