/* * Guyton Model: Capillary Dynamics * * Model Status * * This CellML model has been validated. Due to the differences * between procedural code (in this case C-code) and declarative * languages (CellML), some aspects of the original model were * not able to be encapsulated by the CellML model (such as the * damping of variables). This may effect the transient behaviour * of the model, however the steady-state behaviour would remain * the same. The equations in this file and the steady-state output * from the model conform to the results from the MODSIM program. * * Model Structure * * Arthur Guyton (1919-2003) was an American physiologist who became * famous for his 1950s experiments in which he studied the physiology * of cardiac output and its relationship with the peripheral circulation. * The results of these experiments challenged the conventional * wisdom that it was the heart itself that controlled cardiac * output. Instead Guyton demonstrated that it was the need of * the body tissues for oxygen which was the real regulator of * cardiac output. The "Guyton Curves" describe the relationship * between right atrial pressures and cardiac output, and they * form a foundation for understanding the physiology of circulation. * * The Guyton model of fluid, electrolyte, and circulatory regulation * is an extensive mathematical model of human circulatory physiology, * capable of simulating a variety of experimental conditions, * and contains a number of linked subsystems relating to circulation * and its neuroendocrine control. * * This is a CellML translation of the Guyton model of the regulation * of the circulatory system. The complete model consists of separate * modules each of which characterise a separate physiological * subsystems. The Circulation Dynamics is the primary system, * to which other modules/blocks are connected. The other modules * characterise the dynamics of the kidney, electrolytes and cell * water, thirst and drinking, hormone regulation, autonomic regulation, * cardiovascular system etc, and these feedback on the central * circulation model. The CellML code in these modules is based * on the C code from the programme C-MODSIM created by Dr Jean-Pierre * Montani. * * This particular CellML model describes the the movement of fluid * and protein through the capillary membrane. It also calculates * the volumes of fluid in the free fluid space of the interstitium * and in the gel fluid space. It calculates the pressures in both * of these fluids as well as the so-called solid tissue pressure * caused by the compression of solid elements against other portions * of the interstitium. In addition, the quantities of proteins * and their concentrations in both the free fluid and the gel * fluid are calculated. And, finally, the flow of both fluid and * proteins in the lymph system are computed, as well as the overall * body protein balance. * * model diagram * * [[Image file: full_model.png]] * * A systems analysis diagram for the full Guyton model describing * circulation regulation. * * model diagram * * [[Image file: capillary_dynamics.png]] * * A schematic diagram of the components and processes described * in the current CellML model. * * There are several publications referring to the Guyton model. * One of these papers is cited below: * * Circulation: Overall Regulation, A.C. Guyton, T.G. Coleman, * and H.J. Granger, 1972, Annual Review of Physiology , 34, 13-44. * PubMed ID: 4334846 */ import nsrunit; // Warning: unit conversion turned off due to unit errors in 2 equation(s) unit conversion off; unit minute=60 second^1; unit per_minute=.01666667 second^(-1); //Warning: unit mmHg_ renamed from mmHg, as the latter is predefined in JSim with different fundamental units. unit mmHg_=133.322 kilogram^1*meter^(-1)*second^(-2); unit per_mmHg=.00750064 kilogram^(-1)*meter^1*second^2; unit mmHg_L=.133322 kilogram^1*meter^2*second^(-2); unit per_mmHg2=5.6259564E-5 kilogram^(-2)*meter^2*second^4; unit mmHg3=2.369766E6 kilogram^3*meter^(-3)*second^(-6); unit monovalent_mEq=.001 mole^1; unit monovalent_mEq_per_minute=1.6666667E-5 second^(-1)*mole^1; unit monovalent_mEq_per_litre=1 meter^(-3)*mole^1; unit monovalent_mEq_per_litre_per_minute=.01666667 meter^(-3)*second^(-1)*mole^1; unit litre2_per_monovalent_mEq_per_minute=1.6666667E-5 meter^6*second^(-1)*mole^(-1); unit L_per_minute=1.6666667E-5 meter^3*second^(-1); unit mL=1E-6 meter^3; unit gram_per_L=1 kilogram^1*meter^(-3); unit L_mmHg_per_gram=133.322 meter^2*second^(-2); unit L2_mmHg_per_gram2=133.322 kilogram^(-1)*meter^5*second^(-2); unit mmHg_minute_per_L=7999320 kilogram^1*meter^(-4)*second^(-1); unit gram_per_minute=1.6666667E-5 kilogram^1*second^(-1); unit mL_per_L=.001 dimensionless; unit mL_per_L_per_mmHg=7.5006376E-6 kilogram^(-1)*meter^1*second^2; unit mL_per_L_per_minute=1.6666667E-5 second^(-1); unit mL_per_minute_per_mmHg=1.2501063E-10 kilogram^(-1)*meter^4*second^1; unit L_mL_per_minute_per_mmHg=1.2501063E-13 kilogram^(-1)*meter^7*second^1; unit L_per_mL=1E3 dimensionless; unit mL_per_minute=1.6666667E-8 meter^3*second^(-1); unit L_per_minute_per_mmHg=1.2501063E-7 kilogram^(-1)*meter^4*second^1; unit mmHg_per_mL=1.33322E8 kilogram^1*meter^(-4)*second^(-2); math main { realDomain time minute; time.min=0; extern time.max; extern time.delta; real VEC litre; VEC=14.8548; real PPD gram_per_minute; PPD=4.4805e-06; real RVS mmHg_minute_per_L; RVS=2.77751; real DFP L_per_minute; DFP=-4.078e-07; real VPF litre; VPF=0.0123238; real BFN L_per_minute; BFN=2.79521; real PVS mmHg_; PVS=3.71612; real PC mmHg_; real PGH(time) mmHg_; real PTC(time) mmHg_; real PPC(time) mmHg_; real VTCPL L_per_minute; real VTC(time) L_per_minute; real CFC L_per_minute_per_mmHg; CFC=0.01167; real VTL(time) L_per_minute; real VP(time) litre; when(time=time.min) VP=3.00449; real TRPL L_per_minute; TRPL=0; real VPD(time) L_per_minute; real PRP(time) gram; when(time=time.min) PRP=216.243; real CPP(time) gram_per_L; real DLP(time) gram_per_minute; real CPR gram_per_L; CPR=40; real LPPR gram_per_minute; LPPR=0.03; real LPDE dimensionless; LPDE=8; real LPK L_per_minute; LPK=2.728e-14; real CPPD(time) gram_per_L; real PCR mmHg_; PCR=15; real CPK L_per_minute_per_mmHg; CPK=0.000253; // Var below replaced by constant in model eqns to satisfy unit correction // real PCE dimensionless; // PCE=1; real PRCD mmHg_; real CPI(time) gram_per_L; real DPC(time) gram_per_minute; real DPL(time) gram_per_minute; real DPP(time) gram_per_minute; real VTS(time) litre; real VTS1(time) litre; real TSSLML dimensionless; TSSLML=0.15; real TSSLTC per_minute; TSSLTC=0.005; real VTS2(time) litre; when(time=time.min) VTS2=0.0; real TSP(time) gram; when(time=time.min) TSP=279.945; real DPI(time) gram_per_minute; real PTCPR(time) mmHg_; real PTT(time) mmHg_; real CHY(time) gram_per_L; real HYL gram; HYL=60; real CMPTSS dimensionless; CMPTSS=2; real PGHF L_mmHg_per_gram; PGHF=-2; real POSHYL(time) mmHg_; real GCOPF per_mmHg; GCOPF=0.8092; real VTSF litre; VTSF=6; real PIF(time) mmHg_; real PTS(time) mmHg_; real PLDF mmHg_; PLDF=4.2; real PLD1(time) mmHg_; real PLD(time) mmHg_; real VG(time) litre; real VIF(time) litre; // // // // PC=(RVS*1.7*BFN+PVS); // VTC=((PC-PPC-PGH+PTC)*CFC+VTCPL); // // VPD=(VTL-VTC-DFP+TRPL); VP:time=VPD; // CPP=(PRP/VP); // CPPD=(if ((CPP-CPR)<(0 gram_per_L)) (0 gram_per_L) else CPP-CPR); DLP=(LPPR-CPPD^LPDE*LPK); // PRCD=(if ((PC-PCR)<(0 mmHg_)) (0 mmHg_) else PC-PCR); VTCPL=((PRCD*CPK)^1); // DPC=(VTCPL*CPP+(CPP-CPI)*(.00104 L_per_minute)); // DPP=(DLP+DPL-DPC-PPD+TRPL*(72 gram_per_L)); PRP:time=DPP; // PPC=((.28 L_mmHg_per_gram)*CPP+(.0019 L2_mmHg_per_gram2)*CPP^2); // // VTS=(VEC-VP-VPF); // VTS2:time=(((VTS-(12 litre))*TSSLML-VTS2)*TSSLTC); VTS1=(VTS-VTS2); // DPI=(DPC-DPL); TSP:time=DPI; // CPI=(TSP/VTS); // PTCPR=((.28 L_mmHg_per_gram)*CPI+(.0019 L2_mmHg_per_gram2)*CPI^2); // DPL=(CPI*VTL); // // CHY=((HYL/VTS/5)^CMPTSS); PGH=(CHY*PGHF+PTT); // POSHYL=(CHY*(2 L_mmHg_per_gram)); PTC=(POSHYL*PTCPR*GCOPF); // PTT=(((VTS1-VTSF)/VTSF)^2*(1 mmHg_)); // PIF=(PGH-POSHYL); // PTS=(PTT-PIF); // PLD1=(PIF+PLDF-PTT); PLD=(if (PLD1>(7 mmHg_)) (7 mmHg_) else PLD1); VTL=(if (PLD<(0 mmHg_)) (0 L_per_minute) else PLD*(.02 L_per_minute_per_mmHg)); // VG=(if (VTS<=(0 litre)) (0 litre) else if ((VTS>(0 litre)) and (VTS<=(12 litre))) (0 litre)+(11.4-0)*(VTS-(0 litre))/(12-0) else if ((VTS>(12 litre)) and (VTS<=(15 litre))) (11.4 litre)+(14-11.4)*(VTS-(12 litre))/(15-12) else if ((VTS>(15 litre)) and (VTS<=(18 litre))) (14 litre)+(16-14)*(VTS-(15 litre))/(18-15) else if ((VTS>(18 litre)) and (VTS<=(21 litre))) (16 litre)+(17.3-16)*(VTS-(18 litre))/(21-18) else if ((VTS>(21 litre)) and (VTS<=(24 litre))) (17.3 litre)+(18-17.3)*(VTS-(21 litre))/(24-21) else (18 litre)); // VIF=(VTS-VG); // }