Don't bother with "correct" units for the pressure_time calculation

I fixed the pressure-time calculations to use "proper" units, but
thinking about it some more, it turns out that units don't really
matter. As long as we use the *same* unit for calculating the
integral, and then re-calculating the step-wise entries, the units
will cancel out.

So we can simplify the "pressure_time()" function a bit, and use
whatever units are most natural for our internal representation. So
instead of using atm, use "mbar".

Now, since the units don't matter, this patch doesn't really make much
of a difference conceptually. Sure, it's a slightly simpler function,
but maybe using more "natural" units for it would be worth it. But it
turns out that using milli-bar and seconds has an advantage: we could
do all the pressure_time integral using 32-bit integers, and we'd
still be able to represent values that would be equivalent to staying
at 24 bar for a whole day.

This patch doesn't actually change the code to use integers, but with
this unit choice, we at least have that possibility.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Linus Torvalds 2013-01-06 23:33:42 -08:00 committed by Dirk Hohndel
parent d85d8421e0
commit 1ee0101b28

View file

@ -1394,14 +1394,19 @@ static void fill_missing_segment_pressures(pr_track_t *list)
* What's the pressure-time between two plot data entries? * What's the pressure-time between two plot data entries?
* We're calculating the integral of pressure over time by * We're calculating the integral of pressure over time by
* adding these up. * adding these up.
*
* The units won't matter as long as everybody agrees about
* them, since they'll cancel out - we use this to calculate
* a constant SAC-rate-equivalent, but we only use it to
* scale pressures, so it ends up being a unitless scaling
* factor.
*/ */
static inline double pressure_time(struct dive *dive, struct plot_data *a, struct plot_data *b) static inline double pressure_time(struct dive *dive, struct plot_data *a, struct plot_data *b)
{ {
int time = b->sec - a->sec; int time = b->sec - a->sec;
int depth = (a->depth + b->depth)/2; int depth = (a->depth + b->depth)/2;
int mbar = depth_to_mbar(depth, dive);
return bar_to_atm(mbar / 1000.0) * time; return depth_to_mbar(depth, dive) * time;
} }
static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, pr_track_t **track_pr) static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, pr_track_t **track_pr)