mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
VPM-B: add vpm-b based deco checking.
Check during the trial_ascent() if existing pressure gradient is smaller than previously calculated max gradient. If not, ascent is impossible from the vpm-b's point of view. Signed-off-by: Jan Darowski <jan.darowski@gmail.com>
This commit is contained in:
parent
fad592e43a
commit
e7aa686f16
3 changed files with 21 additions and 1 deletions
15
deco.c
15
deco.c
|
@ -210,6 +210,21 @@ double he_factor(int period_in_seconds, int ci)
|
||||||
return cache[ci].last_factor;
|
return cache[ci].last_factor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_vpmb_ok(double pressure)
|
||||||
|
{
|
||||||
|
int ci;
|
||||||
|
double gradient;
|
||||||
|
double gas_tension;
|
||||||
|
|
||||||
|
for (ci = 0; ci < 16; ++ci) {
|
||||||
|
gas_tension = tissue_n2_sat[ci] + tissue_he_sat[ci] + vpmb_config.other_gases_pressure;
|
||||||
|
gradient = gas_tension - pressure;
|
||||||
|
if (gradient > total_gradient[ci])
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void vpmb_start_gradient()
|
void vpmb_start_gradient()
|
||||||
{
|
{
|
||||||
int ci;
|
int ci;
|
||||||
|
|
1
dive.h
1
dive.h
|
@ -785,6 +785,7 @@ extern void cache_deco_state(double, char **datap);
|
||||||
extern double restore_deco_state(char *data);
|
extern double restore_deco_state(char *data);
|
||||||
extern void nuclear_regeneration(double time);
|
extern void nuclear_regeneration(double time);
|
||||||
extern void vpmb_start_gradient();
|
extern void vpmb_start_gradient();
|
||||||
|
extern bool is_vpmb_ok(double pressure);
|
||||||
|
|
||||||
/* this should be converted to use our types */
|
/* this should be converted to use our types */
|
||||||
struct divedatapoint {
|
struct divedatapoint {
|
||||||
|
|
|
@ -836,11 +836,15 @@ bool trial_ascent(int trial_depth, int stoplevel, int avg_depth, int bottom_time
|
||||||
tissue_tolerance = add_segment(depth_to_mbar(trial_depth, &displayed_dive) / 1000.0,
|
tissue_tolerance = add_segment(depth_to_mbar(trial_depth, &displayed_dive) / 1000.0,
|
||||||
gasmix,
|
gasmix,
|
||||||
TIMESTEP, po2, &displayed_dive, prefs.decosac);
|
TIMESTEP, po2, &displayed_dive, prefs.decosac);
|
||||||
if (deco_allowed_depth(tissue_tolerance, surface_pressure, &displayed_dive, 1) > trial_depth - deltad) {
|
if (prefs.deco_mode != VPMB && deco_allowed_depth(tissue_tolerance, surface_pressure, &displayed_dive, 1) > trial_depth - deltad) {
|
||||||
/* We should have stopped */
|
/* We should have stopped */
|
||||||
clear_to_ascend = false;
|
clear_to_ascend = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (prefs.deco_mode == VPMB && (!is_vpmb_ok(depth_to_mbar(trial_depth, &displayed_dive) / 1000.0))){
|
||||||
|
clear_to_ascend = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
trial_depth -= deltad;
|
trial_depth -= deltad;
|
||||||
}
|
}
|
||||||
restore_deco_state(trial_cache);
|
restore_deco_state(trial_cache);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue