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