mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Get O2 right in bailout mode
When doing OC bailout from a CCR dive, there could still be pO2 sensor readings but those are not valid. This fixes a problem noticed by Justin Ashworth. Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
parent
fb11f8efa6
commit
fdcfcb1b32
1 changed files with 5 additions and 5 deletions
|
@ -104,7 +104,7 @@ static int calculate_otu(const struct dive *dive)
|
|||
struct sample *sample = dc->sample + i;
|
||||
struct sample *psample = sample - 1;
|
||||
t = sample->time.seconds - psample->time.seconds;
|
||||
if (sample->o2sensor[0].mbar) { // if dive computer has o2 sensor(s) (CCR & PSCR) ..
|
||||
if ((dc->divemode == CCR || dc->divemode == PSCR) && sample->o2sensor[0].mbar) { // if dive computer has o2 sensor(s) (CCR & PSCR) ..
|
||||
po2i = psample->o2sensor[0].mbar;
|
||||
po2f = sample->o2sensor[0].mbar; // ... use data from the first o2 sensor
|
||||
} else {
|
||||
|
@ -160,7 +160,7 @@ static double calculate_cns_dive(const struct dive *dive)
|
|||
struct sample *sample = dc->sample + n;
|
||||
struct sample *psample = sample - 1;
|
||||
t = sample->time.seconds - psample->time.seconds;
|
||||
if (sample->o2sensor[0].mbar) { // if dive computer has o2 sensor(s) (CCR & PSCR)
|
||||
if ((dc->divemode == CCR || dc->divemode == PSCR) && sample->o2sensor[0].mbar) { // if dive computer has o2 sensor(s) (CCR & PSCR)
|
||||
po2i = psample->o2sensor[0].mbar;
|
||||
po2f = sample->o2sensor[0].mbar; // then use data from the first o2 sensor
|
||||
trueo2 = true;
|
||||
|
@ -177,13 +177,13 @@ static double calculate_cns_dive(const struct dive *dive)
|
|||
po2i = lrint(o2 * depth_to_bar(psample->depth.mm, dive)); // (initial) po2 at start of segment
|
||||
po2f = lrint(o2 * depth_to_bar(sample->depth.mm, dive)); // (final) po2 at end of segment
|
||||
}
|
||||
po2i = (po2i + po2f) / 2; // po2i now holds the mean po2 of initial and final po2 values of segment.
|
||||
int po2avg = (po2i + po2f) / 2; // po2i now holds the mean po2 of initial and final po2 values of segment.
|
||||
/* Don't increase CNS when po2 below 500 matm */
|
||||
if (po2i <= 500)
|
||||
if (po2avg <= 500)
|
||||
continue;
|
||||
|
||||
// This formula is the result of fitting two lines to the Log of the NOAA CNS table
|
||||
rate = po2i <= 1500 ? exp(-11.7853 + 0.00193873 * po2i) : exp(-23.6349 + 0.00980829 * po2i);
|
||||
rate = po2i <= 1500 ? exp(-11.7853 + 0.00193873 * po2avg) : exp(-23.6349 + 0.00980829 * po2avg);
|
||||
cns += (double) t * rate * 100.0;
|
||||
}
|
||||
return cns;
|
||||
|
|
Loading…
Add table
Reference in a new issue