Cardiac_output-Simple_Model_01_01 preview image

1 collaborator


Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0.3 • Viewed 122 times • Downloaded 5 times • Run 0 times
Download the 'Cardiac_output-Simple_Model_01_01' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


NB: This is a System Dynamics Model. In order to run it you shoulld download and run it on your PC. If it does not work contact:

This is a minimal lumped parameter System Dynamics (SD) model of the cardio-vascular system with the focus on Cardiac Output (CO) and factors influencing CO.

The model is trying to explain and visualize the influence of a number of factors (i.e. preload, afterload, myocardial contractility, heart rate, etc.) on CO.

The effect of varying different model parameters can be observed on the resulting pressures and volumes and pressure-volume diagram and ultimately on the left ventricle CO in normal and pathological conditions.

Primary beneficiaries of the model are supposed to be medical students and residents.


This is a SD model consisting of three compartments: 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.

By changing different parameters (i.e. volume status, vascular resistance, myocardial contractility, vascular elastance, etc.) one can observe the effect on stroke volume (SV), ejection fraction (EF) and cardiac output (CO). With every set of parameters respective pressures and volumes are plotted and a pressure-volume diagram is generated. This can help understanding the CO principles physiology influenced by separate factors or their combination.

The ODE are as follows:

1. For the Left Ventricle:

dV_LV/dt = (P_v - P_lv) * k / R_mt - (P_lv - P_ao) * k / R_ao

2. For the Arterial Segment (aorta):

dV_AO/dt = (P_lv - P_ao) * k / R_ao - (P_ao - P_v) / R_sys

3. For the Venous Segment:

dV_V/dt = (P_ao - P_v) / R_sys - (P_v - P_lv) * k / R_mt


V_LV (ml) - left ventricle volume,

V_AO (ml) - arterial segment (aorta) volume,

V_V (ml) - venous segment volume,

P_v (mmHg) - pressure in the venous segment,

P_lv (mmHg) - pressure in the left ventricle,

P_ao (mmHg) - pressure in the aorta,

R_mt (mmHg*s*ml^-1) - mitral valve resistance,

R_ao (mmHg*s*ml^-1 ) - aortic valve resistance

R_sys (mmHg*s*ml^-1 ) - systemic vascular resistance,

k - a scalar used to account for some extracardiac regulatory influence.

Since this is a closed-loop model certain components of the equations repeat for different stocks.

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),


