mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
This is the official upstream of the Subsurface divelog program
In a dive, when you choose a very low GFlow (like 5 or 9) and a trimix with quite some He (12/48 in the example) and descend fast, the ceiling seems to do strange things in the first minutes of the dive (very very deep for example or jumping around). To understand what is going on we have to recall what gradient factors do in detail: Plain Buehlmann gives you for each tissue a maximal inert gas pressure that is a straight line when plotted against the ambient pressure. So for each depth (=ambient pressure) there is a maximally allowed over-pressure. The idea of gradient factors is that one does not use all the possible over-pressure that Buehlmann gives us but only a depth dependent fraction. GFhigh is the fraction of the possible over-pressure at the surface while GFlow is the fraction at the first deco stop. In between, the fraction is linearly interpolated. As the Buehlmann over-pressure is increasing with depth and typically also the allowed overpressure after applications of gradient factors increases with depth or said differently: the tissue saturation has to be lower if the diver wants to ascent. The main problem is: What is the first stop (where to apply GFlow)? In a planned dive, we could take the first deco stop, but in a real dive from a dive computer download it is impossible to say what constitutes a stop and what is only a slow ascent? What I have used so far is not exactly the first stop but rather the first theoretical stop: During all of the dive, I have calculated the ceiling under the assumption that GFlow applies everywhere (and not just at a single depth). The deepest of these ceilings I have used as the “first stop depth”, the depth at which GFlow applies. Even more, I only wanted to use the information that a diver has during the dive, so I actually only considered the ceilings in the past (and not in the future of a given sample). But this brings with it the problem that early in the dive, in particular during the descent the lowest ceiling so far is very shallow (as not much gas has built up in the body so far). This problem now interferes with a second one: If at the start of the dive when the all compartments have 790mbar N2 the diver starts breathing a He-heavy mix (like 12/48) and descents fast the He builds up in the tissues before the N2 can diffuse out. So right at the start, we already encounter high tissue loadings. If now we have a large difference between GFhigh and GFlow but they apply at very similar depth (the surface and a very shallow depth of the deepest ceiling (which for a non-decompression dive would be theoretically at negative depth) so far) it can happen that the linear interpolation as opposite slope then in the typical case above: The allowed over-pressure is degreasing with depth, shallower depth do not require lower gas loading in the tissue (i.e. can be reached after further off-gasing) but but tolerate higher loadings. In that situation the ceiling disappears (or is rather a floor). So far, I got rid of that problem, by stating that the minimum depth for GFlow was 20m (after all, GFlow is about deep stops, so it should better not be too shallow). Now the dive reported in ticket #549 takes values to an extreme in such away that 20m (which is determined by buehlmann_config.gf_low_position_min in deco.c) was not enough to prevent this inversion problem (or in a milder form that the interpolation of gradient factors is in fact an extrapolation with quite extreme values). This patch that gets rid of the problem for the dive described above but still it is possible to find (more extreme) parameter choices that lead to non-realistic ceilings. Let me close by pointing out that all this is only about the descent, as it is about too shallow depth for GFlow. So no real deco (i.e. later part of the dive) is inflicted. This is only about a theoretical ceiling displayed possibly in the first minutes of a dive. So this is more an aesthetically than a practical problem. Fixes #549 Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org> |
||
---|---|---|
.tx | ||
android | ||
appdata | ||
dives | ||
Documentation | ||
icons | ||
marbledata | ||
packaging | ||
qt-ui | ||
scripts | ||
tests | ||
theme | ||
translations | ||
xslt | ||
.clang-format | ||
.gitattributes | ||
.gitignore | ||
android.cpp | ||
CMakeLists.txt | ||
cochran.c | ||
CodingStyle | ||
color.h | ||
deco.c | ||
deco.h | ||
descriptor3.tsv | ||
device.c | ||
device.h | ||
display.h | ||
dive.c | ||
dive.h | ||
divecomputer.cpp | ||
divecomputer.h | ||
divelist.c | ||
divelist.h | ||
equipment.c | ||
exif.cpp | ||
exif.h | ||
file.c | ||
file.h | ||
gettext.h | ||
gettextfromc.cpp | ||
gettextfromc.h | ||
gpl-2.0.txt | ||
helpers.h | ||
INSTALL | ||
libdivecomputer.c | ||
libdivecomputer.h | ||
linux.c | ||
load-git.c | ||
macos.c | ||
main.cpp | ||
membuffer.c | ||
membuffer.h | ||
parse-xml.c | ||
planner.c | ||
planner.h | ||
pref.h | ||
profile.c | ||
profile.h | ||
qt-gui.cpp | ||
qt-gui.h | ||
qthelper.cpp | ||
qthelper.h | ||
README | ||
Readme.testing | ||
ReleaseNotes.txt | ||
satellite.svg | ||
save-git.c | ||
save-html.c | ||
save-html.h | ||
save-xml.c | ||
sha1.c | ||
sha1.h | ||
statistics.c | ||
statistics.h | ||
strtod.c | ||
subsurface-configure.pri | ||
subsurface-gen-version.pri | ||
subsurface-icon.svg | ||
subsurface-install.pri | ||
subsurface.1 | ||
subsurface.desktop | ||
subsurface.pro | ||
subsurface.qrc | ||
subsurfacestartup.c | ||
subsurfacestartup.h | ||
subsurfacesysinfo.cpp | ||
subsurfacesysinfo.h | ||
SupportedDivecomputers.html | ||
SupportedDivecomputers.txt | ||
terms | ||
time.c | ||
uemis-downloader.c | ||
uemis.c | ||
uemis.h | ||
units.h | ||
webservice.h | ||
windows.c | ||
worldmap-options.h | ||
worldmap-save.c | ||
worldmap-save.h | ||
wreck.jpg |
This is the README file for Subsurface 4.1 This is mainly a bug fix release, but there are rather significant changes under the hood. Check the ReleaseNotes.txt for details. License: GPLv2 Subsurface can be found at http://subsurface.hohndel.org You can get the sources to the latest development version from the git repository: git clone git://subsurface.hohndel.org/subsurface.git . You can also browse the sources via gitweb at git.hohndel.org If you want the latest release (instead of the bleeding edge development version) you can either get this via git checkout v4.1 (or whatever the last release is) if you have already cloned the git repository as shown above or you can get a tar ball from http://subsurface.hohndel.org/downloads/Subsurface-4.1.tgz Basic Usage: ============ Install and start from the desktop, or you can run it locally from the build directory: $ ./subsurface You can give a data file as command line argument, or (once you have set this up in the Preferences) Subsurface picks a default file for you when started from the desktop or without an argument. If you have a dive computer supported by libdivecomputer, you can just select "Import from Divecomputer" from the "Import" menu, select which dive computer you have (and where it is connected if you need to), and hit "OK". The latest list of supported dive computers can be found in the file SupportedDivecomputers.txt Much more detailed end user instructions can be found from inside Subsurface by selecting Help (typically F1). When building from source this is also available as Documentation/user-manual.html Contributing: ============= There is a mailing list for developers: subsurface@hohndel.org Go to http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface to subscribe. If you want to contribute code, please either send signed-off patches or a pull request with signed-off commits. If you don't sign off on them, we will not accept them. This means adding a line that says "Signed-off-by: Name <email>" at the end of each commit, indicating that you wrote the code and have the right to pass it on as an open source patch. See: http://developercertificate.org/ Also, please write good git commit messages. A good commit message looks like this: Header line: explain the commit in one line (use the imperative) Body of commit message is a few lines of text, explaining things in more detail, possibly giving some background about the issue being fixed, etc etc. The body of the commit message can be several paragraphs, and please do proper word-wrap and keep columns shorter than about 74 characters or so. That way "git log" will show things nicely even when it's indented. Make sure you explain your solution and why you're doing what you're doing, as opposed to describing what you're doing. Reviewers and your future self can read the patch, but might not understand why a particular solution was implemented. Reported-by: whoever-reported-it Signed-off-by: Your Name <youremail@yourhost.com> where that header line really should be meaningful, and really should be just one line. That header line is what is shown by tools like gitk and shortlog, and should summarize the change in one readable line of text, independently of the longer explanation. Please use verbs in the imperative in the commit message, as in "Fix bug that...", "Add file/feature ...", or "Make Subsurface..." A bit of Subsurface history: ============================ In fall of 2011, when a forced lull in kernel development gave him an opportunity to start on a new endeavor, Linus Torvalds decided to tackle his frustration with the lack of decent divelog software on Linux. Subsurface is the result of the work of him and a team of developers since then. It now supports Linux, Windows and MacOS and allows data import from a large number of dive computers and several existing divelog programs. It provides advanced visualization of the key information provided by a modern dive computer and allows the user to track a wide variety of data about their diving. In fall of 2012 Dirk Hohndel took over as maintainer of Subsurface