summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/deco.c14
-rw-r--r--core/deco.h2
-rw-r--r--core/profile.c5
3 files changed, 17 insertions, 4 deletions
diff --git a/core/deco.c b/core/deco.c
index 09426bd0a..b138a9fbd 100644
--- a/core/deco.c
+++ b/core/deco.c
@@ -618,3 +618,17 @@ void set_vpmb_conservatism(short conservatism)
else
vpmb_config.conservatism = conservatism;
}
+
+double get_gf(double ambpressure_bar, const struct dive *dive)
+{
+ double surface_pressure_bar = get_surface_pressure_in_mbar(dive, true) / 1000.0;
+ double gf_low = buehlmann_config.gf_low;
+ double gf_high = buehlmann_config.gf_high;
+ double gf;
+ if (gf_low_pressure_this_dive > surface_pressure_bar)
+ gf = MAX((double)gf_low, (ambpressure_bar - surface_pressure_bar) /
+ (gf_low_pressure_this_dive - surface_pressure_bar) * (gf_low - gf_high) + gf_high);
+ else
+ gf = gf_low;
+ return gf;
+}
diff --git a/core/deco.h b/core/deco.h
index fd3b94a9f..bfedd6046 100644
--- a/core/deco.h
+++ b/core/deco.h
@@ -13,6 +13,8 @@ extern double gf_low_pressure_this_dive;
extern int deco_allowed_depth(double tissues_tolerance, double surface_pressure, struct dive *dive, bool smooth);
+double get_gf(double ambpressure_bar, const struct dive *dive);
+
#ifdef __cplusplus
}
#endif
diff --git a/core/profile.c b/core/profile.c
index 935f95ede..abe1757c4 100644
--- a/core/profile.c
+++ b/core/profile.c
@@ -962,10 +962,7 @@ void calculate_deco_information(struct dive *dive, struct divecomputer *dc, stru
int time_stepsize = 20;
entry->ambpressure = depth_to_bar(entry->depth, dive);
- entry->gfline = MAX((double)prefs.gflow, (entry->ambpressure - surface_pressure) / (gf_low_pressure_this_dive - surface_pressure) *
- (prefs.gflow - prefs.gfhigh) +
- prefs.gfhigh) *
- (100.0 - AMB_PERCENTAGE) / 100.0 + AMB_PERCENTAGE;
+ entry->gfline = get_gf(entry->ambpressure, dive) * (100.0 - AMB_PERCENTAGE) + AMB_PERCENTAGE;
if (t0 > t1) {
fprintf(stderr, "non-monotonous dive stamps %d %d\n", t0, t1);
int xchg = t1;