This actually didn't make a difference for the common case, since our
simplified gas compressibility model had a compressibility factor of 1.0
up to 200 bar, and increased smoothly from there. As a result, the
common 2400 and 3000 psi workpressures didn't really see an effect from
this.
Not taking compressibility into account does kind of make sense for
cylinder naming, since the cylinder may be used for different gases with
very different compressibility characteristics.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This marks "surface_volume_multiplier()" static in preparation for
changing it to use an actual honest-to-goodness compressibility
estimation. Without that, it wasn't obvious that the function wasn't
used in other random places.
Also, remove the "wet_volume()" function. It was unused, but more
importantly, it was wrong. Yes, it was the inverse of "gas_volume()",
but when you calculate wet volumes from the imperial sizes, you don't
actually use the "real" gas volume, you use the idealized one.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
We use random numbers for file names, both temporary filename when
creating a zip for divelogs.de upload and for filename on form data for
facebook upload. This does not require for true randomness but we still
want these to not be constant on each run of Subsurface. Thus we need to
initialize the random number generator.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
The code was wrong (and in the case of metric display for weights >= 20kg,
spectacularly wrong) in more or less all cases.
Rounding. It's good for the sole.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This allows the user to delete the currently shown dive. This action takes
effect right away, no confirmation, it gets right away written to the
local git cache.
One idea for an undo operation here could be to simply reset the git tree
to HEAD^ and reload. Not elegant, but would work.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Instead of re-calculating all the interpolation data for each plot entry
(which means that we have a quadratic algorithm that walks over all the
plot-info points for each plot-info point), we can just update it
incrementally within any particular interpolation segment.
The previous cleanups made the code sane enough to understand, and makes
it trivial to see how you don't have to recalculate the full thing.
This gets rid of the O(n**2) algorithm, and it instead becomes O(n*m)
where 'n' is the number of plot entries, and 'm' is the number of gas
segments (which is usually a much smaller numer, typically "1").
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
With the two bigger simplications, this just re-organizes the code to do
the "interpolate.pressure_time" update that is shared among all the
"after segment start" cases in just one place.
That leaves the get_pr_interpolate_data() much simpler, and makes it
much clearer what it actually does.
In particular, it becomes very obvious that "interpolate.pressure_time"
is constant for one particular segment (it's the total pressure time),
and that "interpolate.acc_pressure_time" is the one that gets updated
for every entry.
The next step is to only call this for the first entry, and then update
just the "acc_pressure_time" in the caller.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Getting rid of the pointless always-zero pressure now makes it obvious
how some of the remaining code can just be removed too: there is no
point in re-initializing the pressure_time entries to zero at the
segment start, because they started out zero and we just checked that we
don't do anything to them before we hit the segment start.
Similarly, now that the silly pressure testing is gone, it is obvious
that the code for "i < cur" and "i == curr" cases is identical, and the
two cases can just be collapsed.
Signed-off-by: Linus Torvalds <torvalds@ linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
In the function fill_missing_tank_pressures(), we only ever call
get_pr_interpolate_data() if "pressure" is zero. So passing it in as an
argument, and then testing whether it is zero or not, is just totally
pointless, and only obfuscates things.
This whole thing seems to be due to people editing the code over time,
with the tests becoming superfluous as the code around it changed, and
nobody looking at whether it actually made sense any more.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Don't allow negative depth or depth beyond 500m.
Additional checks that the gas mix is possible (even thought QML code
SHOULD only allow valid combinations).
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
The input is restricted to
EAN100
EANxx (with 'x' one of 0..9)
AIR
xx/xx (with 'x' one of 0..9)
xxx (with 'x' one of 0..9 and the number <= 100)
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
We (ab)use fake_dc() to create a pleasing profile for a manually added
dive. Based on it's intended use, fake_dc() simply handed back a dc
structure that pointed at staticly allocated samples - that's obviously
(now that I think about it) going to blow up in my face if I edit a
manually added dive more than once.
So now we have an option for fake_dc() to actually allocate the samples -
this way the rest of the code can treat these samples as we would treat
samples created any other way. We can free them and replace them with a
new set.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
We only need to deal with this if the dive changed. And in that case, if
we calculate a new fake DC, we need to clear out the meandepth as
otherwise the algorithm will try to match both max and mean depth. Since
the user potentially changed the max depth that could have very odd
consequences.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
When the user explicitly sets the units when editing or adding dives, we
used to change the display preferences. This was changed for some but not
all fields in commit 6252d0cd3b ("While parsing weight and pressure we
should not change the users settings")
Now we do this consistently for all inputs.
Also, when editing the depth of a manually added dive, we now throw away
the samples (as those are certain to be inconsistent).
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
- coding style (ugh - I should have fixed that when I first committed them)
- remove redundant variables
- add similar code to the length and temperature helpers
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
A dive with zero duration creates an odd profile that is 2min 30seconds
long and looks just weird. Instead, simply show a text that there is on
profile shown for such a dive.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Right now this just tests for zero duration, but maybe this should also
return true for positive duration and max depth of 0.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
If cylinder does not have start and end pressures assigned, attempt to
grab them from the samples instead.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
It is better to use the proper function to test if cylinder is in use
than just checking the description.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This is more consistent with the rest of our UI
To make this work you once again need changes to the mobile components
that aren't upstream, yet.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
First cylinder only, show warning if there are more than one cylinder defined.
Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Now it is possible to enter a specific unit that is different from the
unit stored in the preferences. If only numbers are inputed the unit will
be the same as specified by the users preferences.
Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Android users are well used to using the back key for this. I kept the
code in place as things may end up completely different on IOS or other
mobile platforms.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This should have been obvious. Without explicitly asking for only local
git activity, it will connect to the remote.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This allows us to shrink the top bar quite a bit and have a little more
screen real estate. In order to maintain functionality we need to reenable
the context menu on some screens.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>