summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/dive.c b/dive.c
index 711392c5a..17b67a590 100644
--- a/dive.c
+++ b/dive.c
@@ -1663,10 +1663,17 @@ extern void fill_pressures(struct gas_pressures *pressures, const double amb_pre
pressures->n2 = amb_pressure - pressures->o2 - pressures->he;
}
}
- } else { // Open circuit dives: no gas pressure values available, they need to be calculated
+ } else {
+ if (dctype == PSCR) { /* The steady state approximation should be good enough */
+ pressures->o2 = get_o2(mix) / 1000.0 * amb_pressure - (1.0 - get_o2(mix) / 1000.0) * prefs.o2consumption / (sac * prefs.pscr_ratio / 1000.0);
+ pressures->he = (amb_pressure - pressures->o2) * get_he(mix) / (1000.0 - get_o2(mix));
+ pressures->n2 = (amb_pressure - pressures->o2) * (1000 - get_o2(mix) - get_he(mix)) / (1000.0 - get_o2(mix));
+ } else {
+ // Open circuit dives: no gas pressure values available, they need to be calculated
pressures->o2 = get_o2(mix) / 1000.0 * amb_pressure; // These calculations are also used if the CCR calculation above..
pressures->he = get_he(mix) / 1000.0 * amb_pressure; // ..returned a po2 of zero (i.e. o2 sensor data not resolvable)
pressures->n2 = (1000 - get_o2(mix) - get_he(mix)) / 1000.0 * amb_pressure;
+ }
}
}