Mercurial > public > ostc4
comparison Discovery/Src/vpm.c @ 290:5e0bb91d4a12 div-fixes-6
VPM, cleanup: 1st round
Rather big cleanup. Removed numerous unused global variables, made almost
all globals and functions static, removed unused code, removed commented
core. No functional change in this commit.
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
author | Jan Mulder <jlmulder@xs4all.nl> |
---|---|
date | Thu, 02 May 2019 08:43:07 +0200 |
parents | 3949781096d4 |
children | 24ff72e627f4 |
comparison
equal
deleted
inserted
replaced
289:8466c994f3e6 | 290:5e0bb91d4a12 |
---|---|
75 #include <stdlib.h> | 75 #include <stdlib.h> |
76 #include <string.h> | 76 #include <string.h> |
77 #include <math.h> | 77 #include <math.h> |
78 #include <time.h> | 78 #include <time.h> |
79 | 79 |
80 //#include "compiler.h" | |
81 //#include "sdramc.h" | |
82 #include "vpm.h" | 80 #include "vpm.h" |
83 //#include "buehlmann.h" | |
84 | |
85 #include "decom.h" | 81 #include "decom.h" |
86 | |
87 //#include "decompression.h" | |
88 //#include "taskmanagement\tissue_calls.h" | |
89 #define true 1 | |
90 #define false 0 | |
91 | 82 |
92 #define GAS_N2 0 | 83 #define GAS_N2 0 |
93 #define GAS_HE 1 | 84 #define GAS_HE 1 |
94 /* temp vars to simplify UNFMTLISTs */ | 85 |
95 float fO2, fHe, fN2; | 86 static const _Bool buehlmannSafety = true; |
96 float dc, rc, ssc; | |
97 short mc; | |
98 | |
99 const _Bool buehlmannSafety = true; | |
100 /* Common Block Declarations */ | 87 /* Common Block Declarations */ |
101 | 88 |
102 extern const float SURFACE_TENSION_GAMMA; //!Adj. Range: 0.015 to 0.065 N/m | 89 extern const float SURFACE_TENSION_GAMMA; //!Adj. Range: 0.015 to 0.065 N/m |
103 extern const float SKIN_COMPRESSION_GAMMAC; //!Adj. Range: 0.160 to 0.290 N/m | 90 extern const float SKIN_COMPRESSION_GAMMAC; //!Adj. Range: 0.160 to 0.290 N/m |
104 extern const float UNITS_FACTOR; | 91 extern const float UNITS_FACTOR; |
105 extern const float WATER_VAPOR_PRESSURE; // (Schreiner value) based on respiratory quotien | 92 extern const float WATER_VAPOR_PRESSURE; // (Schreiner value) based on respiratory quotien |
106 extern const float CRIT_VOLUME_PARAMETER_LAMBDA; //!Adj. Range: 6500 to 8300 fsw-min | 93 extern const float CRIT_VOLUME_PARAMETER_LAMBDA; //!Adj. Range: 6500 to 8300 fsw-min |
107 extern const float GRADIENT_ONSET_OF_IMPERM_ATM; //!Adj. Range: 5.0 to 10.0 atm | 94 //extern const float GRADIENT_ONSET_OF_IMPERM_ATM; //!Adj. Range: 5.0 to 10.0 atm |
108 extern const float REGENERATION_TIME_CONSTANT; //!Adj. Range: 10080 to 51840 min | 95 extern const float REGENERATION_TIME_CONSTANT; //!Adj. Range: 10080 to 51840 min |
109 extern const float PRESSURE_OTHER_GASES_MMHG; //!Constant value for PO2 up to 2 atm | 96 //extern const float PRESSURE_OTHER_GASES_MMHG; //!Constant value for PO2 up to 2 atm |
110 extern const float CONSTANT_PRESSURE_OTHER_GASES; // PRESSURE_OTHER_GASES_MMHG / 760. * UNITS_FACTOR; | 97 extern const float CONSTANT_PRESSURE_OTHER_GASES; // PRESSURE_OTHER_GASES_MMHG / 760. * UNITS_FACTOR; |
111 | 98 |
112 extern const float HELIUM_TIME_CONSTANT[]; | 99 extern const float HELIUM_TIME_CONSTANT[]; |
113 extern const float NITROGEN_TIME_CONSTANT[]; | 100 extern const float NITROGEN_TIME_CONSTANT[]; |
114 | 101 |
115 float minimum_deco_stop_time; | 102 static float minimum_deco_stop_time; |
116 float run_time, run_time_first_stop; | 103 static float run_time, run_time_first_stop; |
117 float segment_time; | 104 static float segment_time; |
118 short mix_number; | 105 static short mix_number; |
119 float barometric_pressure; | 106 static float barometric_pressure; |
120 _Bool altitude_dive_algorithm_off; | 107 static _Bool altitude_dive_algorithm_off; |
121 _Bool units_equal_fsw, units_equal_msw; | 108 static _Bool units_equal_fsw, units_equal_msw; |
122 | 109 |
123 /* by hw 11.06.2015 to allow */ | 110 /* by hw 11.06.2015 to allow */ |
124 float gCNS_VPM; | 111 static float gCNS_VPM; |
125 | 112 |
126 float helium_pressure[16], nitrogen_pressure[16]; | 113 static float helium_pressure[16], nitrogen_pressure[16]; |
127 //float helium_pressure_crush[16], nitrogen_pressure_crush[16]; | 114 static float surface_phase_volume_time[16]; |
128 //float fraction_helium[MAX_GASMIXES + EXTRA_GASMIXES], fraction_nitrogen[MAX_GASMIXES + EXTRA_GASMIXES]; | 115 static float regenerated_radius_he[16], regenerated_radius_n2[16]; |
129 //float initial_critical_radius_he[16], initial_critical_radius_n2[16]; | 116 static float allowable_gradient_he[16], allowable_gradient_n2[16]; |
130 //float adjusted_critical_radius_he[16], | |
131 //adjusted_critical_radius_n2[16]; | |
132 //float max_crushing_pressure_he[16], | |
133 //max_crushing_pressure_n2[16]; | |
134 float surface_phase_volume_time[16]; | |
135 //float max_actual_gradient[16]; | |
136 //float amb_pressure_onset_of_imperm[16], | |
137 //gas_tension_onset_of_imperm[16]; | |
138 //float initial_helium_pressure_global[16], | |
139 //initial_nitrogen_pressure_global[16]; | |
140 float regenerated_radius_he[16], | |
141 regenerated_radius_n2[16]; | |
142 //float adjusted_crushing_pressure_he[16], | |
143 //adjusted_crushing_pressure_n2[16]; | |
144 float allowable_gradient_he[16], | |
145 allowable_gradient_n2[16]; | |
146 //float initial_allowable_gradient_he[16], | |
147 //initial_allowable_gradient_n2[16]; | |
148 | 117 |
149 //_Bool deco_zone_reached; | 118 //_Bool deco_zone_reached; |
150 _Bool critical_volume_algorithm_off; | 119 static _Bool critical_volume_algorithm_off; |
151 float max_first_stop_depth; | 120 static float max_first_stop_depth; |
152 float max_deco_ceiling_depth; | 121 static float max_deco_ceiling_depth; |
153 long vpm_time_calc_begin = 0; | |
154 //Boylslaw compensation | 122 //Boylslaw compensation |
155 float deco_gradient_he[16]; | 123 static float deco_gradient_he[16]; |
156 float deco_gradient_n2[16]; | 124 static float deco_gradient_n2[16]; |
157 int last_nullzeit; | 125 static int vpm_calc_what; |
158 int vpm_calc_what; | 126 static int count_critical_volume_iteration; |
159 int count_critical_volume_iteration; | 127 static short number_of_changes; |
160 short number_of_changes; | 128 static float depth_change[11]; |
161 float depth_change[11]; | 129 static float step_size_change[11]; |
162 float step_size_change[11]; | 130 static float rate_change[11]; |
163 float rate_change[11]; | 131 static short mix_change[11]; |
164 short mix_change[11]; | 132 |
165 | 133 static const _Bool vpm_b = true; |
166 const _Bool vpm_b = true; | 134 |
167 | |
168 //extern | |
169 /*extern float tissue_N2_saturation[4][16]; | |
170 extern float tissue_He_saturation[4][16]; | |
171 extern long dv_divetime; | |
172 extern dive_data_t dive_data; | |
173 extern int dive_ambient_pressure_mbar; | |
174 extern long dv_seconds_since_last_dive; | |
175 extern int tts[4];*/ | |
176 extern const float float_buehlmann_N2_factor_expositon_20_seconds[]; | 135 extern const float float_buehlmann_N2_factor_expositon_20_seconds[]; |
177 extern const float float_buehlmann_He_factor_expositon_20_seconds[]; | 136 extern const float float_buehlmann_He_factor_expositon_20_seconds[]; |
178 extern const float float_buehlmann_N2_factor_expositon_one_minute[]; | 137 extern const float float_buehlmann_N2_factor_expositon_one_minute[]; |
179 extern const float float_buehlmann_He_factor_expositon_one_minute[]; | 138 extern const float float_buehlmann_He_factor_expositon_one_minute[]; |
180 extern const float float_buehlmann_N2_factor_expositon_five_minutes[]; | 139 extern const float float_buehlmann_N2_factor_expositon_five_minutes[]; |
181 extern const float float_buehlmann_He_factor_expositon_five_minutes[]; | 140 extern const float float_buehlmann_He_factor_expositon_five_minutes[]; |
182 extern const float float_buehlmann_N2_factor_expositon_one_hour[]; | 141 extern const float float_buehlmann_N2_factor_expositon_one_hour[]; |
183 extern const float float_buehlmann_He_factor_expositon_one_hour[]; | 142 extern const float float_buehlmann_He_factor_expositon_one_hour[]; |
184 | 143 |
185 //extern buehlmann_configuration_t buehlmann_config; | 144 static float depth_start_of_deco_calc; |
186 | 145 static float depth_start_of_deco_zone; |
187 extern unsigned char CCR_mode; //0x100 // by tissue_calls.c // uchar | 146 static float first_stop_depth; |
188 | 147 static float run_time_start_of_deco_zone; |
189 //extern gaschange2_t gaschange_CCR_backup[2][BUEHLMANN_STRUCT_MAX_GASES]; | 148 |
190 | 149 static float r_nint(float *x); |
191 | 150 static float r_int(float *x); |
192 float starting_ambient_pressure_global; | 151 static _Bool nullzeit_unter60; |
193 float ending_ambient_pressure_global; | 152 static int vpm_calc_status; |
194 float depth_start_of_deco_calc; | 153 static _Bool buehlmann_wait_exceeded = false; |
195 float depth_start_of_deco_zone; | 154 |
196 float first_stop_depth; | 155 static SLifeData* pInput = NULL; |
197 float run_time_start_of_deco_zone; | 156 static SVpm* pVpm = NULL; |
198 | 157 static SDecoinfo* pDecoInfo = NULL; |
199 float r_nint(float *x); | 158 static SDiveSettings* pDiveSettings = NULL; |
200 float r_int(float *x); | 159 |
201 _Bool repetitive_variables_not_valid = false; | 160 static float r_nint(float *x) |
202 _Bool nullzeit_unter60; | |
203 //enum VPM_CALC_STATUS{CALC_END,CALC_BEGIN,CALC_NULLZEIT }; | |
204 int vpm_calc_status; | |
205 _Bool buehlmann_wait_exceeded = false; | |
206 | |
207 SLifeData* pInput = NULL; | |
208 SVpm* pVpm = NULL; | |
209 SDecoinfo* pDecoInfo = NULL; | |
210 SDiveSettings* pDiveSettings = NULL; | |
211 float r_nint(float *x) | |
212 { | 161 { |
213 return( (*x)>=0 ? | 162 return( (*x)>=0 ? |
214 floorf(*x + 0.5f) : -floorf(0.5f - *x) ); | 163 floorf(*x + 0.5f) : -floorf(0.5f - *x) ); |
215 } | 164 } |
216 | 165 |
217 float r_int(float *x) | 166 static float r_int(float *x) |
218 { | 167 { |
219 return( (*x>0) ? floorf(*x) : -floorf(- *x) ); | 168 return( (*x>0) ? floorf(*x) : -floorf(- *x) ); |
220 } | 169 } |
221 | 170 |
222 /** private functions | 171 /** private functions |
223 */ | 172 */ |
224 int onset_of_impermeability(float *starting_ambient_pressure, float *ending_ambient_pressure, float *rate, short *i); | 173 extern int radius_root_finder (float *a, float *b, float *c,float *low_bound, float *high_bound, float *ending_radius); |
225 int radius_root_finder (float *a, float *b, float *c,float *low_bound, float *high_bound, float *ending_radius); | 174 |
226 int nuclear_regeneration(float *dive_time);// clock_(); | 175 static int nuclear_regeneration(float *dive_time);// clock_(); |
227 int calc_deco_ceiling(float *deco_ceiling_depth,_Bool fallowablw); | 176 static int calc_deco_ceiling(float *deco_ceiling_depth,_Bool fallowablw); |
228 | 177 static int critical_volume(float *deco_phase_volume_time); ; |
229 int calc_barometric_pressure(float *altitude); | 178 static int calc_start_of_deco_zone(float *starting_depth, float *rate, float *depth_start_of_deco_zone); |
230 //extern /* Subroutine */ int vpm_repetitive_algorithm(); | 179 static int calc_initial_allowable_gradient(void); |
231 //extern /* Subroutine */ int gas_loadings_surface_interval(); | 180 static void decompression_stop(float *deco_stop_depth, float *step_size, _Bool final_deco_calculation); |
232 int critical_volume(float *deco_phase_volume_time); ; | 181 static int gas_loadings_ascent_descen(float* helium_pressure, float* nitrogen_pressure, float starting_depth,float ending_depth, float rate,_Bool check_gas_change); |
233 int calc_start_of_deco_zone(float *starting_depth, float *rate, float *depth_start_of_deco_zone); | 182 static int calc_surface_phase_volume_time(void); |
234 | 183 static int calc_max_actual_gradient(float *deco_stop_depth); |
235 int calc_initial_allowable_gradient(void); | 184 static int projected_ascent(float *starting_depth, float *rate, float *deco_stop_depth, float *step_size); |
236 void decompression_stop(float *deco_stop_depth, float *step_size, _Bool final_deco_calculation); | 185 static void vpm_calc_deco(void); |
237 int gas_loadings_ascent_descen(float* helium_pressure, float* nitrogen_pressure, float starting_depth,float ending_depth, float rate,_Bool check_gas_change); | 186 static int vpm_calc_critcal_volume(_Bool begin,_Bool calc_nulltime); |
238 | 187 static int vpm_check_converged(_Bool calc_nulltime); |
239 int calc_surface_phase_volume_time(void); | 188 static int vpm_calc_final_deco(_Bool begin); |
240 int calc_max_actual_gradient(float *deco_stop_depth); | 189 static void BOYLES_LAW_COMPENSATION (float* First_Stop_Depth,float * Deco_Stop_Depth,float* Step_Size); |
241 int projected_ascent(float *starting_depth, float *rate, float *deco_stop_depth, float *step_size); | 190 static int vpm_calc_nullzeit(void); |
242 void vpm_calc_deco(void); | 191 static void vpm_init_1(void); |
243 int vpm_calc_critcal_volume(_Bool begin,_Bool calc_nulltime); | 192 static void vpm_calc_deco_ceiling(void); |
244 int vpm_check_converged(_Bool calc_nulltime); | 193 |
245 int vpm_calc_final_deco(_Bool begin); | 194 static void vpm_init_1(void) |
246 void BOYLES_LAW_COMPENSATION (float* First_Stop_Depth,float * Deco_Stop_Depth,float* Step_Size); | |
247 int vpm_calc_nullzeit(void); | |
248 int vpm_repetitive_algorithm(float *surface_interval_time); | |
249 void vpm_init_1(void); | |
250 | |
251 void vpm_calc_deco_ceiling(void); | |
252 | |
253 //extern /* Subroutine */ int gas_loadings_constant_depth(); | |
254 //extern /* Subroutine */ int vpm_altitude_dive_algorithm(); | |
255 //extern /* Subroutine */ int calc_max_actual_gradient(), | |
256 //projected_ascent(); | |
257 | |
258 void ______X_X_X___________________________________________________________(void); | |
259 | |
260 //#define ARGGG | |
261 | |
262 void vpm_reset_variables(void) | |
263 { | |
264 repetitive_variables_not_valid = true; | |
265 } | |
266 | |
267 void vpm_init_1(void) | |
268 { | 195 { |
269 units_equal_msw = true; | 196 units_equal_msw = true; |
270 units_equal_fsw = false; | 197 units_equal_fsw = false; |
271 altitude_dive_algorithm_off= true; //!Options: ON or OFF | 198 altitude_dive_algorithm_off= true; //!Options: ON or OFF |
272 minimum_deco_stop_time=1.0; //!Options: float positive number | 199 minimum_deco_stop_time=1.0; //!Options: float positive number |
387 /* Purpose: This subprogram applies the Schreiner equation to update the */ | 314 /* Purpose: This subprogram applies the Schreiner equation to update the */ |
388 /* gas loadings (partial pressures of helium and nitrogen) in the half-time */ | 315 /* gas loadings (partial pressures of helium and nitrogen) in the half-time */ |
389 /* compartments due to a linear ascent or descent segment at a constant rate. */ | 316 /* compartments due to a linear ascent or descent segment at a constant rate. */ |
390 /* =============================================================================== */ | 317 /* =============================================================================== */ |
391 | 318 |
392 int gas_loadings_ascent_descen(float* helium_pressure, | 319 static int gas_loadings_ascent_descen(float* helium_pressure, |
393 float* nitrogen_pressure, | 320 float* nitrogen_pressure, |
394 float starting_depth, | 321 float starting_depth, |
395 float ending_depth, | 322 float ending_depth, |
396 float rate,_Bool check_gas_change) | 323 float rate,_Bool check_gas_change) |
397 { | 324 { |
478 } while(ending_depth_tmp > ending_depth); | 405 } while(ending_depth_tmp > ending_depth); |
479 | 406 |
480 return 0; | 407 return 0; |
481 } /* gas_loadings_ascent_descen */ | 408 } /* gas_loadings_ascent_descen */ |
482 | 409 |
483 float last_phase_volume_time[16]; | 410 static float last_phase_volume_time[16]; |
484 float n2_pressure_start_of_deco_zone[16]; | 411 static float n2_pressure_start_of_deco_zone[16]; |
485 float he_pressure_start_of_deco_zone[16]; | 412 static float he_pressure_start_of_deco_zone[16]; |
486 float phase_volume_time[16]; | 413 static float phase_volume_time[16]; |
487 float n2_pressure_start_of_ascent[16]; | 414 static float n2_pressure_start_of_ascent[16]; |
488 float he_pressure_start_of_ascent[16]; | 415 static float he_pressure_start_of_ascent[16]; |
489 float run_time_start_of_deco_calc; | 416 static float run_time_start_of_deco_calc; |
490 float starting_depth; | 417 static float starting_depth; |
491 float last_run_time; | 418 static float last_run_time; |
492 float deco_phase_volume_time; | 419 static float deco_phase_volume_time; |
493 | 420 static float run_time_start_of_ascent; |
494 float run_time_start_of_ascent; | 421 static float rate; |
495 | 422 static float step_size; |
496 float rate; | 423 static _Bool vpm_violates_buehlmann; |
497 float step_size; | 424 |
498 _Bool vpm_violates_buehlmann; | 425 static void vpm_calc_deco(void) |
499 | |
500 void vpm_calc_deco(void) | |
501 { | 426 { |
502 /* System generated locals */ | 427 /* System generated locals */ |
503 | 428 |
504 //float deepest_possible_stop_depth; | 429 //float deepest_possible_stop_depth; |
505 // altitude_of_dive, | 430 // altitude_of_dive, |
660 /* settings (default setting is 7500 fsw-min with adjustability range from */ | 585 /* settings (default setting is 7500 fsw-min with adjustability range from */ |
661 /* from 6500 to 8300 fsw-min according to Bruce Wienke). */ | 586 /* from 6500 to 8300 fsw-min according to Bruce Wienke). */ |
662 /* =============================================================================== */ | 587 /* =============================================================================== */ |
663 /* L50: */ | 588 /* L50: */ |
664 | 589 |
665 float deco_stop_depth; | 590 static float deco_stop_depth; |
666 int vpm_calc_critcal_volume(_Bool begin, | 591 static int vpm_calc_critcal_volume(_Bool begin, |
667 _Bool calc_nulltime) | 592 _Bool calc_nulltime) |
668 { /* loop will run continuous there is an exit stateme */ | 593 { /* loop will run continuous there is an exit stateme */ |
669 | 594 |
670 short i; | 595 short i; |
671 | 596 |
765 for(dp = 0;dp < DECOINFO_STRUCT_MAX_STOPS;dp++) | 690 for(dp = 0;dp < DECOINFO_STRUCT_MAX_STOPS;dp++) |
766 { | 691 { |
767 pDecoInfo->output_stop_length_seconds[dp] = 0; | 692 pDecoInfo->output_stop_length_seconds[dp] = 0; |
768 } | 693 } |
769 pDecoInfo->output_ndl_seconds = 0; | 694 pDecoInfo->output_ndl_seconds = 0; |
770 /*max_first_stop_depth = 0; | |
771 deco_zone_reached = false; | |
772 depth_start_of_deco_calc = 0; | |
773 depth_start_of_deco_zone = 0; | |
774 first_stop_depth = 0; | |
775 max_first_stop_depth_save = 0; | |
776 depth_start_of_deco_zone_save = 0; | |
777 run_time_start_of_deco_zone_save = 0; | |
778 tts[DECOSTOPS] = 0; | |
779 tts[NULLZEIT] = 0; | |
780 tts[FUTURESTOPS] = 0; | |
781 nullzeit_unter60 = false; | |
782 vpm_calc_status = CALC_NULLZEIT; | |
783 vpm_calc_what = DECOSTOPS; | |
784 float surfacetime = 0; | |
785 vpm_repetitive_algorithm(&surfacetime);*/ | |
786 | |
787 } | 695 } |
788 | 696 |
789 return CALC_NULLZEIT; | 697 return CALC_NULLZEIT; |
790 /* exit the critical volume l */ | 698 /* exit the critical volume l */ |
791 } | 699 } |
876 /* by the excess bubble number to represent the amount of free-gas released */ | 784 /* by the excess bubble number to represent the amount of free-gas released */ |
877 /* as a result of allowing a certain number of excess bubbles to form. */ | 785 /* as a result of allowing a certain number of excess bubbles to form. */ |
878 /* =============================================================================== */ | 786 /* =============================================================================== */ |
879 /* end of deco stop loop */ | 787 /* end of deco stop loop */ |
880 | 788 |
881 int vpm_check_converged(_Bool calc_nulltime) | 789 static int vpm_check_converged(_Bool calc_nulltime) |
882 { | 790 { |
883 | 791 |
884 short i; | 792 short i; |
885 float critical_volume_comparison; | 793 float critical_volume_comparison; |
886 float r1; | 794 float r1; |
973 /* end of critical volume decision */ | 881 /* end of critical volume decision */ |
974 /* L100: */ | 882 /* L100: */ |
975 // }/* end of critical vol loop */ | 883 // }/* end of critical vol loop */ |
976 } | 884 } |
977 | 885 |
978 void vpm_calc_deco_ceiling(void) | 886 static void vpm_calc_deco_ceiling(void) |
979 { | 887 { |
980 | 888 |
981 short i; | 889 short i; |
982 // hw 1601209 float r1; | 890 // hw 1601209 float r1; |
983 // hw 1601209 float stop_time; | 891 // hw 1601209 float stop_time; |
1086 | 994 |
1087 /* =============================================================================== */ | 995 /* =============================================================================== */ |
1088 /* DECO STOP LOOP BLOCK FOR FINAL DECOMPRESSION SCHEDULE */ | 996 /* DECO STOP LOOP BLOCK FOR FINAL DECOMPRESSION SCHEDULE */ |
1089 /* =============================================================================== */ | 997 /* =============================================================================== */ |
1090 | 998 |
1091 int vpm_calc_final_deco(_Bool begin) | 999 static int vpm_calc_final_deco(_Bool begin) |
1092 { | 1000 { |
1093 short i; | 1001 short i; |
1094 float r1; | 1002 float r1; |
1095 float stop_time; | 1003 float stop_time; |
1096 int count = 0; | 1004 int count = 0; |
1262 /* radii that takes place over the dive time. The regeneration time constant */ | 1170 /* radii that takes place over the dive time. The regeneration time constant */ |
1263 /* has a time scale of weeks so this will have very little impact on dives of */ | 1171 /* has a time scale of weeks so this will have very little impact on dives of */ |
1264 /* normal length, but will have a major impact for saturation dives. */ | 1172 /* normal length, but will have a major impact for saturation dives. */ |
1265 /* =============================================================================== */ | 1173 /* =============================================================================== */ |
1266 | 1174 |
1267 int nuclear_regeneration(float *dive_time) | 1175 static int nuclear_regeneration(float *dive_time) |
1268 { | 1176 { |
1269 /* Local variables */ | 1177 /* Local variables */ |
1270 float crush_pressure_adjust_ratio_he, | 1178 float crush_pressure_adjust_ratio_he, |
1271 ending_radius_n2, | 1179 ending_radius_n2, |
1272 ending_radius_he; | 1180 ending_radius_he; |
1371 /* The initial allowable gradients are computed directly from the */ | 1279 /* The initial allowable gradients are computed directly from the */ |
1372 /* "regenerated" radii after the Nuclear Regeneration subroutine. These */ | 1280 /* "regenerated" radii after the Nuclear Regeneration subroutine. These */ |
1373 /* gradients are tracked separately for helium and nitrogen. */ | 1281 /* gradients are tracked separately for helium and nitrogen. */ |
1374 /* =============================================================================== */ | 1282 /* =============================================================================== */ |
1375 | 1283 |
1376 int calc_initial_allowable_gradient() | 1284 static int calc_initial_allowable_gradient() |
1377 { | 1285 { |
1378 float initial_allowable_grad_n2_pa, | 1286 float initial_allowable_grad_n2_pa, |
1379 initial_allowable_grad_he_pa; | 1287 initial_allowable_grad_he_pa; |
1380 short i; | 1288 short i; |
1381 | 1289 |
1426 /* finds the deepest deco ceiling across all compartments. This deepest */ | 1334 /* finds the deepest deco ceiling across all compartments. This deepest */ |
1427 /* value (Deco Ceiling Depth) is then used by the Decompression Stop */ | 1335 /* value (Deco Ceiling Depth) is then used by the Decompression Stop */ |
1428 /* subroutine to determine the actual deco schedule. */ | 1336 /* subroutine to determine the actual deco schedule. */ |
1429 /* =============================================================================== */ | 1337 /* =============================================================================== */ |
1430 | 1338 |
1431 int calc_deco_ceiling(float *deco_ceiling_depth,_Bool fallowable) | 1339 static int calc_deco_ceiling(float *deco_ceiling_depth,_Bool fallowable) |
1432 { | 1340 { |
1433 /* System generated locals */ | 1341 /* System generated locals */ |
1434 float r1, r2; | 1342 float r1, r2; |
1435 /* Local variables */ | 1343 /* Local variables */ |
1436 float weighted_allowable_gradient; | 1344 float weighted_allowable_gradient; |
1553 /* repetitive dive to compensate for the bubbling that was allowed on the */ | 1461 /* repetitive dive to compensate for the bubbling that was allowed on the */ |
1554 /* previous dive. The use of the max actual gradients is intended to prevent */ | 1462 /* previous dive. The use of the max actual gradients is intended to prevent */ |
1555 /* the repetitive algorithm from being overly conservative. */ | 1463 /* the repetitive algorithm from being overly conservative. */ |
1556 /* =============================================================================== */ | 1464 /* =============================================================================== */ |
1557 | 1465 |
1558 int calc_max_actual_gradient(float *deco_stop_depth) | 1466 static int calc_max_actual_gradient(float *deco_stop_depth) |
1559 { | 1467 { |
1560 /* System generated locals */ | 1468 /* System generated locals */ |
1561 float r1; | 1469 float r1; |
1562 | 1470 |
1563 /* Local variables */ | 1471 /* Local variables */ |
1600 /* computes the time course of supersaturation gradients on the surface */ | 1508 /* computes the time course of supersaturation gradients on the surface */ |
1601 /* when both helium and nitrogen are present. Refer to separate write-up */ | 1509 /* when both helium and nitrogen are present. Refer to separate write-up */ |
1602 /* for a more detailed explanation of this algorithm. */ | 1510 /* for a more detailed explanation of this algorithm. */ |
1603 /* =============================================================================== */ | 1511 /* =============================================================================== */ |
1604 | 1512 |
1605 int calc_surface_phase_volume_time() | 1513 static int calc_surface_phase_volume_time() |
1606 { | 1514 { |
1607 /* Local variables */ | 1515 /* Local variables */ |
1608 float decay_time_to_zero_gradient; | 1516 float decay_time_to_zero_gradient; |
1609 short i; | 1517 short i; |
1610 float integral_gradient_x_time, | 1518 float integral_gradient_x_time, |
1660 /* Purpose: This subprogram applies the VPM Critical Volume Algorithm. This */ | 1568 /* Purpose: This subprogram applies the VPM Critical Volume Algorithm. This */ |
1661 /* algorithm will compute "relaxed" gradients for helium and nitrogen based */ | 1569 /* algorithm will compute "relaxed" gradients for helium and nitrogen based */ |
1662 /* on the setting of the Critical Volume Parameter Lambda. */ | 1570 /* on the setting of the Critical Volume Parameter Lambda. */ |
1663 /* =============================================================================== */ | 1571 /* =============================================================================== */ |
1664 | 1572 |
1665 int critical_volume(float *deco_phase_volume_time) | 1573 static int critical_volume(float *deco_phase_volume_time) |
1666 { | 1574 { |
1667 /* System generated locals */ | 1575 /* System generated locals */ |
1668 float r1; | 1576 float r1; |
1669 | 1577 |
1670 /* Local variables */ | 1578 /* Local variables */ |
1776 /* which the leading compartment just enters the decompression zone. */ | 1684 /* which the leading compartment just enters the decompression zone. */ |
1777 /* Source: "Numerical Recipes in Fortran 77", Cambridge University Press, */ | 1685 /* Source: "Numerical Recipes in Fortran 77", Cambridge University Press, */ |
1778 /* 1992. */ | 1686 /* 1992. */ |
1779 /* =============================================================================== */ | 1687 /* =============================================================================== */ |
1780 | 1688 |
1781 int calc_start_of_deco_zone(float *starting_depth, | 1689 static int calc_start_of_deco_zone(float *starting_depth, |
1782 float *rate, | 1690 float *rate, |
1783 float *depth_start_of_deco_zone) | 1691 float *depth_start_of_deco_zone) |
1784 { | 1692 { |
1785 /* Local variables */ | 1693 /* Local variables */ |
1786 float last_diff_change, | 1694 float last_diff_change, |
1975 /* gas loading during ascent (on-gassing). If the deco ceiling is violated, */ | 1883 /* gas loading during ascent (on-gassing). If the deco ceiling is violated, */ |
1976 /* the stop depth will be adjusted deeper by the step size until a safe */ | 1884 /* the stop depth will be adjusted deeper by the step size until a safe */ |
1977 /* ascent can be made. */ | 1885 /* ascent can be made. */ |
1978 /* =============================================================================== */ | 1886 /* =============================================================================== */ |
1979 | 1887 |
1980 int projected_ascent(float *starting_depth, | 1888 static int projected_ascent(float *starting_depth, |
1981 float *rate, | 1889 float *rate, |
1982 float *deco_stop_depth, | 1890 float *deco_stop_depth, |
1983 float *step_size) | 1891 float *step_size) |
1984 { | 1892 { |
1985 /* Local variables */ | 1893 /* Local variables */ |
2044 /* SUBROUTINE DECOMPRESSION_STOP */ | 1952 /* SUBROUTINE DECOMPRESSION_STOP */ |
2045 /* Purpose: This subprogram calculates the required time at each */ | 1953 /* Purpose: This subprogram calculates the required time at each */ |
2046 /* decompression stop. */ | 1954 /* decompression stop. */ |
2047 /* =============================================================================== */ | 1955 /* =============================================================================== */ |
2048 | 1956 |
2049 void decompression_stop(float *deco_stop_depth, | 1957 static void decompression_stop(float *deco_stop_depth, |
2050 float *step_size, | 1958 float *step_size, |
2051 _Bool final_deco_calculation) | 1959 _Bool final_deco_calculation) |
2052 { | 1960 { |
2053 /* Local variables */ | 1961 /* Local variables */ |
2054 float inspired_nitrogen_pressure; | 1962 float inspired_nitrogen_pressure; |
2266 // SUROUTINE BOYLES_LAW_COMPENSATION | 2174 // SUROUTINE BOYLES_LAW_COMPENSATION |
2267 // Purpose: This subprogram calculates the reduction in allowable gradients | 2175 // Purpose: This subprogram calculates the reduction in allowable gradients |
2268 // with decreasing ambient pressure during the decompression profile based | 2176 // with decreasing ambient pressure during the decompression profile based |
2269 // on Boyle's Law considerations. | 2177 // on Boyle's Law considerations. |
2270 //=============================================================================== | 2178 //=============================================================================== |
2271 void BOYLES_LAW_COMPENSATION (float* First_Stop_Depth, | 2179 static void BOYLES_LAW_COMPENSATION (float* First_Stop_Depth, |
2272 float* Deco_Stop_Depth, | 2180 float* Deco_Stop_Depth, |
2273 float* Step_Size) | 2181 float* Step_Size) |
2274 { | 2182 { |
2275 short i; | 2183 short i; |
2276 | 2184 |
2368 | 2276 |
2369 /* =============================================================================== */ | 2277 /* =============================================================================== */ |
2370 // vpm_calc_nullzeit | 2278 // vpm_calc_nullzeit |
2371 // Purpose: This function calcs zero time (time where no decostops are needed) | 2279 // Purpose: This function calcs zero time (time where no decostops are needed) |
2372 //=============================================================================== | 2280 //=============================================================================== |
2373 int vpm_calc_nullzeit(void) | 2281 static int vpm_calc_nullzeit(void) |
2374 { | 2282 { |
2375 static float future_helium_pressure[16]; | 2283 static float future_helium_pressure[16]; |
2376 static float future_nitrogen_pressure[16]; | 2284 static float future_nitrogen_pressure[16]; |
2377 static int temp_segment_time; | 2285 static int temp_segment_time; |
2378 static int mix_number; | 2286 static int mix_number; |