mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
VPM-B: Add conservatism levels to deco.c
Signed-off-by: Jan Darowski <jan.darowski@gmail.com>
This commit is contained in:
parent
499ec9af2f
commit
cad866013b
3 changed files with 25 additions and 7 deletions
28
deco.c
28
deco.c
|
@ -89,6 +89,8 @@ const double buehlmann_He_factor_expositon_one_second[] = {
|
||||||
1.00198406028040E-004, 7.83611475491108E-005, 6.13689891868496E-005, 4.81280465299827E-005
|
1.00198406028040E-004, 7.83611475491108E-005, 6.13689891868496E-005, 4.81280465299827E-005
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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 0.0627 // water vapor pressure in bar
|
||||||
#define DECO_STOPS_MULTIPLIER_MM 3000.0
|
#define DECO_STOPS_MULTIPLIER_MM 3000.0
|
||||||
#define NITROGEN_FRACTION 0.79
|
#define NITROGEN_FRACTION 0.79
|
||||||
|
@ -121,6 +123,20 @@ double bottom_he_gradient[16];
|
||||||
double initial_n2_gradient[16];
|
double initial_n2_gradient[16];
|
||||||
double initial_he_gradient[16];
|
double initial_he_gradient[16];
|
||||||
|
|
||||||
|
double get_crit_radius_He()
|
||||||
|
{
|
||||||
|
if (prefs.conservatism_level <= 4)
|
||||||
|
return vpmb_config.crit_radius_He * conservatism_lvls[prefs.conservatism_level];
|
||||||
|
return vpmb_config.crit_radius_He;
|
||||||
|
}
|
||||||
|
|
||||||
|
double get_crit_radius_N2()
|
||||||
|
{
|
||||||
|
if (prefs.conservatism_level <= 4)
|
||||||
|
return vpmb_config.crit_radius_N2 * conservatism_lvls[prefs.conservatism_level];
|
||||||
|
return vpmb_config.crit_radius_N2;
|
||||||
|
}
|
||||||
|
|
||||||
static double tissue_tolerance_calc(const struct dive *dive)
|
static double tissue_tolerance_calc(const struct dive *dive)
|
||||||
{
|
{
|
||||||
int ci = -1;
|
int ci = -1;
|
||||||
|
@ -328,11 +344,11 @@ void nuclear_regeneration(double time)
|
||||||
double crushing_radius_N2, crushing_radius_He;
|
double crushing_radius_N2, crushing_radius_He;
|
||||||
for (ci = 0; ci < 16; ++ci) {
|
for (ci = 0; ci < 16; ++ci) {
|
||||||
//rm
|
//rm
|
||||||
crushing_radius_N2 = 1.0 / (max_n2_crushing_pressure[ci] / (2.0 * (vpmb_config.skin_compression_gammaC - vpmb_config.surface_tension_gamma)) + 1.0 / vpmb_config.crit_radius_N2);
|
crushing_radius_N2 = 1.0 / (max_n2_crushing_pressure[ci] / (2.0 * (vpmb_config.skin_compression_gammaC - vpmb_config.surface_tension_gamma)) + 1.0 / get_crit_radius_N2());
|
||||||
crushing_radius_He = 1.0 / (max_he_crushing_pressure[ci] / (2.0 * (vpmb_config.skin_compression_gammaC - vpmb_config.surface_tension_gamma)) + 1.0 / vpmb_config.crit_radius_He);
|
crushing_radius_He = 1.0 / (max_he_crushing_pressure[ci] / (2.0 * (vpmb_config.skin_compression_gammaC - vpmb_config.surface_tension_gamma)) + 1.0 / get_crit_radius_He());
|
||||||
//rs
|
//rs
|
||||||
n2_regen_radius[ci] = crushing_radius_N2 + (vpmb_config.crit_radius_N2 - crushing_radius_N2) * (1.0 - exp (-time / vpmb_config.regeneration_time));
|
n2_regen_radius[ci] = crushing_radius_N2 + (get_crit_radius_N2() - crushing_radius_N2) * (1.0 - exp (-time / vpmb_config.regeneration_time));
|
||||||
he_regen_radius[ci] = crushing_radius_He + (vpmb_config.crit_radius_He - crushing_radius_He) * (1.0 - exp (-time / vpmb_config.regeneration_time));
|
he_regen_radius[ci] = crushing_radius_He + (get_crit_radius_He() - crushing_radius_He) * (1.0 - exp (-time / vpmb_config.regeneration_time));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,8 +402,8 @@ void calc_crushing_pressure(double pressure)
|
||||||
if (max_ambient_pressure >= pressure)
|
if (max_ambient_pressure >= pressure)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
n2_inner_pressure = calc_inner_pressure(vpmb_config.crit_radius_N2, crushing_onset_tension[ci], pressure);
|
n2_inner_pressure = calc_inner_pressure(get_crit_radius_N2(), crushing_onset_tension[ci], pressure);
|
||||||
he_inner_pressure = calc_inner_pressure(vpmb_config.crit_radius_He, crushing_onset_tension[ci], pressure);
|
he_inner_pressure = calc_inner_pressure(get_crit_radius_He(), crushing_onset_tension[ci], pressure);
|
||||||
|
|
||||||
n2_crushing_pressure = pressure - n2_inner_pressure;
|
n2_crushing_pressure = pressure - n2_inner_pressure;
|
||||||
he_crushing_pressure = pressure - he_inner_pressure;
|
he_crushing_pressure = pressure - he_inner_pressure;
|
||||||
|
|
1
pref.h
1
pref.h
|
@ -117,6 +117,7 @@ struct preferences {
|
||||||
bool cloud_background_sync;
|
bool cloud_background_sync;
|
||||||
geocoding_prefs_t geocoding;
|
geocoding_prefs_t geocoding;
|
||||||
enum deco_mode deco_mode;
|
enum deco_mode deco_mode;
|
||||||
|
short conservatism_level;
|
||||||
};
|
};
|
||||||
enum unit_system_values {
|
enum unit_system_values {
|
||||||
METRIC,
|
METRIC,
|
||||||
|
|
|
@ -75,7 +75,8 @@ struct preferences default_prefs = {
|
||||||
.tag_existing_dives = false,
|
.tag_existing_dives = false,
|
||||||
.category = { 0 }
|
.category = { 0 }
|
||||||
},
|
},
|
||||||
.deco_mode = BUEHLMANN
|
.deco_mode = BUEHLMANN,
|
||||||
|
.conservatism_level = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
int run_survey;
|
int run_survey;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue