Learn R Programming

scuba (version 1.11-1)

haldane: 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)

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.

Arguments

d

The dive profile. An object of class dive.

model

The decompression model. An object of class "hm". Defaults to the DSAT (PADI) model.

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 TRUE, the tissue saturations are computed at every time point during the dive. If FALSE (the default), only the final tissue saturation at the end of the dive is computed.

relative

Logical flag indicating whether to compute relative tissue saturations. If FALSE (the default), tissue saturations are expressed as absolute pressures in atmospheres absolute (ata). If TRUE, the tissue saturation for each compartment is expressed as a fraction of the surfacing M-value for the compartment. (Alternatively if deco=TRUE then tissue saturation is expressed as a fraction of the M-value at current depth.)

deco

Logical flag indicating whether to calculate relative saturations for a decompression dive. If deco=FALSE, then relative tissue saturations are computed by dividing the absolute tissue saturation by the surfacing M-value, as appropriate for a no-decompression dive. If deco=TRUE, then relative tissue saturations are computed by dividing the absolute tissue saturation by the M-value at the current depth, as appropriate for a decompression dive. This argument applies only when relative=TRUE.

derived

Logical flag indicating whether to calculate additional quantities such as the decompression ceiling.

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

Adrian Baddeley Adrian.Baddeley@curtin.edu.au.

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.

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

Run this code
  # 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")

Run the code above in your browser using DataLab