haldane {scuba} | R Documentation |
Tissue Saturation by Haldane Model
Description
Computes a diver's tissue saturation during and after a dive, as predicted by a Haldane model.
Usage
haldane(d,
model=pickmodel("DSAT"),
prevstate=NULL,
progressive=FALSE,
relative=FALSE,
deco=FALSE,
derived=FALSE)
Arguments
d |
The dive profile. An object of class |
model |
The decompression model. An object of class |
prevstate |
Optional. Initial state of the diver. A data frame containing the tissue saturations for each tissue compartment in the model, at the start of the dive. Defaults to the state of a diver with no previous dive history. |
progressive |
Logical flag. If |
relative |
Logical flag indicating whether to compute relative tissue
saturations. If |
deco |
Logical flag indicating whether to calculate relative saturations
for a decompression dive.
If |
derived |
Logical flag indicating whether to calculate additional quantities such as the decompression ceiling. |
Details
This command computes a diver's nitrogen saturation during and after a dive, as predicted by a Haldane model (Boycott et al, 1908).
A Haldane-type decompression model describes the diver's body as a set of independent compartments connected directly to the breathing gas and governed by classical diffusion.
Henry's Law is applied to predict the on- and off-gassing of inert gas in each tissue (compartment) of the model. The resulting differential equations are solved analytically (the solution is often called the ‘Schreiner equation’ in the decompression literature).
The argument prevstate
represents the tissue saturation of the
diver at the start of the dive. It should be a data frame, with one row for
each compartment of the decompression model, and one column for each
inert gas (N2
and/or He
) in the model. Such data frames
are usually generated by saturated.state
or
haldane
.
If progressive=FALSE
, the diver's tissue saturation
at the end of the dive is calculated.
If progressive=TRUE
,
the tissue saturations are calculated at each
waypoint during the dive. The corresponding times
(extracted by times.dive(d)
)
are not equally spaced over time.
If derived=TRUE
then additional quantities are
computed including the washout (the difference
between the current tissue tension of inert gas
and the partial pressure of inert gas in the breathing gas),
the decompression ceiling depth (minimum tolerable diving depth)
and decompression ceiling pressure (minimum tolerable
ambient pressure). These quantities are returned as an attribute
of the result: attr(result, "derived")
.
This is a list containing the components
Dceiling
(depth ceiling),
Pceiling
(pressure ceiling)
and washout
(washout), each of which
is a vector, matrix or array of the same format as the result.
To compute the tissue saturation
at an arbitrary instant of time during the dive, tim
, use
haldane(chop.dive(d, 0, tim))
. To view the tissue saturation
at arbitrary instants of time using interactive graphics,
use showstates
.
Value
If relative=FALSE
and progressive=FALSE
, a data frame giving
the diver's inert gas saturation state at the end of the
dive. Each row of the data frame corresponds to a tissue compartment.
The column N2
gives the nitrogen tension (in atmospheres absolute) of
each compartment. The column He
, if present, gives the
Helium tension (in atmospheres absolute) in each compartment.
If relative=FALSE
and progressive=TRUE
,
a three-dimensional array giving
the diver's inert gas saturation state at each time point during the
dive. The first dimension of the array corresponds to successive time points
during the dive (the times can be extracted by
times.dive
).
The second dimension corresponds to the tissue compartments.
The third dimension corresponds to the inert gases
(N2
and/or He
).
The entries are gas tensions (in atmospheres absolute).
If relative=TRUE
and progressive=FALSE
, a vector
giving the diver's relative saturation of inert gas at the end of the
dive. Entries in the vector correspond to tissue compartments.
The entries are relative gas tensions, that is,
the total inert gas (Nitrogen plus Helium) tissue saturation
divided by the appropriate M-value for that compartment: either
the surfacing M-value (if deco=FALSE
) or the
M-value at current depth (if deco=TRUE
).
If relative=TRUE
and progressive=TRUE
,
a matrix giving the diver's relative saturation
at each time point during the
dive. Rows of the array correspond to successive time points
during the dive. Columns correspond to the tissue compartments.
The entries are relative gas tensions, that is,
the total inert gas (Nitrogen plus Helium) tissue saturation
divided by the appropriate M-value for that compartment: either
the surfacing M-value (if deco=FALSE
) or the
M-value at current depth (if deco=TRUE
).
If derived=TRUE
then additional quantities are
returned as an attribute
of the result. This is extracted by: attr(result, "derived")
.
It is a list containing the components
Dceiling
(depth ceiling),
Pceiling
(pressure ceiling)
and washout
(washout), each of which
is a vector, matrix or array of the same format as the result.
Warnings
Not applicable to altitude dives. Not suitable for dive planning.
No constraints of any kind are checked. In particular it is not guaranteed that the model accepts the dive profile as a no-decompression dive.
Author(s)
Adrian Baddeley Adrian.Baddeley@curtin.edu.au.
References
Bookspan, J. (1995) Diving physiology in plain English. Undersea and Hyperbaric Medicine Society, Kensington, Maryland (USA). ISBN 0-930406-13-3.
Boycott, A.E. Damant, G.C.C. and Haldane, J.B. (1908) The prevention of compressed air illness. Journal of Hygiene (London) 8, 342–443.
Brubakk, A.O. and Neuman, T.S. (eds.) (2003) Bennett and Elliott's Physiology and Medicine of Diving. 5th Edition. Saunders. ISBN 0-7020-2571-2
Buehlmann, A.A. (1983) Dekompression - Dekompressionskrankheit. Springer-Verlag.
Buehlmann, A.A., Voellm, E.B. and Nussberger, P. (2002) Tauchmedizin. 5e Auflage. Springer-Verlag.
Tikvisis, P. and Gerth, W.A. (2003) Decompression Theory. In Brubakk and Neuman (2003), Chapter 10.1, pages 419-454.
Wienke, B.R. (1994) Basic diving physics and applications. Best Publishing Co.
Workman, R.D. (1965) Calculation of decompression schedules for nitrogen-oxygen and helium-oxygen dives. Research Report 6-65. US Navy Experimental Diving Unit. Washington DC.
See Also
dive
,
oxtox
,
pickmodel
,
showstates
,
Mmix
,
M0mix
.
Examples
# First dive to 25 m for 20 min with safety stop
d1 <- dive(c(25,20),c(5,5))
# Evaluate saturation according to DSAT model
s1 <- haldane(d1)
s1
# Look at saturation (in ata)
barplot(s1$N2, ylab="Saturation (ata)")
# Look at relative saturation
M0 <- param(pickmodel("D"), "N2", "M0")
barplot(100 * s1$N2/M0, ylab="Saturation (percent)")
# Evaluate saturation after 2 hour surface interval
s2 <- haldane(dive(c(0,120)), prevstate=s1)
# Then after another dive to 18 m for 30 min with safety stop
s3 <- haldane(dive(c(18, 30),c(5,3)), prevstate=s2)
# Assess effect of breathing 80% oxygen at safety stop
s3o <- haldane(dive(c(18, 30),5, nitrox(0.8), c(5,3)), prevstate=s2)
# Inspect saturation during dive d1 at time 10 minutes
s10 <- haldane(chop.dive(d1, 0, 10))
# Progressive saturation during dive
# A real dive
plot(deepmine, col=1, key.gases="none")
# compute saturations during dive
hmine <- haldane(deepmine, model="Z", progressive=TRUE)
# show N2 saturations during dive
# Image plot
image(x=times.dive(deepmine), y=1:17, z=hmine[,,"N2"],
xlab="Time (min)", ylab="Compartment", axes=FALSE)
axis(1)
axis(2, at=1:17, labels=dimnames(hmine)[[2]])
# Perspective plot
persp(x=times.dive(deepmine), y=1:17, z=hmine[,,"N2"],
xlab="Time (min)", ylab="Compartment", zlab="Saturation (atm)",
col="green3", shade=0.6, border=NA,
theta=20, phi=30, ltheta=120, lphi=20)
#.... Derived quantities .....
hmine <- haldane(deepmine, model="Z", progressive=TRUE, derived=TRUE)
der <- attr(hmine, "derived")
names(der)
# Decompression ceiling depth (time x compartment x gas)
dcd <- der$Dceiling
# Overall decompression ceiling at each time point
dc <- apply(dcd, 1, max)
# plot dive with deco ceiling
plot(deepmine, key.gases="none", col=1)
lines(times.dive(deepmine), -dc, lty=3, lwd=2)
legend(100, -60, lty=c(1,3), lwd=2,
legend=c("dive profile", "deco ceiling"))
# Nitrogen washout for tissue 1b (positive values indicate off-gassing)
plot(times.dive(deepmine), der$washout[,"1b", "N2"],
type="l", xlab="Time (min)", ylab="Washout")