summaryrefslogtreecommitdiffstats
path: root/dive.h
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2014-02-11 13:08:29 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-02-11 14:05:54 -0800
commite58f54cac1d050c090bfa5427991ae440bc78495 (patch)
treed4379185e39721d46d61ca6136001941b980ef1a /dive.h
parent92bbed3304afeb8e7ef6593f48eae982d799b5f1 (diff)
downloadsubsurface-e58f54cac1d050c090bfa5427991ae440bc78495.tar.gz
Fix ATM-vs-bar confusion
SAC should be calculated in relationship to surface pressure, not "1 bar". I also realize that we have a few other cases where we do the same mistake: the partial pressure calculations do things like po2 = o2 / 1000.0 * depth_to_mbar(sample->depth.mm, dive); which is wrong as well - the partial pressure is also relative to standard atmospheric pressures. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.h')
-rw-r--r--dive.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/dive.h b/dive.h
index 7d0aaaee6..658b199fe 100644
--- a/dive.h
+++ b/dive.h
@@ -223,6 +223,11 @@ static inline double bar_to_atm(double bar)
return bar / SURFACE_PRESSURE * 1000;
}
+static inline double mbar_to_atm(int mbar)
+{
+ return (double) mbar / SURFACE_PRESSURE;
+}
+
/* Volume in mliter of a cylinder at pressure 'p' */
extern int gas_volume(cylinder_t *cyl, pressure_t p);
extern int wet_volume(double cuft, pressure_t p);
@@ -450,6 +455,11 @@ static inline int depth_to_mbar(int depth, struct dive *dive)
return calculate_depth_to_mbar(depth, dive->surface_pressure, dive->salinity);
}
+static inline double depth_to_atm(int depth, struct dive *dive)
+{
+ return mbar_to_atm(depth_to_mbar(depth, dive));
+}
+
/* for the inverse calculation we use just the relative pressure
* (that's the one that some dive computers like the Uemis Zurich
* provide - for the other models that do this libdivecomputer has to