Cylinder pressure interpolation and end pressure display for CCR
Robert C. Helling
helling at atdotde.de
Sun Nov 9 01:43:09 PST 2014
On 09 Nov 2014, at 07:12, Willem Ferguson <willemferguson at zoology.up.ac.za> wrote:
Willem,
> After a sleep I can think (I hope) more clearly. I attach a function from gaspressures.c (not the whole of gasspressures.c). It is possible to use a switch between the cylinder_use types as shown in this example. But its utility is limited. The interpolation requires knowledge about the specific cylinder that is used for a particular point on the dive profile. Think in terms of cylinder changes during the dive.
I have to admit, I don’t really understand what you are trying to do here. I assume you want to compute the current (i.e. possibly interpolated pressure(s) for a given point in the plot, i.e. for plot_info *entry. Is that indeed the case?
I must say, what I would do is:
1) If entry->o2setpoint == 0 , i.e. this is an OC/bailout segment do the stuff we used to do.
2) Otherwise we are in CCR mode. Then we have two cylinders in use, entry->cylinderindex which hopefully is the diluent. This we don’t interpolate, we use the last measured value. In addition there is the oxygen cylinder get_cylinder_use(dive, oxygen). For that we do an interpolation as in the OC case but with the difference that we only interpolate with time (not with pressure_time or alternatively for the depth use the surface).
If you want, I can try to produce a patch that implements this in real (rather than pseudo-) code.
What you sent is obviously missing parts so I am not sure what you are aiming at.
But looking at code like
switch (dive->cylinder[entry->cylinderindex].cylinder_use) {
case oxygen :
cylinderindex = get_cylinder_use(dive, oxygen);
break;
case diluent :
cylinderindex = get_cylinder_use(dive, diluent);
break;
case bailout :
cylinderindex = entry->cylinderindex;
break;
default ;
}
it seems to me that this is tautological: Let me translate my interoperation of that code into words:
Look at the cylinder_use of the cylinder with index entry->cylinder index.
If it is oxygen, cylinderindex should be the index of the cylinder whose cylinder_use is oxygen [why wouldn’t that be entry->cylinderindex ?]
If it is diluent cylinderindex should be the cylinder whose cylinder_use is diluent [again that wouldn’t necessarily be entry->cylinderindex only if there are several diluents]
Otherwise cylinderindex should be entry->cylinderindex.
So in total they only possibility that after that code block cylinderindex != entry->cylinderindex would be the weird case that there are several diluents and even then I am not sure that the result then is what you want.
Best
Robert
--
.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oO
Robert C. Helling Elite Master Course Theoretical and Mathematical Physics
Scientific Coordinator
Ludwig Maximilians Universitaet Muenchen, Dept. Physik
print "Just another Phone: +49 89 2180-4523 Theresienstr. 39, rm. B339
stupid .sig\n"; http://www.atdotde.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.subsurface-divelog.org/pipermail/subsurface/attachments/20141109/ce899065/attachment.sig>
More information about the subsurface
mailing list