From 6a6369d9aa3c382107786c6de2162d712caf3d49 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Tue, 30 Dec 2014 23:28:55 +0100 Subject: [PATCH 2/7] Prepare for PSCR calculations Calculations for passive semi-closed rebreathers are pretty much like OC except the pO2 is lower bey a certain (SAC dependent) factor. This patch introduces the corresponding calculations in case dctype == PSCR which is so far never set and there is currently no UI for these calculations. As pO2 is SAC dependent it takes a certain attempt at getting it and drops to defaults from the prefs otherwise. Signed-off-by: Robert C. Helling --- dive.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dive.c b/dive.c index 711392c..17b67a5 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; + } } } -- 1.9.3 (Apple Git-50)