aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Rick Walsh <rickmwalsh@gmail.com>2016-07-06 22:40:31 +1000
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-07-09 12:08:06 -0700
commit9fbd11744f1bfffbc6973e0f9483ae1630dd8722 (patch)
tree3b4873ba46e85fb5f61cb87ce103aba1285231ae /core
parent1ba61d7ad5025cf3bafc86705cf4c174aef8c264 (diff)
downloadsubsurface-9fbd11744f1bfffbc6973e0f9483ae1630dd8722.tar.gz
Add function to calculate gas maximum narcotic depth
Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'core')
-rw-r--r--core/dive.c2
-rw-r--r--core/dive.h11
-rw-r--r--core/pref.h2
-rw-r--r--core/subsurface-qt/SettingsObjectWrapper.cpp4
-rw-r--r--core/subsurfacestartup.c2
5 files changed, 16 insertions, 5 deletions
diff --git a/core/dive.c b/core/dive.c
index 29198afd6..9db233dca 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -3661,7 +3661,7 @@ fraction_t best_He(depth_t depth, struct dive *dive)
{
fraction_t fhe;
int pnarcotic, ambient;
- pnarcotic = depth_to_mbar(prefs.bestmixend, dive);
+ pnarcotic = depth_to_mbar(prefs.bestmixend.mm, dive);
ambient = depth_to_mbar(depth.mm, dive);
fhe.permille = (100 - 100 * pnarcotic / ambient) * 10; //use integer arithmetic to round up to nearest percent
if (fhe.permille < 0)
diff --git a/core/dive.h b/core/dive.h
index 9c612048d..c968746f8 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -481,6 +481,17 @@ static inline depth_t gas_mod(struct gasmix *mix, pressure_t po2_limit, struct d
return rounded_depth;
}
+/* Maximum narcotic depth rounded to multiples of roundto mm */
+static inline depth_t gas_mnd(struct gasmix *mix, depth_t end, struct dive *dive, int roundto) {
+ depth_t rounded_depth;
+ pressure_t ppo2n2;
+ ppo2n2.mbar = depth_to_mbar(end.mm, dive);
+
+ double maxambient = ppo2n2.mbar / (1 - get_he(mix) / 1000.0);
+ rounded_depth.mm = rint(mbar_to_depth(maxambient, dive) / roundto) * roundto;
+ return rounded_depth;
+}
+
#define SURFACE_THRESHOLD 750 /* somewhat arbitrary: only below 75cm is it really diving */
/* this is a global spot for a temporary dive structure that we use to
diff --git a/core/pref.h b/core/pref.h
index a0f9158b8..a30417923 100644
--- a/core/pref.h
+++ b/core/pref.h
@@ -92,7 +92,7 @@ struct preferences {
int descrate;
int bottompo2;
int decopo2;
- int bestmixend;
+ depth_t bestmixend;
int proxy_type;
char *proxy_host;
int proxy_port;
diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp
index b8865e256..4604abfd7 100644
--- a/core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -917,7 +917,7 @@ int DivePlannerSettings::decopo2() const
int DivePlannerSettings::bestmixend() const
{
- return prefs.bestmixend;
+ return prefs.bestmixend.mm;
}
int DivePlannerSettings::reserveGas() const
@@ -1099,7 +1099,7 @@ void DivePlannerSettings::setBestmixend(int value)
QSettings s;
s.beginGroup(group);
s.setValue("bestmixend", value);
- prefs.bestmixend = value;
+ prefs.bestmixend.mm = value;
emit bestmixendChanged(value);
}
diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c
index 1dba381de..126cc5ee1 100644
--- a/core/subsurfacestartup.c
+++ b/core/subsurfacestartup.c
@@ -52,7 +52,7 @@ struct preferences default_prefs = {
.descrate = 18000 / 60,
.bottompo2 = 1400,
.decopo2 = 1600,
- .bestmixend = 30000,
+ .bestmixend.mm = 30000,
.doo2breaks = false,
.drop_stone_mode = false,
.switch_at_req_stop = false,