Gas
loading calculations and the Schreiner Equation:
The fundamental relationship of the dissolved gas model is described
by a differential equation:
dP/dt = k(Pi - P)
which states that the instantaneous rate of change of inert gas
pressure (dP/dt) in a hypothetical tissue compartment is proportional
to a time constant (k) multiplied by the gradient between the inspired
inert gas pressure (Pi) and the present (or initial) compartment
inert gas pressure (P). This kind of relationship in common in the
natural sciences; Newton's Law of Cooling, for example. The main
principle is that a GRADIENT is the driving force behind the rate
of change in the amount of something.
In order to solve this differential equation for P, compartment
inert gas pressure, as a function of time, we must use integral
calculus. Before we do this, however, there are two conditions we
must consider. The first is when the inspired inert gas pressure,
Pi, remains constant such as during a constant depth dive profile.
The second is when Pi changes with respect to time such as during
ascents and descents. In order to simplify the integration in the
second case, we will stipulate that the inspired inert gas pressure
changes at a constant rate such as with a constant rate of ascent
or descent, i.e. 10 msw/min.
Rather than writing out the integrals here, we will go right to
the solutions! In the first case (constant depth), the solution
is:
P = Po + (Pi - Po)(1 - e^-kt)
This is the "Haldane" equation or the "instantaneous"
equation.
This same equation can also be written as:
P = Po + (Pi - Po)(1 - e^(-ln2t/half-time)) or
P
= Po + (Pi - Po)(1 - e^(-0.693t/half-time)) or
P = Po + (Pi - Po)(1 - 2^(-t/half-time))
(the latter form appears in Bühlmann's Tauchmedizin book).
In the above equations:
P = compartment inert gas pressure (final)
Po = initial compartment inert gas pressure
Pi = inspired compartment inert gas pressure
t = time (of exposure or interval)
k = time constant (in this case, half-time constant)
e = base of natural logarithms
ln2 = natural logarithm of 2
In the second case, ascent or descent at a constant rate, the solution
is:
P = Pio + c(t - 1/k) - [Pio - Po - (c/k)]e^-kt
This is the general solution or "Schreiner" equation.
It can also be written as:
P = Pio + R(t - 1/k) - [Pio - Po - (R/k)]e^-kt
In the above equations:
Pio = initial inspired (alveolar) inert gas pressure
(Pio = initial ambient pressure minus water vapor pressure)
Po = initial compartment inert gas pressure
c = rate of change in inspired gas pressure with change in ambient
pressure
(this is simply rate of ascent/descent times the fraction of inert
gas)
R = same as c
t = time (of exposure or interval)
k = half-time constant = ln2/half-time (same as instantaneous equation)
Note that when c (or R) = 0 in the above equation, it is reduced
to the more familiar instantaneous form, P = Po + (Pi - Po)(1 -
e^-kt).
Examples
of applying the gas loading equations:
I would like to provide some advice about how to set up your program
to calculate for ascent and descent portions of the dive profile.
Many people use the instantaneous gas loading equation and "force"
the computer to calculate the ascent or descent profile in greater
resolution by dividing the segment into smaller and smaller increments.
This is not an efficient way to calculate an ascent or descent profile!
The
equation P = Po + (Pi - Po)(1 - e^-kt) is applicable only for CONSTANT
DEPTH profiles. This is a point that Bühlmann unfortunately
does not explain in his book. To use this familiar equation for
ascent or descent profiles requires you to break up the interval
into very small increments to produce any kind of accuracy.
The
efficient and direct calculation for gas loading during ascent and
descent profiles is with the general solution given by Schreiner:
P = Pio + R(t - 1/k) - [Pio - Po - (R/k)]e^-kt
Where:
Pio = initial inspired (alveolar) inert gas pressure
(Pio = initial ambient pressure minus water vapor pressure)
Po = initial compartment inert gas pressure
R = rate of change in inspired gas pressure with change in ambient
pressure
(this is simply rate of ascent/descent times the fraction of inert
gas)
t = time
k = half-time constant = ln2/half-time (same as familiar equation)
Note that when R = 0 in the above equation, it is reduced to the
more familiar form, P = Po + (Pi - Po)(1 - e^-kt).
The Schreiner equation is used to compute the partial pressure gas
loading for each gas separately during ascent/descent. The sum of
these is then the total compartment gas loading. The following examples
are subroutines in FORTRAN (should be easy to follow!) from some
of my programs which show the correct application of equations.
This subroutine is for ascent/descent segments at a constant rate
(i.e. descend to 100 fsw at 50 fsw/min.). Note that an ascent rate
must be expressed as a negative number (i.e. -50 fsw/min).
SUBROUTINE ASCDEC (SDEPTH, FDEPTH, RATE)
C
INTEGER MIXNUM, TEMPSG, SEGNUM
REAL FHE, FN2, KHE, KN2, PHEO, PN2O, PHE, PN2, PH2O
REAL FDEPTH, SDEPTH, PIHEO, PIN2O, RATE, RTIME, SGTIME, TEMPRT
REAL HERATE, N2RATE, SPAMB, FPAMB, PAMB
DIMENSION FHE (10), FN2(10), KHE(16), KN2(16)
DIMENSION PHEO(16), PN2O(16), PHE(16), PN2(16)
COMMON /A/ FHE, KHE, KN2, PH2O, /B/ RTIME, SEGNUM, FN2, SGTIME
COMMON /B/ MIXNUM, /C/ PHE, PN2, /D/ PAMB
SGTIME = (FDEPTH - SDEPTH)/RATE
TEMPRT = RTIME
RTIME = TEMPRT + SGTIME
TEMPSG = SEGNUM
SEGNUM = TEMPSG + 1
FPAMB = FDEPTH + 33.0
SPAMB = SDEPTH + 33.0
PAMB = FPAMB
PIHEO = (SPAMB - PH2O)*FHE(MIXNUM)
PIN2O = (SPAMB - PH2O)*FN2(MIXNUM)
HERATE = RATE*FHE(MIXNUM)
N2RATE = RATE*FN2(MIXNUM)
DO 430 I = 1,16
PHEO(I) = PHE(I)
PN2O(I) = PN2(I)
PHE(I) = PIHEO + HERATE*(SGTIME - 1.0/KHE(I)) -
* (PIHEO - PTHEO(I) - HERATE/KHE(I))*EXP (-KHE(I)*SGTIME)
PN2(I) = PIN2O + N2RATE*(SGTIME - 1.0/KN2(I)) -
* (PIN2O - PTN2O(I) - N2RATE/KN2(I))*EXP (-KN2(I)*SGTIME)
430 CONTINUE
RETURN
END
This next subroutine is for constant depth segments (i.e. at 100
fsw for 15 minutes).
SUBROUTINE CDEPTH (DEPTH, SRTIME)
C
INTEGER MIXNUM, TEMPSG, SEGNUM
REAL FHE, FN2, KHE, KN2, PHEO, PN2O, PHE, PN2, PH2O, SRTIME
REAL DEPTH, PAMB, PIHE, PIN2, RTIME, SGTIME, TEMPRT
DIMENSION FHE (10), FN2(10), KHE(16), KN2(16)
DIMENSION PHEO(16), PN2O(16), PHE(16), PN2(16)
COMMON /A/ FHE, KHE, KN2, PH2O, /B/ RTIME, SEGNUM, FN2, SGTIME
COMMON /B/ MIXNUM, /C/ PHE, PN2, /D/ PAMB
SGTIME = SRTIME - RTIME
TEMPRT = SRTIME
RTIME = TEMPRT
TEMPSG = SEGNUM
SEGNUM = TEMPSG + 1
PAMB = DEPTH + 33.0
PIHE = (PAMB - PH2O)*FHE(MIXNUM)
PIN2 = (PAMB - PH2O)*FN2(MIXNUM)
DO 520 I = 1,16
PHEO(I) = PHE(I)
PN2O(I) = PN2(I)
PHE(I) = PHEO(I) + (PIHE - PHEO(I))*
* (1.0 - EXP (-KHE(I)*SGTIME))
PN2(I) = PN2O(I) + (PIN2 - PN2O(I))*
* (1.0 - EXP (-KN2(I)*SGTIME))
520 CONTINUE
RETURN
END
With the two above subroutines (subprograms), a complete dive profile
can be directly calculated in any combination of ascent/descent
segments and constant depth segments (what some folks call waypoints).