36#include "AbstractOffLatticeCellPopulation.hpp"
37#include "StepSizeException.hpp"
39template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
41 std::vector<CellPtr>& rCells,
42 const std::vector<unsigned> locationIndices)
44 mDampingConstantNormal(1.0),
45 mDampingConstantMutant(1.0),
46 mAbsoluteMovementThreshold(2.0)
50template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
56template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
59 double length = norm_2(rDisplacement);
61 if (length > this->mAbsoluteMovementThreshold)
63 std::ostringstream message;
64 message <<
"Cells are moving by " << length;
65 message <<
", which is more than the AbsoluteMovementThreshold: use a smaller timestep to avoid this exception.";
72 while (length / divisor >= this->mAbsoluteMovementThreshold)
76 double new_step = dt / divisor;
83template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
91template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
94 assert(dampingConstantNormal > 0.0);
95 mDampingConstantNormal = dampingConstantNormal;
98template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
101 assert(dampingConstantMutant > 0.0);
102 mDampingConstantMutant = dampingConstantMutant;
105template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
108 mAbsoluteMovementThreshold = absoluteMovementThreshold;
111template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
114 return mDampingConstantNormal;
117template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
120 return mDampingConstantMutant;
123template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
126 return mAbsoluteMovementThreshold;
129template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
135template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
141template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
144 *rParamsFile <<
"\t\t<DampingConstantNormal>" << mDampingConstantNormal <<
"</DampingConstantNormal>\n";
145 *rParamsFile <<
"\t\t<DampingConstantMutant>" << mDampingConstantMutant <<
"</DampingConstantMutant>\n";
virtual void OutputCellPopulationParameters(out_stream &rParamsFile)=0
void SetDampingConstantMutant(double dampingConstantMutant)
virtual void CheckForStepSizeException(unsigned nodeIndex, c_vector< double, SPACE_DIM > &rDisplacement, double dt)
AbstractOffLatticeCellPopulation(AbstractMesh< ELEMENT_DIM, SPACE_DIM > &rMesh)
virtual std::vector< std::pair< Node< SPACE_DIM > *, Node< SPACE_DIM > * > > & rGetModifiableNodePairs()
double GetDampingConstantMutant()
double GetDampingConstantNormal()
double GetAbsoluteMovementThreshold()
virtual void OutputCellPopulationParameters(out_stream &rParamsFile)
virtual void UpdateNodeLocations(double dt)
void SetAbsoluteMovementThreshold(double absoluteMovementThreshold)
void SetDampingConstantNormal(double dampingConstantNormal)
virtual const std::vector< std::pair< Node< SPACE_DIM > *, Node< SPACE_DIM > * > > & rGetNodePairs() const