Add current GF to infobox

As per request from users on scubaforum.com, this adds
the current gradient factor to the deco information of
the infobox. Up to now, this information was only
graphically represented in the pressure bar graph
and the heatmap. This gives a numerical value.

Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
Robert C. Helling 2019-11-28 10:37:44 +01:00 committed by Dirk Hohndel
parent 4928c4ae04
commit 33e49637ec
4 changed files with 15 additions and 4 deletions

View file

@ -1,3 +1,4 @@
Profile: Add current GF to infobox
Mobile: (desktop only) new switch --testqml, allows to use qml files instead of resources.
Desktop: increase speed of multi-trip selection
Mobile: ensure that all BT/BLE flavors of the OSTC are recognized as dive computers [#2358]

View file

@ -2290,8 +2290,11 @@ TTS longer than 2 hours is not accurately calculated and Subsurface only indicat
[icon="images/icons/GFLow.jpg"]
[NOTE]
Show *Deco information*. When enabled, the information box shows the surface GF and the momentary
ceilings for the individual tissue compartments. The surface GF is an indication of to what degree
Show *Deco information*. When enabled, the information box shows the current gradient factor (GF),
the surface GF and the momentary
ceilings for the individual tissue compartments. The gradient factor is in indication of how
much of the allowed pressure gradient between tissues (normalized with a 100/100 Bühlmann model)
the diver is currently using. The surface GF is an indication of to what degree
the partial pressure of nitrogen in the blood exceeds the partial pressure required for safely
reaching the surface. Surface GF > 100% means that it is unsafe to surface.

View file

@ -1126,13 +1126,17 @@ void calculate_deco_information(struct deco_state *ds, const struct deco_state *
}
}
entry->surface_gf = 0.0;
entry->current_gf = 0.0;
for (j = 0; j < 16; j++) {
double m_value = ds->buehlmann_inertgas_a[j] + entry->ambpressure / ds->buehlmann_inertgas_b[j];
double surface_m_value = ds->buehlmann_inertgas_a[j] + surface_pressure / ds->buehlmann_inertgas_b[j];
entry->ceilings[j] = deco_allowed_depth(ds->tolerated_by_tissue[j], surface_pressure, dive, 1);
double current_gf = (ds->tissue_inertgas_saturation[j] - entry->ambpressure) / (m_value - entry->ambpressure);
entry->percentages[j] = ds->tissue_inertgas_saturation[j] < entry->ambpressure ?
lrint(ds->tissue_inertgas_saturation[j] / entry->ambpressure * AMB_PERCENTAGE) :
lrint(AMB_PERCENTAGE + (ds->tissue_inertgas_saturation[j] - entry->ambpressure) / (m_value - entry->ambpressure) * (100.0 - AMB_PERCENTAGE));
lrint(AMB_PERCENTAGE + current_gf * (100.0 - AMB_PERCENTAGE));
if (current_gf > entry->current_gf)
entry->current_gf = current_gf;
double surface_gf = 100.0 * (ds->tissue_inertgas_saturation[j] - surface_pressure) / (surface_m_value - surface_pressure);
if (surface_gf > entry->surface_gf)
entry->surface_gf = surface_gf;
@ -1552,7 +1556,9 @@ static void plot_string(struct plot_info *pi, int idx, struct membuffer *b)
if (entry->rbt)
put_format_loc(b, translate("gettextFromC", "RBT: %umin\n"), DIV_UP(entry->rbt, 60));
if (prefs.decoinfo) {
if (entry->surface_gf > 0)
if (entry->current_gf > 0.0)
put_format(b, translate("gettextFromC", "GF %d%%\n"), (int)(100.0 * entry->current_gf));
if (entry->surface_gf > 0.0)
put_format(b, translate("gettextFromC", "Surface GF %.0f%%\n"), entry->surface_gf);
if (entry->ceiling) {
depthvalue = get_depth_units(entry->ceiling, NULL, &depth_unit);

View file

@ -75,6 +75,7 @@ struct plot_data {
double ambpressure;
double gfline;
double surface_gf;
double current_gf;
double density;
bool icd_warning;
};