Educational estimate only — this is not a dive plan. Nothing on this page is validated for in-water use, it has not been tested on human subjects, and it must never replace a certified dive computer, your agency's tables, or the training you actually hold. Decompression diving kills people who improvise.
An introduction to Bühlmann ZH-L16C decompression planning
This page implements the Bühlmann ZH-L16C dissolved-gas decompression model with gradient factors. Given a maximum depth, a bottom time, a breathing gas, a conservatism setting, an altitude and a water type, it integrates nitrogen uptake and washout across sixteen hypothetical tissue compartments and reports the no-decompression limit, the staged decompression stops that a longer exposure would demand, the oxygen partial pressure at depth, and how heavily each compartment is loaded when you break the surface. It is the arithmetic that sits behind every modern recreational and technical dive computer, exposed so you can see it rather than trust it blindly.
The dissolved-gas model dates to John Scott Haldane's 1908 work for the Royal Navy and was refined into its modern Swiss form by Professor Albert A. Bühlmann at the University Hospital of Zürich. Bühlmann's insight was to express each compartment's tolerated inert gas pressure as a straight line against ambient pressure, using two coefficients a and b per compartment. The ZH-L16 parameter sets published in 1986 give sixteen such coefficient pairs; the C variant carries deliberately reduced a values in the middle compartments (numbers 5 through 15) and is the set Bühlmann recommended for real-time in-water computers, which is why it is the set used here.
Gradient factors are a later refinement, popularised by Erik C. Baker, that let a diver choose how far into the permitted supersaturation window to travel. Rather than riding the raw M-value line, a gradient factor of, say, 30 % at the deepest stop and 85 % on surfacing keeps the leading compartment well inside the line where the model is least well validated. Every dive computer that advertises "GF 30/85" or "GF 40/70" is doing exactly what this page does; the difference is that a computer measures your real depth every second, and this page assumes an idealised square profile.
Two things follow from that. First, the numbers here are honest arithmetic against published coefficients, so you can hand-check any of them with the equations below. Second, they describe a mathematical model, not a body. Decompression sickness is probabilistic, poorly predicted by any deterministic algorithm, and strongly affected by temperature, workload, hydration, patent foramen ovale, age and plain bad luck. Treat the output as a lens for understanding why your computer behaves the way it does — never as permission to dive a schedule.
Reading the form: how to use each of the eight planner inputs
Maximum depth is the deepest point of a square profile, entered in metres or feet using the unit selector next to it. The model puts you at that depth for the whole bottom time, which is conservative for a multi-level dive and correct for a wall or wreck dive where you drop, work, and come back up. Feet are converted at exactly 0.3048 m per foot before anything else happens.
Bottom time follows the US Navy convention: the total elapsed time from leaving the surface until you begin the final ascent. Descent time is therefore inside the bottom time, and because this planner treats you as being at maximum depth for all of it, the resulting no-stop limit is a little shorter than a computer that integrates the real descent. That is the intended direction of error.
Oxygen fraction is the percentage of oxygen in your back gas: 21 for air, 32 or 36 for the common nitrox blends. The nitrogen fraction is taken as one minus the oxygen fraction, which is the standard diving simplification (real air contains about 0.93 % argon, lumped in with nitrogen). Raising the oxygen fraction lengthens the no-stop limit and shortens deco, but lowers the depth at which the gas becomes toxic.
Gradient factor low controls the first stop and gradient factor high controls the surfacing margin. Enter 100 and 100 to see the raw, unmodified ZH-L16C schedule. Enter 30 and 85 for a typical moderately conservative computer default; 20/75 or 30/70 for a markedly more padded ascent. Gradient factor low must not exceed gradient factor high, and the planner will reject the pair if it does.
Altitude is the elevation of the water surface in metres. Diving a mountain lake reduces surface pressure, which both reduces the ambient pressure at any depth and lowers the pressure your compartments may safely surface into. The planner assumes you are fully acclimatised at that altitude — that your tissues have equilibrated with the thinner air before the dive — which is the standard assumption, and a dangerous one within a few hours of driving up a mountain.
Water type switches the hydrostatic constant between sea water and fresh water. A metre of sea water is more pressure than a metre of fresh water, so the same indicated depth in a lake is a slightly smaller physiological insult than in the ocean.
Press Calculate ascent plan and the page reports a verdict line, a card row of key figures, a stop schedule when one is required, a drawn dive profile, and a full sixteen-compartment loading table. The copy, download and permalink buttons let you keep or share the exact scenario you ran.
The formula set behind ZH-L16C: pressure, Haldane, Schreiner and M-values
Everything starts with ambient pressure. Surface pressure at altitude follows the troposphere expression of the International Standard Atmosphere, with h in metres:
Depth is then converted hydrostatically. One metre of sea water is defined as exactly 0.1 bar, and NOAA's conversion of 33 fsw to 34 ffw per atmosphere gives fresh water 33/34 of that value:
Only a fraction of that pressure drives inert gas into the blood. The lungs are saturated with water vapour, for which Bühlmann uses 0.0627 bar, so the alveolar inert gas pressure is:
At a constant depth each compartment tracks that alveolar pressure exponentially. This is the Haldane equation, with a rate constant set by the compartment half-time τ:
During an ascent or descent the alveolar pressure is itself changing at a constant rate R, which requires the Schreiner equation instead. The planner uses it for every travel segment, stepped in three-second increments:
The ascent limit for each compartment is its M-value: the maximum inert gas pressure it may hold at a given ambient pressure. Bühlmann writes it as a straight line in two coefficients, and derived those coefficients from the half-time itself:
Applying a gradient factor GF shrinks the permitted overshoot toward the ambient pressure line. Solving the shrunken condition for ambient pressure gives the compartment's tolerated ambient pressure, and the deepest of the sixteen results is the ceiling:
Between the first stop and the surface the gradient factor is interpolated linearly in depth, so that it equals GFlow at the first stop and GFhigh at the surface:
Finally, two oxygen checks run alongside the nitrogen arithmetic. Dalton's law gives the oxygen partial pressure, and inverting it gives the maximum operating depth for a chosen limit:
The sixteen ZH-L16C nitrogen half-times used are 5.0, 8.0, 12.5, 18.5, 27.0, 38.3, 54.3, 77.0, 109.0, 146.0, 187.0, 239.0, 305.0, 390.0, 498.0 and 635.0 minutes. Their b coefficients reproduce Bühlmann's derivation formula to four decimal places for every compartment except number 4, where Bühlmann himself published 0.7825 rather than the derived 0.7725. Their a coefficients reproduce the derivation for compartments 1 to 4 and 16, and are manually reduced for compartments 5 to 15 — which is precisely the documented definition of the C variant.
A worked example: 30 m for 22 minutes on air, gradient factors 30/85
Take a sea-level, salt-water dive to 30 m with a 22-minute bottom time on air, planned at gradient factors 30/85 and a 9 m/min ascent. Every figure below is reproducible with a scientific calculator.
Surface pressure at sea level is 1.01325 bar, so ambient pressure at 30 m is 1.01325 + 30 × 0.1 = 4.01325 bar. Subtracting the 0.0627 bar of alveolar water vapour and multiplying by the 0.79 nitrogen fraction gives an alveolar nitrogen pressure of 3.95055 × 0.79 = 3.12093 bar. Before the dive the compartments sit at (1.01325 − 0.0627) × 0.79 = 0.75093 bar.
Compartment 1 has a 5.0-minute half-time, so k = ln 2 / 5 = 0.138629 min⁻¹. After 22 minutes at depth its nitrogen pressure is 3.12093 + (0.75093 − 3.12093) × e−0.138629 × 22 = 3.12093 − 2.37 × 0.047366 = 3.00867 bar. With a = 1.1696 and b = 0.5578 and a gradient factor of 0.30, its tolerated ambient pressure is (3.00867 − 1.1696 × 0.30) / (0.30/0.5578 + 0.70) = 2.65779 / 1.237827 = 2.14713 bar, which is (2.14713 − 1.01325) / 0.1 = 11.34 m. That compartment leads, so the ceiling is 11.34 m and the first stop rounds up to the next 3 m increment: 12 m.
The no-stop limit at 30 m with a gradient factor high of 85 is 15.0 minutes, so a 22-minute bottom time is seven minutes into decompression. Walking the ascent down in 3 m stages with the gradient factor interpolated between 30 % at 12 m and 85 % at the surface, the schedule comes out as 2 minutes at 6 m and 4 minutes at 3 m; the 12 m and 9 m stages clear immediately on arrival and take only travel time. Total ascent time is 30 ÷ 9 = 3.33 minutes of travel plus 6 minutes of stops, or 9.3 minutes, giving a runtime of about 31.3 minutes. Oxygen partial pressure at the bottom is 0.21 × 4.01325 = 0.84 bar, comfortably inside the 1.4 bar working limit.
Change one input at a time to see the model's sensitivity. Switching to EAN32 raises the no-stop limit at 30 m from 15.0 to 23.7 minutes, which turns the same 22-minute profile into a no-stop dive with 1.7 minutes in hand — but it drives the oxygen partial pressure to 1.28 bar, uncomfortably close to the 1.4 bar working limit. Relaxing the gradient factors to 100/100 raises the air no-stop limit at 30 m to 20.0 minutes. Tightening them to 20/75 pulls it down to 11.8 minutes and rewrites the same 22-minute dive as a 15 m first stop with 1 minute at 9 m, 3 minutes at 6 m and 6 minutes at 3 m — ten minutes of stops instead of six. This is exactly the trade space a technical diver negotiates before every dive.
Interpreting the result: ceilings, leading compartments and oxygen
The verdict line tells you whether the profile is a no-stop dive or a decompression dive under your chosen gradient factors. For a no-stop dive the planner also reports how much no-stop time remains and adds the conventional three-minute stop at 5 m, which the NOAA Diving Manual and every recreational agency recommend even when the model does not require it. That stop is cheap insurance: it slows the last and most dangerous part of the ascent, where the pressure ratio changes fastest.
For a decompression dive the schedule lists each 3 m stage with its hold time. Read it from the deepest stop down. The first stop depth is set almost entirely by gradient factor low and by the fastest compartments; the shallow stops are set by gradient factor high and by the slower compartments. That is why lowering gradient factor low deepens the first stop but often lengthens total time to surface, and why raising gradient factor high shortens the 3 m stop while leaving you closer to the M-value when you surface.
The compartment table is where the model stops being a black box. Each row shows the nitrogen pressure carried by that compartment on surfacing, the gradient-factor-adjusted surfacing limit, and the percentage of that limit consumed. The compartment closest to 100 % is the leading compartment. On a short deep dive it will be one of the fast ones; on a long shallow dive it will be a mid or slow compartment. Watching which compartment leads teaches more about decompression than any single number the page produces.
Oxygen is checked independently of nitrogen. The planner flags a partial pressure above 1.4 bar as beyond the NOAA working limit and above 1.6 bar as beyond the NOAA maximum exposure limit; it also reports the maximum operating depth of your mix at both thresholds. Central nervous system oxygen toxicity is not gradual and not forgiving — an underwater convulsion is usually fatal regardless of how good your decompression schedule was.
Comparison: ZH-L16C no-stop limits against the US Navy Revision 7 air table
The table below sets this page's computed no-stop limits beside the published no-decompression limits of Table 9-7 in the US Navy Diving Manual, Revision 7. Metric depths are the exact conversions of the Navy's feet-of-sea-water depths, and the Bühlmann figures are for air at sea level in salt water with a 9 m/min ascent.
The pattern is instructive. The Navy table comes from the Thalmann exponential-linear (VVAL18) algorithm fitted to Navy man-trial data, and it is written for fit, screened divers with a chamber nearby. ZH-L16C at 100/100 tracks it closely in the 15 to 18 m band, then becomes progressively more conservative as depth increases. Applying gradient factors of 30/85 removes roughly a quarter to a third of the remaining time. None of the three columns is "right"; they are three different fits to a phenomenon that resists prediction.
Assumptions and limitations of this dissolved-gas model
The limitations here are severe and you should read them as constraints on use, not as small print. The model assumes a perfect square profile: instantaneous arrival at maximum depth, no time at intermediate depths, and no multi-level credit. It assumes a single dive by a diver whose sixteen compartments start in equilibrium with air at the surface pressure of the dive site, so it cannot model repetitive dives, surface intervals, residual nitrogen, or flying after diving. It models nitrogen only, so trimix, heliox and any gas switch on ascent are out of scope, as is the counterdiffusion that makes helium planning genuinely difficult.
It also ignores everything that is not gas physics. Dissolved-gas models take no account of water temperature, thermal history, exercise intensity on the bottom or during the ascent, hydration, body composition, age, a patent foramen ovale, or the bubble nuclei that the modern bubble models (VPM-B, RGBM) were invented to describe. It cannot detect that your ascent was uncontrolled, that you missed a stop, or that your gas ran out. Real decompression sickness occurs at a low but non-zero rate on profiles that every algorithm calls clean.
Numerically, the ascent is integrated in three-second steps and the no-stop limit is located by bisection to roughly a hundredth of a minute, so displayed values may differ from a dive computer in the last digit even where the model is identical. Stops are quantised to 3 m and rounded up to whole minutes, which is conventional but adds a small amount of unearned conservatism. Depths above 100 m, bottom times over 360 minutes, oxygen fractions outside 5 to 100 %, gradient factors outside 5 to 100 % and altitudes above 4,500 m are refused rather than extrapolated.
- Not a dive plan. Use a certified dive computer and the tables of the agency that trained you.
- Not validated. No implementation on a web page has been through the man-trials that validate a real decompression table.
- Single dive only. Repetitive diving, surface intervals and residual nitrogen are not modelled.
- Nitrogen only. No helium, no gas switches, no deco gases, no oxygen decompression.
- Decompression diving needs training. If the page returns a stop schedule, the correct response for an untrained diver is to change the plan, not to follow the schedule.
Common questions about ZH-L16C planning
Which decompression model does this planner use?
It runs the Bühlmann ZH-L16C nitrogen parameter set: sixteen tissue compartments with half-times from 5 to 635 minutes, the Haldane and Schreiner gas-loading equations, and the gradient factor method for conservatism. The published coefficients are used exactly as tabulated, so every number on the page can be reproduced by hand from the source.
What do the gradient factor low and high settings change?
Gradient factor low sets how close the leading compartment may come to its M-value when you leave the bottom, which fixes the depth of the first stop. Gradient factor high sets how close it may come on surfacing, which fixes the length of the shallow stops. A setting of 100/100 reproduces raw ZH-L16C, while 30/85 is a common moderately conservative dive computer default.
How is the no-decompression limit calculated here?
The planner assumes a square profile at maximum depth, then searches for the longest bottom time from which a continuous ascent at 9 metres per minute never breaches the gradient-factor-adjusted M-value of any compartment. Descent time is treated as bottom time, which makes the reported no-stop limit slightly shorter than a computer that models the descent.
Why do these numbers differ from US Navy or agency tables?
Different models fitted to different data. The US Navy Diving Manual Revision 7 air tables come from the Thalmann exponential-linear algorithm, and recreational agency tables are derived from their own trials. Bühlmann ZH-L16C at 100/100 sits close to the Navy no-stop limits near 15 to 18 metres and is noticeably more conservative below 24 metres.
Does the planner handle repetitive dives, helium or altitude?
Altitude is handled: surface pressure comes from the international standard atmosphere and the compartments start equilibrated at that pressure. Repetitive dives, surface intervals, helium mixes and gas switches are not modelled, so every calculation assumes one single dive on a nitrogen-oxygen mix by a diver who is fully desaturated at the start.
Can I actually dive the schedule this page produces?
No. This is an educational estimate and not a dive plan. Use a certified dive computer, the tables of the agency that trained you, and the training you actually hold. Any decompression dive needs specific technical training, redundant gas, planned deco gases and a validated planning tool.
Sources and further reading
Sources used for the coefficients, constants and comparison figures on this page:
- Bühlmann, A. A. — Tauchmedizin (5th ed., Springer, 2002) and Decompression – Decompression Sickness (Springer, 1984): the ZH-L16 A/B/C nitrogen coefficient sets, the derivations a = 2 bar / ∛τ and b = 1.005 − 1/√τ, the 0.0627 bar alveolar water-vapour constant, and the M-value line M = a + Pamb/b. The ZH-L16C table used here is reproduced at the Bühlmann decompression algorithm reference and was cross-checked against Bühlmann's own derivation formulas for every compartment.
- Baker, E. C., P.E. — Understanding M-values, Immersed magazine, and Clearing Up the Confusion About "Deep Stops": the gradient factor method and the linear interpolation of GF between the first stop and the surface. Published copy hosted by Shearwater Research.
- US Naval Sea Systems Command — US Navy Diving Manual, Revision 7, Volume 2, Chapter 9: Table 9-7 no-decompression limits used in the comparison table, and the Table 9-9 heading that fixes the standard ascent rate at 30 ft/min (9.1 m/min) and descent rate at 75 ft/min. Revision 7 air decompression tables (PDF).
- NOAA Office of Marine and Aviation Operations, NOAA Diving Program — NOAA Diving Manual and the NOAA Diving Medical Technician formula reference: the 33 fsw / 34 ffw per atmosphere conversions, Dalton's law partial-pressure formula, the 1.4 bar working and 1.6 bar maximum oxygen partial-pressure limits, and the recommended 3-minute safety stop. NOAA diving formula reference (PDF).
- International Organization for Standardization — ISO 2533 International Standard Atmosphere, for the troposphere pressure-altitude relation used to set surface pressure at altitude.
Where this page and a source disagree, the source is right. Where this page and your dive computer disagree, follow your dive computer.