Содержание

Deco engine

The decisions that shape your schedule

The judgment calls Bühlmann leaves open: where stops land, how stop times are rounded, how gas switches are chosen, what happens when a cylinder runs dry, water type and altitude, and how the engine handles CCR, repetitive dives and oxygen breaks.

Обновлено 30 сентября 2026 г.

На этой странице

What it is

The published Bühlmann algorithm is the easy part. What separates a serious planner from a weekend script is the dozens of decisions the algorithm doesn’t make for you: where to place a stop, how to round it, when to switch gas, and how to treat fresh water. Two engines can agree on the physics and still print different stop lists because of these choices. This page documents the ones Dive Kit makes, because each one changes the schedule you dive.

Where stops land, and how long you hold them

A decompression stop is a depth where you pause to off-gas while staying under the M-value ceiling. Turning a smooth, continuous ascent into a list of fixed stops takes choices:

  • Stops sit on a grid (every 3 m by default) and a ceiling always rounds up, so you are never asked to hold shallower than your true ceiling.
  • The last stop is a real stop, not an afterthought. Mix a coarse grid with a small last-stop depth and a naive tool sends you back to a deeper grid depth. Dive Kit holds at the last stop the way a diver would. The last stop also carries a one-minute minimum, so the final safety hold never vanishes even when little obligation is left at that depth.
  • The last stop ends exactly at your GF-High. Between stops, the engine counts the gas you breathe off while you climb, which is why your first stop can sit shallower than other tools place it (the how Dive Kit compares to MultiDeco page traces this on a deep dive). The last stop is the exception: the engine holds it until your leading tissue can surface within your GF-High limit, and it does not shorten the hold by assuming the swim to the surface will finish the off-gassing. You leave the last stop the moment you are clear to surface, and not before. The length of the last stop does not change when you change the final ascent speed.

Stop rounding: whole-minute, 30-second, and precise modes

The engine works every dive to the second internally. How it shows each stop is a setting:

  • Whole-minute stops (the default) give a clean, followable table: the number you hold on the line, the way a printed deco schedule reads. The engine works each stop out to the second, then rounds it up to a whole minute. The rounding runs inside the engine, not on the screen: it holds each stop in whole-minute steps and only leaves on a minute boundary. The rule for leaving is one-way. It can turn a “leave” into a “hold”, never a “hold” into a “leave”. So a rounded stop lasts at least as long as the exact schedule asked for, you never leave a stop sooner or shallower than the continuous engine allows, and because the engine rounds before it works out the rest of the dive, every downstream number (runtime, the central nervous system oxygen clock CNS, the oxygen tolerance unit clock OTU, and gas) matches the schedule you actually dive.
  • Precise and 30-second modes (opt-in) show the real obligation instead of the rounded table. Precise mode shows each stop to the second in MM'SS" notation: a hold of one minute five seconds reads 1'05" instead of a rounded 2', and a 20-second touch reads 0'20" instead of folding into the next minute. A 30-second mode sits between the two. You pick the mode with the Stop time rounding control in the deco planner (1 s / 30 s / 1 min, where 1 s is the precise mode), and the choice is saved with the plan. See Stop time rounding for where the control lives.

Whole minutes are the default because that is the schedule you can dive, and because the rounding only ever adds time: the engine rounds each stop up, never down, so a rounded stop is always at least as long as the exact one. The exact number is still there underneath, and precise mode shows it.

Switching gases on the way up

Richer mixes off-gas faster but turn toxic under pressure, so each gas has a maximum operating depth (MOD) set by its oxygen partial pressure (PPO₂).

  • Switch depth is set by the gas’s oxygen content. A lean mix (under 28% O₂) is capped at a PPO₂ of 1.4 bar, a mid mix (28% to under 45%) at 1.5, a rich mix (45% and above) at 1.6. The boundary value takes the higher band: a gas of exactly 28% O₂ counts as mid, and exactly 45% counts as rich. The same cap sets both the switch depth and the hyperoxia warning, so the MOD you see is the depth the engine switches at, give or take the 0.03 bar tolerance below. These three numbers are the Max PPO₂ caps in the PPO₂ section of Settings; set all three equal and you get a plain single-cap model.
  • A gas switch can take time, and that time counts against the old gas. You can set a gas-switch time: a short pause at the switch depth, the way a diver stops to change regulators and confirm the gas. The default is 0 minutes. When you set it, the engine keeps you on the old, leaner gas for that pause, so your tissues keep loading at the old rate. You get no credit for the new gas until you switch to it. The pause also costs gas. A switch between dive levels is charged at your Working SRMV, at the depth you leave, against the cylinder you switch to. A switch on the ascent is charged against the cylinder you switch to at whatever rate that cylinder runs on, so a deco bottle’s pause costs Deco SRMV. A rebreather plan charges nothing for a switch between dive levels, because the loop bottom phase records no pause to charge.
  • A boundary case worth showing. Pure oxygen capped at 1.6 bar has a MOD of 5.8 m in EN 13319 water: at the 6 m last stop its PPO₂ is 1.613 bar, a hair over the cap (1.618 bar in the Red Sea). Read strictly, the engine would refuse to switch you to oxygen at 6 m, the exact stop oxygen is meant for, and leave you on a leaner gas. Dive Kit treats a gas as breathable while its PPO₂ is at most 0.03 bar over its cap, so the switch happens in every water type. The reported MOD stays exact; the tolerance lets a gas go about 0.3 m deeper for oxygen and 0.6 m for EANx50. See Conventions.

