annotate code_part1/OSTC_code_c_part2/p2_deco.c @ 842:454ef5c2e6aa default tip

Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware Make year settings until 2040 possible (This is likely the final release for this model)
author heinrichsweikamp
date Sat, 29 Nov 2025 14:11:07 +0100
parents 162058703100
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1 // **************************************************************
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2 // p2_deco.c
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
3 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
4 // Created on: 12.05.2009
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
5 // Author: chsw
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
6 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
7 // **************************************************************
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
8
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
9 //////////////////////////////////////////////////////////////////////////////
815
2a0e5d884fc3 BUGFIX: Fix licence in German
heinrichsweikamp
parents: 786
diff changeset
10 // OSTC Mk.2, 2N and 2C - diving computer code
532
f5a06b9e2fef cleanup debug stuff
heinrichsweikamp
parents: 527
diff changeset
11 // Copyright (C) 2011 HeinrichsWeikamp GbR
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
12 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
13 // This program is free software: you can redistribute it and/or modify
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
14 // it under the terms of the GNU General Public License as published by
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
15 // the Free Software Foundation, either version 3 of the License, or
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
16 // (at your option) any later version.
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
17 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
18 // This program is distributed in the hope that it will be useful,
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
21 // GNU General Public License for more details.
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
22 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
23 // You should have received a copy of the GNU General Public License
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
24 // along with this program. If not, see <http://www.gnu.org/licenses/>.
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
25 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
26 //////////////////////////////////////////////////////////////////////////////
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
27
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
28 // *****************************
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
29 // ** I N T R O D U C T I O N **
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
30 // *****************************
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
31 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
32 // OSTC
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
33 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
34 // code:
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
35 // p2_deco_main_c_v101.c
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
36 // part2 of the OSTC code
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
37 // code with constant O2 partial pressure routines
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
38 // under construction !!
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
39 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
40 // summary:
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
41 // decompression routines
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
42 // for the OSTC experimental project
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
43 // written by Christian Weikamp
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
44 // last revision __________
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
45 // comments added _________
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
46 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
47 // additional files:
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
48 // p2_tables_v100.romdata (other files)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
49 // 18f4685_ostc_v100.lkr (linker script)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
50 //
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
51 // history:
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
52 // 01/03/08 v100: first release candidate
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
53 // 03/13/08 v101: start of programming ppO2 code
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
54 // 03/13/25 v101a: backup of interrim version with ppO2 calculation
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
55 // 03/13/25 v101: open circuit gas change during deco
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
56 // 03/13/25 v101: CNS_fraction calculation
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
57 // 03/13/26 v101: optimization of tissue calc routines
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
58 // 07/xx/08 v102a: debug of bottom time routine
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
59 // 09/xx/08 v102d: Gradient Factor Model implemenation
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
60 // 10/10/08 v104: renamed to build v103 for v118 stable
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
61 // 10/14/08 v104: integration of char_I_depth_last_deco for Gradient Model
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
62 // 03/31/09 v107: integration of FONT Incon24
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
63 // 05/23/10 v109: 5 gas changes & 1 min timer
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
64 // 07/13/10 v110: cns vault added
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
65 // 12/25/10 v110: split in three files (deco.c, main.c, definitions.h)
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
66 // 2011/01/20: [jDG] Create a common file included in ASM and C code.
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
67 // 2011/01/23: [jDG] Added read_custom_function().
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
68 // 2011/01/24: [jDG] Make ascenttime an short. No more overflow!
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
69 // 2011/01/25: [jDG] Fusion deco array for both models.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
70 // 2011/01/25: [jDG] Use CF(54) to reverse deco order.
193
652e17b6267a Minor fixes.
JeanDo
parents: 192
diff changeset
71 // 2011/02/11: [jDG] Reworked gradient-factor implementation.
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
72 // 2011/02/13: [jDG] CF55 for additional gas switch delay in decoplan.
275
4310ab395dbe Keep low_depth in float 32bits (w/o rounding) for a better stability.
JeanDo
parents: 270
diff changeset
73 // 2011/02/15: [jDG] Fixed inconsistencies introduced by gas switch delays.
4310ab395dbe Keep low_depth in float 32bits (w/o rounding) for a better stability.
JeanDo
parents: 270
diff changeset
74 // 2011/03/21: [jDG] Added gas consumption (CF56 & CF57) evaluation for OCR mode.
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
75 // 2011/04/10: [jDG] Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco().
275
4310ab395dbe Keep low_depth in float 32bits (w/o rounding) for a better stability.
JeanDo
parents: 270
diff changeset
76 // 2011/04/15: [jDG] Store low_depth in 32bits (w/o rounding), for a better stability.
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
77 // 2011/04/25: [jDG] Added 1mn mode for CNS calculation, to allow it for decoplanning.
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
78 // 2011/04/27: [jDG] Fixed char_O_gradient_factor calculation when model uses gradient-factor.
334
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
79 // 2011/05/02: [jDG] Added "Future TTS" function (CF58).
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
80 // 2011/05/17: [jDG] Various cleanups.
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
81 // 2011/08/08: [jDG] Computes CNS during deco planning ascent.
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
82 // 2011/11/24: [jDG] Slightly faster and better NDL computation.
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
83 // 2011/12/17: [mH] Remove of the useless debug stuff
561
57622cb0d80f Bad deco behaviour when missing a stop...
JeanDo
parents: 555
diff changeset
84 // 2012/02/24: [jDG] Remove missed stop bug.
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
85 // 2012/02/25: [jDG] Looking for a more stable LOW grad factor reference.
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
86 // 2012/09/10: [mH] Fill char_O_deco_time_for_log for logbook write
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
87 // 2012/10/05: [jDG] Better deco_gas_volumes accuracy (average depth, switch between stop).
697
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
88 // 2013/03/05: [jDG] Should vault low_depth too.
698
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
89 // 2013/03/05: [jDG] Wrobell remark: ascent_to_first_stop works better with finer steps (2sec).
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
90 // 2013/05/08: [jDG] A. Salm remark: NOAA tables for CNS are in ATA, not bar.
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
91 // 2013/10/22: [mH] Remove CF55 stuff
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
92 // 2013/12/21: [jDG] Fix CNS calculation in decoplan w/o marked gas switch
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
93 // 2014/06/16: [jDG] Fix Helium diluant. Fix volumes with many travel mix.
785
b0c96aaa86e4 add ceiling display, no turkish language support anymore
heinrichsweikamp
parents: 783
diff changeset
94 // 2014/06/29: [mH] Compute int_O_ceiling
821
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
95 // 2015/06/12: [jDG] Fix NDL prediction while desaturating with the Buhlmann model.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
96 //
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
97 // TODO:
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
98 // + Allow to abort MD2 calculation (have to restart next time).
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
99 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
100 // Literature:
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
101 // Bühlmann, Albert: Tauchmedizin; 4. Auflage [2002];
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
102 // Schr"oder, Kai & Reith, Steffen; 2000; S"attigungsvorg"ange beim Tauchen, das Modell ZH-L16, Funktionsweise von Tauchcomputern; http://www.achim-und-kai.de/kai/tausim/saett_faq
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
103 // Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
104 // Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
105 // Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
106 // Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
107 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
108 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
109
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
110 // *********************
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
111 // ** I N C L U D E S **
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
112 // *********************
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
113 #include <math.h>
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
114
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
115 // ***********************************************
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
116 // ** V A R I A B L E S D E F I N I T I O N S **
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
117 // ***********************************************
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
118
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
119 #include "p2_definitions.h"
275
4310ab395dbe Keep low_depth in float 32bits (w/o rounding) for a better stability.
JeanDo
parents: 270
diff changeset
120 #define TEST_MAIN
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
121 #include "../OSTC_code_asm_part1/shared_definitions.h"
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
122
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
123 // Water vapour partial pressure in the lumb.
527
31db81de1d4f Minor: should not reset char_I_depth_last_deco.
JeanDo
parents: 524
diff changeset
124 #define ppWater 0.0627
317
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
125 #define METER_TO_BAR 0.09985
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
126 #define BAR_TO_METER 10.0150 // (1.0/METER_TO_BAR)
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
127
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
128 // Surface security factor
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
129 #define SURFACE_DESAT_FACTOR 0.7042
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
130
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
131 // *************************
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
132 // ** P R O T O T Y P E S **
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
133 // *************************
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
134
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
135 static void calc_hauptroutine(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
136 static void calc_nullzeit(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
137
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
138 static void calc_tissue(PARAMETER unsigned char period);
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
139 static void calc_limit(void);
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
140
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
141 static void clear_tissue(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
142 static void calc_ascenttime(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
143 static void update_startvalues(void);
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
144 static void clear_deco_table(void);
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
145 static unsigned char update_deco_table(void);
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
146
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
147 static void sim_tissue(PARAMETER unsigned char period);
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
148 static void sim_limit(PARAMETER float GF_current);
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
149 static void sim_extra_time(void);
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
150 static void calc_dive_interval(void);
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
151
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
152 static void calc_gradient_factor(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
153 static void calc_wo_deco_step_1_min(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
154
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
155 static void calc_hauptroutine_data_input(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
156 static void calc_hauptroutine_update_tissues(void);
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
157 static void calc_hauptroutine_calc_deco(void);
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
158 static void sim_ascent_to_first_stop(void);
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
159
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
160 static unsigned char gas_switch_deepest(void);
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
161 static void gas_switch_set(void);
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
162
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
163 static unsigned char calc_nextdecodepth(void);
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
164
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
165 //---- Bank 4 parameters -----------------------------------------------------
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
166 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
167 # pragma udata bank4=0x400
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
168 #endif
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
169
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
170 static float GF_low;
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
171 static float GF_high;
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
172 static float GF_delta;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
173 static float locked_GF_step; // GF_delta / low_depth
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
174
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
175 static unsigned char temp_depth_limit;
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
176 float low_depth; // Depth of deepest stop
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
177
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
178 static unsigned char internal_deco_time [NUM_STOPS];
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
179 static unsigned char internal_deco_depth[NUM_STOPS];
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
180 static unsigned char internal_deco_gas [NUM_STOPS];
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
181
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
182 static float cns_vault;
697
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
183 static float low_depth_vault;
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
184 static float pres_tissue_N2_vault[NUM_COMP];
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
185 static float pres_tissue_He_vault[NUM_COMP];
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
186
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
187 //---- Bank 5 parameters -----------------------------------------------------
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
188 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
189 # pragma udata bank5=0x500
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
190 #endif
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
191
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
192 static unsigned char ci;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
193 static float pres_respiration;
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
194 static float pres_surface;
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
195 static float temp_deco;
236
3dbeacf42e9e BUGFIX missing deko init in reboot code.
JeanDo
parents: 235
diff changeset
196 static float ppN2;
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
197 static float ppHe;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
198 static float temp_tissue;
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
199 static float N2_ratio; // Breathed gas nitrogen ratio.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
200 static float He_ratio; // Breathed gas helium ratio.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
201 static float var_N2_a; // Bühlmann a, for current N2 tissue.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
202 static float var_N2_b; // Bühlmann b, for current N2 tissue.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
203 static float var_He_a; // Bühlmann a, for current He tissue.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
204 static float var_He_b; // Bühlmann b, for current He tissue.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
205 static float var_N2_e; // Exposition, for current N2 tissue.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
206 static float var_He_e; // Exposition, for current He tissue.
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
207 static float var_N2_ht; // Half-time for current N2 tissue.
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
208 static float var_He_ht; // Half-time for current N2 tissue.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
209
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
210 static float pres_diluent; // new in v.101
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
211 static float const_ppO2; // new in v.101
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
212
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
213 static unsigned char sim_gas_last_depth; // Depth of last used gas, to detected a gas switch.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
214 static unsigned char sim_gas_last_used; // Number of last used gas, to detected a gas switch.
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
215 static unsigned short sim_dive_mins; // Simulated dive time.
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
216 static float calc_N2_ratio; // Simulated (switched) nitrogen ratio.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
217 static float calc_He_ratio; // Simulated (switched) helium ratio.
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
218 static float CNS_fraction; // new in v.101
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
219 static float float_saturation_multiplier; // new in v.101
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
220 static float float_desaturation_multiplier; // new in v.101
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
221 static float float_deco_distance; // new in v.101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
222
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
223 static unsigned char deco_gas_change[NUM_GAS]; // new in v.109
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
224
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
225 // Simulation context: used to predict ascent.
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
226 unsigned char sim_lead_tissue_no; // Leading compatiment number.
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
227 float sim_lead_tissue_limit; // Buhlmann tolerated pressure.
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
228
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
229 // Real context: what we are doing now.
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
230 static float calc_lead_tissue_limit; //
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
231
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
232 //---- Bank 6 parameters -----------------------------------------------------
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
233 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
234 # pragma udata bank6=0x600
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
235 #endif
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
236
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
237 float pres_tissue_N2[NUM_COMP];
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
238 float pres_tissue_He[NUM_COMP];
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
239 float sim_pres_tissue_N2[NUM_COMP]; // 16 floats = 64 bytes.
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
240 float sim_pres_tissue_He[NUM_COMP]; // 16 floats = 64 bytes.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
241
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
242 //---- Bank 7 parameters -----------------------------------------------------
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
243 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
244 # pragma udata bank7=0x700
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
245 #endif
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
246
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
247 // EMPTY ...
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
248
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
249 //---- Bank 8 parameters -----------------------------------------------------
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
250 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
251 # pragma udata bank8=0x800
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
252
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
253 static char md_pi_subst[256];
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
254 # define C_STACK md_pi_subst // Overlay C-code data stack here, too.
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
255
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
256 #endif
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
257
163
144822282fa3 Fusion declaration of shared C/ASM variables.
JeanDo
parents: 126
diff changeset
258 //---- Bank 9 parameters -----------------------------------------------------
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
259 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
260 # pragma udata bank9=0x900
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
261
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
262 static char md_state[48]; // DONT MOVE : has to be at the beginning of bank 9 for the asm code!!!
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
263 #endif
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
264
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
265
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
266 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
267 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
268 ///////////////////////////// THE LOOKUP TABLES //////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
269 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
270 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
271 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
272 // End of PROM code is 17F00, So push tables on PROM top...
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
273 //
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
274 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
275 # pragma romdata buhlmann_tables = 0x017B00 // Needs to be in UPPER bank.
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
276 #endif
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
277
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
278 #include "p2_tables.romdata" // new table for deco_main_v.101 (var_N2_a modified)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
279
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
280 // Magic table to compute the MD2 HASH
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
281 //
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
282 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
283 # pragma romdata hash_tables = 0x017E00 // Address fixed by ASM access...
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
284 rom const rom unsigned short md_pi[] =
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
285 {
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
286 0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
287 , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
288 , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
289 , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
290 , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
291 , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
292 , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
293 , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
294 , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
295 , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
296 , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
297 , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
298 , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
299 , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
300 , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
301 , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
302 };
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
303 #endif
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
304
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
305 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
306 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
307 ////////////////////////////// THE SUBROUTINES ///////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
308 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
309 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
310 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
311 // all new in v.102
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
312 // moved from 0x0D000 to 0x0C000 in v.108
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
313 #ifndef UNIX
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
314 # pragma code p2_deco = 0x0C000
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
315 #endif
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
316
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
317 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
318 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
319 /////////////////////// U T I L I T I E S /////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
320 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
321 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
322
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
323 //////////////////////////////////////////////////////////////////////////////
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
324 // Bump to blue-screen when an assert is wrong
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
325 #ifdef __DEBUG
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
326 void assert_failed(PARAMETER short int line)
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
327 {
681
6e456a6398e0 Hardware4 support
heinrichsweikamp
parents: 658
diff changeset
328 extern void DISP_resetdebugger(void);
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
329 extern unsigned short temp10;
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
330
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
331 temp10 = line; // Show source line number as stack depth.
681
6e456a6398e0 Hardware4 support
heinrichsweikamp
parents: 658
diff changeset
332 DISP_resetdebugger();
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
333 }
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
334 #endif
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
335
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
336 //////////////////////////////////////////////////////////////////////////////
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
337 // When calling C code from ASM context, the data stack pointer and
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
338 // frames should be reset. Bank8 is used by stack, when not doing hashing.
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
339
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
340 #ifdef CROSS_COMPILE
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
341 # define RESET_C_STACK
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
342 #else
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
343 # ifdef __DEBUG
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
344 # define RESET_C_STACK fillDataStack();
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
345 void fillDataStack(void)
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
346 {
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
347 _asm
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
348 LFSR 1,C_STACK
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
349 MOVLW 0xCC
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
350 loop: MOVWF POSTINC1,0
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
351 TSTFSZ FSR1L,0
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
352 BRA loop
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
353
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
354 LFSR 1,C_STACK
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
355 LFSR 2,C_STACK
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
356 _endasm
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
357 }
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
358 # else
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
359 # define RESET_C_STACK \
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
360 _asm \
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
361 LFSR 1, C_STACK \
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
362 LFSR 2, C_STACK \
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
363 _endasm
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
364 # endif
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
365 #endif
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
366
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
367 //////////////////////////////////////////////////////////////////////////////
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
368 // Read CF values from the C code.
235
ade0848c8b8b New runtime asserts when compiled in DEBUG more.
JeanDo
parents: 234
diff changeset
369
488
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
370 #ifdef CROSS_COMPILE
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
371 // Full description of the OSTC EEPROM map, including CF values.
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
372 # include "OSTC_eeprom.h"
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
373 #endif
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
374
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
375 static short read_custom_function(PARAMETER unsigned char cf)
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
376 {
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
377 #ifdef CROSS_COMPILE
743
8466932a2fcf .. minor cleanups
JeanDo
parents: 711
diff changeset
378 return READ_CF_MACRO(cf);
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
379 #else
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
380 extern unsigned char hi, lo;
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
381 extern void getcustom15();
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
382 _asm
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
383 movff cf,WREG
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
384 call getcustom15,0
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
385 movff lo,PRODL
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
386 movff hi,PRODH
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
387 _endasm
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
388 #endif
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
389 }
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
390
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
391 //////////////////////////////////////////////////////////////////////////////
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
392 // Fast subroutine to read RTC timer 3.
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
393 // Note: result is in 1/32 of msecs.
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
394 static unsigned short tmr3(void)
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
395 {
261
9d4ab7c96885 Fix first stop rounding in GF model.
JeanDo
parents: 260
diff changeset
396 #ifndef CROSS_COMPILE
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
397 _asm
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
398 movff 0xfb2,PRODL // TMR3L
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
399 movff 0xfb3,PRODH // TMR3H
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
400 _endasm // result in PRODH:PRODL.
261
9d4ab7c96885 Fix first stop rounding in GF model.
JeanDo
parents: 260
diff changeset
401 #else
9d4ab7c96885 Fix first stop rounding in GF model.
JeanDo
parents: 260
diff changeset
402 return 0;
9d4ab7c96885 Fix first stop rounding in GF model.
JeanDo
parents: 260
diff changeset
403 #endif
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
404 }
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
405
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
406 //////////////////////////////////////////////////////////////////////////////
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
407 // read buhlmann tables A and B for compatriment ci
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
408 //
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
409 static void read_buhlmann_coefficients(void)
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
410 {
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
411 #ifndef CROSS_COMPILE
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
412 // Note: we don't use far rom pointer, because the
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
413 // 24 bits is too complex, hence we have to set
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
414 // the UPPER page ourself...
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
415 // --> Set zero if tables are moved to lower pages !
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
416 _asm
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
417 movlw 1
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
418 movwf TBLPTRU,0
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
419 _endasm
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
420 #endif
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
421
564
4e9e95d108d2 Minor cleanups for MacOSX compatibility.
JeanDo
parents: 563
diff changeset
422 assert( ci < NUM_COMP );
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
423
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
424 // Use an interleaved array (AoS) to access coefficients with a
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
425 // single addressing.
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
426 {
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
427 overlay rom const float* ptr = &buhlmann_ab[4*ci];
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
428 var_N2_a = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
429 var_N2_b = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
430 var_He_a = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
431 var_He_b = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
432 }
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
433 }
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
434
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
435 //////////////////////////////////////////////////////////////////////////////
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
436 // read buhlmann tables for compatriment ci
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
437 // If period == 0 : 2sec interval
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
438 // 1 : 1 min interval
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
439 // 2 : 10 min interval.
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
440 static void read_buhlmann_times(PARAMETER char period)
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
441 {
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
442 #ifndef CROSS_COMPILE
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
443 // Note: we don't use far rom pointer, because the
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
444 // 24 bits is to complex, hence we have to set
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
445 // the UPPER page ourself...
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
446 // --> Set zero if tables are moved to lower pages !
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
447 _asm
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
448 movlw 1
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
449 movwf TBLPTRU,0
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
450 _endasm
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
451 #endif
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
452
564
4e9e95d108d2 Minor cleanups for MacOSX compatibility.
JeanDo
parents: 563
diff changeset
453 assert( ci < NUM_COMP );
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
454
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
455 // Integration intervals.
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
456 switch(period)
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
457 {
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
458 case 0: //---- 2 sec -----------------------------------------------------
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
459 {
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
460 overlay rom const float* ptr = &e2secs[2*ci];
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
461 var_N2_e = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
462 var_He_e = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
463 }
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
464 break;
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
465
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
466 case 1: //---- 1 min -----------------------------------------------------
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
467 {
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
468 overlay rom const float* ptr = &e1min[2*ci];
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
469 var_N2_e = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
470 var_He_e = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
471 }
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
472 break;
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
473
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
474 case 2: //---- 10 min ----------------------------------------------------
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
475 {
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
476 overlay rom const float* ptr = &e10min[2*ci];
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
477 var_N2_e = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
478 var_He_e = *ptr++;
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
479 }
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
480 break;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
481
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
482 default:
527
31db81de1d4f Minor: should not reset char_I_depth_last_deco.
JeanDo
parents: 524
diff changeset
483 assert(0); // Never go there...
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
484 }
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
485 }
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
486
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
487 //////////////////////////////////////////////////////////////////////////////
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
488 // read buhlmann tables for compatriment ci
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
489 //
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
490 static void read_buhlmann_ht(void)
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
491 {
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
492
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
493 #ifndef CROSS_COMPILE
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
494 // Note: we don't use far rom pointer, because the
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
495 // 24 bits is to complex, hence we have to set
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
496 // the UPPER page ourself...
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
497 // --> Set zero if tables are moved to lower pages !
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
498 _asm
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
499 movlw 1
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
500 movwf TBLPTRU,0
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
501 _endasm
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
502 #endif
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
503
564
4e9e95d108d2 Minor cleanups for MacOSX compatibility.
JeanDo
parents: 563
diff changeset
504 assert( ci < NUM_COMP );
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
505 {
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
506 overlay rom const float* ptr = &buhlmann_ht[2*ci];
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
507 var_N2_ht = *ptr++;
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
508 var_He_ht = *ptr++;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
509 }
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
510
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
511 assert( 4.0 <= var_N2_ht && var_N2_ht <= 635.0 );
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
512 assert( 1.5099 <= var_He_ht && var_He_ht <= 240.03 );
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
513 }
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
514
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
515 //////////////////////////////////////////////////////////////////////////////
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 339
diff changeset
516 // calc_nextdecodepth
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
517 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
518 // new in v.102
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
519 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
520 // INPUT, changing during dive:
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
521 // temp_deco
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
522 // low_depth
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
523 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
524 // INPUT, fixed during dive:
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
525 // pres_surface
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
526 // GF_delta
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
527 // GF_high
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
528 // GF_low
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
529 // char_I_depth_last_deco
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
530 // float_deco_distance
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
531 //
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
532 // RETURN TRUE iff a stop is needed.
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
533 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
534 // OUTPUT
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
535 // locked_GF_step
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
536 // temp_depth_limt
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
537 // low_depth
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
538 //
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
539 static unsigned char calc_nextdecodepth(void)
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
540 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
541 //--- Max ascent speed ---------------------------------------------------
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
542 // Recompute leading gas limit, at current depth:
317
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
543 overlay float depth = (temp_deco - pres_surface) * BAR_TO_METER;
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
544
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
545 // At most, ascent 1 minute, at 10m/min == 10.0 m.
302
36cc8f0c1d73 Minor corrections in assert conditions.
JeanDo
parents: 293
diff changeset
546 overlay float min_depth = (depth > 10.0) ? (depth - 10.0) : 0.0;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
547
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
548 // Do we need to stop at current depth ?
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
549 overlay unsigned char need_stop = 0;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
550
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
551 assert( depth >= -0.2 ); // Allow for 200mbar of weather change.
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
552
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
553 //---- ZH-L16 + GRADIENT FACTOR model ------------------------------------
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
554 if( char_I_deco_model != 0 )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
555 {
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
556 overlay unsigned char first_stop = 0;
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
557 overlay float p;
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
558
567
8666b14fce24 Fix deepest low_depth value
JeanDo
parents: 564
diff changeset
559 sim_limit( GF_low );
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
560 p = sim_lead_tissue_limit - pres_surface;
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
561 p *= BAR_TO_METER;
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
562 if( p <= 0.0f )
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
563 goto no_deco_stop; // We can surface directly...
512
e7893664bd29 BUGFIX Spurious stop order when simulating deadly fast ascent.
JeanDo
parents: 511
diff changeset
564
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
565 // Store the deepest point needing a deco stop as the LOW reference for GF.
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
566 // NOTE: following stops will be validated using this LOW-HIGH gf scale,
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
567 // so if we want to keep coherency, we should not validate this stop
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
568 // yet, but apply the search to it, as for all the following stops afterward.
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
569 if( p > low_depth )
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
570 {
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
571 low_depth = p;
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
572 locked_GF_step = GF_delta / low_depth;
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
573 }
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
574
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
575 if( p < min_depth )
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
576 goto no_deco_stop; // First stop is higher than 1' ascent.
275
4310ab395dbe Keep low_depth in float 32bits (w/o rounding) for a better stability.
JeanDo
parents: 270
diff changeset
577
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
578 // Round to multiple of 3m.
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
579 first_stop = 3 * (short)(0.9995f + p*0.333333f);
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
580 assert( first_stop < 128 );
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
581
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
582 // Apply correction for the shallowest stop.
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
583 if( first_stop == 3 ) // new in v104
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
584 first_stop = char_I_depth_last_deco; // Use last 3m..6m instead.
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
585
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
586 // We have a stop candidate.
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
587 // But maybe ascending to the next stop will diminish the constraint,
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
588 // because the GF might decrease more than the preassure gradient...
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
589 while(first_stop > 0)
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
590 {
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
591 overlay unsigned char next_stop; // Next depth (0..90m)
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
592
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
593 // Check max speed, or reaching surface.
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
594 if( first_stop <= min_depth )
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
595 goto no_deco_stop;
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
596
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
597 if( first_stop <= char_I_depth_last_deco ) // new in v104
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
598 next_stop = 0;
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
599 else if( first_stop == 6 )
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
600 next_stop = char_I_depth_last_deco;
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
601 else
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
602 next_stop = first_stop - 3; // Index of next (upper) stop.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
603
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
604 // Total preassure at the new stop candidate:
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
605 p = next_stop * METER_TO_BAR
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
606 + pres_surface;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
607
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
608 // Recompute limit for this new stop:
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
609 if( !low_depth || next_stop > low_depth )
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
610 sim_limit( GF_low );
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
611 else
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
612 sim_limit( GF_high - next_stop * locked_GF_step );
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
613
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
614 // Check upper limit (lowest ambiant pressure tolerated):
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
615 if( sim_lead_tissue_limit >= p )
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
616 goto deco_stop_found; // Ascent to next_stop forbiden.
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
617
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
618 // Else, validate that stop and loop...
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
619 first_stop = next_stop;
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
620 }
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
621
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
622 no_deco_stop:
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
623 temp_depth_limit = min_depth;
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
624 goto done;
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
625
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
626 deco_stop_found:
562
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
627 // next stop is the last validated depth found, aka first_stop
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
628 need_stop = 1; // Hit.
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
629 temp_depth_limit = first_stop; // Stop depth, in meter.
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
630
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
631 done:
56753ea6a791 Cleaning LOW gf reference in deco model
JeanDo
parents: 561
diff changeset
632 ;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
633 }
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
634 else //---- ZH-L16 model -------------------------------------------------
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
635 {
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
636 overlay float pres_gradient;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
637
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
638 // Original model
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
639 // optimized in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
640 // char_I_depth_last_deco included in v.101
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
641
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
642 // Compute sim_lead_tissue_limit too, but just once.
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
643 sim_limit(1.0);
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
644
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
645 pres_gradient = sim_lead_tissue_limit - pres_surface;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
646 if (pres_gradient >= 0)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
647 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
648 pres_gradient *= BAR_TO_METER/3; // Bar --> stop number;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
649 temp_depth_limit = 3 * (short) (pres_gradient + 0.99); // --> metre : depth for deco
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
650 need_stop = 1; // Hit.
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
651
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
652 // Implement last stop at 4m/5m/6m...
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
653 if( temp_depth_limit == 3 )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
654 temp_depth_limit = char_I_depth_last_deco;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
655 }
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
656 else
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
657 temp_depth_limit = 0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
658 }
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
659
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
660 //---- Check gas change --------------------------------------------------
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
661 need_stop |= gas_switch_deepest(); // Update temp_depth_limit if there is a change,
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
662
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
663 return need_stop;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
664 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
665
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
666 //////////////////////////////////////////////////////////////////////////////
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
667 // copy_deco_table
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
668 //
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
669 // Buffer the stops, once computed, so we can continue to display them
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
670 // while computing the next set.
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
671 //
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
672 static void copy_deco_table(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
673 {
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
674 // Copy depth of the first (deepest) stop, because when reversing
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
675 // order, it will be hard to find...
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
676 char_O_first_deco_depth = internal_deco_depth[0];
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
677 char_O_first_deco_time = internal_deco_time [0];
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
678
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
679 if( read_custom_function(54) & 1 ) //---- Should we reverse table ? ------
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
680 {
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
681 overlay unsigned char x, y;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
682
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
683 //---- First: search the first non-null depth
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
684 for(x=(NUM_STOPS-1); x != 0; --x)
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
685 if( internal_deco_depth[x] != 0 ) break;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
686
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
687 //---- Second: copy to output table (in reverse order)
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
688 for(y=0; y<NUM_STOPS; y++, --x)
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
689 {
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
690 char_O_deco_depth[y] = internal_deco_depth[x];
633
242139da29f2 save stop time instead of stop depth in char_O_deco_time_for_log
heinrichsweikamp
parents: 630
diff changeset
691 char_O_deco_time_for_log[y] = internal_deco_time [x];
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
692 char_O_deco_time [y] = internal_deco_time [x];
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
693 char_O_deco_gas [y] = internal_deco_gas [x];
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
694
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
695 // Stop only once the last transfer is done.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
696 if( x == 0 ) break;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
697 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
698
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
699 //---- Third: fill table end with null
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
700 for(y++; y<NUM_STOPS; y++)
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
701 {
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
702 char_O_deco_time [y] = 0;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
703 char_O_deco_depth[y] = 0;
630
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
704 char_O_deco_time_for_log[y] = 0;
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
705 char_O_deco_gas [y] = 0;
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
706 }
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
707 }
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
708 else //---- Straight copy ------------------------------------------------
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
709 {
630
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
710 overlay unsigned char x, y;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
711
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
712 for(x=0; x<NUM_STOPS; x++)
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
713 {
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
714 char_O_deco_depth[x] = internal_deco_depth[x];
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
715 char_O_deco_time [x] = internal_deco_time [x];
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
716 char_O_deco_gas [x] = internal_deco_gas [x];
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
717 }
630
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
718
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
719 //Now fill the char_O_deco_time_for_log array
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
720 //---- First: search the first non-null depth
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
721 for(x=(NUM_STOPS-1); x != 0; --x)
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
722 if( internal_deco_depth[x] != 0 ) break;
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
723
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
724 //---- Second: copy to output table (in reverse order)
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
725 for(y=0; y<NUM_STOPS; y++, --x)
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
726 {
633
242139da29f2 save stop time instead of stop depth in char_O_deco_time_for_log
heinrichsweikamp
parents: 630
diff changeset
727 char_O_deco_time_for_log[y] = internal_deco_time [x];
630
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
728
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
729 // Stop only once the last transfer is done.
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
730 if( x == 0 ) break;
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
731 }
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
732
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
733 //---- Third: fill table end with null
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
734 for(y++; y<NUM_STOPS; y++)
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
735 {
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
736 char_O_deco_time_for_log [y] = 0;
6526a5b058b7 Fill char_O_deco_time_for_log array with stop times
heinrichsweikamp
parents: 601
diff changeset
737 }
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
738 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
739 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
740
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
741 //////////////////////////////////////////////////////////////////////////////
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
742 // temp_tissue_safety //
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
743 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
744 // outsourced in v.102
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
745 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
746 // Apply safety factors for brand ZH-L16 model.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
747 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
748 static void temp_tissue_safety(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
749 {
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
750 assert( 0.0 < float_desaturation_multiplier && float_desaturation_multiplier <= 1.0 );
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
751 assert( 1.0 <= float_saturation_multiplier && float_saturation_multiplier <= 2.0 );
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
752
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
753 if( char_I_deco_model == 0 )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
754 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
755 if( temp_tissue < 0.0 )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
756 temp_tissue *= float_desaturation_multiplier;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
757 else
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
758 temp_tissue *= float_saturation_multiplier;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
759 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
760 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
761
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
762 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
763 //////////////////////////////////////////////////////////////////////////////
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
764 // ** THE JUMP-IN CODE **
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
765 // ** for the asm code **
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
766 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
767 //////////////////////////////////////////////////////////////////////////////
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
768
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
769 //////////////////////////////////////////////////////////////////////////////
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
770 // Called every 2 seconds during diving.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
771 // update tissues every time.
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
772 //
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
773 // Every 6 seconds (or slower when TTS > 16):
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
774 // - update deco table (char_O_deco_time/depth) with new values.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
775 // - update ascent time,
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
776 // - set status to zero (so we can check there is new results).
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
777 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
778 void deco_calc_hauptroutine(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
779 {
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
780 RESET_C_STACK
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
781 calc_hauptroutine();
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
782 int_O_desaturation_time = 65535;
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
783 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
784
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
785 //////////////////////////////////////////////////////////////////////////////
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
786 // Reset decompression model:
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
787 // + Set all tissues to equilibrium with Air at ambient pressure.
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
788 // + Reset last stop to 0m
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
789 // + Reset all model output.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
790 void deco_clear_tissue(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
791 {
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
792 RESET_C_STACK
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
793 clear_tissue();
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
794 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
795
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
796 //////////////////////////////////////////////////////////////////////////////
278
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
797 // Called every 1 min during decoplanning.
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
798 // Update tissues for 1 min.
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
799 //
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
800 void deco_calc_tissue(void)
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
801 {
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
802 RESET_C_STACK
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
803 calc_hauptroutine_update_tissues();
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
804 }
278
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
805
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
806 //////////////////////////////////////////////////////////////////////////////
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
807
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
808 void deco_calc_wo_deco_step_1_min(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
809 {
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
810 RESET_C_STACK
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
811 calc_wo_deco_step_1_min();
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
812 deco_calc_desaturation_time();
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
813 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
814
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
815 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
816
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
817 void deco_calc_dive_interval(void)
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
818 {
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
819 RESET_C_STACK
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
820 calc_dive_interval();
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
821 }
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
822
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
823 //////////////////////////////////////////////////////////////////////////////
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
824 // Find current gas in the list (if any).
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
825 //
513
c9f19a546e64 BUGFIX MISSING movlb for gaslist (simulator).
JeanDo
parents: 512
diff changeset
826 // Input: char_I_current_gas = 1..6
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
827 //
513
c9f19a546e64 BUGFIX MISSING movlb for gaslist (simulator).
JeanDo
parents: 512
diff changeset
828 // Output: sim_gas_last_depth = 0..5, temp_depth_limit.
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
829 //
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
830 static void gas_switch_find_current(void)
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
831 {
513
c9f19a546e64 BUGFIX MISSING movlb for gaslist (simulator).
JeanDo
parents: 512
diff changeset
832 assert( 0 < char_I_current_gas && char_I_current_gas <= (NUM_GAS+1) );
247
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
833
388
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
834 if( char_I_current_gas <= NUM_GAS ) // Gas1..Gas5
353
b5b030c1ae7e Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents: 340
diff changeset
835 {
388
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
836 sim_gas_last_used = char_I_current_gas;
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
837
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
838 // Note: if current is first gas, we must find it, but not set
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
839 // last depth change to surface.
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
840 if( char_I_deco_gas_change[sim_gas_last_used-1] )
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
841 sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1];
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
842 }
388
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
843 else
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
844 sim_gas_last_used = 0; // Gas 6 = manual set
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
845 }
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
846
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
847 //////////////////////////////////////////////////////////////////////////////
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
848 // Find deepest available gas.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
849 //
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
850 // Input: temp_depth_limit,
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
851 // deco_gas_change[]
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
852 // sim_gas_depth_used, sim_dive_mins.
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
853 //
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
854 // RETURNS TRUE if a stop is needed for gas switch.
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
855 //
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
856 // Output: temp_depth_limit, sim_gas_depth_used IFF the is a switch.
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
857 //
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
858 // NOTE: might be called from bottom (when sim_gas_depth_used
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
859 // is null), or during the ascent to make sure we are not passing a
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
860 // stop (in which case both can be already set).
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
861 //
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
862 static unsigned char gas_switch_deepest(void)
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
863 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
864 overlay unsigned char switch_deco = 0, switch_last = 0;
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
865
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
866 if (char_I_const_ppO2 == 0)
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
867 {
225
2dc4a7340510 BUGFIX Gas usage for unsorted gas list.
JeanDo
parents: 224
diff changeset
868 overlay unsigned char j;
2dc4a7340510 BUGFIX Gas usage for unsorted gas list.
JeanDo
parents: 224
diff changeset
869
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
870 // Loop over all enabled gas, to find the deepest one,
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 339
diff changeset
871 // above last used gas, but below temp_depth_limit.
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
872 for(j=0; j<NUM_GAS; ++j)
225
2dc4a7340510 BUGFIX Gas usage for unsorted gas list.
JeanDo
parents: 224
diff changeset
873 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
874 // Gas not (yet) allowed ? Skip !
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
875 if( temp_depth_limit > deco_gas_change[j] )
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
876 continue;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
877
353
b5b030c1ae7e Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents: 340
diff changeset
878 // Gas deeper (or equal) than the current one ? Skip !
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
879 if( sim_gas_last_depth && deco_gas_change[j] >= sim_gas_last_depth )
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
880 continue;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
881
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
882 // First, or deeper ?
247
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
883 if( switch_deco < deco_gas_change[j] )
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
884 {
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
885 switch_deco = deco_gas_change[j];
388
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
886 switch_last = j+1; // 1..5
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
887 }
225
2dc4a7340510 BUGFIX Gas usage for unsorted gas list.
JeanDo
parents: 224
diff changeset
888 }
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
889 }
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
890
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
891 // If there is a better gas available
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
892 if( switch_deco )
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
893 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
894 assert( !sim_gas_last_depth || sim_gas_last_depth > switch_deco );
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
895
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
896 sim_gas_last_depth = switch_deco;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
897 sim_gas_last_used = switch_last;
755
6724df41d4f1 CHANGE: Remove CF55 from decolist
heinrichsweikamp
parents: 744
diff changeset
898 return 0;
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
899 }
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
900 return 0;
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
901 }
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
902
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
903 //////////////////////////////////////////////////////////////////////////////
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
904 // Calculate gas switches
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
905 //
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
906 //
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
907 // Input: N2_ratio, He_ratio.
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
908 // sim_gas_last_used
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
909 //
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
910 // Output: calc_N2_ratio, calc_He_ratio
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
911 //
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
912 static void gas_switch_set(void)
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
913 {
564
4e9e95d108d2 Minor cleanups for MacOSX compatibility.
JeanDo
parents: 563
diff changeset
914 assert( sim_gas_last_used <= NUM_GAS );
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
915
388
681bdc91114c BUGFIX Gas switch number.
JeanDo
parents: 368
diff changeset
916 if( sim_gas_last_used == 0 ) // Gas6 = manualy set gas.
224
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
917 {
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
918 calc_N2_ratio = N2_ratio;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
919 calc_He_ratio = He_ratio;
224
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
920 }
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
921 else
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
922 {
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
923 calc_N2_ratio = char_I_deco_N2_ratio[sim_gas_last_used-1] * 0.01;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
924 calc_He_ratio = char_I_deco_He_ratio[sim_gas_last_used-1] * 0.01;
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
925 }
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
926
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
927 assert( 0.0 <= calc_N2_ratio && calc_N2_ratio <= 0.95 );
782
6f54104ea0ee minor fix: assert should pass for pure helium diluant
JeanDo
parents: 766
diff changeset
928 assert( 0.0 <= calc_He_ratio && calc_He_ratio <= 1.00 );
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
929 assert( (calc_N2_ratio + calc_He_ratio) <= 1.00 );
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
930 }
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
931
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
932 //////////////////////////////////////////////////////////////////////////////
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
933 //
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
934 // Input: calc_N2_ratio, calc_He_ratio : simulated gas mix.
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
935 // temp_deco : simulated respiration pressure
276
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
936 // float_deco_distance : security factor.
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
937 // Water-vapor pressure inside limbs (ppWater).
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
938 //
236
3dbeacf42e9e BUGFIX missing deko init in reboot code.
JeanDo
parents: 235
diff changeset
939 // Output: ppN2, ppHe.
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
940 //
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
941 static void sim_alveolar_presures(void)
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
942 {
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
943 overlay float deco_diluent = temp_deco; // new in v.101
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
944
276
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
945 // Take deco offset into account, but not at surface.
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
946 // Note: this should be done on ambiant pressure, hence before
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
947 // computing the diluant partial pressure...
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
948 if( deco_diluent > pres_surface )
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
949 deco_diluent += float_deco_distance;
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
950
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
951 //---- CCR mode : deco gas switch ? --------------------------------------
276
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
952 if( char_I_const_ppO2 != 0 )
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
953 {
276
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
954 // In CCR mode, use calc_XX_ratio instead of XX_ratio.
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
955 // Note: PPO2 and ratios are known outside the lumbs, so there is no
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
956 // ppWater in the equations below:
321
a99073445c18 Cleanup auto setpoint switch
JeanDo
parents: 317
diff changeset
957 deco_diluent -= const_ppO2;
276
02303915c199 BUGFIX CF16 applyed to diluant in CCR mode.
JeanDo
parents: 275
diff changeset
958 deco_diluent /= calc_N2_ratio + calc_He_ratio;
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
959
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
960 if (deco_diluent > temp_deco)
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
961 deco_diluent = temp_deco;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
962 }
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
963
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
964 if( deco_diluent > ppWater )
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
965 {
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
966 ppN2 = calc_N2_ratio * (deco_diluent - ppWater);
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
967 ppHe = calc_He_ratio * (deco_diluent - ppWater);
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
968 }
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
969 else
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
970 {
236
3dbeacf42e9e BUGFIX missing deko init in reboot code.
JeanDo
parents: 235
diff changeset
971 ppN2 = 0.0;
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
972 ppHe = 0.0;
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
973 }
236
3dbeacf42e9e BUGFIX missing deko init in reboot code.
JeanDo
parents: 235
diff changeset
974 assert( 0.0 <= ppN2 && ppN2 < 14.0 );
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
975 assert( 0.0 <= ppHe && ppHe < 14.0 );
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
976 }
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
977
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
978 //////////////////////////////////////////////////////////////////////////////
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
979 // clear_tissue
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
980 //
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
981 // optimized in v.101 (var_N2_a)
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
982 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
983 // preload tissues with standard pressure for the given ambient pressure.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
984 // Note: fixed N2_ratio for standard air.
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
985 //
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
986 static void clear_tissue(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
987 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
988 overlay float p;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
989
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
990 // Kludge: the 0.0002 of 0.7902 are missing with standard air.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
991 N2_ratio = 0.7902;
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
992 pres_respiration = int_I_pres_respiration * 0.001;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
993
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
994 p = N2_ratio * (pres_respiration - ppWater);
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
995 for(ci=0; ci<NUM_COMP; ci++)
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
996 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
997 // cycle through the 16 Bühlmann N2 tissues
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
998 pres_tissue_N2[ci] = p;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
999
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1000 // cycle through the 16 Bühlmann tissues for Helium
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1001 pres_tissue_He[ci] = 0.0;
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1002 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1003
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1004 clear_deco_table();
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1005 char_O_deco_status = 0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1006 char_O_nullzeit = 0;
168
494587193f5d Use 16bits for TTS sum.
JeanDo
parents: 167
diff changeset
1007 int_O_ascenttime = 0;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1008 char_O_gradient_factor = 0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1009 char_O_relative_gradient_GF = 0;
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1010
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1011 calc_lead_tissue_limit = 0.0;
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1012 char_O_gtissue_no = 0;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1013 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1014
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1015 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1016 // calc_hauptroutine
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1017 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1018 // this is the major code in dive mode calculates:
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1019 // the tissues,
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1020 // the bottom time,
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1021 // and simulates the ascend with all deco stops.
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1022 //
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1023 // The deco_state sequence is :
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1024 // 3 (at surface)
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1025 // +---> 0 : calc nullzeit
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1026 // | 2 : simulate ascent to first stop (at 10m/min, less that 16x 1min simu)
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1027 // | +-> 1 : simulate up to 16min of stops.
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1028 // | +------< not finished
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1029 // +--------< finish
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1030 //
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1031 // Added steps 6,5 for @+5 calculation:
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1032 // 6 = ascent to first stop (same as 2), except continue to 7
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1033 // 7 = same as 1, except loop to 7.
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1034 //
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1035 static void calc_hauptroutine(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1036 {
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1037 static unsigned char backup_gas_used = 0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1038 static unsigned char backup_gas_depth = 0;
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1039
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1040 calc_hauptroutine_data_input();
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1041
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1042 calc_hauptroutine_update_tissues();
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1043 calc_gradient_factor();
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1044
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1045 // toggle between calculation for nullzeit (bottom time),
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1046 // deco stops
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1047 // and more deco stops (continue)
697
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
1048 switch( char_O_deco_status )
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1049 {
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1050 case 3: //---- At surface: start a new dive ------------------------------
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1051 clear_deco_table();
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1052 copy_deco_table();
743
8466932a2fcf .. minor cleanups
JeanDo
parents: 711
diff changeset
1053 int_O_ascenttime = 0; // Reset TTS.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1054 int_O_extra_ascenttime = 0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1055 char_O_nullzeit = 0; // Reset bottom time.
278
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
1056 char_O_deco_status = 0; // Calc bottom-time/nullzeit next iteration.
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
1057
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
1058 // Values that should be reset just once for the full real dive.
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
1059 // This is used to record the lowest stop for the whole dive,
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
1060 // Including ACCROSS all simulated ascent.
695
5bf4f526f552 ... minor cleanups ...
JeanDo
parents: 681
diff changeset
1061 low_depth = 0.0;
567
8666b14fce24 Fix deepest low_depth value
JeanDo
parents: 564
diff changeset
1062 locked_GF_step = 0.0;
217
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
1063
ce6f16711567 BUGFIX gas switch
JeanDo
parents: 216
diff changeset
1064 // Reset gas switch history.
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1065 backup_gas_used = sim_gas_last_used = 0;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1066 backup_gas_depth = sim_gas_last_depth = 0;
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1067 sim_dive_mins = 0;
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1068 break;
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1069
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1070 case 0: //---- bottom time -----------------------------------------------
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1071 default:
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1072 gas_switch_find_current(); // Lookup for current gas & time.
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1073 gas_switch_set(); // setup calc_ratio's
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1074
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1075 calc_nullzeit();
534
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1076 if( char_O_nullzeit > 0 ) // Some NDL time left ?
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1077 {
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1078 char_O_deco_status = 0; // YES: recalc ndl next time.
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1079 clear_deco_table(); // Also clear stops !
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1080 copy_deco_table();
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1081 char_O_deco_last_stop = 0; // And last stop (OSTC menu anim)
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1082 }
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1083 else
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1084 char_O_deco_status = 2; // NO: calc ascent next time.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1085 break;
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1086
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1087 case 2: //---- Simulate ascent to first stop -----------------------------
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1088 case 6: // @+5min variation
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1089 // Check proposed gas at begin of ascent simulation
247
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
1090 sim_dive_mins = int_I_divemins; // Init current time.
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1091
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1092 gas_switch_find_current(); // Lookup for current gas & time.
532
f5a06b9e2fef cleanup debug stuff
heinrichsweikamp
parents: 527
diff changeset
1093 gas_switch_set(); // setup calc_ratio's
f5a06b9e2fef cleanup debug stuff
heinrichsweikamp
parents: 527
diff changeset
1094
247
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
1095 backup_gas_used = sim_gas_last_used; // And save for later simu steps.
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
1096 backup_gas_depth = sim_gas_last_depth; // And save for later simu steps.
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1097
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1098 sim_ascent_to_first_stop();
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
1099
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1100 // Calc stops next time (deco or gas switch).
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1101 char_O_deco_status = 1 | ( char_O_deco_status & 4 );
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1102 break;
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1103
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1104 case 1: //---- Simulate stops --------------------------------------------
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1105 case 5: // @+5 variation.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1106 calc_hauptroutine_calc_deco();
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1107
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1108 // If simulation is finished, restore the GF low reference, so that
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1109 // next ascent simulation is done from the current depth:
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1110 if( (char_O_deco_status & 3) == 0 )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1111 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1112 sim_gas_last_used = backup_gas_used;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1113 sim_gas_last_depth = backup_gas_depth;
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1114 }
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1115 break;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1116 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1117
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1118 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1119
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1120 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1121 // calc_hauptroutine_data_input
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1122 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1123 // Reset all C-code dive parameters from their ASM-code values.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1124 // Detect gas change condition.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1125 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1126 void calc_hauptroutine_data_input(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1127 {
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1128 overlay short int_temp;
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1129 overlay unsigned char g;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1130
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1131 pres_respiration = int_I_pres_respiration * 0.001;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1132 pres_surface = int_I_pres_surface * 0.001;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1133 N2_ratio = char_I_N2_ratio * 0.01;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1134 He_ratio = char_I_He_ratio * 0.01;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1135 float_deco_distance = char_I_deco_distance * 0.01; // Get offset is in mbar.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1136
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1137 // ____________________________________________________
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1138 //
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1139 // _____________ G A S _ C H A N G E S ________________
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1140 // ____________________________________________________
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1141
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1142 // Keep a margin of 150mbar = 1.50m
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1143 int_temp = (int_I_pres_respiration - int_I_pres_surface)
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1144 + MBAR_REACH_GASCHANGE_AUTO_CHANGE_OFF;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1145
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1146 // Gas are selectable if we did not pass the change depth by more than 1.50m:
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1147 for(g=0; g < NUM_GAS; ++g)
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1148 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1149 deco_gas_change[g] = 0;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1150 if(char_I_deco_gas_change[g])
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1151 if( int_temp > 100 *(short)char_I_deco_gas_change[g] )
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1152 deco_gas_change[g] = char_I_deco_gas_change[g];
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1153 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1154
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1155 const_ppO2 = char_I_const_ppO2 * 0.01;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1156 float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1157 float_saturation_multiplier = char_I_saturation_multiplier * 0.01;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1158 GF_low = char_I_GF_Low_percentage * 0.01;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1159 GF_high = char_I_GF_High_percentage * 0.01;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1160 GF_delta = GF_high - GF_low;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1161 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1162
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1163 //////////////////////////////////////////////////////////////////////////////
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1164 //
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1165 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1166 void calc_hauptroutine_update_tissues(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1167 {
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1168 assert( 0.00 <= N2_ratio && N2_ratio <= 1.00 );
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1169 assert( 0.00 <= He_ratio && He_ratio <= 1.00 );
782
6f54104ea0ee minor fix: assert should pass for pure helium diluant
JeanDo
parents: 766
diff changeset
1170 assert( (N2_ratio + He_ratio) <= 1.00 );
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
1171 assert( 0.800 < pres_respiration && pres_respiration < 14.0 );
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1172
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1173 pres_diluent = pres_respiration;
307
5bc3467fc421 New live EAD/END in divemode (both OCR and CCR).
JeanDo
parents: 302
diff changeset
1174 if( char_I_const_ppO2 != 0 ) // new in v.101
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1175 {
322
676d18bce8d7 Fix ppO2[flush] display in customview.
JeanDo
parents: 321
diff changeset
1176 overlay float flush_ppO2 = pres_respiration * (1.0 - N2_ratio - He_ratio);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1177
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1178 pres_diluent -= const_ppO2; // new in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1179 pres_diluent /= N2_ratio + He_ratio; // new in v.101
321
a99073445c18 Cleanup auto setpoint switch
JeanDo
parents: 317
diff changeset
1180 if( pres_diluent < 0.0 )
a99073445c18 Cleanup auto setpoint switch
JeanDo
parents: 317
diff changeset
1181 pres_diluent = 0.0;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1182 if( pres_diluent > pres_respiration ) // new in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1183 pres_diluent = pres_respiration; // new in v.101
307
5bc3467fc421 New live EAD/END in divemode (both OCR and CCR).
JeanDo
parents: 302
diff changeset
1184
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1185 char_O_diluent = (unsigned char)(pres_diluent/pres_respiration*100.0 + 0.5);
322
676d18bce8d7 Fix ppO2[flush] display in customview.
JeanDo
parents: 321
diff changeset
1186
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1187 if( flush_ppO2 > 2.545) flush_ppO2 = 2.55;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1188 if( flush_ppO2 < 0.0 ) flush_ppO2 = 0.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1189 char_O_flush_ppO2 = (unsigned char)(flush_ppO2*100.0 + 0.5);
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1190 }
307
5bc3467fc421 New live EAD/END in divemode (both OCR and CCR).
JeanDo
parents: 302
diff changeset
1191
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
1192 if( pres_diluent > ppWater ) // new in v.101
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1193 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1194 overlay float EAD, END;
307
5bc3467fc421 New live EAD/END in divemode (both OCR and CCR).
JeanDo
parents: 302
diff changeset
1195
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
1196 ppN2 = N2_ratio * (pres_diluent - ppWater); // changed in v.101
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1197 ppHe = He_ratio * (pres_diluent - ppWater); // changed in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1198
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1199 // EAD : Equivalent Air Dive. Equivalent depth for the same N2 level
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1200 // with plain air.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1201 // ppN2 = 79% * (P_EAD - ppWater)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1202 // EAD = (P_EAD - Psurface) * 10
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1203 // ie: EAD = (ppN2 / 0.7902 + ppWater -Psurface) * 10
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1204 EAD = (ppN2 / 0.7902 + ppWater - pres_surface) * BAR_TO_METER;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1205 if( EAD < 0.0 || EAD > 245.5 ) EAD = 0.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1206 char_O_EAD = (unsigned char)(EAD + 0.5);
307
5bc3467fc421 New live EAD/END in divemode (both OCR and CCR).
JeanDo
parents: 302
diff changeset
1207
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1208 // END : Equivalent Narcotic Dive.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1209 // Here we count O2 as narcotic too. Hence everything but helium (has a narcosis factor of
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1210 // 0.23 btw). Hence the formula becomes:
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1211 // END * BarPerMeter * (1.0 - 0.0) - ppWater + Psurface == Pambient - ppHe - ppWater
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1212 // ie: END = (Pambient - ppHe - Psurface) * BAR_TO_METER
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1213 //
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1214 // Source cited:
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1215 // The Physiology and Medicine of Diving by Peter Bennett and David Elliott,
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1216 // 4th edition, 1993, W.B.Saunders Company Ltd, London.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1217 END = (pres_respiration - ppHe - pres_surface) * BAR_TO_METER;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1218 if( END < 0.0 || END > 245.5 ) END = 0.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1219 char_O_END = (unsigned char)(END + 0.5);
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1220 }
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1221 else // new in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1222 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1223 ppN2 = 0.0; // new in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1224 ppHe = 0.0; // new in v.101
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1225 char_O_EAD = char_O_END = 0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1226 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1227
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1228 if(!char_I_step_is_1min)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1229 calc_tissue(0);
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1230 else
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1231 calc_tissue(1);
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1232
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1233 // Calc limit for surface, ie. GF_high.
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1234 calc_limit();
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1235
786
0d1a82cdb3dc compute ceiling in calc_hauptroutine_update_tissues
heinrichsweikamp
parents: 785
diff changeset
1236 // Fill int_O_ceiling if ceiling is below the surface
0d1a82cdb3dc compute ceiling in calc_hauptroutine_update_tissues
heinrichsweikamp
parents: 785
diff changeset
1237 if ((calc_lead_tissue_limit-pres_surface)>0)
0d1a82cdb3dc compute ceiling in calc_hauptroutine_update_tissues
heinrichsweikamp
parents: 785
diff changeset
1238 int_O_ceiling = (short)((calc_lead_tissue_limit-pres_surface)*1000);
0d1a82cdb3dc compute ceiling in calc_hauptroutine_update_tissues
heinrichsweikamp
parents: 785
diff changeset
1239 else
0d1a82cdb3dc compute ceiling in calc_hauptroutine_update_tissues
heinrichsweikamp
parents: 785
diff changeset
1240 int_O_ceiling = 0;
0d1a82cdb3dc compute ceiling in calc_hauptroutine_update_tissues
heinrichsweikamp
parents: 785
diff changeset
1241
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1242 int_O_gtissue_press = (short)((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) * 1000);
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1243 }
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1244
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1245
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1246 //////////////////////////////////////////////////////////////////////////////
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1247 // Compute stops.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1248 //
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1249 // Note: because this can be very long, break on 16 iterations, and set state
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1250 // to 0 when finished, or to 1 when needing to continue.
334
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
1251 // Note: because each iteration might be very long too (~ 66 ms in 1.84beta),
257
f8f869bafd92 Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents: 252
diff changeset
1252 // break the loop when total time > 512msec.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1253 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1254 void calc_hauptroutine_calc_deco(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1255 {
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1256 overlay unsigned char loop;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1257
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1258 for(loop = 0; loop < 16; ++loop)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1259 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1260 // Limit loops to 512ms, using the RTC timer 3:
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1261 if( tmr3() & (512*32) )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1262 break;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1263
755
6724df41d4f1 CHANGE: Remove CF55 from decolist
heinrichsweikamp
parents: 744
diff changeset
1264 if( calc_nextdecodepth() )
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
1265 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1266 if( temp_depth_limit == 0 )
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1267 goto Surface;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1268
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1269 //---- We hit a stop at temp_depth_limit ---------------------
317
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
1270 temp_deco = temp_depth_limit * METER_TO_BAR // Convert to relative bar,
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
1271 + pres_surface; // To absolute.
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1272 if( !update_deco_table() ) // Adds a one minute stops.
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1273 goto Surface; // Deco table full: abort...
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1274 }
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1275 else
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1276 {
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1277 //---- No stop -----------------------------------------------
317
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
1278 temp_deco -= (10*METER_TO_BAR); // Ascend 10m, no wait.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1279
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1280 //---- Finish computations once surface is reached -----------
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1281 if( temp_deco <= pres_surface )
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1282 {
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1283 Surface:
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1284 if( char_O_deco_status == 1 ) // Don't in @+5min variant.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1285 copy_deco_table();
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1286
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1287 calc_ascenttime();
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1288 char_O_deco_status = 0; // calc nullzeit next time.
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1289 char_O_deco_last_stop = 0; // Surface reached (to animate menu)
755
6724df41d4f1 CHANGE: Remove CF55 from decolist
heinrichsweikamp
parents: 744
diff changeset
1290 return;
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1291 }
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1292 }
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1293 //---- Then update tissue --------------------------------------------
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1294 sim_dive_mins++; // Advance simulated time by 1 minute.
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1295 gas_switch_set(); // Apply any simulated gas change, once validated.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1296 sim_alveolar_presures(); // Updates ppN2 and ppHe.
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1297 sim_tissue(1); // Simulate compartiments for 1 minute.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1298 }
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1299
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1300 // Surface not reached, need more stops... for menu animation.
278
17aab4ca0547 BUGFIX CCR decoplan fails (bug bb42).
JeanDo
parents: 276
diff changeset
1301 char_O_deco_last_stop = temp_depth_limit; // Reached depth.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1302 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1303
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1304 //////////////////////////////////////////////////////////////////////////////
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1305 // Simulation ascention to first deco stop.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1306 //
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1307 // Note: because we ascent with a constant speed (10m/mn, ie. 1bar/mn),
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1308 // there is no need to break on more that 16 iterations
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1309 // (or we are already in deep shit).
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1310 //
334
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
1311 // Input: pres_respiration
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
1312 // Output: temp_deco
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
1313 //
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1314 // if char_O_deco_status indicate @+5 variant, add extra time at current depth,
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1315 // before ascent.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1316 void sim_ascent_to_first_stop(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1317 {
698
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1318 overlay unsigned char fast = 1; // 1min or 2sec steps.
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1319
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1320 update_startvalues();
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1321 clear_deco_table();
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1322
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1323 temp_deco = pres_respiration; // Starts from current real depth.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1324
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1325 // Are we doing the special @+5min variation ?
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1326 if(char_O_deco_status & 4)
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1327 sim_extra_time();
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1328
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1329 //---- Loop until first stop, gas switch, or surface is reached ----------
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1330 for(;;)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1331 {
461
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1332 overlay float old_deco = temp_deco; // Pamb backup (bars)
460
274689f46b1a BUGFIX round depth before checking surface
JeanDo
parents: 443
diff changeset
1333
698
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1334 // Try ascending 1 full minute (fast) or 2sec (!fast):
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1335 if( fast )
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1336 temp_deco -= 10*METER_TO_BAR; // 1 min, at 10m/min. ~ 1bar.
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1337 else
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1338 temp_deco -= (10.0/30.0)*METER_TO_BAR; // 2sec at 10m/min.
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1339
461
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1340 if( temp_deco < pres_surface ) // But don't go over surface.
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1341 temp_deco = pres_surface;
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1342
461
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1343 // Recompute sim_lead_tissue_limit at GF_low (deepest stop), because
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1344 // one minute passed.
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1345 sim_limit(GF_low);
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1346
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1347 // Did we reach deepest remaining stop ?
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1348 if( temp_deco < sim_lead_tissue_limit )
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1349 {
461
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1350 temp_deco = old_deco; // Restore last correct depth,
698
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1351
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1352 if( fast )
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1353 {
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1354 fast = 0; // Retry with 2sec steps.
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1355 continue;
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1356 }
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1357 else
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1358 break; // Done...
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1359 }
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1360
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1361 // Did we reach surface ?
460
274689f46b1a BUGFIX round depth before checking surface
JeanDo
parents: 443
diff changeset
1362 // NOTE: we should round BEFORE checking surface is reached.
461
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1363 temp_depth_limit = (unsigned char)(0.5 + (temp_deco - pres_surface) * BAR_TO_METER);
68d595db29a1 Minor fix checking first stop on surface
JeanDo
parents: 460
diff changeset
1364 if( temp_depth_limit == 0 )
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1365 {
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1366 temp_deco = pres_surface; // Yes: finished !
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1367 break;
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1368 }
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1369
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1370 // Check for gas change below new depth ?
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1371 if( gas_switch_deepest() )
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1372 {
334
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
1373 assert( temp_depth_limit > 0);
4ccdc72ec0e5 BUGFIX minor error in gas-switch algo (spurious surface decostop rarely added).
JeanDo
parents: 326
diff changeset
1374
317
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
1375 temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1376 break;
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1377 }
171
7f3e1bf588bc More p2_deco.c cleanups
JeanDo
parents: 169
diff changeset
1378
698
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1379 if( fast )
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1380 sim_dive_mins++; // Advance simulated time by 1 minute.
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1381 sim_alveolar_presures(); // temp_deco --> ppN2/ppHe
698
1a5804e21d3f BUGFIX ascent to fisrt stop in finer steps.
JeanDo
parents: 697
diff changeset
1382 sim_tissue(fast); // and update tissues for 1 min.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1383 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1384 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1385
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1386 //////////////////////////////////////////////////////////////////////////////
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1387 // Simulation extra time at the current depth.
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1388 //
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1389 // This routine is used for @+5min feature.
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1390 void sim_extra_time(void)
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1391 {
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1392 overlay unsigned char extra = read_custom_function(58);
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1393 do {
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1394 sim_dive_mins++; // Advance simulated time by 1 minute.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1395 sim_tissue(1); // and update tissues for 1 min.
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1396 } while( --extra != 0 );
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1397 }
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1398
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1399 //////////////////////////////////////////////////////////////////////////////
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1400 // calc_tissue
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1401 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1402 // optimized in v.101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1403 //
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
1404 static void calc_tissue(PARAMETER unsigned char period)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1405 {
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1406 assert( 0.00 <= ppN2 && ppN2 < 11.2 ); // 80% N2 at 130m
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1407 assert( 0.00 <= ppHe && ppHe < 12.6 ); // 90% He at 130m
236
3dbeacf42e9e BUGFIX missing deko init in reboot code.
JeanDo
parents: 235
diff changeset
1408
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1409 for (ci=0;ci<NUM_COMP;ci++)
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1410 {
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1411 read_buhlmann_times(period); // 2 sec or 1 min period.
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1412
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1413 // N2
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1414 temp_tissue = (ppN2 - pres_tissue_N2[ci]) * var_N2_e;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1415 temp_tissue_safety();
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1416 pres_tissue_N2[ci] += temp_tissue;
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
1417
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1418 // He
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1419 temp_tissue = (ppHe - pres_tissue_He[ci]) * var_He_e;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1420 temp_tissue_safety();
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1421 pres_tissue_He[ci] += temp_tissue;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1422 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1423 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1424
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1425 //////////////////////////////////////////////////////////////////////////////
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1426 // calc_limit
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1427 //
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1428 // New in v.111 : separated from calc_tissue(), and depends on GF value.
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1429 //
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1430 static void calc_limit(void)
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1431 {
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1432 char_O_gtissue_no = 255;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1433 calc_lead_tissue_limit = 0.0;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1434
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1435 for(ci=0; ci<NUM_COMP;ci++)
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1436 {
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1437 overlay float N2 = pres_tissue_N2[ci];
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1438 overlay float He = pres_tissue_He[ci];
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1439 overlay float p = N2 + He;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1440
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1441 read_buhlmann_coefficients();
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1442 var_N2_a = (var_N2_a * N2 + var_He_a * He) / p;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1443 var_N2_b = (var_N2_b * N2 + var_He_b * He) / p;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1444
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1445 // Apply the Eric Baker's varying gradient factor correction.
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1446 // Note: the correction factor depends both on GF and b,
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1447 // Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1448 // so that can change who is the leading gas...
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1449 // Note: Also depends of the GF. So the calcul is different for
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1450 // GF_low, current GF, or GF_high...
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1451 // *BUT* calc_tissue() is used to compute bottom time,
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1452 // hence what would happend at surface,
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1453 // hence at GF_high.
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1454 if( char_I_deco_model != 0 )
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1455 p = ( p - var_N2_a * GF_high) * var_N2_b
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1456 / (GF_high + var_N2_b * (1.0 - GF_high));
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1457 else
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1458 p = (p - var_N2_a) * var_N2_b;
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1459 if( p < 0.0 ) p = 0.0;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1460
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1461 if( p > calc_lead_tissue_limit )
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1462 {
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1463 char_O_gtissue_no = ci;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1464 calc_lead_tissue_limit = p;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1465 }
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1466 }
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1467
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1468 assert( char_O_gtissue_no < NUM_COMP );
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1469 assert( 0.0 <= calc_lead_tissue_limit && calc_lead_tissue_limit <= 14.0);
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1470 }
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1471
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1472 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1473 // calc_nullzeit
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1474 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1475 // calculates the remaining bottom time
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1476 //
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1477 // NOTE: Erik Baker's closed formula works for Nitroxes. Trimix adds a second
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1478 // exponential term to the M-value equation, making it impossible to
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1479 // invert... So we have to make a fast-simu until we find a better way.
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1480 //
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1481 // Input: pres_respiration
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1482 // Output: char_O_nullzeit
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1483 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1484 static void calc_nullzeit(void)
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1485 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1486 //---- Compute ppN2 and ppHe ---------------------------------------------
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1487 temp_deco = pres_respiration;
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1488 sim_alveolar_presures();
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1489
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1490 char_O_nullzeit = 240;
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1491 for(ci=0; ci<NUM_COMP; ci++)
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1492 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1493 //---- Read A/B values and loading factor for N2 and He --------------
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1494 overlay float tN2 = pres_tissue_N2[ci];
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1495 overlay float tHe = pres_tissue_He[ci];
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1496 overlay float t = tN2 + tHe;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1497 overlay unsigned char ndl;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1498 overlay unsigned char period = 10;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1499
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1500 read_buhlmann_coefficients();
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1501 read_buhlmann_times(2); // Starts with a 10min period.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1502
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1503 //---- Simulate for that tissue --------------------------------------
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1504 // NOTE: No need to simulate for longuer than the already found NDL.
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1505 for(ndl=0; ndl<char_O_nullzeit;)
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1506 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1507 //---- Compute updated mix M-value at surface
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1508 overlay float a = (var_N2_a * tN2 + var_He_a * tHe) / t;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1509 overlay float b = (var_N2_b * tN2 + var_He_b * tHe) / t;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1510 overlay float M0 = (a + pres_surface/b);
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1511
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1512 //---- Add 10min/1min to N2/He tissues
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1513 overlay float dTN2 = (ppN2 - tN2) * var_N2_e;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1514 overlay float dTHe = (ppHe - tHe) * var_He_e;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1515
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1516 //---- Apply security margin when using the non-GF model
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1517 if( char_I_deco_model == 0 )
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1518 {
821
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1519 // NDL can be computed while ascending... SO we have
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1520 // to check wether we are saturating or desaturating.
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1521 if( dTN2 > 0.0 ) dTN2 *= float_saturation_multiplier;
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1522 else dTN2 *= float_desaturation_multiplier;
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1523
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1524 if( dTHe > 0.0 ) dTHe *= float_saturation_multiplier;
162058703100 FIX NDL prediction error with Buhlmann model: might be desaturating too fast.
heinrichsweikamp
parents: 815
diff changeset
1525 else dTHe *= float_saturation_multiplier;
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1526 }
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1527 else // Or GF-based model
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1528 M0 = GF_high * (M0 - pres_surface) + pres_surface;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1529
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1530 //---- Simulate off-gasing while going to surface
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1531 // TODO !
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1532 // dTN2 -= exp( ... ascent time ... ppN2...)
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1533 // dTHe -= exp( ... ascent time ... ppHe...)
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1534
534
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1535 //---- Ok now, and still ok to surface after 1 or 10 minutes ?
ba1fb2e23f46 BUGFIX NDL deco blocking stops during ascent when less than 10' TTS.
JeanDo
parents: 532
diff changeset
1536 if( (t <= M0) && (t + dTN2 + dTHe <= M0) )
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1537 {
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1538 tN2 += dTN2; // YES: apply gas loadings,
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1539 tHe += dTHe;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1540 t = tN2 + tHe;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1541 ndl += period; // increment NDL,
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1542 continue; // and loop.
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1543 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1544
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1545 //---- Should we retry with smaller steps ?
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1546 if( period == 10 )
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1547 {
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1548 read_buhlmann_times(1); // 1min coefs.
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1549 period = 1;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1550 continue;
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1551 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1552
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1553 //---- ELSE make a linear approx for the last minute
524
6fa776a44768 BUGFIX spurious random NDL>0 during deco dive.
JeanDo
parents: 523
diff changeset
1554 // Usefull to have a meaningfull rounding of NDL.
6fa776a44768 BUGFIX spurious random NDL>0 during deco dive.
JeanDo
parents: 523
diff changeset
1555 // But ONLY it positive (negativ casted to unsigned is bad).
6fa776a44768 BUGFIX spurious random NDL>0 during deco dive.
JeanDo
parents: 523
diff changeset
1556 if( M0 > t )
6fa776a44768 BUGFIX spurious random NDL>0 during deco dive.
JeanDo
parents: 523
diff changeset
1557 ndl += (unsigned char)(0.5f + (M0-t)/(dTN2+dTHe));
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1558 break;
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1559 }
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1560
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1561 // Keep the shortest NDL found
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1562 if( ndl < char_O_nullzeit )
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1563 char_O_nullzeit = ndl;
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1564 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1565 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1566
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1567 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1568 // calc_ascenttime
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1569 //
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1570 // Summup ascent from bottom to surface, at 1 bar/min, 1min for last 3 meters,
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1571 // and all stops.
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1572 //
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1573 // Result in int_O_ascenttime, or int_O_extra_ascenttime if in @+5min variant.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1574 static void calc_ascenttime(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1575 {
323
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1576 overlay unsigned char x;
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1577 overlay unsigned short sum;
168
494587193f5d Use 16bits for TTS sum.
JeanDo
parents: 167
diff changeset
1578
323
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1579 // + 0.7 to count 1 minute ascent time from 3 metre to surface
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1580 overlay float ascent = pres_respiration - pres_surface + 0.7;
323
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1581 if (ascent < 0.0)
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1582 ascent = 0.0;
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1583 sum = (unsigned short)(ascent + 0.99);
312
b7e4e74c0e17 New @5 variant: compute TTS if staying some extra time (CF58) at current depth.
JeanDo
parents: 310
diff changeset
1584
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1585 for(x=0; x<NUM_STOPS && internal_deco_depth[x]; x++)
323
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1586 sum += (unsigned short)internal_deco_time[x];
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1587
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1588 if( char_O_deco_status == 1 )
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1589 int_O_ascenttime = sum;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1590 else
323
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1591 int_O_extra_ascenttime = sum;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1592 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1593
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1594 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1595 // update_startvalues
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1596 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1597 // updated in v.102
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1598 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1599 void update_startvalues(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1600 {
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1601 overlay unsigned char x;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1602
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
1603 // Start ascent simulation with current tissue partial pressures.
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1604 for(x=0; x<NUM_COMP; x++)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1605 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1606 sim_pres_tissue_N2[x] = pres_tissue_N2[x];
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1607 sim_pres_tissue_He[x] = pres_tissue_He[x];
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1608 }
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1609
201
e5c484d59a91 Gas switch debugging...
JeanDo
parents: 200
diff changeset
1610 // No leading tissue (yet) for this ascent simulation.
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1611 sim_lead_tissue_limit = 0.0;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1612 sim_lead_tissue_no = 255;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1613 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1614
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1615 //////////////////////////////////////////////////////////////////////////////
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1616 // sim_tissue
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1617 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1618 // optimized in v.101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1619 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1620 // Function very simular to calc_tissue, but:
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1621 // + Use a 1min or 10min period.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1622 // + Do it on sim_pres_tissue, instead of pres_tissue.
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
1623 static void sim_tissue(PARAMETER unsigned char period)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1624 {
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1625 assert( 0.00 <= ppN2 && ppN2 < 11.2 ); // 80% N2 at 130m
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1626 assert( 0.00 <= ppHe && ppHe < 12.6 ); // 90% He at 130m
236
3dbeacf42e9e BUGFIX missing deko init in reboot code.
JeanDo
parents: 235
diff changeset
1627
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1628 for(ci=0; ci<NUM_COMP; ci++)
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1629 {
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1630 read_buhlmann_times(period); // 1 or 10 minute(s) interval
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
1631
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1632 // N2
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1633 temp_tissue = (ppN2 - sim_pres_tissue_N2[ci]) * var_N2_e;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1634 temp_tissue_safety();
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1635 sim_pres_tissue_N2[ci] += temp_tissue;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1636
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1637 // He
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1638 temp_tissue = (ppHe - sim_pres_tissue_He[ci]) * var_He_e;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1639 temp_tissue_safety();
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1640 sim_pres_tissue_He[ci] += temp_tissue;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1641 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1642 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1643
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1644 //////////////////////////////////////////////////////////////////////////////
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1645 // sim_limit()
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1646 //
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1647 // New in v.111
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1648 //
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1649 // Function separated from sim_tissue() to allow recomputing limit on
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1650 // different depth, because it depends on current gradient factor.
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1651 //
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1652 static void sim_limit(PARAMETER float GF_current)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1653 {
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1654 assert( 0.0 < GF_current && GF_current <= 1.0f);
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1655
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1656 sim_lead_tissue_limit = 0.0;
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1657 sim_lead_tissue_no = 0; // If no one is critic, keep first tissue.
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1658
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1659 for(ci=0; ci<NUM_COMP; ci++)
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1660 {
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1661 overlay float N2 = sim_pres_tissue_N2[ci];
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1662 overlay float He = sim_pres_tissue_He[ci];
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1663 overlay float p = N2 + He;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1664
258
abbf9a2c2c48 Small p2_deco optimizations:
JeanDo
parents: 257
diff changeset
1665 read_buhlmann_coefficients();
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1666 var_N2_a = (var_N2_a * N2 + var_He_a * He) / p;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
1667 var_N2_b = (var_N2_b * N2 + var_He_b * He) / p;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1668
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1669 // Apply the Eric Baker's varying gradient factor correction.
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1670 // Note: the correction factor depends both on GF and b,
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1671 // Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1672 // so that can change who is the leading gas...
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1673 // Note: Also depends of the GF_current...
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1674 if( char_I_deco_model != 0 )
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1675 p = ( p - var_N2_a * GF_current)
302
36cc8f0c1d73 Minor corrections in assert conditions.
JeanDo
parents: 293
diff changeset
1676 / (GF_current / var_N2_b + 1.0 - GF_current);
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1677 else
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1678 p = (p - var_N2_a) * var_N2_b;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1679
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1680 if( p > sim_lead_tissue_limit )
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1681 {
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1682 sim_lead_tissue_no = ci;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1683 sim_lead_tissue_limit = p;
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1684 }
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1685 } // for ci
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1686
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1687 assert( sim_lead_tissue_no < NUM_COMP );
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
1688 assert( 0.0 <= sim_lead_tissue_limit && sim_lead_tissue_limit <= 14.0 );
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1689 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1690
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1691 //////////////////////////////////////////////////////////////////////////////
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1692 // clear_deco_table
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1693 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1694 // unchanged in v.101
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1695 //
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1696 static void clear_deco_table(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1697 {
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1698 overlay unsigned char x;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1699
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1700 for(x=0; x<NUM_STOPS; ++x)
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1701 {
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1702 internal_deco_time [x] = 0;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1703 internal_deco_depth[x] = 0;
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1704 }
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1705 }
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1706
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1707 //////////////////////////////////////////////////////////////////////////////
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1708 // update_deco_table
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1709 //
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1710 // Add 1 min to current stop.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1711 //
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1712 // Inputs:
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1713 // temp_depth_limit = stop's depth, in meters.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1714 // In/Out:
275
4310ab395dbe Keep low_depth in float 32bits (w/o rounding) for a better stability.
JeanDo
parents: 270
diff changeset
1715 // internal_deco_depth[] : depth (in metres) of each stops.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1716 // internal_deco_time [] : time (in minutes) of each stops.
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1717 //
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1718 static unsigned char update_deco_table()
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1719 {
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1720 overlay unsigned char x;
247
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
1721 assert( temp_depth_limit < 128 ); // Can't be negativ (overflown).
ce869aad7440 BUGFIX Count gas switch delay down during ascent (bug bb26)
JeanDo
parents: 241
diff changeset
1722 assert( temp_depth_limit > 0 ); // No stop at surface...
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1723
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1724 for(x=0; x<NUM_STOPS; ++x)
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1725 {
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1726 // Make sure deco-stops are recorded in order:
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
1727 assert( !internal_deco_depth[x] || temp_depth_limit <= internal_deco_depth[x] );
212
275befc5f39d Debug GF model (bug #11 & #12).
JeanDo
parents: 203
diff changeset
1728
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
1729 if( internal_deco_depth[x]== temp_depth_limit )
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1730 {
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1731 // Do not overflow (max 255')
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1732 if( internal_deco_time[x] < 255 )
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1733 {
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1734 internal_deco_time[x]++;
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1735 return 1;
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1736 }
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1737 // But store extra in the next stop...
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1738 }
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1739
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1740 if( internal_deco_depth[x] == 0 )
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1741 {
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1742 internal_deco_depth[x] = temp_depth_limit;
279
8514588eb6a2 Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents: 278
diff changeset
1743
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1744 internal_deco_time[x] = 1;
757
50ed645c251d CHANGE: save gas used during deco
jDG
parents: 755
diff changeset
1745 internal_deco_gas[x] = sim_gas_last_used;
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1746 return 1;
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1747 }
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1748 }
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1749
192
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1750 // Can't store stops at more than 96m.
c8816e4bc724 GF Model
JeanDo
parents: 186
diff changeset
1751 // Or stops at less that 3m too.
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1752 // Just do nothing with that...
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
1753 return 0;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1754 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1755
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1756 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1757 // calc_gradient_factor
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1758 //
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
1759 // optimized in v.101 (var_N2_a)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1760 // new code in v.102
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1761 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1762 static void calc_gradient_factor(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1763 {
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1764 overlay float gf;
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1765 overlay float N2 = pres_tissue_N2[char_O_gtissue_no];
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1766 overlay float He = pres_tissue_He[char_O_gtissue_no];
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
1767
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1768 assert( char_O_gtissue_no < NUM_COMP );
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
1769 assert( 0.800 <= pres_respiration && pres_respiration < 14.0 );
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1770
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1771 // tissue > respiration (currently off-gasing)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1772 // GF = 0% when respiration == tissue, ie. bubbles are at equilibrium.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1773 // GF = 100% when respiration == limit.
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1774 temp_tissue = N2 + He;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1775 if( temp_tissue <= pres_respiration )
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1776 gf = 0.0;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1777 else
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1778 {
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1779 overlay float limit = calc_lead_tissue_limit;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1780 // NOTE: in GF model, calc_lead_tissue_limit include already the
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1781 // correction due to gradient factor. To compute the actual
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1782 // current GF, we need to (re-)compute the raw ambiant-pressure
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1783 // limit from the Bühlmann model.
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1784 if( char_I_deco_model != 0 )
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1785 {
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1786 ci = char_O_gtissue_no;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1787 read_buhlmann_coefficients();
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1788 var_N2_a = (var_N2_a * N2 + var_He_a * He) / temp_tissue;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1789 var_N2_b = (var_N2_b * N2 + var_He_b * He) / temp_tissue;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1790 limit = (temp_tissue - var_N2_a) * var_N2_b;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1791 }
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1792
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1793 gf = (temp_tissue - pres_respiration)
293
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1794 / (temp_tissue - limit)
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1795 * 100.0;
e0083f259552 BUGFIX char_O_gradient_factor calculation in GF model.
JeanDo
parents: 292
diff changeset
1796 if( gf > 254.5 ) gf = 255.0;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1797 if( gf < 0.0 ) gf = 0.0;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1798 }
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1799 char_O_gradient_factor = (unsigned char)(gf+0.5f);
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1800
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1801 if( char_I_deco_model != 0 ) // calculate relative gradient factor
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1802 {
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1803 overlay float rgf;
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1804
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1805 if( low_depth < 3 )
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1806 rgf = GF_high;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1807 else
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1808 {
317
1de9eee3837b Minor cleanup in depth convertion for EAD/END.
JeanDo
parents: 312
diff changeset
1809 overlay float temp1 = low_depth * METER_TO_BAR;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1810 overlay float temp2 = pres_respiration - pres_surface;
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1811
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1812 if (temp2 <= 0)
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1813 rgf = GF_high;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1814 else if (temp2 >= temp1)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1815 rgf = GF_low;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1816 else
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1817 rgf = GF_low + (temp1 - temp2)/temp1*GF_delta;
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1818 }
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1819
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1820 rgf = gf / rgf; // gf is already in percent
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1821 if( rgf < 0.0 ) rgf = 0.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1822 if( rgf > 254.5 ) rgf = 255.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1823 char_O_relative_gradient_GF = (unsigned char)(rgf+0.5f);
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1824 } // calc relative gradient factor
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1825 else
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1826 {
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
1827 char_O_relative_gradient_GF = char_O_gradient_factor;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1828 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1829 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1830
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1831 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1832 // deco_calc_desaturation_time
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1833 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1834 // FIXED N2_ratio
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1835 // unchanged in v.101
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
1836 // Inputs: int_I_pres_surface, ppWater, char_I_desaturation_multiplier
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1837 // Outputs: int_O_desaturation_time, char_O_tissue_saturation[0..31]
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1838 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1839 void deco_calc_desaturation_time(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1840 {
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
1841 RESET_C_STACK
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
1842
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1843 assert( 800 < int_I_pres_surface && int_I_pres_surface < 1100 );
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1844 assert( 0 < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1845
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
1846 N2_ratio = 0.7902; // FIXED sum as stated in bühlmann
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1847 pres_surface = int_I_pres_surface * 0.001;
310
b20fc8c4ac92 Fix EAD/END display (not mm, m with a trailling space)
JeanDo
parents: 307
diff changeset
1848 ppN2 = N2_ratio * (pres_surface - ppWater);
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1849 int_O_desaturation_time = 0;
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1850 float_desaturation_multiplier = char_I_desaturation_multiplier * (0.01 * SURFACE_DESAT_FACTOR);
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1851
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1852 for(ci=0; ci<NUM_COMP; ci++)
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1853 {
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1854 overlay unsigned short desat_time; // For a particular compartiment, in min.
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1855 overlay float temp1;
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1856 overlay float temp2;
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1857 overlay float temp3;
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1858 overlay float temp4;
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1859
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1860 read_buhlmann_ht();
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
1861
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1862 // saturation_time (for flight) and N2_saturation in multiples of halftime
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1863 // version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1864 // new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
260
bde83cac971f BUGFIX bb13 : deco_calc_desaturation_time() should reset TBLPTR Upper register.
JeanDo
parents: 258
diff changeset
1865 // changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and NoFly calculations
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1866 // N2
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1867 temp1 = 1.05 * ppN2 - pres_tissue_N2[ci];
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1868 temp2 = ppN2 - pres_tissue_N2[ci];
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1869 if (temp2 >= 0.0)
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1870 temp1 = 0.0;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1871 else
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1872 temp1 = temp1 / temp2;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1873
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1874 if( 0.0 < temp1 && temp1 < 1.0 )
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1875 {
260
bde83cac971f BUGFIX bb13 : deco_calc_desaturation_time() should reset TBLPTR Upper register.
JeanDo
parents: 258
diff changeset
1876 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
bde83cac971f BUGFIX bb13 : deco_calc_desaturation_time() should reset TBLPTR Upper register.
JeanDo
parents: 258
diff changeset
1877 // minus because log is negative.
bde83cac971f BUGFIX bb13 : deco_calc_desaturation_time() should reset TBLPTR Upper register.
JeanDo
parents: 258
diff changeset
1878 temp1 = log(1.0 - temp1) / -0.6931; // temp1 is the multiples of half times necessary.
509
103051b4d9c1 NEW NDL analytic model (Erik Baker's formula)
JeanDo
parents: 491
diff changeset
1879 temp2 = var_N2_ht * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 5 percent) , new in v.101: float_desaturation_multiplier
260
bde83cac971f BUGFIX bb13 : deco_calc_desaturation_time() should reset TBLPTR Upper register.
JeanDo
parents: 258
diff changeset
1880
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1881 }
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1882 else
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1883 {
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1884 temp1 = 0.0;
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1885 temp2 = 0.0;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1886 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1887
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1888 // He
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1889 temp3 = 0.1 - pres_tissue_He[ci];
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1890 if (temp3 >= 0.0)
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1891 temp3 = 0.0;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1892 else
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1893 temp3 = - temp3 / pres_tissue_He[ci];
601
d1719622111e Minor LLVM compatibility cleanups.
JeanDo <jd.gascuel@free.fr>
parents: 581
diff changeset
1894
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1895 if( 0.0 < temp3 && temp3 < 1.0 )
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1896 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1897 temp3 = log(1.0 - temp3) / -0.6931; // temp1 is the multiples of half times necessary.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1898 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1899 // minus because log is negative
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1900 temp4 = var_He_ht * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1901 }
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1902 else
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1903 {
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1904 temp3 = 0.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1905 temp4 = 0.0;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1906 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1907
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1908 // saturation_time (for flight)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1909 if (temp4 > temp2)
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1910 desat_time = (unsigned short)temp4;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1911 else
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
1912 desat_time = (unsigned short)temp2;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1913
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1914 if(desat_time > int_O_desaturation_time)
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1915 int_O_desaturation_time = desat_time;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1916
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1917 // N2 saturation in multiples of halftime for display purposes
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1918 temp2 = temp1 * 20.0; // 0 = 1/8, 120 = 0, 249 = 8
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1919 temp2 = temp2 + 80.0; // set center
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1920 if (temp2 < 0.0)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1921 temp2 = 0.0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1922 if (temp2 > 255.0)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1923 temp2 = 255.0;
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1924 char_O_tissue_N2_saturation[ci] = (char)temp2;
233
2cbaa01dac26 Hunting for NoFly (bug BB13)... not found yet...
JeanDo
parents: 226
diff changeset
1925
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1926 // He saturation in multiples of halftime for display purposes
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1927 temp4 = temp3 * 20.0; // 0 = 1/8, 120 = 0, 249 = 8
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1928 temp4 = temp4 + 80.0; // set center
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1929 if (temp4 < 0.0)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1930 temp4 = 0.0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1931 if (temp4 > 255.0)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1932 temp4 = 255.0;
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1933 char_O_tissue_He_saturation[ci] = (char)temp4;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1934 } // for
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1935 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1936
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1937 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1938 // calc_wo_deco_step_1_min
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1939 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1940 // FIXED N2 Ratio
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1941 // optimized in v.101 (...saturation_multiplier)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1942 // desaturation slowed down to 70,42%
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1943 //
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1944 static void calc_wo_deco_step_1_min(void)
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
1945 {
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1946 assert( 800 < int_I_pres_surface && int_I_pres_surface < 1100 );
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1947 assert( 800 < int_I_pres_respiration && int_I_pres_respiration < 1100 );
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1948 assert( 100 <= char_I_saturation_multiplier && char_I_saturation_multiplier < 200 );
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1949 assert( 0 < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 247
diff changeset
1950
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1951 N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1952 pres_respiration = pres_surface = int_I_pres_surface * 0.001;
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1953 ppN2 = N2_ratio * (pres_respiration - ppWater);
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
1954 ppHe = 0.0;
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1955 float_desaturation_multiplier = char_I_desaturation_multiplier * (0.01 * SURFACE_DESAT_FACTOR);
197
f15e804ff67f Gas switch delay
JeanDo
parents: 193
diff changeset
1956 float_saturation_multiplier = char_I_saturation_multiplier * 0.01;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1957
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
1958 calc_tissue(1); // update the pressure in the tissues N2/He in accordance with the new ambient pressure
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
1959
169
e26f49674956 Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents: 168
diff changeset
1960 clear_deco_table();
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
1961 char_O_deco_status = 3; // surface new in v.102 : stays in surface state.
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1962 char_O_nullzeit = 0;
168
494587193f5d Use 16bits for TTS sum.
JeanDo
parents: 167
diff changeset
1963 int_O_ascenttime = 0;
323
b7940978edc9 Fix "Future TTS" display customview.
JeanDo
parents: 322
diff changeset
1964 int_O_extra_ascenttime = 0;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1965 calc_gradient_factor();
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1966 }
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
1967
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
1968 //////////////////////////////////////////////////////////////////////////////
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1969 // calc_dive_interval
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1970 //
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1971 // Prepare tissue for delay before the next dive simulation.
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1972 //
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1973 // Inputs: char_I_dive_interval == delay before dive (in 10' steps).
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1974 // Outputs: pres_tissue_N2/He[], CNS_fraction
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1975 //
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1976 // Should be protected by deco_push_tissues_to_vault(),
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1977 // deco_pull_tissues_from_vault()
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1978 //
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1979 // desaturation slowed down to 70,42%.
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1980 //
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
1981 static void calc_dive_interval(void)
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1982 {
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1983 overlay unsigned char t;
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1984 overlay unsigned char backup_model;
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1985
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1986 //---- Initialize simulation parameters ----------------------------------
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1987 N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1988 pres_respiration = pres_surface = int_I_pres_surface * 0.001;
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1989 ppN2 = N2_ratio * (pres_respiration - ppWater);
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1990 ppHe = 0.0;
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1991 float_desaturation_multiplier = char_I_desaturation_multiplier * (0.01 * SURFACE_DESAT_FACTOR);
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1992 float_saturation_multiplier = char_I_saturation_multiplier * 0.01;
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1993
568
a4586e115ded Minor typo cleanup.
JeanDo
parents: 567
diff changeset
1994 // Make sure SURFACE_DESAT_FACTOR is applied:
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1995 backup_model = char_I_deco_model;
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1996 char_I_deco_model = 0;
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
1997
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1998 //---- Perform simulation ------------------------------------------------
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
1999 for(t=0; t<char_I_dive_interval; ++t)
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2000 {
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2001 calc_tissue(2); // period = 10min.
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2002 CNS_fraction = 0.92587471 * CNS_fraction; // Half-time = 90min: (1/2)^(1/9)
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2003 }
514
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2004 assert( 0.0 <= CNS_fraction && CNS_fraction <= 2.56 );
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2005 char_O_CNS_fraction = (unsigned char)(CNS_fraction * 100.0 + 0.5);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2006
491
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
2007 //---- Restore model -----------------------------------------------------
560764da0629 BUGFIX Surface desat factor missing for Interval planning in GF mode.
JeanDo
parents: 490
diff changeset
2008 char_I_deco_model = backup_model;
368
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2009 }
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2010
de3b267e1fd9 Adding calc_dive_interval()
JeanDo
parents: 353
diff changeset
2011 //////////////////////////////////////////////////////////////////////////////
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2012 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2013 ////////////////////////////////// deco_hash /////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2014 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2015 //////////////////////////////////////////////////////////////////////////////
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2016
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
2017 #ifndef CROSS_COMPILE
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2018 void deco_hash(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2019 {
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2020 overlay unsigned char md_i, md_j; // Loop index.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2021 overlay unsigned char md_t;
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2022 overlay unsigned char md_buffer[16];
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2023 overlay unsigned char md_temp;
203
2d9af08ed0ac BUGFIX Gas switch
JeanDo
parents: 201
diff changeset
2024 overlay unsigned short md_pointer;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2025
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
2026 RESET_C_STACK
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2027
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2028 // init
164
999abb01c78f + Change data allocation scheme
JeanDo
parents: 163
diff changeset
2029 for(md_i=0;md_i<16;md_i++)
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2030 {
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2031 md_state[md_i] = 0;
164
999abb01c78f + Change data allocation scheme
JeanDo
parents: 163
diff changeset
2032 char_O_hash[md_i] = 0;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2033 } // for md_i 16
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2034
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2035 _asm
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2036 movlw 0x01 // md_pi address.
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2037 movwf TBLPTRU,0
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2038 movlw 0x7E
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2039 movwf TBLPTRH,0
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2040 movlw 0x00
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2041 movwf TBLPTRL,0
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2042 _endasm;
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
2043 md_i = 0;
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
2044 do {
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2045 _asm
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2046 TBLRDPOSTINC
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2047 movff TABLAT,md_temp
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2048 _endasm
165
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
2049 md_pi_subst[md_i++] = md_temp;
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
2050 } while( md_i != 0 );
8b5b848db4cd + Clean Buhlmann tables addressing
JeanDo
parents: 164
diff changeset
2051
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2052 _asm
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2053 movlw 0x00
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2054 movwf TBLPTRU,0
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2055 movlw 0x00
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2056 movwf TBLPTRH,0
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2057 movlw 0x00
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2058 movwf TBLPTRL,0
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2059 _endasm
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2060
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2061 // cycle buffers
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2062 for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2063 {
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2064 md_t = 0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2065 for (md_i=0;md_i<16;md_i++)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2066 {
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2067 if(md_pointer == 9)
164
999abb01c78f + Change data allocation scheme
JeanDo
parents: 163
diff changeset
2068 md_temp = char_O_hash[md_i];
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2069 else
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2070 {
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2071 _asm
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2072 TBLRDPOSTINC
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2073 movff TABLAT,md_temp
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2074 _endasm
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2075 } // else
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2076
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2077 md_buffer[md_i] = md_temp;
186
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
2078 md_state[md_i+16] = md_temp;
57a654c199ae BUGFIX Gradient Factor algo.
JeanDo
parents: 185
diff changeset
2079 md_state[md_i+32] = (unsigned char)(md_temp ^ md_state[md_i]);
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2080 } // for md_i 16
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2081
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2082 for (md_i=0;md_i<18;md_i++)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2083 {
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2084 for (md_j=0;md_j<48;md_j++)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2085 {
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2086 md_state[md_j] ^= md_pi_subst[md_t];
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2087 md_t = md_state[md_j];
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2088 } // for md_j 48
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2089 md_t = (unsigned char)(md_t+1);
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2090 } // for md_i 18
164
999abb01c78f + Change data allocation scheme
JeanDo
parents: 163
diff changeset
2091 md_t = char_O_hash[15];
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2092
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2093 for (md_i=0;md_i<16;md_i++)
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2094 {
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2095 char_O_hash[md_i] ^= md_pi_subst[(md_buffer[md_i] ^ md_t)];
164
999abb01c78f + Change data allocation scheme
JeanDo
parents: 163
diff changeset
2096 md_t = char_O_hash[md_i];
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2097 } // for md_i 16
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2098 } // for md_pointer
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2099 } // void deco_hash(void)
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
2100 #endif
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2102 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2103 // deco_clear_CNS_fraction
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2104 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2105 // new in v.101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2106 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2107 void deco_clear_CNS_fraction(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2108 {
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
2109 RESET_C_STACK
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2110
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2111 CNS_fraction = 0.0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2112 char_O_CNS_fraction = 0;
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2113 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2114
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2115 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2116 // deco_calc_CNS_fraction
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2117 //
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2118 // Input: char_I_actual_ppO2 : Current condition (in decibars).
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2119 // char_I_step_is_1min : use 1min or 10min steps instead of 2sec.
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2120 // CNS_fraction : velue before period.
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2121 // Output: CNS_fraction, char_O_CNS_fraction
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2122 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2123 void deco_calc_CNS_fraction(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2124 {
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2125 overlay float time_factor = 1.0f;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2126 RESET_C_STACK
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2127
471
5546da23afab BUGFIX infinite loop when deco table full.
JeanDo
parents: 461
diff changeset
2128 assert( 0.0 <= CNS_fraction && CNS_fraction <= 2.56 );
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2129 assert( char_I_actual_ppO2 > 15 );
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2130
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2131 if( char_I_step_is_1min == 1 )
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2132 time_factor = 30.0f;
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2133 else if( char_I_step_is_1min == 2 )
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2134 time_factor = 300.0f;
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2135 //------------------------------------------------------------------------
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2136 // Don't increase CNS below 0.5 bar, but keep it steady.
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2137 if (char_I_actual_ppO2 < 50)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2138 ; // no changes
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2139 //------------------------------------------------------------------------
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2140 // Below (and including) 1.60 bar
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2141 else if (char_I_actual_ppO2 < 61)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2142 CNS_fraction += time_factor/(-533.07 * char_I_actual_ppO2 + 54000.0);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2143 else if (char_I_actual_ppO2 < 71)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2144 CNS_fraction += time_factor/(-444.22 * char_I_actual_ppO2 + 48600.0);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2145 else if (char_I_actual_ppO2 < 81)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2146 CNS_fraction += time_factor/(-355.38 * char_I_actual_ppO2 + 42300.0);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2147 else if (char_I_actual_ppO2 < 91)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2148 CNS_fraction += time_factor/(-266.53 * char_I_actual_ppO2 + 35100.0);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2149 else if (char_I_actual_ppO2 < 111)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2150 CNS_fraction += time_factor/(-177.69 * char_I_actual_ppO2 + 27000.0);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2151 else if (char_I_actual_ppO2 < 152)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2152 CNS_fraction += time_factor/( -88.84 * char_I_actual_ppO2 + 17100.0);
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2153 else if (char_I_actual_ppO2 < 167)
710
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2154 CNS_fraction += time_factor/(-222.11 * char_I_actual_ppO2 + 37350.0);
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2155 //------------------------------------------------------------------------
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2156 // Arieli et all.(2002): Modeling pulmonary and CNS O2 toxicity:
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2157 // J Appl Physiol 92: 248–256, 2002, doi:10.1152/japplphysiol.00434.2001
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2158 // Formula (A1) based on value for 1.55 and c=20
d36f060e8203 bugfix CNS compute: NOAA tables are in ATA, not bar.
jDG
parents: 698
diff changeset
2159 // example calculation: Sqrt((1.7/1.55)^20)*0.000404
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2160 else if (char_I_actual_ppO2 < 172)
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2161 CNS_fraction += time_factor*0.00102;
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2162 else if (char_I_actual_ppO2 < 177)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2163 CNS_fraction += time_factor*0.00136;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2164 else if (char_I_actual_ppO2 < 182)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2165 CNS_fraction += time_factor*0.00180;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2166 else if (char_I_actual_ppO2 < 187)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2167 CNS_fraction += time_factor*0.00237;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2168 else if (char_I_actual_ppO2 < 192)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2169 CNS_fraction += time_factor*0.00310;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2170 else if (char_I_actual_ppO2 < 198)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2171 CNS_fraction += time_factor*0.00401;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2172 else if (char_I_actual_ppO2 < 203)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2173 CNS_fraction += time_factor*0.00517;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2174 else if (char_I_actual_ppO2 < 233)
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2175 CNS_fraction += time_factor*0.0209;
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2176 else
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2177 CNS_fraction += time_factor*0.0482; // value for 2.5
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2178
514
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2179 if( CNS_fraction > 2.5 )
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2180 CNS_fraction = 2.55;
514
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2181 if( CNS_fraction < 0.0 )
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2182 CNS_fraction = 0.0;
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2183
443
4c7f304de294 BUGFIX: infinite loop for Decoplaner's CNS in CCR mode.
JeanDo
parents: 441
diff changeset
2184 char_O_CNS_fraction = (unsigned char)(100.0 * CNS_fraction + 0.5);
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2185 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2186
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2187 //////////////////////////////////////////////////////////////////////////////
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2188 // deco_calc_CNS_planning
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2189 //
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
2190 // Compute CNS during predicted ascent.
488
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2191 //
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2192 // Note: Needs a call to deco_push_tissues_to_vault(),
488
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2193 // deco_pull_tissues_from_vault() to avoid trashing everything...
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2194 //
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2195 // Input: CNS_fraction, char_O_deco_time[], char_O_deco_depth[]
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2196 // Output: CNS_fraction, char_O_CNS_fraction
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2197 //
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2198 void deco_calc_CNS_planning(void)
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2199 {
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2200 overlay unsigned char backup_gas_last_depth;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2201 overlay unsigned char backup_gas_last_used;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2202 overlay unsigned short backup_dive_mins;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2203 overlay unsigned char backup_actual_ppO2;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2204
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2205 RESET_C_STACK
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2206
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2207 // Backup state machine
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2208 backup_gas_last_depth = sim_gas_last_depth;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2209 backup_gas_last_used = sim_gas_last_used;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2210 backup_dive_mins = sim_dive_mins;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2211 backup_actual_ppO2 = char_I_actual_ppO2;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2212
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2213 // Uses 1min CNS period:
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2214 char_I_step_is_1min = 1;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2215
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2216 //---- Retrieve bottom Gas used, and set variables.
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2217 sim_gas_last_used = char_I_first_gas;
443
4c7f304de294 BUGFIX: infinite loop for Decoplaner's CNS in CCR mode.
JeanDo
parents: 441
diff changeset
2218 sim_gas_last_depth = 0; // Surface gas marker.
4c7f304de294 BUGFIX: infinite loop for Decoplaner's CNS in CCR mode.
JeanDo
parents: 441
diff changeset
2219 gas_switch_set(); // Sets initial calc_N2/He_ratio
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2220
743
8466932a2fcf .. minor cleanups
JeanDo
parents: 711
diff changeset
2221 //---- CCR mode : do the full CNS at once --------------------------------
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2222 if( char_I_const_ppO2 != 0 )
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2223 {
443
4c7f304de294 BUGFIX: infinite loop for Decoplaner's CNS in CCR mode.
JeanDo
parents: 441
diff changeset
2224 overlay unsigned short t; // Needs 16bits here !
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2225 char_I_actual_ppO2 = char_I_const_ppO2;
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2226 for(t=0; t<int_O_ascenttime; ++t)
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2227 deco_calc_CNS_fraction();
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2228 }
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2229 else //---- OC mode : have to follow all gas switches... -----------------
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2230 {
443
4c7f304de294 BUGFIX: infinite loop for Decoplaner's CNS in CCR mode.
JeanDo
parents: 441
diff changeset
2231 overlay unsigned char i = 0; // Decostop loop counter
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2232 overlay float actual_ppO2;
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2233 overlay unsigned char time, t;
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2234 overlay unsigned char deepest_first = (read_custom_function(54) == 0);
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2235
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2236 //---- Ascent to surface delay
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2237 // NOTE: count as if time is spent with bottom pressure,
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2238 // AND the bottom gas
541
6626a6c4eda3 BUGFIX decoplan: ppO2 for CNS is inspired, alveolar (ie. no ppWater correction).
JeanDo
parents: 540
diff changeset
2239 actual_ppO2 = (pres_surface + char_I_bottom_depth * METER_TO_BAR)
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2240 * (1.0 - calc_N2_ratio - calc_He_ratio);
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2241 if( actual_ppO2 < 0.0 ) actual_ppO2 = 0.0;
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2242 if( actual_ppO2 > 2.50 ) actual_ppO2 = 2.55;
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2243 char_I_actual_ppO2 = (unsigned char)(100.0 * actual_ppO2 + 0.5);
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2244
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2245 // Ascent time (rounded up):
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2246 time = (unsigned char)(0.1 * char_I_bottom_depth + 0.5);
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2247
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2248 for(t=0; t<time; ++t)
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2249 {
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2250 deco_calc_CNS_fraction();
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2251 sim_dive_mins++;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2252 }
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2253
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2254 //---- Do all further stops ------------------------------------------
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2255 for(i=0; i<NUM_STOPS; ++i)
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2256 {
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2257 overlay unsigned char stop_gas;
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2258
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2259 //---- Get next stop, possibly in reverse order ------------------
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2260 if( deepest_first )
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2261 {
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2262 time = char_O_deco_time[i];
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2263 temp_depth_limit = char_O_deco_depth[i];
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2264 stop_gas = char_O_deco_gas[i];
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2265 }
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2266 else
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2267 {
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2268 time = char_O_deco_time[(NUM_STOPS-1)-i];
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2269 temp_depth_limit = char_O_deco_depth[(NUM_STOPS-1)-i];
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2270 stop_gas = char_O_deco_gas[(NUM_STOPS-1)-i];
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2271 }
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2272 if( time == 0 ) continue;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2273
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2274 //---- Gas Switch ? ----------------------------------------------
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2275 if( stop_gas != sim_gas_last_used )
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2276 {
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2277 sim_gas_last_depth = deco_gas_change[stop_gas-1];
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2278 sim_gas_last_used = stop_gas;
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2279 gas_switch_set();
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2280 }
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2281
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2282 //---- Convert Depth and N2_ratio to ppO2 ------------------------
541
6626a6c4eda3 BUGFIX decoplan: ppO2 for CNS is inspired, alveolar (ie. no ppWater correction).
JeanDo
parents: 540
diff changeset
2283 actual_ppO2 = (pres_surface + temp_depth_limit * METER_TO_BAR)
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2284 * (1.0 - calc_N2_ratio - calc_He_ratio);
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2285 if( actual_ppO2 < 0.0 ) actual_ppO2 = 0.0;
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2286 if( actual_ppO2 > 2.50 ) actual_ppO2 = 2.55;
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2287 char_I_actual_ppO2 = (unsigned char)(100.0 * actual_ppO2 + 0.5);
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2288
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2289 //---- Apply the stop
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2290 for(t=0; t<time; ++t)
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2291 {
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2292 deco_calc_CNS_fraction();
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2293 sim_dive_mins++;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2294 }
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2295 }
488
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2296 }
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2297
563
7bec4cf28cc7 BUGFIX bad CNS in decoplan when CF54 set.
JeanDo
parents: 562
diff changeset
2298 //---- Back to normal mode... --------------------------------------------
488
7c48692dd17c BUGFIX Missed surface pressure for CNS in decoplan.
JeanDo
parents: 478
diff changeset
2299 char_I_step_is_1min = 0;
490
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2300 sim_gas_last_depth = backup_gas_last_depth;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2301 sim_gas_last_used = backup_gas_last_used;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2302 sim_dive_mins = backup_dive_mins;
68aa097f0062 BUGFIX (minor) deco_calc_CNS_planning should save ppO2 and gas switch history.
JeanDo
parents: 488
diff changeset
2303 char_I_actual_ppO2 = backup_actual_ppO2;
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2304 }
439
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2305
b9cf06de8aca BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents: 388
diff changeset
2306 //////////////////////////////////////////////////////////////////////////////
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2307 // deco_calc_CNS_decrease_15min
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2308 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2309 // new in v.101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2310 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2311 // calculates the half time of 90 minutes in 6 steps of 15 min
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
2312 // (Used in sleepmode, for low battery mode).
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2313 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2314 // Output: char_O_CNS_fraction
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2315 // Uses and Updates: CNS_fraction
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2316 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2317 void deco_calc_CNS_decrease_15min(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2318 {
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2319 RESET_C_STACK
514
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2320 assert( 0.0 <= CNS_fraction && CNS_fraction <= 2.56 );
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2321
126
ed275788a291 Re-indent c-code. Add .o file.
JeanDo
parents: 122
diff changeset
2322 CNS_fraction = 0.890899 * CNS_fraction;
514
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2323 char_O_CNS_fraction = (unsigned char)(CNS_fraction * 100.0 + 0.5);
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2324 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2325
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2326 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2327 // deco_calc_percentage
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2328 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2329 // new in v.101
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2330 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2331 // calculates int_I_temp * char_I_temp / 100
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2332 // output is int_I_temp
200
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
2333 //
0a3ca358c684 BUGFIX clear decotable at begin of simulator mode.
JeanDo
parents: 197
diff changeset
2334 // Used to compute NoFly remaining time.
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2335 //
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2336 void deco_calc_percentage(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2337 {
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
2338 RESET_C_STACK
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2339
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2340 assert( 60 <= char_I_temp && char_I_temp <= 100 );
564
4e9e95d108d2 Minor cleanups for MacOSX compatibility.
JeanDo
parents: 563
diff changeset
2341 assert( int_I_temp < 5760 ); // Less than 4 days = 96h...
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2342
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2343 int_I_temp = (unsigned short)(((float)int_I_temp * (float)char_I_temp) * 0.01 );
237
55178aa1f972 Hunting for NoFly bug...
JeanDo
parents: 236
diff changeset
2344
554
896b6346ccd2 CHANGE: Allow up to 96h desat when computing NoFly (OSTC Planner).
JeanDo
parents: 541
diff changeset
2345 assert( int_I_temp < 5760 ); // Less than 96h too...
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2346 }
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2347
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2348
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2349 //////////////////////////////////////////////////////////////////////////////
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2350 // deco_gas_volumes
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2351 //
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2352 // new in v.111
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2353 //
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2354 // calculates volumes for each gas.
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2355 //
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2356 // Input: char_I_bottom_depth, char_I_bottom_time for planned dive.
240
d995e220ddac BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents: 237
diff changeset
2357 // Gas list.
d995e220ddac BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents: 237
diff changeset
2358 // char_I_first_gas is the bottom gas.
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2359 // decoplan (char_O_deco_depth, char_O_deco_time).
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2360 // CF#54 == TRUE if shallowest stop first.
478
fd8266b511cc New SAC (CF56/CF57) in 5..50 l/min range (no more decimal).
JeanDo
parents: 471
diff changeset
2361 // CF#56 == bottom liters/minutes (5 .. 50) or bar/min.
fd8266b511cc New SAC (CF56/CF57) in 5..50 l/min range (no more decimal).
JeanDo
parents: 471
diff changeset
2362 // CF#57 == deco liters/minutes (5 .. 50) or bar/min.
224
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
2363 // Output: int_O_gas_volumes[0..4] in litters * 0.1
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2364 //
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2365 void deco_gas_volumes(void)
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2366 {
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
2367 overlay float volumes[NUM_GAS];
478
fd8266b511cc New SAC (CF56/CF57) in 5..50 l/min range (no more decimal).
JeanDo
parents: 471
diff changeset
2368 overlay float bottom_usage, deco_usage;
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2369 overlay unsigned char i, deepest_first;
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2370 overlay unsigned char gas, depth;
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2371 overlay unsigned char lastGasStop = 255;
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2372 RESET_C_STACK
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2373
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2374 //---- initialize with bottom consumption --------------------------------
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
2375 for(i=0; i<NUM_GAS; ++i) // Nothing yet...
240
d995e220ddac BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents: 237
diff changeset
2376 volumes[i] = 0.0;
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2377
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
2378 assert(1 <= char_I_first_gas && char_I_first_gas <= NUM_GAS);
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
2379 gas = char_I_first_gas - 1;
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
2380
478
fd8266b511cc New SAC (CF56/CF57) in 5..50 l/min range (no more decimal).
JeanDo
parents: 471
diff changeset
2381 bottom_usage = (float) read_custom_function(56);
580
32448d5ca734 BUGFIX: GasVolume should not count bottom time/depth in CCR mode.
JeanDo
parents: 579
diff changeset
2382 if( char_I_const_ppO2 == 0 && bottom_usage > 0.0 )
265
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2383 volumes[gas]
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2384 = (char_I_bottom_depth*0.1 + 1.0) // Use Psurface = 1.0 bar.
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2385 * char_I_bottom_time // in minutes.
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2386 * bottom_usage; // In liter/minutes.
579
fff1d38625f0 BUGFIX: GasVolumes should check for a gas switch before the first stop.
JeanDo
parents: 568
diff changeset
2387
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2388 //---- Ascent usage ------------------------------------------------------
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2389 deepest_first = read_custom_function(54) == 0;
511
2a6293641d51 NEW NDL NDL faster/more precise simu (but no closed formula for trimix).
JeanDo
parents: 509
diff changeset
2390 deco_usage = (float) read_custom_function(57); // In liter/minutes.
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2391
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2392 depth = char_I_bottom_depth;
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2393
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
2394 for(i=0; i<NUM_STOPS; ++i)
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2395 {
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2396 overlay unsigned char newDepth, time;
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2397
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2398 // Manage stops in reverse order (CF#54)
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2399 if( deepest_first )
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2400 {
241
f44274d8440a Model cleanups.
JeanDo
parents: 240
diff changeset
2401 time = char_O_deco_time[i];
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2402 if( time == 0 ) break; // End of table: done.
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2403
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2404 newDepth = char_O_deco_depth[i];
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2405 }
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2406 else
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2407 {
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2408 time = char_O_deco_time[31-i];
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2409 if( time == 0 ) continue; // not yet: still search table.
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2410
766
3b1af9891019 BUGFIX: CNS calculation in decoplan should track gas (no marked changes anymore)
JeanDo
parents: 757
diff changeset
2411 newDepth = char_O_deco_depth[31-i];
234
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2412 }
bb8940caebe1 BUGFIX Gas Usage when stops are shallowest first: CF54 (bug BB24).
JeanDo
parents: 233
diff changeset
2413
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2414 //---- Gas switch during or before this stop --------------------------
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2415 for(;;)
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2416 {
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2417 overlay unsigned char newGas = 0;
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2418 overlay unsigned char newStop = 0; // NO CHANGE yet
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2419 overlay unsigned char j;
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2420
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2421 for(j=0; j<NUM_GAS; ++j)
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2422 {
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2423 // Skip gas without changing depth:
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2424 if( ! char_I_deco_gas_change[j] )
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2425 continue;
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2426 // Select gas changed between [newDepth .. lastGasStop[
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2427 // Note that <= means changing gas at BEGINNING of this stop.
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2428 // Note that < means we cant use the same gas twice
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2429 if( newDepth <= char_I_deco_gas_change[j]
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2430 && char_I_deco_gas_change[j] < lastGasStop )
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2431 {
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2432 // Keep the DEEPEST gas in that range:
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2433 if( char_I_deco_gas_change[j] >= newStop )
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2434 {
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2435 newGas = j;
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2436 newStop = char_I_deco_gas_change[j];
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2437 }
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2438 }
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2439 }
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2440
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2441 // Did we find something ?
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2442 if( !newStop )
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2443 break;
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2444
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2445 //---- usage BEFORE gas switch (if any), at 10m/min :
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2446 if( deco_usage > 0.0 && depth > newStop )
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2447 // Plus usage during ascent to the next stop, at 10m/min.
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2448 volumes[gas] += ((depth+newStop)*0.05 + 1.0) // average depth --> bar.
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2449 * (depth-newStop)*0.1 // metre --> min
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2450 * deco_usage;
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2451
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2452 //---- Do gas switch:
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2453 gas = newGas;
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2454
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2455 lastGasStop = newStop; // Mark last used gas
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2456 if( newStop < depth ) // ascent to gas switch,
658
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2457 depth = newStop;
75dc320f4681 BUGFIX Gas volumes when many tanks and stops.
JeanDo <jd.gascuel@free.fr>
parents: 646
diff changeset
2458 }
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2459
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2460 //---- usage AFTER gas switch (if any), at 10m/min :
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2461 if( depth > newDepth )
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2462 volumes[gas] += ((depth+newDepth)*0.05 + 1.0) // average depth --> bar.
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2463 * (depth-newDepth)*0.1 // metre --> min
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2464 * deco_usage;
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2465
783
e57e8045527d FIX: Gas volume computation when using several travel mix.
JeanDo
parents: 782
diff changeset
2466 //---- Do stop:
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2467 depth = newDepth;
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2468
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2469 // Usage at stop:
478
fd8266b511cc New SAC (CF56/CF57) in 5..50 l/min range (no more decimal).
JeanDo
parents: 471
diff changeset
2470 if( deco_usage > 0.0 )
265
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2471 volumes[gas] += (depth*0.1 + 1.0) // depth --> bar.
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2472 * time // in minutes.
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2473 * deco_usage; // in xxx / min @ 1bar.
265
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2474 else
ab8ce7de2b46 BUGFIX zero gas rate (bug bb28).
JeanDo
parents: 264
diff changeset
2475 volumes[gas] = 65535.0;
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2476 }
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2477
646
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2478 // From last stop to surface
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2479 if( deco_usage > 0.0 )
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2480 volumes[gas] += (depth*0.05 + 1.0) // avg depth --> bar.
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2481 * depth * 0.1 // time to surface, in minutes.
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2482 * deco_usage; // in xxx / min @ 1bar.
06ffc99a405f BUGFIX GasVolume badly approximated when CF55=0
JeanDo
parents: 645
diff changeset
2483
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2484 //---- convert results for the ASM interface -----------------------------
338
b75564fb3d4b Optimizing access to B?hlmann coefficient (speed).
JeanDo
parents: 334
diff changeset
2485 for(i=0; i<NUM_GAS; ++i)
441
4826dd98514b NEW: Decoplanner OC volumes in liters (or bars), up to 65000.
JeanDo
parents: 439
diff changeset
2486 if( volumes[i] > 65534.0 )
224
49c90c5d9603 Gas usage
JeanDo
parents: 222
diff changeset
2487 int_O_gas_volumes[i] = 65535;
222
638f8e17bd51 Prototyping deco_gas_volumes() to compute gas consumption per tank with decoplanning.
JeanDo
parents: 218
diff changeset
2488 else
441
4826dd98514b NEW: Decoplanner OC volumes in liters (or bars), up to 65000.
JeanDo
parents: 439
diff changeset
2489 int_O_gas_volumes[i] = (unsigned short)(volumes[i] + 0.5);
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2490 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2491
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2492 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2493
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2494 void deco_push_tissues_to_vault(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2495 {
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2496 overlay unsigned char x;
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
2497 RESET_C_STACK
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2498
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2499 cns_vault = CNS_fraction;
697
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
2500 low_depth_vault = low_depth;
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
2501
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2502 for (x=0;x<NUM_COMP;x++)
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
2503 {
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2504 pres_tissue_N2_vault[x] = pres_tissue_N2[x];
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2505 pres_tissue_He_vault[x] = pres_tissue_He[x];
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
2506 }
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2507 }
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2508
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2509 void deco_pull_tissues_from_vault(void)
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2510 {
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2511 overlay unsigned char x;
122
3003a8040b78 FIX again reset C data stack and frame pointer when entering C code.
JeanDo
parents: 116
diff changeset
2512 RESET_C_STACK
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2513
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2514 for (x=0; x<NUM_COMP; x++)
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
2515 {
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2516 pres_tissue_N2[x] = pres_tissue_N2_vault[x];
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2517 pres_tissue_He[x] = pres_tissue_He_vault[x];
339
cb77d1fa4535 More cleanups in internal deco structures.
JeanDo
parents: 338
diff changeset
2518 }
711
f555590f1419 minor cleanups for CNS/NOAA bugfix.
JeanDo <jd.gascuel@free.fr>
parents: 710
diff changeset
2519
292
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2520 // Restore both CNS variable, too.
21a0f7393468 New CNS calculation in decoplan.
JeanDo
parents: 290
diff changeset
2521 CNS_fraction = cns_vault;
514
3e9904d3c040 BUGFIX spurious CNS bound check.
JeanDo
parents: 513
diff changeset
2522 char_O_CNS_fraction = (unsigned char)(CNS_fraction * 100.0 + 0.5);
697
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
2523
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
2524 // GF history too:
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
2525 low_depth = low_depth_vault;
53e41fa1e3f0 BUGFIX Vault low_depth too.
JeanDo
parents: 695
diff changeset
2526 locked_GF_step = GF_delta / low_depth;
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2527 }
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents:
diff changeset
2528
167
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2529 //////////////////////////////////////////////////////////////////////////////
cb055a7d75f3 + Use overlay local vars.
JeanDo
parents: 165
diff changeset
2530 //
184
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
2531 #ifndef CROSS_COMPILE
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
2532 void main() {}
016c45a0caaf Enable to compile p2_deco.c on other platforms.
JeanDo
parents: 171
diff changeset
2533 #endif