aboutsummaryrefslogtreecommitdiffstats
path: root/subsurface-core/gas-model.c
AgeCommit message (Collapse)Author
2016-03-13gas model: update to new coefficients, and simplify expressionsGravatar Linus Torvalds
This updates the gas model to use the new virial coefficients from the R script, and simplifies the expression a tiny bit by avoiding the division by 1000 for the gas fractions, and replacing it with a multiply by 0.001 at the end. The virial coefficients for Oxygen and Nitrogen changed in the last digits due to the use of a different tool for the least-square fitting. That also accounts for the change in format (the coefficients are not using scientific notation). The coefficients for Helium changed noticeably more, since they are now based on the new least-squares fit from the raw data. But the actual end result does not change appreciably, the main advantage is that now the numbers are easily reproducible. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-04gas model: use virial cubic polynomial formGravatar Linus Torvalds
The "virial" form of the Z compression factor is of the form Z = 1.0 + A*p + B*p^2 + C*p^3 + .. and it's considered the "right" polynomial form to use. It happens to also make for one constant less per gas (since the 1.0 can be added later), and can be used to simplify the expression and avoid a few floating point operations. However, in order for that kind of expression simplification to make sense, we need to make sure that we don't calculate the powers of the pressure multiple times either, and that means we have to inline all the actual calculations. Our compiler options still mean that the generated code isn't optimal, but that's a separate issue. And it is a lot better than it used to be. Being clever about this does potentially make the code a tiny bit less legible, but maybe that's not too bad for something that we'd expect to not ever touch once we get it right. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-03gas model: simplify and improve our Z factor calculationsGravatar Linus Torvalds
Lubomir found better compressibility data for the pure gases that we need for scuba, making the air table superfluous: we get good values from just regular linear mixing of the Oxygen, Nitrogen and Helium calculations. Also, rather than using a quintic polynomial, a cubic one does sufficiently well, making for smaller code and fewer coefficients. And judging by the reactions from people on G+ (as well as just looking at how good the fit is with the air data), this is all the right way to do this, and this thus removes the Redlich-Kwong equation. All-credit-goes-to: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02gas model: add polynomials for Z factors of oxygen/nitrogen/heliumGravatar Linus Torvalds
.. and use a linear mix of them for arbitrary gas mixes. For the special case of air, we continue to use the air-specific polynomial. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02gas model: replace Redlich-Kwong with least-square quinticGravatar Linus Torvalds
This goes back to just doing air compressibility, but using the least-squares quintic polynomial equation that Lubomir generated based on the Wikipedia table for air at 300K in the 1-500 bar range. We might be able to do similar things for mixed gases.. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02gas model: split up gas compressibility into a file of its ownGravatar Linus Torvalds
The gas compressibility is such a specialized thing that I really prefer having it separate. This keeps Robert's Redlich-Kwong equation as-is, but let's experiment with other models soon... Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>