FreeSimulationNo signup

Hospital Capacity Simulator

An epidemic plus finite beds. Watch the curve overwhelm capacity — and the mortality spike that follows.

Ready
Step 0 / 0
Agents: 0
Group AGroup BEmpty
10/s

Parameters

2.50
15
500
502000
50
10200

Tweak parameters, then press Reset to apply.

What you just saw

The epidemic curve itself is familiar — rise, peak, fall. The new thing here is the horizontal capacity line. When infection demand crosses the bed or ICU line, the excess patients cannot be treated at the full standard of care, and mortality for that cohort jumps sharply. The total mortality is not just the R₀ of the disease — it is R₀ plus the peak-to-capacity ratio.

The science behind it

Simple SEIR models treat mortality as a fixed rate per infected case. Real-world hospital data from COVID-19 (and earlier from H1N1 and SARS-CoV-1) show mortality as a function of local ICU utilization: once you pass ~90% ICU occupancy, case-fatality climbs nonlinearly. This simulator captures the mechanism — healthcare capacity as a threshold that converts infection surge into excess mortality.

Try these experiments

  1. 1. Flattened curve

    Settings: r0=1.3 total_beds=500

    What to look for: Long epidemic, never exceeds capacity. Mortality stays at baseline.

  2. 2. Overwhelmed

    Settings: r0=3.0 total_icu=50

    What to look for: ICU saturates at the peak. Excess mortality visible as a clear step-up on the death curve.

  3. 3. Surge capacity

    Settings: r0=3.0 total_icu=200

    What to look for: Same epidemic, 4× ICU — mortality drops dramatically. Capacity planning matters enormously.

Sprint 1 scaffold. Full long-form article, references, and FAQ will land in the content sprints (3–6). The simulation above is already wired to the production worker.
SimLab

Run this at 100x scale

Hospital capacity runs in your browser up to 5,000 population agents. With SimLab, the same model runs on GPU at 10M+ population, with ensemble parameter sweeps and publication-ready output.

from scirouter import SciRouter
client = SciRouter(api_key="sk-sci-...")
result = client.simulation.run(
    model="hospital",
    params={"population": 1_000_000, "r0": 2.5,
            "total_beds": 50_000, "total_icu": 5_000},
    steps=365, seed=42,
)
print(result.metrics["excess_mortality"])

Related simulations

Frequently asked questions

How do I think about this for real surge planning?

This simulator is a demonstration of the dynamic, not a planning tool. Real hospital capacity models (like the IHME model during COVID) use actual demographic data, hospital-specific admission rates, and ICU staffing ratios — not a toy SEIR.

What's the difference from the SEIR simulator?

The SEIR simulator tracks infection dynamics. This simulator adds hospital beds and ICUs as finite resources, so you see not just how many get sick, but how many get treated — and how many don't.