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 CRYPTPROJECTIONFORCE_HPP_
00029 #define CRYPTPROJECTIONFORCE_HPP_
00030
00031 #include "GeneralisedLinearSpringForce.hpp"
00032
00033 #include "ChasteSerialization.hpp"
00034 #include <boost/serialization/base_object.hpp>
00035
00039 class CryptProjectionForce : public GeneralisedLinearSpringForce<2>
00040 {
00041 friend class TestCryptProjectionForce;
00042
00043 private :
00044
00045 friend class boost::serialization::access;
00046 template<class Archive>
00047 void serialize(Archive & archive, const unsigned int version)
00048 {
00049
00050
00051 archive & boost::serialization::base_object<GeneralisedLinearSpringForce<2> >(*this);
00052 archive & mA;
00053 archive & mB;
00054 archive & mIncludeWntChemotaxis;
00055 archive & mWntChemotaxisStrength;
00056 }
00057
00062 double mA;
00063
00068 double mB;
00069
00073 bool mIncludeWntChemotaxis;
00074
00078 double mWntChemotaxisStrength;
00079
00083 std::map<unsigned, c_vector<double, 3> > mNode3dLocationMap;
00084
00090 void UpdateNode3dLocationMap(AbstractCellPopulation<2>& rCellPopulation);
00091
00103 c_vector<double,2> CalculateForceBetweenNodes(unsigned nodeAGlobalIndex, unsigned nodeBGlobalIndex, AbstractCellPopulation<2>& rCellPopulation);
00104
00105 public :
00106
00110 CryptProjectionForce();
00111
00115 ~CryptProjectionForce();
00116
00120 double GetA() const;
00121
00125 double GetB() const;
00126
00130 double GetWntChemotaxisStrength();
00131
00137 void SetWntChemotaxisStrength(double wntChemotaxisStrength);
00138
00144 void SetWntChemotaxis(bool includeWntChemotaxis);
00145
00156 double CalculateCryptSurfaceHeightAtPoint(const c_vector<double,2>& rNodeLocation);
00157
00166 double CalculateCryptSurfaceDerivativeAtPoint(const c_vector<double,2>& rNodeLocation);
00167
00174 void AddForceContribution(std::vector<c_vector<double,2> >& rForces,
00175 AbstractCellPopulation<2>& rCellPopulation);
00176
00185 void OutputForceParameters(out_stream& rParamsFile);
00186 };
00187
00188
00189 #include "SerializationExportWrapper.hpp"
00190 CHASTE_CLASS_EXPORT(CryptProjectionForce)
00191
00192 #endif