Oxygen Delivery to Fetus
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
NB: This is a System Dynamics Model. In order to run it you should download and run it on your PC. If it does not work contact: viapascurta@yahoo.com
This is a hybrid model that focuses on hemodynamics and oxygen delivery parameters (e.g. stroke volume SV, cardiac output CO and oxygen delivery DO2) in mother and fetus.
The model is trying to explain and visualize the influence of a number of factors (i.e. preload, afterload, myocardial contractility, heart rate, hemoglobin level, placenta-dependent parameters, etc.) on oxygen delivery to the fetus (f_DO2).
The effect of varying different model parameters can be observed on the resulting f_DO2 in normal and pathological conditions.
This model can serve as a prototype of an application for monitoring oxygen delivery to the fetus in a clinical setting.
HOW IT WORKS
This is a hybrid model consisting of: (a) 'plain part' (turtles and patches approach) for visualizing the blood flow at the placenta level and (b) minimal lumped parameter System Dynamics (SD) model that includes three submodels: maternal and fetal cardio-vascular systems interconnected by placental circulation.
The SD submodels representing maternal and fetal circulation consist of three compartments each: two passive one for arterial and venous parts of the circulation and an active compartment for the left ventricle.
The model dynamics is governed by ordinary differential equations (ODE) which describe the dynamics and relation between three stocks (Left Ventricle Volume, Arterial Segment and Venous Segments Volumes) and respective flows.
The pulsatile nature of the flow is conditioned by a driver function, which mimics the myocardial contractions and a Heaviside step function that simulates valvular mechanism based on the ‘open on pressure, close on flow' principle.
The ODE for the 'circulation part of the model are as follows:
For the Left Ventricle: dVLV/dt = (Pv - Plv) * k / Rmt - (Plv - Pao) * k / R_ao
For the Arterial Segment (aorta): dVAO/dt = (Plv - Pao) * k / Rao - (Pao - Pv) / R_sys
For the Venous Segment: dVV/dt = (Pao - Pv) / Rsys - (Pv - Plv) * k / R_mt
where, VLV (ml) - left ventricle volume, VAO (ml) - arterial segment (aorta) volume, VV (ml) - venous segment volume, Pv (mmHg) - pressure in the venous segment, Plv (mmHg) - pressure in the left ventricle, Pao (mmHg) - pressure in the aorta, Rmt (mmHgsml^-1) - mitral valve resistance, Rao (mmHgsml^-1 ) - aortic valve resistance R_sys (mmHgsml^-1 ) - systemic vascular resistance, k - a scalar used to account for some extracardiac regulatory influence.
The general concept of this model uses the analogous metrics between the electrical domain and fluid dynamics, based on the Ohm's Law (I = U / R), where, I (Current A) is equivalent to flow rate (mls^−1); U (Voltage V) is equivalent to fluid pressure (mmHg) and R (Resistance Ohm) is equivalent to resistance of different segments of the circulation (mmHgsml^−1), Q (Charge C) - Volume, V (ml) and C (Capacitance F) - Compliance, C (mlmmHg^−1). Elastance is the reciprocal of Compliance (1 / C).
Blood flow = P2 - P1 / R, where P1,2 are pressures in vicinity segments and R represents resistance to the flow at the respective segments junction
Pressures is calculated as the product of elastance (E mmHg*ml^−1) and volume (V ml): Arterial (Aortic) pressure = Eao * VAO, where Eao is aortic elastance Venous pressure = Ev * VV, where Ev is venous elastance
Left ventricle pressure is calculated as follows:
Plv = tve * Eeslv * (Vlv - Vdlv) + (1 - tve) * P0lv * (exp(Lambdalv * (Vlv - V0_lv)) - 1)
where, tve (dimensionless) - is the left ventricle time varying elastance, Eeslv (mmHg*ml^−1) - left ventricle end-systolic elastance, Vlv (ml) - left ventricle volume, Vdlv (ml) - unstressed left ventricle volume, P0lv (mmHg) - zero-volume left ventricle pressure, Lambdalv (ml^-1) - left ventricle lambda (the curvature of end-diastolic pressure-volume relationship (EDPVR) function/line), V0_lv (ml) - zero-pressure left ventricle volume.
The driver function concerning Time Varying Elastance (tve):
tve = e ^ (-80 * ( time - 0.27 ) ^ 2), where 'time' is the period of time of a cardiac cycle
Stroke volume (ml/beat):
SV = Ved - Ves, where Ved is the end-diastolic volume and Ves is the volume at the end of systole
Ejection fraction (%):
EF = Ved - Ves / V_ed * 1.1 * 100, where "1.1" is a scalar used for consistency of physiological values for EF
Cardiac output (l/min):
CO = SV * Heart-rate / 1000, where division to 1000 is for conversion of milliliters to liters
The submodel simulating placenta is also based on ODEs representing a two compartment Michaelis-Menten transporter with flow, where PS (exchange rate of oxygen between compartments) and volumes of fetal and maternal parts can be varied by the respective sliders.
Oxygen delivery (DO2) is governed by the following equation:
DO2 = Flow * 1.34 * Hb * Sa_O2
also applied in an 'ODE' format, where Hb denotes the hemoglobin level and Sa_O2 - the O2 staurtaion.
By changing different parameters (i.e. heart rate, volume status, vascular resistance, myocardial contractility, vascular elastance, hemoglobin level, O2 saturation, O2 exchange rate, etc.) one can observe the effect on stroke volume (SV), mother ejection fraction (EF), cardiac output (CO), oxygen delivery (DO2), including the amount of oxygen delivered to fetus (fDO2). With every set of parameters respective pressures and volumes are plotted and a resulting fDO2 diagram is generated. This can help understanding the f_DO2 principles physiology influenced by separate factors or their combination.
With every tick calculations of variables concerning stocks and flows are performed and values for volumes and pressures are shown on the plots. SV, CO, mother EF and DO2 (in mother and fetus) are reported by respective monitors.
HOW TO USE IT
(1) Scenario chooser: select a scenario out of six options: "Normal/Test", "Maternal anemia", "Abruptio placentae", "Uterine contractions", and “Complex pathology, Anesthesia". Choosing the first option makes it is possible to change model parameters. This is recommended to be done before a new run. The scenario should be chosen before pressing “Setup” and “Go” buttons.
(2) Setup: creates basic conditions for the model to run (i.e. erases data from previous runs, set parameter values typical for the chosen scenario, etc.).
(3) Go: starts running the model with generation of new variables values as a result of calculations, performed every time-step.
(4) Reset Test: pressing this button will set all the parameters as for the "Normal/Test" scenario not changing the selected scenario.
(5) and (6) Plots - represent a number of model variables over time in mother (upper plot) and fetus (lower plot): left ventricle volume (VLV), left ventricle pressure (Plv), pressure in the aorta (P_ao) and “100 or 65 ml/mmHg - as lines for orientation.
(7), (8), (9), (10) and (11) are monitors which report respective model variables: SV_LV ml/beat - left ventricle stroke volume, CO l/minute - cardiac output, EF % - ejection fraction, DO2 ml/minute - oxygen delivery in mother and DO2-Placenta - ml/minute - oxygen delivery to placenta.
(12) through (18) are choosers and sliders which allow to change some parameters of the 'maternal' segment of the model (e.g. preload/volemic status, afterload/vascular resistance, myocardial contractility, vascular elastance, heart rate, hemoglobin level and arterial O2 saturation).
(19) The window in the middle presents the blood flow at the basal membrane dividing maternal and fetal parts of placenta. Red blood cells are represented by red circles. Sky and dark blue circles represent O2 and CO2 molecules.
(20), (21) and (22) are monitors which report the fetal submodel variables similar to monitors (7-11).
(23) Plot - represent the fetal oxygen delivery (DO2). The horizontal red line denotes a hypothetical 'hypoxia limit' at 80 ml/minute.
(24) through (29) are sliders which allow to change some parameters of the placenta or fetal segments of the model (PS - O2 exchange rate between maternal and fetal parts of placenta, the volumes of the respective parts, fetal heart rate, fetal hemoglobin level and fetal blood O2 saturation).
THINGS TO NOTICE
The "Normal/Test" scenario set the parameters to generate a physiological output. With this scenario it is possible to change model parameters (after "Setup" and before pressing "Go" button) and observe the effect on the outputs.
"Maternal anemia" scenario first sets the hemoglobin level first at 101 g/l and after 13000 ticks it is down to 90 g/l, simulating a more severe anemia. On 15000 tick a fetal anemia is added.
"Abruptio placentae" happens in two steps: at 12000 and 13500 ticks. The background in the central window becomes dark-red.This scenario stops at 17000 ticks.
"Uterine contractions" scenario mimics periodic uterine contractions with respective decrease in f_DO2.
"Complex pathology" scenario simulates heart failure and anemia (Hb level at 110 g/l) in mother. The influence of an uterine contraction in this setting can be observed starting with tick 15000. This scenario stops at 17000 ticks.
"Anesthesia" scenarios presents with a grey background color (on tick 11000), simulates a uterine contaction and stops on 15000 tick.
For reaching 'an equilibrium' the SD models require approximately 10000 ticks.
The SD part of the model is a lumped parameter model that is capable of representing important properties and dynamics of the cardiovascular system and oxygen delivery in a healthy state as well as a range of pathological conditions. The model is a compromise between physiological accuracy and computational expense.
Limitations:
-- The lumped parameter nature of the model gives rise to some limitations on the accuracy and detail of the physiological dynamics that the model can capture. The model does capture the major dynamics of the cardiovascular system that is important in managing and controlling cardiac dysfunction in a clinical setting. -- This model does not account for inter-ventricular interaction -- It does not include lung ventilation influence -- The valves are modelled based on an ‘open on pressure, close on flow’ formulation, and inherently do not allow flow in the reverse direction. Therefore dysfunctions such as mitral and aortic regurgitation, which are the insufficient valvular functions allowing back flow, cannot be captured without modification to the model. -- A big simplification is the representation of large sections of the circulation through discrete model chambers. These chambers appear, and are named, in the model as a single section, but physiologically and anatomically represent a much wider context. For example the aortic chamber represents the entire series of elastic arteries of the systemic circulation. Therefore, the associated model parameters are averages or averaged representations of this large section of the circulation. -- Another essential simplification is using for the fetus circulation the same simulation approach as in the mother. Nevertheless initial parameters are adjusted to generate relatively realistic values for hemodynamic variables, including fetal stroke volume and cardiac output. -- Inertial effects, are not included in the simulation. However, the effect of inertia can generally be regarded as insignificant, which is typically the case in many models. -- Some of the initial parameters for "Normal" scenario differ from physiological values. Their value along with some scalars used in the model are selected to produce a model output close to a ‘physiological’ one. -- The main parameters of the model, namely, elastance (E) and resistance (R) are assumed to be constant except for the ventricular elastances which vary in time. This assumption is a simplification of the real physiology. However, it does not introduce much error compared to measurement errors, and vastly reduces the complexity and computational cost for solving the model. Hence, the assumption of constant parameter values is common among lumped parameter models
THINGS TO TRY
Run the model with "Normal/Test" scenario. Then observe the influence of changing factors that influence the CO and DO2 (by bottom choosers and switches for preload, afterload, contractility, Hb level, etc.) one by one and in combination.
Try to simulate different pathological conditions by changing respective model parameters (e.g. Maternal Heart Failure by "Decreased Myocardial Contractility" and different degrees of Anemia by (by the respective slider) and observe the influence on fetal oxygen delivery f_DO2.
Which factors have the most deleterious effect on f_DO2?
Try to figure out the 'cumulative/summing' effect of small changes in a number of factors (e.g. hypovolemia, myocardial contractility, minor anemia) on f_DO2.
NETLOGO FEATURES
The model was built with NetLogo SDM and represent combination of SDM and 'main' NetLogo possibilities.
CREDITS AND REFERENCES
This model was developed by Victor Iapascurta, MD, PhD, Anesthesia and Intensive Care Department, N. Testemitanu University of Medicine and Pharmacy, Chisinau, Moldova and Departement of Software Engineering and Automation, Thechnical University of Moldova in the framework of a postdoctoral research program and is based on an earlier model presented at CEEA (Committee for European Education in Anaesthesiology) Courses held in Chisinau, Moldova in November, 2019. Correspondence e-mail: victor.iapascurta@usmf.md or victor.iapascurta@doctorat.utm.md
The model was created in NetLogo 6.2.0, Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
Comments and Questions
globals [ ;; setting the globals for the model functioning: F_count-down ;; timer for the foetal cardiac driving function count-down ;; timer for the maternal cardiac driving function F_tve ;; the foetal time varying elastance tve ;; the maternal time varying elastance F_list-p ;; the list for pressure values / foetus F_list-v ;; the list for volume values / foetus list-p ;; the list for pressure values / mother list-v ;; the list for volume values / mother HR-f ;; factor for 'balancing' heart rate and dt F_HR-f k ;; scalar accountable for some extracardiac influence ] breed [ m-erythrocytes m-erythrocyte ] breed [ f-erythrocytes f-erythrocyte ] breed [o-molecules o-molecule] breed [cd-molecules cd-molecule] patches-own ;; property of patches to form physiological space zones [ membrane ] to setup ca if (scenario = "Normal/Test") ;; setting parameters for "Normal/Test" scenario [ set E_v 0.0059 set E_ao 0.6913 set V0_lv 0 set Vd_lv 0 set P0_lv 0.1203 set V_AO 50 set V_LV 130 set V_V 1300 set R_mt 0.0158 set R_ao 0.018 set R_sys 1.0889 set E_es_lv 2.8798 set Lambda_lv 0.033 set Preload_Volume-Status "Normal" set Afterload_Vascular-Resistance-sys "Normal-VR" set Myocardial-Contractility "Normal-contractility" set Vascular-Elastance-sys "Normal" set Heart-Rate 90 set Hb_m-slider 120 set Sa_m_O2-slider 0.95 set PS 0.2 set Vol_PL_f-slider 0.14 set Vol_PL_m-slider 0.15 set F_E_v 0.04 set F_E_ao 4.351 set F_V0_lv 0 set F_Vd_lv 0 set F_P0_lv 0.1203 set F_V_AO 9 set F_V_LV 4 set F_V_V 225 set F_R_mt 0.096 set F_R_ao 0.138 set F_R_sys 2.89 set F_E_es_lv 2.8798 set F_Lambda_lv 0.033 set F_Heart-Rate 135 set Hb_f-slider 170 set Sa_f_O2-slider 0.51 ] set count-down 0 ;; initialising the timer and tve set tve 0 set F_count-down 0 set F_tve 0 system-dynamics-setup ;; setting lists for volume and pressure parameters/mother and fetus set list-p [] set list-v [] set F_list-p [] set F_list-v [] create-m-erythrocytes 15 ;; creating RBC with respective properties ask m-erythrocytes [ move-to one-of patches with [pxcor < 15 and pxcor > 2] set ycor random-ycor set color pink set size 18 set shape "erythrocyte" set heading 180 ] create-f-erythrocytes 15 ;; creating RBC with respective properties ask f-erythrocytes [ move-to one-of patches with [pxcor < 49 and pxcor > 35] set ycor random-ycor set color pink set size 18 set shape "erythrocyte" set heading 0 ] create-cd-molecules 50 ask cd-molecules [ set ycor random-ycor set xcor random-xcor set color blue set size 4 set shape "circle 2" set heading 270 ] create-o-molecules 150 ask o-molecules [ set ycor random-ycor set xcor random-xcor set color red set size 4 set shape "circle 2_w" set heading 90 ] ask patches [ setup-membrane ] ;; setting preliminary conditions for the setup of 'extravascular space' let maternal-side patches with [pxcor < 15 and pxcor > 2] ;; seting parameters values for different variants with "Test" scenarios if (scenario = "Test") and (Preload_Volume-Status = "Decreased-preload-25%") [set V_V 625 set V_lv 50] if (scenario = "Test") and (Preload_Volume-Status = "Decreased-preload-50%") [set V_V 250 set V_lv 35] if (scenario = "Test") and (Preload_Volume-Status = "Increased-preload") [set V_V 1375] if (scenario = "Test") and (Myocardial-Contractility = "Decreased-contractility") [set E_es_lv 1.4] if (scenario = "Test") and (Myocardial-Contractility = "Increased-contractility") [set E_es_lv 4.0] if (scenario = "Test") and (Afterload_Vascular-Resistance-sys = "Increased VR X 2.0") [set R_sys 2.2] if (scenario = "Test") and (Afterload_Vascular-Resistance-sys = "Increased VR X 1.5") [set R_sys 1.6] if (scenario = "Test") and (Afterload_Vascular-Resistance-sys = "Decreased VR x 1.5") [set R_sys 0.67] if (scenario = "Test") and (Vascular-Elastance-sys = "Increased-arterial El+50%") [set E_ao 1.05] if (scenario = "Test") and (Vascular-Elastance-sys = "Decreased-arterial El-50%") [set E_ao 0.35] if (scenario = "Test") and (Vascular-Elastance-sys = "Increased-venous El+50%") [set E_v 0.009] if (scenario = "Test") and (Vascular-Elastance-sys = "Decreased-venous El-25%") [set E_v 0.0045] set HR-f round (( 90 / Heart-rate) * 1000) ;; setting HR-f set F_HR-f round (( 60 / F_Heart-Rate) * 1000) set k (Heart-rate * 0.015) ;; setting the k-scalar if (scenario = "Maternal anemia") [ reset-test set Hb_m-slider 101 ] if (scenario = "Abruptio placentae") [ reset-test] if (scenario = "Uterine contractions") [ reset-test] if (scenario = "Complex pathology") [ reset-test set Hb_m-slider 110 set E_es_lv 1.4 set Myocardial-Contractility "Decreased-contractility" ] if (scenario = "Anesthesia") [ reset-test set E_es_lv 2.4 set E_v 0.005 ] reset-ticks end to setup-membrane ask patches with [pxcor = 25] [set pcolor gray] ask patches with [pxcor = 26] [set pcolor red] end to go set count-down count-down + 1 ;; starting the timer which governs the cardiac driving function if count-down = HR-f [reset-count-down] set F_count-down F_count-down + 1 ;; starting the timer which governs the cardiac driving function if F_count-down = F_HR-f [reset-F_count-down] if ticks <= 2 [ set list-p list (100) (101) set list-v list (102) (103) set F_list-p list (60) (61) set F_list-v list (23) (24) ] activate ;; activating the cardiac driving function F_activate system-dynamics-go system-dynamics-do-plot create-list-v create-list-p ;; setting lists for volume and pressure values create-F_list-v ;; in mother and fetus create-F_list-p ask m-erythrocytes [ fd 0.05] ask f-erythrocytes [ fd 0.05] ask o-molecules [ fd 0.1] ask cd-molecules [fd 0.1] if (Scenario = "Maternal anemia") and ticks >= 13000 and ticks < 15000 ;; simulating a more sever maternal anemia while "Maternal anemia" scenario is running [set Hb_m-slider 90 ] if (Scenario = "Maternal anemia") and ticks >= 15000 ;; adding to the maternal anemia a fetal anemia [set Hb_f-slider 150 ] if (Scenario = "Abruptio placentae") and ticks >= 12000 and ticks < 13500 ;; simulating first step of abruptio placentae [ set Hb_m-slider 110 set Vol_Pl_m-slider 0.2 set Vol_Pl_f-slider 0.2 set F_Heart-rate 145 ask patches [set pcolor 12] ] if (Scenario = "Abruptio placentae") and ticks >= 13500 ;; simulating second step of abruptio placentae [ set Hb_m-slider 100 set Vol_Pl_m-slider 0.5 set Vol_Pl_f-slider 0.5 set PS 2 set E_v 0.0061 set E_ao 0.5 set F_Heart-rate 120 ask o-molecules [die] ] if (Scenario = "Abruptio placentae") and ticks >= 17000 [stop] if (scenario = "Uterine contractions") and ticks >= 12000 and ticks < 13000 ;; simulating periodic uterine contractions [ set PS 7 ] if (scenario = "Uterine contractions") and ticks >= 13000 [ set PS 0.1 ] if (scenario = "Uterine contractions") and ticks >= 15000 [ stop ] if (scenario = "Complex pathology") and ticks >= 14000 and ticks < 15000 ;; simulating a uterine contraction under this scenario [ set PS 7 ] if (scenario = "Complex pathology") and ticks >= 15000 [ set PS 0.2 ] if (scenario = "Complex pathology") and ticks >= 17000 [ stop ] if (scenario = "Anesthesia") and ticks >= 11000 ;; simulating the effect of anesthesia on different parameters [ ask patches [ set pcolor grey] set PS 0.5 ] if (scenario = "Anesthesia") and ticks >= 11500 and ticks < 13000 ;; simulating uterine contaction under this scenario [ set PS 3 ] if (scenario = "Anesthesia") and ticks >= 13000 [ set PS 0.2 ] if (scenario = "Anesthesia") and ticks >= 15000 [ stop ] tick end to activate ;; activation of the cardiac driving function and tve in mother ifelse count-down <= 500 [set tve e ^ (-80 * ( count-down * 0.001 - 0.27 ) ^ 2)] [set tve 0] end to F_activate ;; activation of the cardiac driving function and tve in fetus ifelse F_count-down <= 500 [set F_tve e ^ (-80 * ( F_count-down * 0.001 - 0.27 ) ^ 2)] [set F_tve 0] end to reset-count-down ;; reseting the timer for a new cardiac cycle (mother) set count-down 0 end to reset-F_count-down ;; reseting the timer for a new cardiac cycle (fetus) set F_count-down 0 end to-report result-v ;; generating lists with volume parameter values/mother report V_lv end to-report result-p ;; generating lists with pressure parameter values/mother report P_lv end to-report F_result-v ;; generating lists with volume parameter values/fetus report F_V_lv end to-report F_result-p ;; generating lists with pressure parameter values/fetus report F_P_lv end ;; building up lists with volume & to create-list-v ;; pressure parmeters values if ticks > 6000 ;; /mother anf fetus [set list-v lput result-v list-v] end to create-list-p if ticks > 6000 [set list-p lput result-p list-p] end to create-F_list-v if ticks > 6000 [set F_list-v lput F_result-v F_list-v] end to create-F_list-p if ticks > 6000 [set F_list-p lput F_result-p F_list-p] end to reset-test ;; reseting initial condition in the "Test" mode = same ;; parameters as originally in "Normal/Test" Scenario set E_v 0.0059 set E_ao 0.6913 set V0_lv 0 set Vd_lv 0 set P0_lv 0.1203 set V_AO 50 set V_LV 130 set V_V 1300 set R_mt 0.0158 set R_ao 0.018 set R_sys 1.0889 set E_es_lv 2.8798 set Lambda_lv 0.033 set Preload_Volume-Status "Normal" set Afterload_Vascular-Resistance-sys "Normal-VR" set Myocardial-Contractility "Normal-contractility" set Vascular-Elastance-sys "Normal" set Heart-Rate 90 set Hb_m-slider 120 set Sa_m_O2-slider 0.95 set PS 0.2 set Vol_PL_f-slider 0.14 set Vol_PL_m-slider 0.15 set F_E_v 0.04 set F_E_ao 4.351 set F_V0_lv 0 set F_Vd_lv 0 set F_P0_lv 0.1203 set F_V_AO 9 set F_V_LV 4 set F_V_V 225 set F_R_mt 0.096 set F_R_ao 0.138 set F_R_sys 2.89 set F_E_es_lv 2.8798 set F_Lambda_lv 0.033 set F_Heart-Rate 135 set Hb_f-slider 170 set Sa_f_O2-slider 0.51 end
There is only one version of this model, created over 1 year ago by Victor Iapascurta.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Oxygen Delivery to Fetus.png | preview | Preview for 'Oxygen Delivery to Fetus' | over 1 year ago, by Victor Iapascurta | Download |
This model does not have any ancestors.
This model does not have any descendants.