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 #ifndef CRYPTSIMULATION2D_HPP_
00029 #define CRYPTSIMULATION2D_HPP_
00030
00031 #include "ChasteSerialization.hpp"
00032 #include <boost/serialization/base_object.hpp>
00033
00034 #include "CellBasedSimulation.hpp"
00035 #include "SimpleDataWriter.hpp"
00036 #include "MeshBasedCellPopulationWithGhostNodes.hpp"
00037
00042 class CryptSimulation2d : public CellBasedSimulation<2>
00043 {
00044
00045
00046 friend class TestCryptSimulation2d;
00047
00048 protected:
00049
00051 friend class boost::serialization::access;
00058 template<class Archive>
00059 void serialize(Archive & archive, const unsigned int version)
00060 {
00061
00062
00063 archive & boost::serialization::base_object<CellBasedSimulation<2> >(*this);
00064 archive & mUseJiggledBottomCells;
00065 archive & mWriteBetaCatenin;
00066 }
00067
00069 bool mUseJiggledBottomCells;
00070
00077 bool mWriteBetaCatenin;
00078
00080 out_stream mVizBetaCateninResultsFile;
00081
00083 MeshBasedCellPopulationWithGhostNodes<2>* mpStaticCastCellPopulation;
00084
00095 c_vector<double, 2> CalculateCellDivisionVector(CellPtr pParentCell);
00096
00102 void WriteVisualizerSetupFile();
00103
00107 void SetupWriteBetaCatenin();
00108
00114 virtual void WriteBetaCatenin(double time);
00115
00121 void SetupSolve();
00122
00128 void PostSolve();
00129
00136 void AfterSolve();
00137
00138 public:
00139
00147 CryptSimulation2d(AbstractCellPopulation<2>& rCellPopulation,
00148 bool deleteCellPopulationAndForceCollection=false,
00149 bool initialiseCells=true);
00150
00152 void UseJiggledBottomCells();
00153
00163 void ApplyCellPopulationBoundaryConditions(const std::vector<c_vector<double,2> >& rOldLocations);
00164
00169 void SetBottomCellAncestors();
00170
00179 void OutputSimulationParameters(out_stream& rParamsFile);
00180 };
00181
00182
00183 #include "SerializationExportWrapper.hpp"
00184
00185 CHASTE_CLASS_EXPORT(CryptSimulation2d)
00186
00187 namespace boost
00188 {
00189 namespace serialization
00190 {
00194 template<class Archive>
00195 inline void save_construct_data(
00196 Archive & ar, const CryptSimulation2d * t, const BOOST_PFTO unsigned int file_version)
00197 {
00198
00199 const AbstractCellPopulation<2>* p_cell_population = &(t->rGetCellPopulation());
00200 ar & p_cell_population;
00201 }
00202
00206 template<class Archive>
00207 inline void load_construct_data(
00208 Archive & ar, CryptSimulation2d * t, const unsigned int file_version)
00209 {
00210
00211 AbstractCellPopulation<2>* p_cell_population;
00212 ar & p_cell_population;
00213
00214
00215 ::new(t)CryptSimulation2d(*p_cell_population, true, false);
00216 }
00217 }
00218 }
00219
00220 #endif
00221