The VPM Algorithm



Copyright 1999 - 2004, by Eric Maiken


VPM Algorithm Details 

The VPM algorithm has been undergone two major updates since the programs available on this web site were written. The first updates, made in 1999-2001 extend the VPM to repetitive diving, as detailed in the publications by Yount, Maiken, and Baker (this has been dubbed VPM-A). In 2003, Baker introduced VPM-B, which systematically decreases ascent gradients, thereby extending shallow stop times.

The following material relates primarily to the original open source code VPM-O, which predates VPM-A. Most of the concepts do, however, carry over to the implementation of the VPM that is presently used in commercial decompression software.

Why are VPM  Decompression Tables so Similar to the RGBM Tables?

Why have VPM tables always been so similar to Bruce Wienke's RGBM tables? Until 2002, this was simply because the RGBM was essentially the same as the VPM for a single decompression dive. Even though Wienke claims to have "abandoned" VPM, his publications and publicity from vendor partners belie this as marketing over substance. Wienke apparently still uses core elements of Yount and Hoffman's VPM algorithm as a basis for the RGBM. Even today, in 2004, it can be demonstrated from commercial programs that the "full-up" RGBM is still underpinned by Yount and Hoffman's iterative algorithm. With the wide distribution of open source VPM, Wienke was placed under pressure to differentiate his product by customers who had paid for material that could be obtained virtually for free. Since 2002, this has resulted in a new RGBM model, publicized in dive industry print and venues. Nonetheless, as demonstrated by the close correlation of ascent data for VPM and RGBM, this work has actually only resulted in incremental adjustments of the model. You pay your money and you take your chances.

Comparison of the VPM to Conventional Decompression Procedures

A major difference between the VPM and standard supersaturation algorithms is that the VPM programs use an iterative procedure to calculate a decompression schedule. In each step of the iteration, a new decompression schedule is calculated. The total decompression time is then fed-back into the calculation to revise the critical gradients (SUB PNEW in the BASIC Programs), and a more liberal schedule is produced. Maybe this should be called the "IGBM" --the increased gradient bubble model  ;*) This process of updating the ascent repeats until the decompression time converges to what supposedly corresponds to the formation of the maximal allowable amount of free gas. The first and last schedules produced for a short dive are often quite different. This results from the contribution of both the magnitude of the growth gradient +G and the time that the gradient acts to drive bubble growth. After a short dive, the tissues will off gas rapidly to circulation. Hence, because the time that the gradient acts is small, the magnitude of G can be increased by allowing shorter and shallower stops.

VPM tables handle the in and out gassing of dissolved gas in tissues the same way as conventional neo-Haldane calculations do. That is, parallel compartments with exponential half-times ranging from minutes to hours are used to model the uptake and elimination of inert gas by the body. This is in and off gassing is handled symmetrically in all of my programs. The divergence of the VPM from conventional calculations is in the details of how a diver's ascent is controlled. Rather than setting limits on the maximum pressure ratio/difference between gas dissolved in tissues and ambient pressure (supersaturation), ascents are limited by controlling the volume of gas that evolves in the body due to the inevitable formation of bubbles. As long as this volume is kept smaller than a certain "critical volume," it is presumed that a diver's body has the ability to tolerate the bubbles. If the volume of bubbles exceeds the critical volume, the diver is at risk of a pain-hit or worse. The volume of the gas in bubbles is related to the product: (number of bubbles) x (Gradient) x (growth time). The number of growing bubbles is set by the maximum compression encountered on a dive. This crushing pressure is related to the deepest depth of the dive as well as the descent rate and gas mixture. All of the programs on this site directly relate pCrush to the maximum depth. The gradients and bubble growth time are controlled by the ascent schedule, with the surface explicitly considered the last decompression stop.

