summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2015-08-17 17:40:47 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-08-17 21:58:09 -0700
commita6ed36fb7368254d694a4f397d6d033326c37ef2 (patch)
treeadb22f8733ed509eb9e88dee5ec3e969dbc6ada7
parent930e83dfc42286bbcdb1f037e7472766e211066b (diff)
downloadsubsurface-a6ed36fb7368254d694a4f397d6d033326c37ef2.tar.gz
Pref. to ascent to next stop only when stop is below ceiling
Usually, we try to ascent to the next stop and check if we break the ceiling while doing that. This patch adds a preference value to rather check if the ceiling is above the next stop before attempting to ascent. The difference if off-gasing during the ascent is taken into account. Logically, it does not sound like it could be relevant to ignore that off-gasing but it leads to more conservative schedules and it seems the original Fortran VPM-B implementation does just this. So one could argue it is part of that model (if it makes sense or not), so we should at least give users the possibility to turn this on. Maybe we should even make this the default for VPM-B. This patch just addes the code to have the value in the preferences and the planner to act accordingly. There is no UI for it, yet. To test, you have to set it in the code. There could be a later patch with a UI if people like to have it. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--planner.c5
-rw-r--r--pref.h1
-rw-r--r--subsurfacestartup.c1
3 files changed, 7 insertions, 0 deletions
diff --git a/planner.c b/planner.c
index d6efb61f1..a4aacc053 100644
--- a/planner.c
+++ b/planner.c
@@ -879,6 +879,11 @@ bool trial_ascent(int trial_depth, int stoplevel, int avg_depth, int bottom_time
bool clear_to_ascend = true;
char *trial_cache = NULL;
+ // Don't do a trail ascent but check if the ceiling is above the next stoplevel.
+ // This does not sound like a relevant question but it seems the original VPM-B implementation does that.
+ if (prefs.check_ceiling_before_ascent)
+ return (deco_allowed_depth(tissue_tolerance, surface_pressure, &displayed_dive, 1) <= stoplevel);
+
cache_deco_state(tissue_tolerance, &trial_cache);
while (trial_depth > stoplevel) {
int deltad = ascent_velocity(trial_depth, avg_depth, bottom_time) * TIMESTEP;
diff --git a/pref.h b/pref.h
index e471add73..953003a2d 100644
--- a/pref.h
+++ b/pref.h
@@ -97,6 +97,7 @@ struct preferences {
bool display_transitions;
bool safetystop;
bool switch_at_req_stop;
+ bool check_ceiling_before_ascent;
int reserve_gas;
int min_switch_duration; // seconds
int bottomsac;
diff --git a/subsurfacestartup.c b/subsurfacestartup.c
index 18d00d374..ba0969a10 100644
--- a/subsurfacestartup.c
+++ b/subsurfacestartup.c
@@ -48,6 +48,7 @@ struct preferences default_prefs = {
.doo2breaks = false,
.drop_stone_mode = false,
.switch_at_req_stop = false,
+ .check_ceiling_before_ascent = false,
.min_switch_duration = 60,
.last_stop = false,
.verbatim_plan = false,