From 0c5ec1d6dbf386e063a11717c7bfdbec5c57fcf0 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 26 Apr 2014 10:55:17 -0700 Subject: Don't calculate SAC-rates for negative pressure changes They happen - maybe the cylinder actually warmed up, or maybe the user entered just a ending pressure without a starting pressure. Regardless, just ignore cylinder pressure changes that go up. Also ignore cylinders with a zero ending pressure: that's really a *missing* pressure rather than an actual zero pressure. As Dirk says, the scuba regulators don't even work without a healthy positive pressure differential, so even when you breathe down a tank to "empty", it won't be at zero pressure (this is true even with gauge pressure, where zero means "atmospheric pressure"). Signed-off-by: Linus Torvalds Signed-off-by: Dirk Hohndel --- divelist.c | 2 ++ profile.c | 2 +- statistics.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/divelist.c b/divelist.c index 17f24ef7e..f0a66b456 100644 --- a/divelist.c +++ b/divelist.c @@ -311,6 +311,8 @@ static double calculate_airuse(struct dive *dive) start = cyl->start.mbar ? cyl->start : cyl->sample_start; end = cyl->end.mbar ? cyl->end : cyl->sample_end; + if (!end.mbar || start.mbar <= end.mbar) + continue; airuse += gas_volume(cyl, start) - gas_volume(cyl, end); } diff --git a/profile.c b/profile.c index 4d5e05aa4..f5d287bfd 100644 --- a/profile.c +++ b/profile.c @@ -157,7 +157,7 @@ static int get_local_sac(struct plot_data *entry1, struct plot_data *entry2, str return 0; a.mbar = GET_PRESSURE(entry1); b.mbar = GET_PRESSURE(entry2); - if (!a.mbar || !b.mbar) + if (!b.mbar || a.mbar <= b.mbar) return 0; /* Mean pressure in ATM */ diff --git a/statistics.c b/statistics.c index 1610a1a8a..ad5a95d06 100644 --- a/statistics.c +++ b/statistics.c @@ -329,7 +329,7 @@ void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]) start = cyl->start.mbar ? cyl->start : cyl->sample_start; end = cyl->end.mbar ? cyl->end : cyl->sample_end; - if (start.mbar && end.mbar) + if (end.mbar && start.mbar > end.mbar) gases[idx].mliter = gas_volume(cyl, start) - gas_volume(cyl, end); } } -- cgit v1.2.3-70-g09d2