BMBody to MoleculeDynamic physiology lab

Three-dimensional cardiovascular physiology

Change the load.
Watch the circulation solve itself.

A Guyton venous-return curve, ventricular-arterial coupling, and a first-order baroreflex are integrated at 50 Hz. The 3D heart and vessels read the same state as the pressure trace and PV loop.

Integrated modelNot scripted keyframesEducational use
01

Choose a perturbation

Mechanical inputs change first. Reflex responses emerge over time.

02

Live cardiovascular circuit

50 Hz model
Loading the cardiovascular circuitThe physiology engine is ready. The 3D renderer loads on this device.
03

Arterial pressure through the maneuver

123/78 MAP 93simulated
RestPhase IPhase IIPhase IIIPhase IV6090120150

illustrativeWaveform shape only. The circulation is solved beat-averaged, so the upstroke, incisura and diastolic runoff are a drawn contour scaled between the simulated systolic and diastolic pressures.

Rest

The operating point is at the resting intersection of venous return and cardiac function.

04

Interrogate the mechanism

The plots and 3D scene are different views of one state vector.

LV pressure-volume loop

Preload → width · afterload → heightsimulated
05010015050100150200mmHgLV volume (mL)

The right edge follows end-diastolic volume. The upper-left corner follows end-systolic elastance and arterial load. Loop width is stroke volume, currently 72 mL.

Guyton operating point

Venous return = cardiac outputsimulated
02.557.510L/minright atrial pressure (mmHg)

The white dot is the only steady point where the heart ejects exactly what the veins return. Its current flow is 4.99 L/min at RAP 1.7 mmHg.

05

Every quantity, and where it is

The equations the state vector is built from, and which mark on which chart each one is.

Ventricular mechanics

One beat, solved the way Sunagawa solved it: the ventricle and the arterial tree are two elastances meeting at a common pressure, and stroke volume is where they balance. Every line on the pressure–volume loop is one of these.

SymbolQuantityHow it is computedWhere to find it
EesEnd-systolic elastancemmHg/mLmeasuredSuga & SagawaEes₀ · (1 + gEes · scaled), clamped 1.3–4.2

Contractility. How much pressure the ventricle generates per millilitre above its unstressed volume. Set by the baroreflex, not fixed.

  • Ees₀ 2.3 mmHg/mL
  • gEes 0.35 fraction at full error
  • tauEes 3.5 s
PV loop: the SLOPE of the straight violet line (the ESPVR). Steeper is more contractile. Also the third lever in the console.
V₀ESPVR volume interceptmLestimatedChosen inside the reported 0–20 mL range for the unstressed volumeconstant

The volume at which the fully contracted ventricle generates no pressure.

  • V₀ 5 mL
PV loop: where the violet ESPVR line meets the volume axis at zero pressure.
EaEffective arterial elastancemmHg/mLfittedSunagawa ventricular–arterial couplingEa = R · HR / 1000

Afterload expressed as an elastance, so it can be compared directly with Ees. It is not a property of the artery alone — it carries heart rate, which is why tachycardia raises afterload. R here is TOTAL resistance, arteriolar plus venous return.

PV loop: the magnitude of the slope of the RED DASHED line, drawn from (EDV, 0) to (ESV, Pes). Its negative slope is Ea. Also the second lever in the console.
SVStroke volumemLfittedSV = Ees · (EDV − V₀) / (Ees + Ea), floored at 2

The coupling solution. Two elastances in series: the ventricle pushes with Ees, the arterial tree resists with Ea, and the volume ejected is the balance. Raise afterload and the same ventricle ejects less.

  • V₀ 5 mL
PV loop: the WIDTH of the loop, EDV minus ESV. Also a vital sign, and the height of the pulse pressure it produces on the arterial trace.
EDVEnd-diastolic volumemLfittedEDV = edvFromPtm(Ptm) · fillingCompleteness(HR)

How full the ventricle is when it starts to contract. Two things set it: the filling pressure, and whether diastole lasted long enough to reach it.

