diff options
-rw-r--r-- | core/planner.c | 7 | ||||
-rw-r--r-- | core/profile.c | 4 |
2 files changed, 7 insertions, 4 deletions
diff --git a/core/planner.c b/core/planner.c index e13fdf9a3..ab53dc0be 100644 --- a/core/planner.c +++ b/core/planner.c @@ -1056,8 +1056,11 @@ bool plan(struct diveplan *diveplan, struct dive *dive, int timestep, struct dec stopping = false; } } - - deco_time = clock - deco_state->bottom_time; + /* When calculating deco_time, we should pretend the final ascent rate is always the same, + * otherwise odd things can happen, such as CVA causing the final ascent to start *later* + * if the ascent rate is slower, which is completely nonsensical. + * Assume final ascent takes 20s, which is the time taken to ascend at 9m/min from 3m */ + deco_time = clock - deco_state->bottom_time - stoplevels[2] / last_ascend_rate + 20; } while (!is_final_plan); decostoptable[decostopcounter].depth = 0; diff --git a/core/profile.c b/core/profile.c index 1e717f318..83ff20055 100644 --- a/core/profile.c +++ b/core/profile.c @@ -1084,9 +1084,9 @@ void calculate_deco_information(struct dive *dive, struct divecomputer *dc, stru if (final_tts > 0) deco_time = pi->maxtime + final_tts - time_deep_ceiling; else if (time_clear_ceiling > 0) - /* Consistent with planner, deco_time ends after ascending (20-40s @9m/min from 3-6m) + /* Consistent with planner, deco_time ends after ascending (20s @9m/min from 3m) at end of whole minute after clearing ceiling */ - deco_time = ROUND_UP(time_clear_ceiling, 60) + 30 - time_deep_ceiling; + deco_time = ROUND_UP(time_clear_ceiling, 60) + 20 - time_deep_ceiling; vpmb_next_gradient(deco_time, surface_pressure / 1000.0); final_tts = 0; last_ndl_tts_calc_time = 0; |