summaryrefslogtreecommitdiffstats
path: root/profile.c
diff options
context:
space:
mode:
authorGravatar Rick Walsh <rickmwalsh@gmail.com>2015-08-30 22:41:54 +1000
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-08-30 16:55:36 -0700
commit2c4ae23ccc5d968074f549794f40380ec2f68800 (patch)
tree69502d1665e9cf1e2333a30f42b0a08aa3684abd /profile.c
parent9238a7f0dfccfe97bc0bf0bba983fadf70035c48 (diff)
downloadsubsurface-2c4ae23ccc5d968074f549794f40380ec2f68800.tar.gz
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>
Diffstat (limited to 'profile.c')
-rw-r--r--profile.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/profile.c b/profile.c
index 79effeb39..3764b6fd9 100644
--- a/profile.c
+++ b/profile.c
@@ -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