/*
*
* This file is part of the Virtual Leaf.
*
* The Virtual Leaf is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Virtual Leaf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the Virtual Leaf. If not, see .
*
* Copyright 2010 Roeland Merks.
*
*/
#include
#include
#include
#include "simplugin.h"
#include "parameter.h"
#include "wallbase.h"
#include "cellbase.h"
#include "mydiffusionmodel.h"
QString Mydiffusionmodel::ModelID(void) {
// specify the name of your model here
return QString( "Diffusion in a growing domain" );
}
// return the number of chemicals your model uses
int Mydiffusionmodel::NChem(void) { return 4; }
// To be executed after cell division
void Mydiffusionmodel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
// rules to be executed after cell division go here
// (e.g., cell differentiation rules)
}
void Mydiffusionmodel::SetCellColor(CellBase *c, QColor *color) {
// add cell coloring rules here
double red=c->Chemical(1)/(1.+c->Chemical(1));
double green=c->Chemical(0)/(1.+c->Chemical(0));
double blue=c->Chemical(3)/(1.+c->Chemical(3));
color->setRgbF(red,green,blue);
}
void Mydiffusionmodel::CellHouseKeeping(CellBase *c) {
// add cell behavioral rules here
c->EnlargeTargetArea(par->cell_expansion_rate);
if(c->Area() > 2*c->BaseArea()){
c->Divide();
}
}
void Mydiffusionmodel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
// add biochemical transport rules here
// Passive fluxes (Fick's law)
for (int c=0;cC1()->BoundaryPolP() || w->C2()->BoundaryPolP()) return;
double phi = w->Length() * ( par->D[c] ) * ( w->C2()->Chemical(c) - w->C1()->Chemical(c) );
dchem_c1[c] += phi;
dchem_c2[c] -= phi;
}
}
void Mydiffusionmodel::WallDynamics(Wall *w, double *dw1, double *dw2) {
// add biochemical networks for reactions occuring at walls here
}
void Mydiffusionmodel::CellDynamics(CellBase *c, double *dchem) {
// add biochemical networks for intracellular reactions here
double Y = c->Chemical(0),
A = c->Chemical(1),
H = c->Chemical(2),
S = c->Chemical(3);
dchem[0] = ( par->d * A - par->e * Y + Y*Y/(1 + par->f * Y*Y ) );
dchem[1] = ( par->c * A*A*S/H - par->mu * A + par->rho0*Y );
dchem[2] = ( par->c * A*A*S - par->nu*H + par->rho1*Y );
dchem[3] = ( par->c0 - par->gamma*S - par->eps * Y * S );
}
Q_EXPORT_PLUGIN2(mydiffusionmodel, Mydiffusionmodel)
// finis