/* * Guyton Model: Autonomics * * Model Status * * This CellML model has not been validated. The equations in this * file may contain errors and the output from the model may not * conform to the results from the MODSIM program. 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). Work is underway to fix these omissions * and validate the CellML model. We also anticipate that many * of these problems will be fixed when the CellML 1.0 models are * combined in a CellML 1.1 format. * * 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 autonomic control * of the circulation, which primarily operates through the sympathetic * system, though also to a slight extent through parasympathetic * signals to the heart. These have been lumped together, and there * are basically three separate feedback mechanisms in this computational * block. These are: (1) feedback from the baroreceptor control * system; (2) feedback from the peripheral chemoreceptors in the * carotid and aortic bodies,; and (3) feedback control of the * circulatory system caused by central nervous system ischemia, * that is, ischemia of the vasomotor center of the brainstem. * Several other inputs that affect the autonomic nervous system * are also included. These are: activation of the autonomic nervous * system during exercise; baroreceptor feedback effects from pulmonary * artery pressure (PPA), left atrial pressure (PLA), and an effect * of low blood PO2 (PO2ART). * * model diagram * * [[Image file: full_model.png]] * * A systems analysis diagram for the full Guyton model describing * circulation regulation. * * model diagram * * [[Image file: autonomics.png]] * * A schematic diagram of the components and processes described * in the current CellML model. Note: Not shown in the diagram * is also a variable (STA) that is normally zero. When it is set * to any level above zero, the value of the general autonomic * multiplier (AU) becomes fixed to the value of STA. * * 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; unit conversion on; 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 PA mmHg_; PA=103.525; real PO2ART mmHg_; PO2ART=97.0439; real PLA mmHg_; PLA=2; real PRA mmHg_; PRA=0.00852183; real PPA mmHg_; PPA=15.6376; real PA1 mmHg_; real CRRFLX mmHg_; CRRFLX=0; real EXE mmHg_; EXE=0; real AUC dimensionless; real AUC1 dimensionless; AUC1=0.3; real AUC3 dimensionless; real O2CHMO per_mmHg; O2CHMO=0.01; real AUC2 dimensionless; real AU6C(time) dimensionless; real AUX dimensionless; AUX=1; real AUK per_minute; AUK=0.004; real BAROTC minute; BAROTC=0.16; real AUB dimensionless; real A1B dimensionless; real AU6A dimensionless; real AU4 dimensionless; AU4=-0.060024; real AU6(time) dimensionless; when(time=time.min) AU6=1.00132; real AUN dimensionless; real AUN1 dimensionless; AUN1=0.5; real AULP dimensionless; real AULPM dimensionless; AULPM=0; real AUEX dimensionless; real EXC dimensionless; EXC=1; real EXCXP dimensionless; EXCXP=1.0; real AUTTL(time) dimensionless; real AUTTL1(time) dimensionless; real EXCML dimensionless; EXCML=0.01; real AU(time) dimensionless; real AUDMP minute; AUDMP=0.3; real AUMAX dimensionless; AUMAX=5.0; real AUMIN dimensionless; AUMIN=0.4; real AUSLP dimensionless; AUSLP=1.5; real DAU(time) per_minute; real AU1(time) dimensionless; when(time=time.min) AU1=1.00007; real AUT(time) dimensionless; real VVR(time) litre; real AUH(time) dimensionless; real AUR(time) dimensionless; real AOM(time) dimensionless; real AUM(time) dimensionless; real AVE(time) dimensionless; real VV9 litre; VV9=2.51; real AUL litre; AUL=1.5; real AUV dimensionless; AUV=0.55; real AUS dimensionless; AUS=1; real O2A dimensionless; O2A=0.1; real AUM1 dimensionless; AUM1=3; real AUM2 dimensionless; AUM2=1; real AUY dimensionless; AUY=0; real AUO(time) dimensionless; real MDMP dimensionless; MDMP=0; // // // PA1=(if (CRRFLX>(1E-7 mmHg_)) CRRFLX else PA-EXE); // AUC=(if ((PA1<(80 mmHg_)) and (PA1>=(40 mmHg_))) (.005 per_mmHg)*((80 mmHg_)-PA1)*AUC1 else if (PA1<(40 mmHg_)) .2*AUC1 else 0); // AUC2=(if ((PO2ART<(80 mmHg_)) and (PO2ART>=(40 mmHg_))) O2CHMO*((80 mmHg_)-PO2ART) else if (PO2ART<(40 mmHg_)) O2CHMO*(40 mmHg_) else 0); AUC3=(AUC+AUC2); // AUB=(if ((PA1<(160 mmHg_)) and (PA1>=(80 mmHg_))) (.016667 per_mmHg)*((160 mmHg_)-PA1) else if (PA1<(80 mmHg_)) 1.3336 else 0); A1B=((AUB-1)*AUX+1); AU6A=(A1B-AU4); AU6:time=((AU6A-AU6)/BAROTC); AU6C=AU6; // AUN=(if (PA1<(40 mmHg_)) (.04 per_mmHg)*((40 mmHg_)-PA1)*AUN1 else 0); // AULP=(((15 mmHg_)/(PLA+PRA+PPA)-1)*AULPM+1); // AUEX=(EXC^EXCXP); // AUTTL1=((AUEX*AULP*(AUC3+AU6C+AUN)-1)*EXCML+1); AUTTL=(if (AUTTL1<0) 0 else AUTTL1); // DAU=((AUTTL-AU1)/AUDMP); AU1:time=DAU; AUT=(AUMAX-(AUMAX-1)/exp(AUSLP*(AU1-1))); AU=(if (AUT VVR=(VV9-AU*AUL+AUL); AUO=(AU-1); AUH=(AUO*AUV+1); AUR=(AUO*AUS+1); AOM=(AUO*O2A+1); AUM=((AUO*AUM1+1)^AUM2); AVE=(AUO*AUY+1); // }