From 0dc61249a304286cf7d06e88fec5e10ba070117d Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Tue, 7 Feb 2017 09:18:19 +0100 Subject: [PATCH] Reset VPM-B state between repetitive dives To: subsurface@subsurface-divelog.org This resets the maximum crushing pressures and the maximal ambient pressure between repetitive dives to prevent anomalies that a dive produces a shorter deco when following another one than without. Reported-by: sfuchs@gmx.de Signed-off-by: Robert C. Helling --- core/deco.c | 10 ++++++++++ core/dive.h | 1 + core/divelist.c | 1 + 3 files changed, 12 insertions(+) diff --git a/core/deco.c b/core/deco.c index dd5cfa0..5014f1b 100644 --- a/core/deco.c +++ b/core/deco.c @@ -559,9 +559,19 @@ void dump_tissues() printf("\n"); } +void clear_vpmb_state() { + int ci; + for (ci = 0; ci < 16; ci++) { + max_n2_crushing_pressure[ci] = 0.0; + max_he_crushing_pressure[ci] = 0.0; + } + max_ambient_pressure = 0; +} + void clear_deco(double surface_pressure) { int ci; + clear_vpmb_state(); for (ci = 0; ci < 16; ci++) { tissue_n2_sat[ci] = (surface_pressure - ((in_planner() && (decoMode() == VPMB)) ? WV_PRESSURE_SCHREINER : WV_PRESSURE)) * N2_IN_AIR / 1000; tissue_he_sat[ci] = 0.0; diff --git a/core/dive.h b/core/dive.h index 1b99fc3..4608e9d 100644 --- a/core/dive.h +++ b/core/dive.h @@ -872,6 +872,7 @@ void dump_plan(struct diveplan *diveplan); bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool show_disclaimer); void calc_crushing_pressure(double pressure); void vpmb_start_gradient(); +void clear_vpmb_state(); void delete_single_dive(int idx); diff --git a/core/divelist.c b/core/divelist.c index b28dd5e..44401b7 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -423,6 +423,7 @@ unsigned int init_decompression(struct dive *dive) } add_dive_to_deco(pdive); laststart = pdive->when; + clear_vpmb_state(); #if DECO_CALC_DEBUG & 2 printf("added dive #%d\n", pdive->number); dump_tissues(); -- 2.10.1 (Apple Git-78)