mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
More VPMB state in special structure
... and reset deco information in profile ceiling computation. The planner test then needs to know about the struct holding the deco state. Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
parent
7713c7e607
commit
1f50485732
5 changed files with 27 additions and 28 deletions
10
core/deco.c
10
core/deco.c
|
|
@ -35,8 +35,6 @@
|
|||
extern bool in_planner();
|
||||
extern int plot_depth;
|
||||
|
||||
extern pressure_t first_ceiling_pressure;
|
||||
|
||||
//! Option structure for Buehlmann decompression.
|
||||
struct buehlmann_config {
|
||||
double satmult; //! safety at inert gas accumulation as percentage of effect (more than 100).
|
||||
|
|
@ -198,7 +196,7 @@ double solve_cubic2(double B, double C)
|
|||
|
||||
double update_gradient(double next_stop_pressure, double first_gradient)
|
||||
{
|
||||
double B = cube(first_gradient) / (first_ceiling_pressure.mbar / 1000.0 + first_gradient);
|
||||
double B = cube(first_gradient) / (deco_state->first_ceiling_pressure.mbar / 1000.0 + first_gradient);
|
||||
double C = next_stop_pressure * B;
|
||||
|
||||
double new_gradient = solve_cubic2(B, C);
|
||||
|
|
@ -212,7 +210,7 @@ double vpmb_tolerated_ambient_pressure(double reference_pressure, int ci)
|
|||
{
|
||||
double n2_gradient, he_gradient, total_gradient;
|
||||
|
||||
if (reference_pressure >= first_ceiling_pressure.mbar / 1000.0 || !first_ceiling_pressure.mbar) {
|
||||
if (reference_pressure >= deco_state->first_ceiling_pressure.mbar / 1000.0 || !deco_state->first_ceiling_pressure.mbar) {
|
||||
n2_gradient = deco_state->bottom_n2_gradient[ci];
|
||||
he_gradient = deco_state->bottom_he_gradient[ci];
|
||||
} else {
|
||||
|
|
@ -531,6 +529,8 @@ void clear_vpmb_state() {
|
|||
deco_state->max_he_crushing_pressure[ci] = 0.0;
|
||||
}
|
||||
deco_state->max_ambient_pressure = 0;
|
||||
deco_state->first_ceiling_pressure.mbar = 0;
|
||||
deco_state->max_bottom_ceiling_pressure.mbar = 0;
|
||||
}
|
||||
|
||||
void clear_deco(double surface_pressure)
|
||||
|
|
@ -571,6 +571,8 @@ void restore_deco_state(struct deco_state *data, bool keep_vpmb_state)
|
|||
data->initial_n2_gradient[ci] = deco_state->initial_n2_gradient[ci];
|
||||
data->initial_he_gradient[ci] = deco_state->initial_he_gradient[ci];
|
||||
}
|
||||
data->first_ceiling_pressure = deco_state->first_ceiling_pressure;
|
||||
data->max_bottom_ceiling_pressure = deco_state->max_bottom_ceiling_pressure;
|
||||
}
|
||||
*deco_state = *data;
|
||||
|
||||
|
|
|
|||
|
|
@ -858,6 +858,8 @@ struct deco_state {
|
|||
|
||||
double initial_n2_gradient[16];
|
||||
double initial_he_gradient[16];
|
||||
pressure_t first_ceiling_pressure;
|
||||
pressure_t max_bottom_ceiling_pressure;
|
||||
int ci_pointing_to_guiding_tissue;
|
||||
double gf_low_pressure_this_dive;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,8 +39,6 @@ extern double regressiona();
|
|||
extern double regressionb();
|
||||
extern void reset_regression();
|
||||
|
||||
pressure_t first_ceiling_pressure, max_bottom_ceiling_pressure = {};
|
||||
|
||||
char *disclaimer;
|
||||
int plot_depth = 0;
|
||||
#if DEBUG_PLAN
|
||||
|
|
@ -184,8 +182,8 @@ unsigned int tissue_at_end(struct dive *dive, struct deco_state **cached_datap)
|
|||
dive,
|
||||
1),
|
||||
dive);
|
||||
if (ceiling_pressure.mbar > max_bottom_ceiling_pressure.mbar)
|
||||
max_bottom_ceiling_pressure.mbar = ceiling_pressure.mbar;
|
||||
if (ceiling_pressure.mbar > deco_state->max_bottom_ceiling_pressure.mbar)
|
||||
deco_state->max_bottom_ceiling_pressure.mbar = ceiling_pressure.mbar;
|
||||
}
|
||||
|
||||
interpolate_transition(dive, t0, t1, lastdepth, sample->depth, &gas, setpoint);
|
||||
|
|
@ -691,7 +689,7 @@ bool plan(struct diveplan *diveplan, struct dive *dive, int timestep, struct dec
|
|||
diveplan->surface_pressure = SURFACE_PRESSURE;
|
||||
dive->surface_pressure.mbar = diveplan->surface_pressure;
|
||||
clear_deco(dive->surface_pressure.mbar / 1000.0);
|
||||
max_bottom_ceiling_pressure.mbar = first_ceiling_pressure.mbar = 0;
|
||||
deco_state->max_bottom_ceiling_pressure.mbar = deco_state->first_ceiling_pressure.mbar = 0;
|
||||
create_dive_from_plan(diveplan, dive, is_planner);
|
||||
|
||||
// Do we want deco stop array in metres or feet?
|
||||
|
|
@ -859,14 +857,14 @@ bool plan(struct diveplan *diveplan, struct dive *dive, int timestep, struct dec
|
|||
breaktime = -1;
|
||||
breakcylinder = 0;
|
||||
o2time = 0;
|
||||
first_ceiling_pressure.mbar = depth_to_mbar(deco_allowed_depth(tissue_tolerance_calc(dive,
|
||||
deco_state->first_ceiling_pressure.mbar = depth_to_mbar(deco_allowed_depth(tissue_tolerance_calc(dive,
|
||||
depth_to_bar(depth, dive)),
|
||||
diveplan->surface_pressure / 1000.0,
|
||||
dive,
|
||||
1),
|
||||
dive);
|
||||
if (max_bottom_ceiling_pressure.mbar > first_ceiling_pressure.mbar)
|
||||
first_ceiling_pressure.mbar = max_bottom_ceiling_pressure.mbar;
|
||||
if (deco_state->max_bottom_ceiling_pressure.mbar > deco_state->first_ceiling_pressure.mbar)
|
||||
deco_state->first_ceiling_pressure.mbar = deco_state->max_bottom_ceiling_pressure.mbar;
|
||||
|
||||
last_ascend_rate = ascent_velocity(depth, avg_depth, bottom_time);
|
||||
if ((current_cylinder = get_gasidx(dive, &gas)) == -1) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ static struct plot_data *last_pi_entry_new = NULL;
|
|||
void populate_pressure_information(struct dive *, struct divecomputer *, struct plot_info *, int);
|
||||
|
||||
extern bool in_planner();
|
||||
extern pressure_t first_ceiling_pressure;
|
||||
|
||||
#ifdef DEBUG_PI
|
||||
/* debugging tool - not normally used */
|
||||
|
|
@ -1015,7 +1014,7 @@ void calculate_deco_information(struct dive *dive, struct divecomputer *dc, stru
|
|||
if (current_ceiling > first_ceiling) {
|
||||
time_deep_ceiling = t1;
|
||||
first_ceiling = current_ceiling;
|
||||
first_ceiling_pressure.mbar = depth_to_mbar(first_ceiling, dive);
|
||||
deco_state->first_ceiling_pressure.mbar = depth_to_mbar(first_ceiling, dive);
|
||||
if (first_iteration) {
|
||||
nuclear_regeneration(t1);
|
||||
vpmb_start_gradient();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue