[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