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

Signed-off-by: Rick Walsh <[email protected]>
---
 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

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to