Fix the deco calculation in the dive planner

The existing code incorrectly started all calculation at the depth at the
end of the first segment. So if you went to 50m in 5min in your first
segment, you incorrectly got 5 minutes at 50m (instead of a progression
from 0 to 50m, over 5 minutes).

This commit fixes that and now gives us planned dives that then match what
is shown in the profile.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2013-01-08 13:54:29 -08:00
parent bad7882ae1
commit 1bec821c73

View file

@ -48,7 +48,7 @@ double tissue_at_end(struct dive *dive, char **cached_datap)
{
struct divecomputer *dc;
struct sample *sample, *psample;
int i, j, t0, t1;
int i, j, t0, t1, lastdepth;
double tissue_tolerance;
if (!dive)
@ -63,11 +63,13 @@ double tissue_at_end(struct dive *dive, char **cached_datap)
if (!dc->samples)
return tissue_tolerance;
psample = sample = dc->sample;
t0 = 0;
lastdepth = t0 = 0;
for (i = 0; i < dc->samples; i++, sample++) {
t1 = sample->time.seconds;
if (i > 0)
lastdepth = psample->depth.mm;
for (j = t0; j < t1; j++) {
int depth = psample->depth.mm + (j - t0) * (sample->depth.mm - psample->depth.mm) / (t1 - t0);
int depth = lastdepth + (j - t0) * (sample->depth.mm - lastdepth) / (t1 - t0);
tissue_tolerance = add_segment(depth_to_mbar(depth, dive) / 1000.0,
&dive->cylinder[sample->sensor].gasmix, 1, sample->po2, dive);
}