summaryrefslogtreecommitdiffstats
path: root/planner.c
diff options
context:
space:
mode:
Diffstat (limited to 'planner.c')
-rw-r--r--planner.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/planner.c b/planner.c
index aca5a0594..ffe890780 100644
--- a/planner.c
+++ b/planner.c
@@ -939,6 +939,7 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
int *decostoplevels;
int decostoplevelcount;
unsigned int *stoplevels = NULL;
+ int vpmb_first_stop;
bool stopping = false;
bool pendinggaschange = false;
bool clear_to_ascend;
@@ -1100,6 +1101,22 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
bottom_gi = gi;
bottom_gas = gas;
bottom_stopidx = stopidx;
+
+ // Find first stop used for VPM-B Boyle's law compensation
+ if (prefs.deco_mode == VPMB) {
+ vpmb_first_stop = deco_allowed_depth(tissue_tolerance, diveplan->surface_pressure / 1000, &displayed_dive, 1);
+ if (vpmb_first_stop > 0) {
+ while (stoplevels[stopidx] > vpmb_first_stop) {
+ stopidx--;
+ }
+ stopidx++;
+ vpmb_first_stop = stoplevels[stopidx];
+ }
+ first_stop_pressure.mbar = depth_to_mbar(vpmb_first_stop, &displayed_dive);
+ } else {
+ first_stop_pressure.mbar = 0;
+ }
+
//CVA
do {
is_final_plan = (prefs.deco_mode == BUEHLMANN) || (previous_deco_time - deco_time < 10); // CVA time converges
@@ -1119,7 +1136,6 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
breaktime = -1;
breakcylinder = 0;
o2time = 0;
- first_stop_pressure.mbar = 0;
last_ascend_rate = ascent_velocity(depth, avg_depth, bottom_time);
if ((current_cylinder = get_gasidx(&displayed_dive, &gas)) == -1) {
report_error(translate("gettextFromC", "Can't find gas %s"), gasname(&gas));
@@ -1160,8 +1176,6 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
stopping = true;
// Boyles Law compensation
- if (first_stop_pressure.mbar == 0)
- first_stop_pressure.mbar = depth_to_mbar(depth, &displayed_dive);
boyles_law(depth_to_mbar(stoplevels[stopidx], &displayed_dive) / 1000.0);
/* Check we need to change cylinder.
@@ -1215,8 +1229,6 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
stopping = true;
// Boyles Law compensation
- if (first_stop_pressure.mbar == 0)
- first_stop_pressure.mbar = depth_to_mbar(depth, &displayed_dive);
boyles_law(depth_to_mbar(stoplevels[stopidx], &displayed_dive) / 1000.0);
}