_I (Current A) is equivalent to flow rate (ml*s^−1); U (Voltage V) is equivalent to fluid pressure (mmHg) and R (Resistance Ohm) is equivalent to resistance of different segments of the circulation (mmHg*s*ml^−1), Q (Charge C) - Volume, V (ml) and C (Capacitance F) - Compliance, C (ml*mmHg^−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 = E_ao * V_AO, where E_ao is aortic elastance

Venous pressure = E_v * V_V, where E_v is venous elastance

Left ventricle pressure is calculated as follows:

P_lv = tve * E_es_lv * (V_lv - Vd_lv) + (1 - tve) * P0_lv * (exp(Lambda_lv * (V_lv - V0_lv)) - 1)


tve (dimensionless) - is the left ventricle time varying elastance,

E_es_lv (mmHg*ml^−1) - left ventricle end-systolic elastance,

V_lv (ml) - left ventricle volume,

Vd_lv (ml) - unstressed left ventricle volume,

P0_lv (mmHg) - zero-volume left ventricle pressure,

Lambda_lv (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 = V_ed - V_es, where V_ed is the end-diastolic volume and V_es is the volume at the end of systole

Ejection fraction (%):

EF = V_ed - V_es / 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

With every tick calculations of variables concerning stocks and flows are performed and values for volumes and pressures are shown on the plot. SV, CO and EF are reported by respective monitors. Generated pressures and volumes for the left ventricle are used for setting coordinates for turtles which are accordingly placed on the world window creating the pressure-volume diagram.

The initial parameters for "Normal" scenario are as follows:

V_LV - 130 ml

V_AO - 50 ml

V_V - 1000 ml

E_v - 0.0059 mmHg*ml^−1

E_ao - 0.6913 mmHg*ml^−1

V0_lv - 0 ml

Vd_lv - 0 ml

P0_lv - 0.1203 mmHg

R_mt - 0.0158 mmHg*s*ml^-1

R_ao - 0.018 mmHg*s*ml^-1

R_sys - 1.0889 mmHg*s*ml^-1

E_es_lv - 2.8798 mmHg*ml^−1

Lambda_lv - 0.033 ml^-1

Heart-Rate 70 bpm


(1) 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.).

(2) Go: starts running the model with generation of new variables values as a result of calculations, performed every time-step.

(3) Scenario chooser: select a scenario out of two options: "Normal" or "Test". Choosing the second 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.

(4) Reset Test: pressing this button in the "Test" mode/scenario will set all the parameters as for the "Normal" scenario not changing the scenario.

(5) Plot - represents a number of model variables over time ( red line - left ventricle volume (V_LV), black line - left ventricle pressure (P_lv), green line - pressure in the aorta (P_ao) and “100 ml/mmHg - line” of grey color)

(6), (7) and (8) are monitors which report respective model variables: SV_LV ml/beat - left ventricle stroke volume, CO l/min - cardiac output, EF % - ejection fraction.

(9) through (12) are choosers which allow to change some parameters of the model (e.g. preload/volemic status, afterload/vascular resistance, myocardial contractility, vascular elastance)

(13) is a slider for setting the heart rate in a range between 60 and 90 bpm

(14) and (15) are switches for adding to a "Test" scenario one is playing with such "aggravating" conditions as mild aortic or/and mitral stenosis.

(16) The window where Pressure-Volume diagram is being generated according to the selected parameter values. For the "Normal" scenario the diagram color will be green and for the "Test" scenarios it will be of red color.

(17) Compare-w-N-PV-loop button - once pressed it will import a normal PV diagram to be compared with the actual diagram generated by the current "Test" run. To became active this button needs a full-time (i.e. 20000 ticks) "Normal" scenario run before a "Test" scenario run. It is recommended to do this one time at the beginning of the play-with-the-model session.

(18) Export-image button will export the view of the window with PV diagrams as a ".png" file. The .png extension should be specified/written in while saving the file.

(19) Clear-image button will erase the actual PV diagram not affecting the imported diagram by (17) button. This window will be completely cleared-up by pressing "Setup" button.


This is a lumped parameter cardiovascular model that is capable of representing important properties and dynamics of the cardiovascular system in a healthy state as well as a range of pathological conditions. The model is a compromise between physiological accuracy and computational expense.

The time-varying elastance is a central part of the model. The time-varying elastance represents the activation of the myocardial muscle. In both the model and physiological context, the time-varying elastance is a key component of much of the cardiovascular dynamics, in value, timing and shape. This function is what drives the model.


* 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. For example, the dicrotic notch in the aortic pressure waveform is not captured by the model, due to the lack of reflected pressure waveforms in the model. However, the model does capture all the major dynamics of the cardiovascular system that are 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

* According to the model ("Normal" scenario) the minimal value for the pressure in the left ventricle (LVEDP) is close to "0" while a normal value ranges between 4 and 12 mmHg.

* 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.

* The biggest 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.

* 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


Run the model with "Normal" scenario. Then select "Test" scenario and observe the influence of changing factors that influence the CO (by bottom choosers and switches for preload, afterload, contractility) one by one and in combination.

Try to simulate different pathological conditions by changing respective model parameters (e.g. Arterial Hypertension in a patient with Heart Failure by selecting "Increased Vascular Resistance” (x 1.5 or x 2.0) in combination with "Decreased Myocardial Contractility").

Which factors will primarily influence the EF?

Which factors have the highest impact on CO? Which combination will result in the lowest CO?

Export few different PV diagrams and try to analyze them in terms of O2 myocardial requirements (as PV area) in respective pathological condition.


The good agreement of the results with clinical data shows the potential of this modeling approach for predicting trends in the CVS. With future development of the model, more subtle trends in the CVS hemodynamics can be simulated.


The model was built with NetLogo SDM and represent combination of SDM and 'main' NetLogo possibilities. The PV diagram is based on turtles with their coordinates generated by SDM calculations.


* Ventricle_three_vessel_loop Model (Jsim):

* Ventricle_Driven_Two_Vessel Model (Jsim):


This simple abstract model was developed by Victor Iapascurta, MD. At time of development he was in the Department of Anesthesia and Intensive Care at University of Medicine and Pharmacy in Chisinau, Moldova / ICU at City Emergency Hospital in Chisinau. Please email any questions or comments to

The model was created in NetLogo 6.0.3, Wilensky, U. (1999). NetLogo. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

Re. concerning medical aspects:

* Bram W. Smith et al., A Minimal Cardiovascular System Haemodynamic Model for Rapid Diagnostic Assistance, Copyright © 2003 IFAC

* Bram W. Smith et al., Experimentally Verified Minimal Cardiovascular System Model For Rapid Diagnostic Assistance, Control Engineering Practice, September 2005 DOI: 10.1016/j.conengprac.2004.10.014

* Bram W. Smith (2004), Minimal Haemodynamic Modelling of the Heart and Circulation for Clinical Application, PhD thesis, Canterbury University

* Keith R. Walley, Left ventricular function: time-varying elastance and left ventricular aortic coupling, Critical Care (2016) 20:270 DOI 10.1186/s13054-016-1439-6

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals [                  ;; setting the globals for the model functioning:
  count-down               ;; timer for the cardiac driving function
  tve                      ;; the time varying elastance
  list-p                   ;; the list for turtles coordinates (pressure)
  list-v                   ;; the list for turtles coordinates (volume)
  HR-f                     ;; factor for 'balancing' heart rate and dt
  k                        ;; scalar  accountable for some extracardiac influence
  axis                     ;; coordinate system
  LV-PV-loop-color         ;; color of the pressure-volume diagram

to setup


  if (scenario = "Normal") ;; setting parameters for "Normal" 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 1000
   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 Aortic-stenosis? false
   set Mitral-stenosis? false
   set Heart-Rate 70
   set LV-PV-loop-color 55

   if (scenario = "Test")
  [ set LV-PV-loop-color 15]

  set count-down 0                                       ;; initialising the timer and tve
  set tve 0


                                                          ;; setting the lists to be used for turtles x-coordinates
  set list-p []
  set list-v []

  create-axis                                             ;; setting coordinates system

                                                          ;; seting parameters values for different "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]

   if (scenario = "Test") and (Aortic-stenosis? = true)
  [set R_ao 0.036]

   if (scenario = "Test") and (Mitral-stenosis? = true)
  [set R_mt 0.032]

  set HR-f round (( 60 / Heart-rate) * 1000)                                    ;; setting HR-f

  set k (Heart-rate * 0.015)                                                    ;; setting the k-scalar


to create-axis                                                                  ;; creating coordinates system
  ask patches with [ pxcor = 0 ] [ set pcolor white ]
  ask patches with [ pycor = 0 ] [ set pcolor white ]

   ask patch -4 -4
  [ set plabel "0"
    set plabel-color white ]
  ask patch 50 190
  [ set plabel "Pressure mmHg"
    set plabel-color white
  ask patch 190 7
  [ set plabel "Volume ml"
    set plabel-color white

 ask patch -4 100
  [ set plabel "100"
    set plabel-color white

 ask patch -4 20
  [ set plabel "20"
    set plabel-color white

  ask patch -4 40
  [ set plabel "40"
    set plabel-color white

  ask patch -4 60
  [ set plabel "60"
    set plabel-color white

  ask patch -4 80
  [ set plabel "80"
    set plabel-color white

  ask patch -4 120
  [ set plabel "120"
    set plabel-color white

  ask patch -4 140
  [ set plabel "140"
    set plabel-color white

  ask patch -4 160
  [ set plabel "160"
    set plabel-color white

  ask patch -4 180
  [ set plabel "180"
    set plabel-color white

   ask patch 50 -7
  [ set plabel "50"
    set plabel-color white ]

   ask patch 100 -7
  [ set plabel "100"
    set plabel-color white ]

   ask patch 150 -7
  [ set plabel "150"
    set plabel-color white ]

to go

  set count-down count-down + 1                         ;; starting the timer which governs the cardiac driving function
  if count-down = HR-f

  activate                                              ;; activating the cardiac driving function


  create-list-v                              ;; generating coordinates for turtles coordinates as lists

  if ticks > 15000
  [ create-turtles 1 [                       ;; creating a turtle every iteration/tick
    set color LV-PV-loop-color               ;; and ploting it according to the coordinates
    set shape "circle"                       ;; as values in the respective lists
    set size 1.0
    set xcor (last list-v)
    set ycor (last list-p)

  if (Scenario = "Normal") and ticks > 20000  ;; a stop command once the model reaches 20000 ticks and scenario = "Normal"
  [export-view "Norma1.png"                   ;; exporting the 'normal' pressure-volume diagram to be imported for comparison
  stop]                                       ;; as needed


to activate                                 ;; activation of the cardiac driving function and tve
  ifelse count-down <= 500
  [set tve e ^ (-80 * ( count-down * 0.001 - 0.27 ) ^ 2)]
  [set tve 0]

to reset-count-down                           ;; reseting the timer for a new cardiac cycle
  set count-down 0

to-report result-v                            ;; generating lists with turtles coordinates
  report V_lv

to-report result-p
  report P_lv

to  Compare-N-PV-loops                         ;; importing the 'normal' PV-diagram
  import-drawing "Norma1.png"

                                               ;; building up lists with turtles coordinates

to create-list-v
  if ticks > 15000
  [set list-v lput result-v list-v]

to create-list-p
  if ticks > 15000
  [set list-p lput result-p list-p]

to reset-test                                  ;; reseting initial condition in the "Test" mode = same parameters as in "Normal" 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 1000
   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 70
   set Aortic-stenosis? false
   set Mitral-stenosis? false

to export-image                                 ;; exporting the world view to be used for comparison
  export-view user-new-file

There is only one version of this model, created 9 months ago by Victor Iapascurta.

Attached files

File Type Description Last updated
Cardiac_output-Simple_Model_01_01.png preview Preview for 'Cardiac_output-Simple_Model_01_01' 9 months ago, by Victor Iapascurta Download

This model does not have any ancestors.

This model does not have any descendants.