PV loop: the RIGHT edge of the loop, and the blue dot sitting on the EDPVR curve. Also a vital sign.
ESVEnd-systolic volumemLfittedESV = EDV − SV

What is left after ejection.

PV loop: the LEFT edge of the loop, and the red dot on the ESPVR line.
EFEjection fractionfractionfittedEF = SV / EDV

The fraction of the filled ventricle ejected. Robust against preload — the loop widens and its right edge moves with it — so in five of the six manoeuvres it swings less than cardiac output does. Handgrip is the exception, and shows why: a pure afterload load is the one thing ejection fraction is not defended against.

Not among the vital signs — read it off the PV loop, as the loop's width divided by its right edge.
PesEnd-systolic pressuremmHgfittedPes = Ea · SV

The pressure at which ejection stops — where the ventricle's elastance and the arterial tree's meet.

PV loop: the HEIGHT of the red dot at the top-left corner of the loop.
EDPVREnd-diastolic pressure–volume relationmmHgfittedPtm = α · (exp(β · (V − V₀d)) − 1)

Passive ventricular stiffness. Exponential, so the last few millilitres of filling cost far more pressure than the first — which is why a stiff ventricle has high filling pressure at normal volume.

  • α 1.1 mmHg
  • β 0.021 1/mL
  • V₀d 30 mL
PV loop: the curved BLUE line rising from the volume axis. The loop's bottom edge follows it.

Timing

The heart-rate axis is self-limiting, and this is why. Systole shortens far less than diastole does, so at high rates the time available to fill runs out before the pressure gradient does.

SymbolQuantityHow it is computedWhere to find it
ETEjection timemsmeasuredWeissler's regressionET = max(413 − 1.7 · HR, 180)

How long ejection lasts — not the whole of systole, which also contains isovolumic contraction. Shortens with rate, but only weakly, and never below 180 ms.

Not displayed, and not measurable off the trace: each beat is drawn from a fixed cycle-fraction template, so the waveform's shape does not carry ET. It reaches you through DT, below.
DTDiastolic filling timemsfittedDT = max(60000 / HR − ET, 60)

Whatever is left of the cardiac cycle after ejection has taken its share. This is the quantity that collapses at high rates.

Not displayed as a number. It reaches the screen in one place only: the aortic-regurgitation murmur index in the analysis panel scales with it, because a longer diastole is a longer time to regurgitate.
Filling completenessfractionestimated1 − exp(−DT / τfill)

The fraction of the pressure-determined end-diastolic volume actually reached. Effectively 1 at rest. It cannot fall far: at the 175 bpm ceiling of the rate clamp diastole still lasts 163 ms, which is 1.8 time constants, so the floor is about 0.84.

  • τfill 90 ms
Not displayed directly — it acts on EDV, so you see it as the PV loop failing to reach as far right at high heart rates.

Compartments and pressures

Three compliant compartments holding one conserved volume of blood. Every pressure in the model is a volume divided by a compliance — which is why blood displaced from one compartment has to show up as a pressure change in another.

SymbolQuantityHow it is computedWhere to find it
MAPMean arterial pressuremmHgfittedMAP = Va / Cart + itpArterial · (ITP − ITP₀)

Arterial volume over arterial compliance, plus whatever intrathoracic pressure the thoracic aorta is exposed to. That second term is the Valsalva phase I rise — a mechanical transmission, not a haemodynamic one.

  • Cart 1.6 mL/mmHg
  • ITP₀ -4 mmHg
The centre line of the arterial pressure trace, and a vital sign. Run a Valsalva and the second term is visible on its own: pressure jumps about 33 mmHg the instant the strain begins, before stroke volume has had time to fall.
PPPulse pressuremmHgfittedPP = SV / Cart

Stroke volume delivered into arterial compliance. A stiff aorta — a small Cart — turns the same stroke volume into a wider pulse.

  • Cart 1.6 mL/mmHg