The oxygen exposure these switches drive (the CNS and OTU clocks) is covered in the two-oxygen-clocks section of how it works.

Which gas a bailout starts on

A bailout drops you off the rebreather loop and finishes the dive on open circuit. The first question it has to answer is which cylinder goes in your mouth at the moment you bail out, and Dive Kit hands you the richest gas you carry that you can actually breathe at that depth.

Your bailout rack is every open-circuit cylinder on the plan, so on a rebreather it includes the diluent. The engine tests each one against the same two bounds it uses for any other gas switch: the mix has to be at or above its minimum breathable PPO₂ at that depth, and the depth has to be within its MOD under the band cap for its oxygen content. Among the ones that pass, the highest PPO₂ wins, and a tie falls to the order of your gas list. If nothing you carry passes, the plan keeps the first cylinder and raises a critical warning, because a dive you cannot bail out of should still show you the schedule you are looking at.

That costs you one switch pause at the bail point, not one per cylinder you skipped. Before 2.10.1 the engine took the first cylinder in your list whose MOD reached the bail depth, which on a 60 m trimix plan bailing out at 21 m was the 10/50 diluent, and then billed a pause for each further switch walking up the rack to the EANx50 it should have started on. Three pauses instead of one is enough to make a bailout read longer than staying on the loop, which is backwards.

The order you list your cylinders in no longer changes a bailout schedule at all.

Two related things follow, and they apply to every bailout view: End of profile, On ascent depth, At time and After level N. If nothing you carry is safe to breathe at the depth you asked to bail out from, the view reports that instead of quietly handing you the loop plan under a chip that says otherwise. And a cylinder a contingency failure point takes away is gone from every bailout, views included, so a scenario that loses your EANx50 will not hand it back to you at the switch depth.

An empty cylinder can hand over, and only when you ask

A planner that runs a cylinder to zero and keeps breathing it is not describing a dive anyone could make. A planner that quietly moves you to the next bottle has answered a question you did not ask, and has hidden the one number you opened the planner for: how much more gas to bring. Both readings are defensible, which is why this is a setting and not a rule.

The default is to stay on the empty cylinder and report how many bar short it came, under a remaining figure that stops at 0 because it is a gauge reading. That is what every version up to 2.8.7 did, so an old plan, an old share link and a fresh install all produce the same schedule they always did, and the gas-sizing question keeps its exact answer.

Turn on When a cylinder runs out → Switch gas and the engine does what a diver would do at the stop. It works out the schedule first, then walks the consumption forward second by second to find the earliest moment any cylinder crosses its real contents, marks that cylinder unavailable from that moment, and runs the whole plan again. Each pass fixes one more cylinder, so the loop cannot run longer than the number of cylinders you carry. The switch itself takes the richest gas still holding gas that is safe at that depth, ties broken by the order of your gas list, costs no gas-switch time (there is no old gas left to purge on), and lands on the plan’s stop-rounding grid so a whole-minute table stays whole-minute and the bottle ends at zero rather than below it.

Three limits are deliberate. Nothing is ever switched to unless it is safe at that depth; if nothing qualifies, the plan stays on the empty cylinder and raises a critical warning naming the shortfall. The bottom phase is not re-planned: a cylinder already empty when the ascent starts is handed over at the first ascent step, and one the ascent was never going to breathe has the deco planned without it and raises a critical of its own, because an unre-planned bottom means that cylinder was asked for more gas than it holds. And an oxygen break keeps breathing the plan’s back gas whenever that gas is one you can breathe where the break falls. If the back-gas cylinder is empty, or its mix is hypoxic or over its PPO₂ cap at the break depth, the break moves to the leanest gas you still hold that is safe there. Leanest, because the point of the break is to come off a high partial pressure of oxygen, so the least oxygen-rich mix that still clears the minimum PPO₂ is the one you would actually reach for. If nothing you carry qualifies, you get no break rather than an unbreathable one, the plan says so with an “oxygen break skipped” warning naming the depth, and the oxygen clock keeps running so the CNS and OTU figures still show the exposure you are taking.

Only the mid-deco handover is a caution in the warnings list. The other two are failures and are critical there, rather than letting a schedule the engine cannot stand behind look survivable. The cylinder’s own card is red whichever happened to it, with a dashed border marking the handover.

The bottom time finder ignores the setting entirely and always solves in shortfall mode, because “the longest stay with every cylinder above its reserve” only means something while each cylinder is judged on its own.

When a plan cannot surface

