29 namespace CellHousekeep {
42 auto& p = m_cd.m_parameters;
44 m_auxin_dependent_growth = p->get<
bool>(
"cell_mechanics.auxin_dependent_growth");
45 m_cell_base_area = p->get<
double>(
"cell_mechanics.base_area");
46 m_cell_expansion_rate = p->get<
double>(
"cell_mechanics.cell_expansion_rate");
47 m_division_ratio = p->get<
double>(
"cell_mechanics.division_ratio");
48 m_elastic_modulus = p->get<
double>(
"cell_mechanics.elastic_modulus");
49 m_response_time = p->get<
double>(
"cell_mechanics.response_time");
50 m_time_step = p->get<
double>(
"model.time_step");
51 m_viscosity_const = p->get<
double>(
"cell_mechanics.viscosity_const");
53 m_area_incr = m_cell_expansion_rate * m_time_step;
54 m_div_area = m_division_ratio * m_cell_base_area;
59 const string ham_select = m_cd.m_parameters->get<
string>(
"model.mc_hamiltonian");
61 const double chem = cell->GetChemical(0);
62 const double t_area = cell->GetTargetArea();
63 const double t_length = cell->GetTargetLength();
65 if (cell->GetBoundaryType() == BoundaryType::None) {
66 if (cell->
GetArea() > m_div_area) {
67 cell->SetChemical(0, 0);
71 const double incr = m_auxin_dependent_growth ? (chem / (1. + chem)) * m_area_incr : m_area_incr;
72 const double update_t_area = t_area + incr;
73 const double update_t_length = t_length * sqrt(update_t_area / t_area);
75 cell->SetTargetArea(update_t_area);
76 cell->SetTargetLength(update_t_length);
79 if (ham_select ==
"ElasticWall") {
82 for (list<Wall*>::iterator i = cell->
GetWalls().begin(); i != cell->
GetWalls().end(); ++i) {
84 if (w->
GetLength() > 1.50 * w->GetRestLength()) {
91 if (ham_select ==
"Maxwell") {
93 const double solute = m_viscosity_const * sqrt(cell->
GetArea());
94 const double update_solute = solute - (solute - cell->GetSolute()) * exp(-0.1 * m_time_step/m_response_time);
95 cell->SetSolute(update_solute);
97 for (list<Wall*>::iterator i = cell->
GetWalls().begin(); i != cell->
GetWalls().end(); i++) {
100 const double update_rest_length = w->
GetLength()
102 * exp(-0.01 * m_elastic_modulus * m_time_step / m_viscosity_const);
103 w->SetRestLength(update_rest_length);
Core data with mesh, parameters, random engine and time data.
A cell contains walls and nodes.
const std::list< Wall * > & GetWalls() const
Access the cell's walls.
Namespace for components of the Default model group.
AuxinGrowth()
Default initialization.
void Initialize(const CoreData &cd)
Initialize or re-initialize.
BoundaryType enumeration class.
void operator()(Cell *cell)
Execute.
double GetLength() const
Returns (and calculates, if length marked as dirty) the length along all nodes.
CellHousekeep::AuxinGrowth header file.
double GetArea() const
Return the area of the cell.
A cell wall, runs between cell corner points and consists of wall elements.