28 namespace CellHousekeep {
41 auto& p = m_cd.m_parameters;
43 m_cell_base_area = p->get<
double>(
"cell_mechanics.base_area");
44 m_cell_expansion_rate = p->get<
double>(
"cell_mechanics.cell_expansion_rate");
45 m_constituous_expansion_limit = p->get<
unsigned int>(
"meinhardt.constituous_expansion_limit");
46 m_division_ratio = p->get<
double>(
"cell_mechanics.division_ratio");
47 m_elastic_modulus = p->get<
double>(
"cell_mechanics.elastic_modulus");
48 m_response_time = p->get<
double>(
"cell_mechanics.response_time");
49 m_time_step = p->get<
double>(
"model.time_step");
50 m_vessel_expansion_rate = p->get<
double>(
"meinhardt.vessel_expansion_rate");
51 m_vessel_inh_level = p->get<
double>(
"meinhardt.vessel_inh_level");
52 m_viscosity_const = p->get<
double>(
"cell_mechanics.viscosity_const");
54 m_area_incr = m_cell_expansion_rate * m_time_step;
55 m_div_area = m_division_ratio * m_cell_base_area;
60 const string ham_select = m_cd.m_parameters->get<
string>(
"model.mc_hamiltonian");
62 const double chem_0 = cell->GetChemical(0);
63 const double chem_3 = cell->GetChemical(3);
64 const double level = m_vessel_inh_level;
65 const unsigned int limit = m_constituous_expansion_limit;
66 const double t_area = cell->GetTargetArea();
67 const double t_length = cell->GetTargetLength();
68 const unsigned int cell_count = m_cd.m_mesh->GetCells().size();
71 double update_t_area = 0.0;
72 if (!limit || cell_count < limit) {
73 update_t_area = t_area + m_area_incr;
76 const double incr = max((1.0 - level * chem_3) * m_area_incr, 0.0);
77 update_t_area = t_area + incr;
79 update_t_area = t_area + m_vessel_expansion_rate;
82 const double update_t_length = t_length * sqrt(update_t_area / t_area);
84 cell->SetTargetArea(update_t_area);
85 cell->SetTargetLength(update_t_length);
87 if (ham_select ==
"ElasticWall") {
90 for (list<Wall*>::iterator i = cell->
GetWalls().begin(); i != cell->
GetWalls().end(); ++i) {
92 if (w->
GetLength() > 1.50 * w->GetRestLength()) {
99 if (ham_select ==
"Maxwell") {
101 const double solute = m_viscosity_const * sqrt(cell->
GetArea());
102 const double update_solute = solute - (solute - cell->GetSolute()) * exp(-0.1 * m_time_step/m_response_time);
103 cell->SetSolute(update_solute);
105 for (list<Wall*>::iterator i = cell->
GetWalls().begin(); i != cell->
GetWalls().end(); ++i) {
108 const double update_rest_length = w->
GetLength()
110 * exp(-0.01 * m_elastic_modulus * m_time_step / m_viscosity_const);
111 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.
Meinhardt(const CoreData &cd)
Initializing constructor.
Namespace for components of the Default model group.
void Initialize(const CoreData &cd)
Initialize or re-initialize.
double GetLength() const
Returns (and calculates, if length marked as dirty) the length along all nodes.
CellHousekeep for Meinhardt model.
void operator()(Cell *cell)
Execute.
double GetArea() const
Return the area of the cell.
A cell wall, runs between cell corner points and consists of wall elements.