I'm having trouble understanding/deriving Bühlmann coefficients "a" and "b".

Please register or login

Welcome to ScubaBoard, the world's largest scuba diving community. Registration is not required to read the forums, but we encourage you to join. Joining has its benefits and enables you to participate in the discussions.

Benefits of registering include

  • Ability to post and comment on topics and discussions.
  • A Free photo gallery to share your dive photos with the world.
  • You can make this box go away

Joining is quick and easy. Log in or Register now!

Messages
8
Reaction score
7
Location
las vegas, nv
# of dives
200 - 499
I am trying to derive a and b coefficients for ZH-L16 using the Nitrogen M values in "Understanding M-values" by Erik Baker. I can find already computed coefficients published here and in An Explanation of Buehlmann's ZH-L16 Algorithm by Paul Chapman, so I am able to check my work.

I will take tissue compartment 2 for my examples (just to avoid the potential compartment 1/1b confusion and because M_0 is the same for ZH-L16A, B, and C).

Calculating b for tissue compartment 2
Baker's paper says b is just the inverse of the "ΔM slope" column. b = 1 / ΔM = 1/1.5352 = .65138...
Chapman's paper says b = 1.005 - ( tht ^ -1/2 ) =1.005 - (1/sqrt(8)) = .65144

These values for b are similar, but not identical. I computed the values both ways for all 16 compartments and all values for b are close but not identical, with the largest error being .02 in compartment 1, followed by .01 in compartment 4. Chapmans Which value or derivation of b is more correct?

Calculating a for tissue compartment 2
Chapman's paper says a =2 * ( tht ^ (-1/3) ) = 2 / cuberoot(8) = 1
I used Chapman's formula to compute the other 15 tissue compartments' a values and all matched his published values so I am comfortable with this.

But Baker's paper says a = M_0 - ΔM * P_amb = 83.2 - 1.5352 * P_amb.
I am confused about what P_amb is. Baker says "The Coefficient a is the intercept at zero ambient pressure(absolute)", so I would expect P_amb = 0, but then you get a = M_0 and that is obviously incorrect.

Since I have Chapman's published values, I can actually solve for P_amb since I know what a should be.

P_amb = (a - M_0) / -ΔM = (1 - 83.2)/-1.5352 = 53.5435...

But P_amb = 53.45 is only a solution for compartment 2. When computed the same way, the other tissue compartments have solutions ranging from 40 to 55.1.

How can I properly understand P_amb, and what values belong in Baker's formula for calculating coefficient a?

Thanks in advance.
 
I don't have Chapmann's paper; but from your post it appears that in his formulation, a is in units of atmospheres. Baker uses feet or meters of seawater. M0 is in similar units: 83.2 fsw. At the surface at sea level,
Pamb = 1 atm = 33.173 fsw = 10.111 msw. You'll have to convert if you want to compare. Also, M0 is by definition at sea level.

In general, Pamb is the ambient pressure at whatever depth you are at (including 0 depth). The a & b formulation just simplifies the math when surface pressure is not 1 atm -- i.e., at altitude. Yes, it's a little odd to measure pressure in fsw, but it avoids a lot of division.
 
Chapman gives this formula for a (thanks for the hints on super/subscripts @justinthedeeps)

2 * tht-1/3, where t is the halftime of the tissue, so I don't see how atmospheres could be part of the units for Chapman's derivation. The units look more like "1/cuberoot(minute)" or "per minute cuberooted".


At the surface at sea level,
Pamb = 1 atm = 33.173 fsw = 10.111 msw.

Plugging this into Baker's formula for a using ZH-L16 tissue compartment 2, we get

a = M0 - ΔM * Pamb = 83.2fsw - 1.5352 * 33.173fsw = 32.2728fsw

This is close to 1ATM but not quite correct. And now that I am more awake than I was last night, I notice Chapman's formula has no way of deriving the different variants, ZH-L16A, ZH-L16B, and ZH-L16C. Baker's formula relies on M0, for which we have separate A, B, and C values.

If we plug Pamb=33.173fsw, then convert our a values to atm, we DO get fairly close to Chapman's published values for a, but still not exact. Table of values below

Compartment #Computed with Pamb=33.173fswPublished by Chapman ZH-L16ADifference
11.29921.2599-0.0393
20.972910.0271
30.84000.86180.0218
40.73570.75620.0205
50.64740.66670.0193
60.57780.59330.0155
70.51360.52820.0146
80.45430.47010.0158
90.40430.41870.0144
100.36860.37980.0112
110.33770.34970.0120
120.31110.32230.0112
130.28630.29710.0108
140.26350.27370.0102
150.24280.25230.0095
160.22420.23270.0085

Did I do the calculations correctly and these differences are just "acceptable"?

Here are the papers I am referencing:

 
Plugging this into Baker's formula for a using ZH-L16 tissue compartment 2, we get

a = M0 - ΔM * Pamb = 83.2fsw - 1.5352 * 33.173fsw = 32.2728fsw

This is close to 1ATM but not quite correct.
It doesn't have to equal 1 atm. It's just anchoring one end of the Mvalue line.
 
I am expecting a value of 1 here because published values of a for ZH-L16 have a value of 1, not just in Chapman's paper but everywhere I find it.

For example, this PDF on the Buhlmann Memorial Symposium 2019 on page 28 shows a value of "1.0000". With that many significant digits, my calculation being off by more than 0.02 makes me think I have misunderstood something.

I would like to try to implement Buhlmann's algorithm in code. I believe I understand everything required except that I am not confident in my calculation of a.
 
And now that I am more awake than I was last night, I notice Chapman's formula has no way of deriving the different variants, ZH-L16A, ZH-L16B, and ZH-L16C.
Yep. The half-time formulation of a seems to be a convenient approximation/curve fit, though I haven't read Tauchmedizin. I suggest you focus on Baker's paper.
 
For example, this PDF on the Buhlmann Memorial Symposium 2019 on page 28 shows a value of "1.0000".
That number is in bar (1.013 bar per atm). After that, it could be round-off differences. Also, that value of 33.173 I gave is at an average salinity. I have no idea if Baker used the same value. You're starting to see some of the reasons implementations may vary slightly.

You're going to want to compare your planner to something established, so you might as well just use the a & b values in Subsurface (open source).
 
You're going to want to compare your planner to something established, so you might as well just use the a & b values in Subsurface (open source).
Good idea. For anyone else who stumbles across this thread, here is the source code for subsurface buehlmann constants.

Thanks so much @inquis for your help.
 

Back
Top Bottom