Rather than using tens or hundreds of arbitrary of parameters to generate ascent schedules, the main result of the VPM is the replacement of the ascent-limiting matrix of M /a-b values with only four constants, corresponding to measurable physical and physiological quantities. In the BASIC programs, they are found in SUB DIVEDATA. The minimum bubble radius excitable into growth ro = ro, the skin tension of bubble nuclei gamma = g , the nuclear crushing tension gc = g c, and the maximum tolerable volume of bubbles, which is proportional to lambda = l. For the hour-long time scales treated by this program, the nuclear regeneration time (see Yount's eq. 2) is essentially infinite, and hence, not used. From these constants, critical gradients G are formed in SUB DIVEDATA on the first iteration and then in SUB PNEW on subsequent iterations. The critical gradients limit ascents because they are directly related to the rate of bubble-growth by the diffusion equation.

Benchmarking the VPM

Hundreds of decompression schedules generated by the current VPM-B model are been compared to Buhlmann, GF, RGBM, and NOAA tables in a series of files listed on the VPM Publications page

By duplicating Yount and Hoffman's results, I mean that the open source programs calculate tables that look like theirs if the bubble parameters are set to: (lambda = 7180 fsw min, gamma = 17.9 dyne/cm, gc = 257 dyne/cm, ro = 1 um). For example, the deco profile generated by the BASIC VPM programs for the air dive 200 ft for 60 min is similar to the profile published as Yount & Hoffman FIG. 1 in ref. 1. The program's no-stop air limits duplicate  FIG. 2, while FIGS. 3 and 4 are also well fit.

Open Source VPM Air Diving No-Stop Times

Depth (ft)
50 60 70 80 90 100 110 120 130 140 150
75 46 32 25 20 16 14 12 10 9 8


The O2 Window and the VPM

Often, if you compare an ascent made with a closed oxygen window to an ascent with high ppO2 deco mixes, then not only are the stops where the high ppO2 mix is breathed shortened, but so also are the preceding deeper stop times. There is no analogy to this effect in a supersaturation calculation (where only the stop times where the mix is breathed are reduced). This is an artifact of the iterative procedure used in the VPM model. Because The dissolved nitrogen will wash out faster when high ppO2 mixes are used in shallow stops, the total deco time is reduced and the allowable Gs for each iteration are greater --thereby reducing all of the stop times (the BASIC program's SUB PNEW sets the new supersaturation gradients for all stops). 

It's best to open the O2 window as wide as possible and as early as possible in the ascent. However, with a limited number of stages, and short deep stop times, remember that because the volume of bubbles also depends on growth time, you shouldn't sacrifice high ppO2 on the longer shallow stops for an early switch. Try coming onto nitrox 50% or 50/50 at 70ft and pure O2 at 20 ft. You do the tox calculations. Inert gas management is also important, with long decompression dives favoring high helium content in decompression mixes.

Mixed Gas and Repetitive Diving and the VPM

I extended the VPM algorithm to trimix (or multi-inert-gas) diving in the Mathematica version of the VPM decompression program.  This was done by fractioning the in and out gassing of inert gases in tissues (ala Keller/ Bhulmann) and setting the critical ascent gradients for the total partial pressure of the inert gases summed in series. The analytic, logarithmic expression for stop times (tstop) employed in the BASIC program's SUB STOPS was replaced with a numerical solution of the restriction on the sum of He and N2 partial pressures. Although, this is a conventional procedure for modeling multiple inert gasses, the physiological and physical basis of this technique is dubious because both He and N2 diffuse into bubbles independently --yet the rates of transfer of each gas are coupled because bubble pressure depends on bubble volume. 

Using highly soluble gases such as argon during ascent can lead to bubble growth even though the tissue partial pressures of other inert gasses is reduced via lowered inspired partial pressure. That is, soluble inert gases such as argon, sulfur hexaflouride, etc. can act as bubble amplifiers during or after deco. This is clearly one area where a supersaturation view is naive and a full bubble mechanical calculation would be complex.