[PATCH 04/10] Use Schreiner water vapour pressure for VPM-B

Rick Walsh rickmwalsh at gmail.com
Sat Aug 29 05:38:31 PDT 2015


VPM-B uses the Schreiner rather than Buhlmann value of water vapour pressure

Signed-off-by: Rick Walsh <rickmwalsh at gmail.com>
---
 deco.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/deco.c b/deco.c
index a9dbf4c..2175c65 100644
--- a/deco.c
+++ b/deco.c
@@ -116,6 +116,7 @@ const double buehlmann_He_factor_expositon_one_second[] = {
 const double conservatism_lvls[] = { 1.0, 1.05, 1.12, 1.22, 1.35 };
 
 #define WV_PRESSURE 0.0627 // water vapor pressure in bar
+#define WV_PRESSURE_SCHREINER 0.0487 // water vapor pressure in bar
 #define DECO_STOPS_MULTIPLIER_MM 3000.0
 #define NITROGEN_FRACTION 0.79
 
@@ -270,7 +271,7 @@ double he_factor(int period_in_seconds, int ci)
 
 double calc_surface_phase(double surface_pressure, double he_pressure, double n2_pressure, double he_time_constant, double n2_time_constant)
 {
-	double inspired_n2 = (surface_pressure - WV_PRESSURE) * NITROGEN_FRACTION;
+	double inspired_n2 = (surface_pressure - ((prefs.deco_mode == VPMB) ? WV_PRESSURE_SCHREINER : WV_PRESSURE)) * NITROGEN_FRACTION;
 
 	if (n2_pressure > inspired_n2)
 		return (he_pressure / he_time_constant + (n2_pressure - inspired_n2) / n2_time_constant) / (he_pressure + n2_pressure - inspired_n2);
@@ -468,7 +469,8 @@ double add_segment(double pressure, const struct gasmix *gasmix, int period_in_s
 	int ci;
 	struct gas_pressures pressures;
 
-	fill_pressures(&pressures, pressure - WV_PRESSURE, gasmix, (double) ccpo2 / 1000.0, dive->dc.divemode);
+	fill_pressures(&pressures, pressure - ((prefs.deco_mode == VPMB) ? WV_PRESSURE_SCHREINER : WV_PRESSURE),
+		       gasmix, (double) ccpo2 / 1000.0, dive->dc.divemode);
 
 	if (buehlmann_config.gf_low_at_maxdepth && pressure > gf_low_pressure_this_dive)
 		gf_low_pressure_this_dive = pressure;
@@ -504,7 +506,7 @@ void clear_deco(double surface_pressure)
 {
 	int ci;
 	for (ci = 0; ci < 16; ci++) {
-		tissue_n2_sat[ci] = (surface_pressure - WV_PRESSURE) * N2_IN_AIR / 1000;
+		tissue_n2_sat[ci] = (surface_pressure - ((prefs.deco_mode == VPMB) ? WV_PRESSURE_SCHREINER : WV_PRESSURE)) * N2_IN_AIR / 1000;
 		tissue_he_sat[ci] = 0.0;
 		max_n2_crushing_pressure[ci] = 0.0;
 		max_he_crushing_pressure[ci] = 0.0;
-- 
2.4.3



More information about the subsurface mailing list