diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-25 15:23:16 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-02-25 16:48:16 -0800 |
commit | 308d71ec39a33a276362d93c0ff534575b8c293c (patch) | |
tree | 8334dd9e653e438dfad8da749d4288124b3e1380 /divelist.c | |
parent | d53bedbed6696cd7f9f79238d94189b0ed30c377 (diff) | |
download | subsurface-308d71ec39a33a276362d93c0ff534575b8c293c.tar.gz |
Take incompressibility of gas into account at higher pressures
This creates a helper function called "gas_volume()" that takes the
cylinder and a particular pressure, and returns the estimated volume of
the gas at surface pressure, including proper approximation of the
incompressibility of gas.
It very much is an approximation, but it's closer to reality than
assuming a pure ideal gas. See for example compressibility at
http://en.wikipedia.org/wiki/Compressibility_factor
Suggested-by: Jukka Lind <jukka.lind@iki.fi>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'divelist.c')
-rw-r--r-- | divelist.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/divelist.c b/divelist.c index 952b03bb2..1c020afe4 100644 --- a/divelist.c +++ b/divelist.c @@ -697,26 +697,19 @@ static int calculate_otu(struct dive *dive) */ static double calculate_airuse(struct dive *dive) { - double airuse = 0; + int airuse = 0; int i; for (i = 0; i < MAX_CYLINDERS; i++) { pressure_t start, end; cylinder_t *cyl = dive->cylinder + i; - int size = cyl->type.size.mliter; - double kilo_atm; - - if (!size) - continue; start = cyl->start.mbar ? cyl->start : cyl->sample_start; end = cyl->end.mbar ? cyl->end : cyl->sample_end; - kilo_atm = (to_ATM(start) - to_ATM(end)) / 1000.0; - /* Liters of air at 1 atm == milliliters at 1k atm*/ - airuse += kilo_atm * size; + airuse += gas_volume(cyl, start) - gas_volume(cyl, end); } - return airuse; + return airuse / 1000.0; } /* this only uses the first divecomputer to calculate the SAC rate */ |