On 17 September 2015 at 04:21, Dirk Hohndel <[email protected]> wrote:

> On Wed, Sep 16, 2015 at 07:57:24PM +1000, Rick Walsh wrote:
> > Other VPM-B implementations (V-Planner, MultiDeco, Fortran code) take the
> > default gradient of onset of impermeability as 8.2 atm.  We use bar as
> the
> > pressure unit, and 8.2 atm = 8.30865 bar.
> >
> > This has negligible effect on all of the calculated plans I've tested,
> resulting
> > in a maximum decrease of 1 minute in total dive time for ~150 m deep
> dives, but
> > we should get unit conversions correct anyway.
>
> I'm not arguing against that. But with this patch TestPlan fails.
> So either submit a patch that also adapts the runtime we expect in the
> test (and argue why that is the right thing to do), or...
>
> NAK as it is
>

Oops - I should have checked that - it's a bit embarrassing.

While sitting in the naughty corner, I realized we were calculating the CVA
next gradient based on the tissue loading at the end of the previous
iteration, rather than the end of the user-entered portion of the dive.
The attached patch fixes that, and it also makes all the tests pass when
applied on top of the previous patch.

Rick
From 03ffbd542faec470f3f35b2ebeb9879c80cba570 Mon Sep 17 00:00:00 2001
From: Rick Walsh <[email protected]>
Date: Thu, 17 Sep 2015 07:18:16 +1000
Subject: [PATCH] VPM-B restore deco state before calculating next gradient

The next gradient calculation at the start of the CVA loop should be performed
using the tissue loading before starting the iterations, rather than the loading
at the end of the previous iteration.

Signed-off-by: Rick Walsh <[email protected]>
---
 planner.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/planner.c b/planner.c
index a94aafb..db044e3 100644
--- a/planner.c
+++ b/planner.c
@@ -1142,11 +1142,11 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
 	//CVA
 	do {
 		is_final_plan = (prefs.deco_mode == BUEHLMANN) || (previous_deco_time - deco_time < 10);  // CVA time converges
+		restore_deco_state(bottom_cache);
 		if (deco_time != 10000000)
 			vpmb_next_gradient(deco_time, diveplan->surface_pressure / 1000.0);
 
 		previous_deco_time = deco_time;
-		restore_deco_state(bottom_cache);
 
 		depth = bottom_depth;
 		gi = bottom_gi;
-- 
2.4.3

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to