Some settings ask the model for the impossible: with a lean gas at a 6 m last stop and a low GF High, the tissues at the stop keep absorbing nitrogen toward a level the surfacing gradient never accepts, so the stop would never end. The engine proves this exactly at each stop (the whole hold is known in closed form while you breathe one gas) instead of looping or timing out.

The design decision is to answer rather than refuse: the engine raises GF High to the lowest value that can complete the decompression and computes that schedule, flagged with a critical warning that names both values. Every export records the GF the schedule was actually computed with. If even GF High 100 cannot finish the plan, you get a clear error instead of a schedule. The full story, including the per-depth guarantee thresholds and how the engine proves impossibility without false alarms, is on Impossible plans.

Salt water, fresh water, and altitude

Dive Kit uses a water-type-aware conversion (fresh 10.20, EN13319 10.00, salt 9.95, Red Sea 9.92 m per bar, all derived from one water-density table) and the real surface pressure, 1.01325 bar at sea level and lower at altitude. That factor feeds both the gas-loading and the M-value/ceiling maths, not just one of them. Feeding only one is a subtle but real bug in naive implementations. For the same gauge depth, fresh water sits at slightly lower absolute pressure, so loading and total decompression come out a little less than salt.

Where the gradient-factor line hangs on a multi-level dive

Gradient factors describes the line as running from GF Low at your deepest ceiling to GF High at the surface. On a single-level dive there is no ambiguity: the ceiling grows through the whole bottom, so the deepest ceiling is the one standing when you leave.

A multi-level dive makes it a real choice. Spend 27 minutes at 72 m, then 5 minutes at 42 m, and your ceiling lifts during those 5 minutes as the fast tissues unload. There are two defensible anchors: the deeper ceiling you owed at 72 m, or the lifted one you carry off the 42 m level. Dive Kit uses the deeper one, for the whole dive.

The reason is that the other reading is not a choice the diver makes, it is an accident of the profile’s shape. If the ceiling reaches above your shallower level, the engine has to decompress on the way down to it, and it reads the anchor before that level. If the ceiling stops just short, the engine flies straight there and reads the anchor after the level. Those two readings differ by the entire off-gassing of the level, and nothing but a fraction of a metre of ceiling decides which one you get. Tightening GF Low by one point could tip a plan across that line and print a shorter dive: 72 m for 27 minutes then 42 m for 5 on air, at GF High 100, ran 250 minutes at GF Low 22 and 230 at GF Low 21, with the first stop moving up from 36 m to 33 m as the setting got more conservative.

Anchoring at the deepest ceiling of the bottom phase removes the choice. It is the same number whichever way the plan was built, and it can only get deeper as you tighten GF Low, so a more conservative setting always buys you a longer dive.

Beyond the basic open-circuit dive

The same engine handles dives an open-circuit-only model cannot:

  • Closed-circuit rebreathers (CCR). A rebreather holds a constant oxygen partial pressure (the setpoint). The engine works out the diluent mix that holds that setpoint at every depth step and runs the decompression on the resulting loop mix. It models three stages (a low descent setpoint applied only on the way down, a bottom setpoint for the working dive, and a depth-keyed deco-setpoint schedule for the ascent), caps any setpoint the depth cannot physically achieve, and builds an open-circuit bailout plan from the worst realistic moment. See CCR diving for the full walkthrough.
  • Repetitive dives. A second dive starts with leftover gas still dissolved. The engine carries it across the surface interval: nitrogen and helium keep off-gassing, the CNS clock decays on its half-life, and OTU accumulates as the daily dose it is meant to be. A second 30 m dive an hour after the first comes out much heavier, as it should.
  • Multi-level profiles and the ceiling. There is no bottom phase and a deco phase with a hard line between them. There is one dive plan, and the decompression is woven into it. Put a level shallower than your current ceiling and the engine plans that ascent properly: the stops you owe between the two levels, the gas switches those stops call for, and then the hop down to the level, where your level’s own gas takes over. So you can put a profile point anywhere, including inside the deco, and every obligation is still honoured around it. Which gas an inter-level leg is breathed on follows one rule in both directions: going deeper you switch before you descend, coming shallower you ascend on what you are already breathing and switch when you arrive. Before 2.10.0 a shallower level was reached by one straight ascent on the arriving level’s gas, which could put a diver on a rich stage mix far below its operating depth and, on a long bottom, drive them back down to the ceiling afterwards.
  • Oxygen breaks. Long stretches on high-concentration oxygen run up the CNS clock, and the standard mitigation is an air break. When enabled, the engine inserts breaks on the schedule you choose and models them in full: your fast tissues take a little inert gas back on during the break, and that re-loading carries through the rest of the plan. In rounded mode the break starts on the next whole minute of the stop (the cost is up to about 59 extra seconds on oxygen, which is how a whole-minute table reads anyway); precise mode starts it at the exact second.

Часть этого руководства составлена с помощью ИИ и может содержать ошибки. Материал носит образовательный характер и не заменяет обучение. Всегда погружайтесь в пределах своей сертификации и проверяйте данные по приборам.