"Port VPM Decompression Algorithm to PHP and then to Dive Computer"

Post #302636003 by Neo on Monday 7th of May 2012 12:52:56 AM

FUNCTION CALC_DECO_CEILING

First cut, Porting to calc_deco_celining() to PHP:
PHP Code:
<?php

/* =============================================================================== */
/*     SUBROUTINE CALC_DECO_CEILING */
/*     Purpose: This subprogram calculates the deco ceiling (the safe ascent */
/*     depth) in each compartment, based on the allowable gradients, and then */
/*     finds the deepest deco ceiling across all compartments.  This deepest */
/*     value (Deco Ceiling Depth) is then used by the Decompression Stop */
/*     subroutine to determine the actual deco schedule. */
/* =============================================================================== */
/*     INITIAL PORT TO PHP  VERSION 0.11 */
/*     https://www.unix.com/whats-your-mind/185211-port-vpm-decompression-algorithm-php-then-dive-computer.html */
/* =============================================================================== */
function calc_deco_ceiling($deco_ceiling_depth$helium_pressure,$nitrogen_pressure,$allowable_gradient_he$allowable_gradient_n2,$dive)

{

/* loop */
/* =============================================================================== */
/*     CALCULATIONS */
/*     Since there are two sets of allowable gradients being tracked, one for */
/*     helium and one for nitrogen, a "weighted allowable gradient" must be */
/*     computed each time based on the proportions of helium and nitrogen in */
/*     each compartment.  This proportioning follows the methodology of */
/*     Buhlmann/Keller.  If there is no helium and nitrogen in the compartment, */
/*     such as after extended periods of oxygen breathing, then the minimum value */
/*     across both gases will be used.  It is important to note that if a */
/*     compartment is empty of helium and nitrogen, then the weighted allowable */
/*     gradient formula cannot be used since it will result in division by zero. */
/* =============================================================================== */




    
for ($i 1$i <= 16; ++$i) {
        
$gas_loading 
            
$helium_pressure[$i 1] + $nitrogen_pressure[$i 1];
        if (
$gas_loading 0) {
            
$weighted_allowable_gradient 
                (
$allowable_gradient_he[$i 1] * $helium_pressure[$i 1] + 
                    
$allowable_gradient_n2[$i 1] * $nitrogen_pressure[$i 1]) / 
                        (
$helium_pressure[$i 1] + $nitrogen_pressure[$i 1]);
            
$tolerated_ambient_pressure 
                
$gas_loading 
                
$dive['constant_pressure_other_gases'] - 
                
$weighted_allowable_gradient;
        } else {
            
/* Computing MIN */
            
$r1 $allowable_gradient_he[$i 1];
            
$r2 $allowable_gradient_n2[$i 1];
            
$weighted_allowable_gradient min($r1,$r2);
            
$tolerated_ambient_pressure 
                
$dive['constant_pressure_other_gases'] - $weighted_allowable_gradient;
        }

/* =============================================================================== */
/*     The tolerated ambient pressure cannot be less than zero absolute, i.e., */
/*     the vacuum of outer space! */
/* =============================================================================== */

        
if ($tolerated_ambient_pressure 0) {
            
$tolerated_ambient_pressure 0.0;
        }
        
$compartment_deco_ceiling[$i 1] = 
            
$tolerated_ambient_pressure $dive['barometric_pressure'];
    }

/* =============================================================================== */
/*     The Deco Ceiling Depth is computed in a loop after all of the individual */
/*     compartment deco ceilings have been calculated.  It is important that the */
/*     Deco Ceiling Depth (max deco ceiling across all compartments) only be */
/*     extracted from the compartment values and not be compared against some */
/*     initialization value.  For example, if MAX(Deco_Ceiling_Depth . .) was */
/*     compared against zero, this could cause a program lockup because sometimes */
/*     the Deco Ceiling Depth needs to be negative (but not less than zero */
/*     absolute ambient pressure) in order to decompress to the last stop at zero */
/*     depth. */
/* =============================================================================== */

    
$deco_ceiling_depth $compartment_deco_ceiling[0];
    for (
$i 2$i <= 16; ++$i) {
        
/* Computing MAX */
        
$r1 $deco_ceiling_depth;
        
$r2 $compartment_deco_ceiling[$i 1];
        
$deco_ceiling_depth max($r1,$r2);
    }
    return 
$deco_ceiling_depth;
/* calc_deco_ceiling */

?>
Quote:
WARNING: Breathing compressed gas underwater, whether with conventional open-circuit scuba or closed-circuit rebreathers, is a potentially dangerous activity that requires specialized training. Breathing gas mixtures other than air underwater and especially using rebreather technology underwater, are activities which require considerable specialized training and certification. No one should ever attempt these activities without professional training. The information and software related to scuba diving, decompression theory and software code in this forum is provided for informational purposes only; and this information does not constitute adequate or proper training!
 
Test Your Knowledge in Computers #131
Difficulty: Easy
UNIX certification is based on the 'Single Unix Specification' which is an extension of IEEE 1003 (POSIX).
True or False?

6 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Decompression utility

I am looking for an unzip application that can handle Unix .z files, but from a Windows environment AND has a command-line prompt. Anybody know of anything? TIA, H2M3 (2 Replies)
Discussion started by: H2M3
2 Replies

2. Windows & DOS: Issues & Discussions

Decompression with Cygwin

I am having some trouble decompressing a tar.bz2 with Cygwin. Is it even possible to do this? I am new to Unix so I have no idea. I downloaded GCC on my Windows machine (gcc-3.4.4.tar.bz2) and I've been trying to decompress and install it. Is cygwin this best way to decompress on a windows... (3 Replies)
Discussion started by: noob1021
3 Replies

3. UNIX for Dummies Questions & Answers

Compression and decompression in the same script

Hi Guys, I'm just wondering how to compress and decompress a file in the same script using multiple programs, and can it be done in one line? e.g gzip file && gunzip file bzip2 file && bunzip file I tried this and a few other combinations but it doesn't seem to work. Any... (6 Replies)
Discussion started by: Spaulds
6 Replies

4. Ubuntu

SSH and VPM Doubt

hI MY Nerd folks...i have ubuntu 10.4 in my machine...i want to use open shh in my latop for the sake of being complete anonymous...but am just a noob anyont got any tips for me for the complete steps or for How to LInks ...watever..thanks in advance (4 Replies)
Discussion started by: surensach
4 Replies

5. What is on Your Mind?

Port VPM Decompression Algorithm to PHP (Main Loop) - Part 2

Continued from here. Port the main loop C code to PHP. Here is the C code for the main loop: /* =============================================================================== */ /* Begin MAIN proc (see endofpgm for alternate entry) */ /*... (2 Replies)
Discussion started by: Neo
2 Replies

6. Post Here to Contact Site Administrators and Moderators

VPM decompression algorithm +++for NEO+++

Hi Neo, i have followed your porting of the VPM algorithm to C+. Did you ever finish this exercise? I am playing around with some ARM chips and would love to run the algorithm on them... would you care to share the final results? Thanks for your help. Greetings Carsten (0 Replies)
Discussion started by: carsten
0 Replies

Featured Tech Videos

All times are GMT -4. The time now is 08:27 AM.
Unix & Linux Forums Content Copyright 1993-2019. All Rights Reserved.
Privacy Policy