NodeBasedCellPopulationWithParticles.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
00030
00031
00032
00033
00034
00035
00036 #ifndef NODEBASEDCELLPOPULATIONWITHPARTICLES_HPP_
00037 #define NODEBASEDCELLPOPULATIONWITHPARTICLES_HPP_
00038
00039 #include "NodeBasedCellPopulation.hpp"
00040 #include "NodesOnlyMesh.hpp"
00041
00042 #include "ChasteSerialization.hpp"
00043 #include <boost/serialization/base_object.hpp>
00044
00049 template<unsigned DIM>
00050 class NodeBasedCellPopulationWithParticles : public NodeBasedCellPopulation<DIM>
00051 {
00052 friend class TestNodeBasedCellPopulationWithParticles;
00053
00054 protected:
00058 void Validate();
00059
00060 private:
00061
00067 void SetParticles(const std::set<unsigned>& rParticleIndices);
00068
00070 friend class boost::serialization::access;
00080 template<class Archive>
00081 void serialize(Archive & archive, const unsigned int version)
00082 {
00083 archive & boost::serialization::base_object<NodeBasedCellPopulation<DIM> >(*this);
00084 }
00085
00086 public:
00087
00098 NodeBasedCellPopulationWithParticles(NodesOnlyMesh<DIM>& rMesh,
00099 std::vector<CellPtr>& rCells,
00100 const std::vector<unsigned> locationIndices=std::vector<unsigned>(),
00101 bool deleteMesh=false);
00102
00108 NodeBasedCellPopulationWithParticles(NodesOnlyMesh<DIM>& rMesh);
00109
00115 void UpdateParticlePositions(double dt);
00116
00122 void UpdateParticlesAfterReMesh(NodeMap& rMap);
00123
00133 void UpdateNodeLocations(double dt);
00134
00144 bool IsParticle(unsigned index);
00145
00149 std::set<unsigned> GetParticleIndices();
00150
00151
00163 CellPtr AddCell(CellPtr pNewCell, const c_vector<double,DIM>& rCellDivisionVector, CellPtr pParentCell);
00164
00170 virtual void WriteVtkResultsToFile(const std::string& rDirectory);
00171
00180 void OutputCellPopulationParameters(out_stream& rParamsFile);
00181 };
00182
00183 #include "SerializationExportWrapper.hpp"
00184 EXPORT_TEMPLATE_CLASS_SAME_DIMS(NodeBasedCellPopulationWithParticles)
00185
00186 namespace boost
00187 {
00188 namespace serialization
00189 {
00193 template<class Archive, unsigned DIM>
00194 inline void save_construct_data(
00195 Archive & ar, const NodeBasedCellPopulationWithParticles<DIM> * t, const BOOST_PFTO unsigned int file_version)
00196 {
00197
00198 const NodesOnlyMesh<DIM>* p_mesh = &(t->rGetMesh());
00199 ar & p_mesh;
00200 }
00201
00206 template<class Archive, unsigned DIM>
00207 inline void load_construct_data(
00208 Archive & ar, NodeBasedCellPopulationWithParticles<DIM> * t, const unsigned int file_version)
00209 {
00210
00211 NodesOnlyMesh<DIM>* p_mesh;
00212 ar >> p_mesh;
00213
00214
00215 ::new(t)NodeBasedCellPopulationWithParticles<DIM>(*p_mesh);
00216 }
00217 }
00218 }
00219
00220 #endif