Problems with ceiling for CCR dive

Willem Ferguson willemferguson at
Mon Oct 13 02:53:18 PDT 2014


On 13/10/2014 11:25, Robert Helling wrote:
> On 13.10.2014, at 08:49, Willem Ferguson 
> <willemferguson at 
> <mailto:willemferguson at>> wrote:
> Willem,
> 1) Your sensor data never reaches fill_pressures: You make the 
> pressures struct (and I would like to add that using one structure to 
> both pass data in and out of the function does not sound like such a 
> great idea to me) be a member of the entry struct. But then, that gets 
> never used as add_segments gets called which does not now about entry 
> and thus creates a new pressures struct which has uninitialized values 
> in it.
> One simple way to fix this would be to do the sensor voting logic not 
> in fill_pressures but in a separate function and then feed the 
> resulting majority vote for the po2 into add_segment. For example you 
> could call that from profile.c with the entry as argument (or just a 
> pointer to the sensors array) to obtain the po2. Then you could leave 
> the data of the individual sensors out to the pressures struct.
> 2) I can unbreak the OC part by at least
> th-ws-tmpim01:subsurface helling$ git diff
> *diff --git a/dive.c b/dive.c*
> *index 4d906e5..d624cce 100644*
> *--- a/dive.c*
> *+++ b/dive.c*
> @@ -1623,7 +1623,7 @@ extern void fill_pressures(struct gas_pressures 
> *pressures, const double amb_pre
>   pressures->o2 = po2;
> pressures->he = (amb_pressure - pressures->o2) * (double)get_he(mix) / 
> (1000 - get_o2(mix));
> pressures->n2 = amb_pressure - pressures->o2 - pressures->he;
> -       } else if (!pressures->o2) { // Open circuit dives: no gas 
> pressure values available, they need to be calculated
> +} else { // Open circuit dives: no gas pressure values available, 
> they need to be calculated
> pressures->o2 = get_o2(mix) / 1000.0 * amb_pressure;
> pressures->he = get_he(mix) / 1000.0 * amb_pressure;
> pressures->n2 = (1000 - get_o2(mix) - get_he(mix)) / 1000.0 * 
> amb_pressure;
> 3) In the case of two sensors, why does your for loop iterate over 
> three sensors?
> Best
> Robert

If I execute calculate_deco_information() AFTER get_pressures(), then, 
for OC as well as CCR dives, the ceilings appear correct because, now, 
there are calculated po2 values to work from, allowing calculation of 
pn2 values and ceilings. See line 962 in profile.c (latest master). But 
I do not know whether you would consider the swop of order a wise thing 
to do. But this does not solve the ceilings for dive plans. Please 
comment, will you?

What I can do is this:
Create a function in profile.c that does the voting. It will reside in 
profile.c, be plot_info aware, and return a double, being the calculated 
po2 value. Now we can remove the sensor values from the pressures 
structure and return the sensor data to the "base level" of plot_info. 
This might also remove the need of a 5th calling parameter for 
get_pressures(). Please comment, will you?

If it were possible, I want to solve this problem before I leave for 
meetings in east Africa on Wednesday and be away for two weeks.

Thank you so much for your time committed to solve this.
Kind regards,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the subsurface mailing list