VertexBasedCellPopulation.hpp
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 #ifndef VERTEXBASEDCELLPOPULATION_HPP_
00030 #define VERTEXBASEDCELLPOPULATION_HPP_
00031
00032 #include "AbstractOffLatticeCellPopulation.hpp"
00033 #include "MutableVertexMesh.hpp"
00034
00035 #include "ChasteSerialization.hpp"
00036 #include <boost/serialization/base_object.hpp>
00037 #include <boost/serialization/set.hpp>
00038 #include <boost/serialization/vector.hpp>
00039
00040
00041 #include "WildTypeCellMutationState.hpp"
00042
00050 template<unsigned DIM>
00051 class VertexBasedCellPopulation : public AbstractOffLatticeCellPopulation<DIM>
00052 {
00053 private:
00054
00056 MutableVertexMesh<DIM, DIM>& mrMesh;
00057
00062 bool mDeleteMesh;
00063
00065 out_stream mpVizElementsFile;
00066
00068 out_stream mpT1SwapLocationsFile;
00069
00071 out_stream mpT3SwapLocationsFile;
00072
00076 void WriteVtkResultsToFile();
00077
00078 friend class boost::serialization::access;
00090 template<class Archive>
00091 void serialize(Archive & archive, const unsigned int version)
00092 {
00093 archive & boost::serialization::base_object<AbstractOffLatticeCellPopulation<DIM> >(*this);
00094 }
00095
00100 void Validate();
00101
00102 public:
00103
00116 VertexBasedCellPopulation(MutableVertexMesh<DIM, DIM>& rMesh,
00117 std::vector<CellPtr>& rCells,
00118 bool deleteMesh=false,
00119 bool validate=true,
00120 const std::vector<unsigned> locationIndices=std::vector<unsigned>());
00121
00127 VertexBasedCellPopulation(MutableVertexMesh<DIM, DIM>& rMesh);
00128
00132 virtual ~VertexBasedCellPopulation();
00133
00140 double GetDampingConstant(unsigned nodeIndex);
00141
00145 MutableVertexMesh<DIM, DIM>& rGetMesh();
00146
00150 const MutableVertexMesh<DIM, DIM>& rGetMesh() const;
00151
00159 VertexElement<DIM, DIM>* GetElement(unsigned elementIndex);
00160
00164 unsigned GetNumElements();
00165
00171 unsigned GetNumNodes();
00172
00184 c_vector<double, DIM> GetLocationOfCellCentre(CellPtr pCell);
00185
00193 Node<DIM>* GetNode(unsigned index);
00194
00203 unsigned AddNode(Node<DIM>* pNewNode);
00204
00211 void UpdateNodeLocations(const std::vector< c_vector<double, DIM> >& rNodeForces, double dt);
00212
00221 void SetNode(unsigned index, ChastePoint<DIM>& rNewLocation);
00222
00230 VertexElement<DIM, DIM>* GetElementCorrespondingToCell(CellPtr pCell);
00231
00243 CellPtr AddCell(CellPtr pNewCell, const c_vector<double,DIM>& rCellDivisionVector, CellPtr pParentCell=CellPtr());
00244
00254 unsigned RemoveDeadCells();
00255
00262 bool IsCellAssociatedWithADeletedLocation(CellPtr pCell);
00263
00272 void Update(bool hasHadBirthsOrDeaths=true);
00273
00280 void CreateOutputFiles(const std::string& rDirectory, bool cleanOutputDirectory);
00284 void CloseOutputFiles();
00285
00289 void WriteResultsToFiles();
00290
00295 void WriteCellVolumeResultsToFile();
00296
00300 virtual void GenerateCellResultsAndWriteToFiles();
00301
00310 void OutputCellPopulationParameters(out_stream& rParamsFile);
00311
00321 double GetWidth(const unsigned& rDimension);
00322
00329 std::set<unsigned> GetNeighbouringNodeIndices(unsigned index);
00330 };
00331
00332 #include "SerializationExportWrapper.hpp"
00333 EXPORT_TEMPLATE_CLASS_SAME_DIMS(VertexBasedCellPopulation)
00334
00335 namespace boost
00336 {
00337 namespace serialization
00338 {
00342 template<class Archive, unsigned DIM>
00343 inline void save_construct_data(
00344 Archive & ar, const VertexBasedCellPopulation<DIM> * t, const BOOST_PFTO unsigned int file_version)
00345 {
00346
00347 const MutableVertexMesh<DIM,DIM>* p_mesh = &(t->rGetMesh());
00348 ar & p_mesh;
00349 }
00350
00355 template<class Archive, unsigned DIM>
00356 inline void load_construct_data(
00357 Archive & ar, VertexBasedCellPopulation<DIM> * t, const unsigned int file_version)
00358 {
00359
00360 MutableVertexMesh<DIM,DIM>* p_mesh;
00361 ar >> p_mesh;
00362
00363
00364 ::new(t)VertexBasedCellPopulation<DIM>(*p_mesh);
00365 }
00366 }
00367 }
00368
00369 #endif
00370