SBP minus DBP as a number. On the trace, read it as the height of each beat — the drawn waveform is a fixed template scaled by PP, so beat height tracks it but is not equal to it.
SBP / DBPSystolic and diastolic pressuremmHgestimatedSBP = MAP + 2·PP/3 · DBP = MAP − PP/3

The pulse distributed around the mean in the conventional one-third / two-thirds split.

The peaks and troughs of the arterial trace. The drawn peak reaches MAP + PP/3 rather than the full systolic value, so read SBP from the vital sign, not off the chart.
PtmTransmural filling pressuremmHgfittedPtm = Vc / Ccp

Cardiopulmonary volume over its compliance — the pressure distending the ventricle from inside, measured across its wall. This is preload proper.

  • Ccp 35 mL/mmHg
PV loop: the height of the blue dot on the EDPVR. Also the first lever in the console.
PraRight atrial pressuremmHgfittedPra = Ptm + ITP

What a catheter in the right atrium measures: the transmural pressure plus the intrathoracic pressure surrounding it. During a Valsalva strain these separate dramatically.

Guyton plot: the HORIZONTAL POSITION of the white operating point, and the x-axis itself. Also a vital sign.
PmsMean systemic filling pressuremmHgfittedPms = max(0, (Vv − pool + veno) / Cven + abdominal)

The pressure the systemic veins would equilibrate at with the heart stopped. It is the head of pressure driving venous return, and it is set by how much blood is in the venous compartment — including what the reflex has recruited and what a manoeuvre has trapped. The last term is separate from all of that: a Valsalva raises abdominal pressure as well as thoracic, and the splanchnic veins feel it directly, which is what keeps venous return alive during a strain.

  • Cven 90 mL/mmHg
Guyton plot: the X-INTERCEPT of the blue venous return line, where flow reaches zero. Venous drive, the fourth lever, is Pms minus Pra.
Va, Vv, VcCompartment volumesmLfitteddVa/dt = CO − Qsys · dVv/dt = Qsys − VR · dVc/dt = VR − CO each flow first limited to what its source compartment holds

The conservation law the whole model rests on. Every millilitre leaving one compartment enters another, which is what makes the Valsalva phase IV overshoot appear without being asserted: blood held back during the strain has to go somewhere when it is released. The limiter is not bookkeeping — a compartment cannot supply blood it does not hold, and cardiac output falling during a strain because there is nothing left to eject is exactly what phase II is.

Not displayed as numbers. You see them as everything else moving — a rise in Vv is a rise in Pms, and so a shift of the blue line on the Guyton plot.

Flows and resistance

Two flows that must balance at equilibrium and generally do not during a manoeuvre. The gap between them is what moves blood between compartments.

SymbolQuantityHow it is computedWhere to find it
COCardiac outputL/minfittedCO = HR · SV / 1000

What the ventricle delivers.

Guyton plot: the VERTICAL POSITION of the operating point, and the teal cardiac function curve it sits on. Also a vital sign.
VRVenous returnL/minfittedVR = max(0, (Pms − max(Pra, 0)) / Rvr)

Guyton's pressure-gradient law. Right atrial pressure is clamped at zero because below atmospheric the great veins collapse and flow plateaus rather than increasing.

  • Rvr 1.05 Wood units
Guyton plot: the BLUE line. Its x-intercept is Pms and the magnitude of its slope is 1/Rvr. The plateau at negative Pra is the vein collapse.
QsysSystemic runoffmL/sfittedPa = Va / Cart · Qsys = max(Pa − Pms, 0) / Ra × 1000/60

Flow out of the arterial compartment across the arterioles, driven by the arterial-to-venous pressure gradient. Two things to note: it divides by Ra alone, the arteriolar resistance, not by total R; and the 1000/60 converts the L/min that Wood units give into the mL/s the integrator steps in.

Not displayed. It is the difference between CO and Qsys that fills or drains the arteries.
RTotal systemic resistanceWood unitsfittedR = Ra + Rvr

Arteriolar plus venous-return resistance. Ra is the live reflex-controlled value below, not its resting constant, so this sum moves every step. This is the R that enters Ea, which is how a change in arteriolar tone reaches the ventricle as a change in afterload.

  • Rvr 1.05 Wood units
