diff options
author | willem ferguson <willemferguson@zoology.up.ac.za> | 2014-11-03 22:11:00 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-11-03 14:13:55 -0800 |
commit | 40bdd607c0258270e6289bdb725d3366bcad1e62 (patch) | |
tree | f367a8fb9697b7501a5a3012d72629360a677680 /dive.h | |
parent | dfc7ee0b296dd834b794d2f5be20924d6578a96a (diff) | |
download | subsurface-40bdd607c0258270e6289bdb725d3366bcad1e62.tar.gz |
Calculate nitrogen and helium gas pressures for CCR after import from CSV
Currently the gas pressures stored in structures of pressure are
calculated using the gasmix composition of the currently selected
cylinder. But with CCR dives the default cylinder is the oxygen
cylinder (here, index 0). However, the gas pressures need to
be calculated using gasmix data from cylinder 1 (the diluent
cylinder). This patch allows setting the appropriate cylinder
for calculating the values in the structures of pressure. It
also allows for correctly calculating gas pressures for any
open circuit cylinders (e.g. bailout) that a CCR diver may
use. This is performed as follows:
1) In dive.h create an enum variable {oxygen, diluent, bailout}
2) Within the definition of cylinder_t, add a member: cylinder_use_type
This stores an enum variable, one of the above.
3) In file.c where the Poseidon CSV data are read in, assign
the appropriate enum values to each of the cylinders.
4) Within the definition of structure dive, add two members:
int oxygen_cylinder_index
int diluent_cylinder_index
This will keep the indices of the two main CCR cylinders.
5) In dive.c create a function get_cylinder_use(). This scans the
cylinders for that dive, looking for a cylinder that has a
particular cylinder_use_type and returns that cylinder index.
6) In dive.c create a function fixup_cylinder_use() that stores the
indices of the oxygen and diluent cylinders in the variables
dive->oxygen_cylinder_index and dive->diluent_cylinder_index,
making use of the function in 4) above.
7) In profile.c, modify function calculate_gas_information_new()
to use the above functions for CCR dives to find the oxygen and
diluent cylinders and to calculate partail gas pressures based
on the diluent cylinder gas mix.
This results in the correct calculation of gas partial pressures
in the case of CCR dives, displaying the correct partial pressure
graphs in the dive profile widget.
Signed-off-by: willem ferguson <willemferguson@zoology.up.ac.za>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.h')
-rw-r--r-- | dive.h | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -48,6 +48,7 @@ extern "C" { #endif enum dive_comp_type {OC, CCR}; // Flags (Open-circuit and Closed-circuit-rebreather) for setting dive computer type +enum cylinderuse {oxygen, diluent, bailout}; // The different uses for cylinders in CCR dives struct gasmix { fraction_t o2; @@ -70,6 +71,7 @@ typedef struct bool manually_added; volume_t gas_used; volume_t deco_gas_used; + enum cylinderuse cylinder_use; } cylinder_t; typedef struct @@ -319,8 +321,11 @@ struct dive { struct divecomputer dc; int id; // unique ID for this dive struct picture *picture_list; + int oxygen_cylinder_index, diluent_cylinder_index; // CCR dive cylinder indices }; +extern int get_cylinder_use(struct dive *dive, enum cylinderuse cylinder_use_type); + /* when selectively copying dive information, which parts should be copied? */ struct dive_components { unsigned int location : 1; |