VPM-B: Get rid of ugly blips in ceiling

A real ceiling is the ceiling calculated when the ambient pressure is at the
ceiling.  As such, the Boyle's law compensation should be done against the
ambient pressure at the ceiling.  Instead of doing an iterative calculation,
take the lesser ambient pressure of the ceiling of the previous sample, and the
depth of the current sample.

This approach gets rid of "blips" in the calculated ceiling due to a step in
Boyle's law compensation during ascent.  In limited testing, it also appears to
avoid creating a ceiling deeper than the calculated plan in most cases.

Signed-off-by: Rick Walsh <rickmwalsh@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Rick Walsh 2015-08-30 22:41:54 +10:00 committed by Dirk Hohndel
parent 9238a7f0df
commit 2c4ae23ccc

View file

@ -853,13 +853,13 @@ void calculate_deco_information(struct dive *dive, struct divecomputer *dc, stru
time_stepsize = t1 - t0;
for (j = t0 + time_stepsize; j <= t1; j += time_stepsize) {
int depth = interpolate(entry[-1].depth, entry[0].depth, j - t0, t1 - t0);
boyles_law(depth_to_mbar(entry->depth, &displayed_dive) / 1000.0);
double min_pressure = add_segment(depth_to_mbar(depth, dive) / 1000.0,
&dive->cylinder[entry->cylinderindex].gasmix, time_stepsize, entry->o2pressure.mbar, dive, entry->sac);
tissue_tolerance = min_pressure;
if ((t1 - j < time_stepsize) && (j < t1))
time_stepsize = t1 - j;
}
boyles_law(depth_to_mbar((entry->depth < (entry - 1)->ceiling) ? entry->depth : (entry - 1)->ceiling, &displayed_dive) / 1000.0);
if (t0 == t1)
entry->ceiling = (entry - 1)->ceiling;
else