Not plotted directly; with heart rate it sets the slope of the Ea line on the PV loop.

Baroreflex

A first-order proportional controller with four effectors, each with its own time constant. Three are here; the fourth is contractility, listed with the ventricle above because that is where you see it. The differing speeds are why the Valsalva phases arrive in the order they do — rate responds in seconds, venous tone takes far longer.

SymbolQuantityHow it is computedWhere to find it
errorPressure errormmHgestimatederror = clamp(MAPset − MAP, −40, 40) · scaled = error / MAPset

What the sensor sees. The sensor is arterial, so it also sees transmitted intrathoracic pressure — the reflex is fooled by a Valsalva exactly as a real one is.

  • MAPset 93 mmHg
Not displayed. You see its consequences, but not one-to-one: the reflex drives four effectors (rate, arteriolar tone, venous tone, contractility) and the console shows four levers (preload, afterload, contractility, venous drive). Preload is not an effector at all — it moves because the others did.
HRHeart ratebpmestimatedtarget = clamp(HR₀ + hrAdd + gHR · error, 42, 175); τ = tauHR

The fastest effector, and the first thing to move in any manoeuvre.

  • HR₀ 70 bpm
  • gHR 0.85 bpm per mmHg
  • tauHR 2 s
A vital sign, and the spacing of beats on the arterial trace.
RaArteriolar resistanceWood unitsestimatedtarget = clamp(Ra₀ · raMult · (1 + gR · scaled), 5, 44); τ = tauR

Vasoconstriction. Slower than rate, and it reaches the ventricle as afterload. raMult is the manoeuvre's own multiplier — how handgrip and amyl nitrite act.

  • Ra₀ 17.3 Wood units
  • gR 0.6 fraction at full error
  • tauR 6 s
The afterload lever. It also steepens the Ea line on the PV loop, though not on its own: Ea carries Ra + Rvr and heart rate together.
venoVenous volume recruitedmLestimatedtarget = gVeno · scaled; τ = tauVeno

Venoconstriction, squeezing blood out of the venous reservoir into the circulation. The slowest effector, which is why the pressure recovery it drives arrives last.

  • gVeno 260 mL at full error
  • tauVeno 8 s
It raises Pms — so you see it as the blue venous return line shifting RIGHT on the Guyton plot.
06

Read the 3D signals

Each visual encoding has a defined physiologic variable.

01
EDV ↔ ESV

Chamber size

LV and RV volumes fall during ejection and refill during diastole. Preload shifts the maximum size.

02
Cardiac output

Particle velocity

Particle speed rises and falls with output. Direction preserves the two circulations in series.

03
Systemic resistance

Arteriolar caliber

The terminal resistance gate narrows as SVR rises and opens during vasodilation.

04
MAP + chamber pressure

Pressure glow

Arterial and LV glow strengthens as pressure rises, especially during systolic ejection.

Clinical translation

Why the bedside murmur changes

illustrativeRelative intensity is a heuristic index over the simulated state, not an acoustic recording. The center mark is the resting state.

HOCM / dynamic LVOT= 1.00×

Smaller, more forceful LV increases systolic anterior motion and obstruction.

Aortic stenosis= 1.00×

Murmur intensity follows transvalvular flow, with gradient proportional to flow squared.

Mitral regurgitation= 1.00×

Regurgitant flow rises as the LV-to-LA systolic pressure gradient increases.

Aortic regurgitation= 1.00×

Diastolic regurgitation tracks the aorta-to-LV gradient and diastolic filling time.

Model boundaries

This is a conceptual, closed-loop, lumped-parameter model for learning directional relationships. It is not a patient-specific digital twin and does not model pulmonary vascular resistance, septal interaction, valve inertia, regional flow, or fluid-structure interaction. Constants are physiologic-order values tuned for legibility.

Guyton venous returnSuga-Sagawa elastanceSunagawa VA couplingFirst-order baroreflex