Mercurial > public > mk2
comparison code_part1/OSTC_code_c_part2/p2_deco.c @ 307:5bc3467fc421
New live EAD/END in divemode (both OCR and CCR).
| author | JeanDo |
|---|---|
| date | Sun, 01 May 2011 03:35:42 +0200 |
| parents | 36cc8f0c1d73 |
| children | b20fc8c4ac92 |
comparison
equal
deleted
inserted
replaced
| 306:ab1678d98e46 | 307:5bc3467fc421 |
|---|---|
| 1363 if( int_temp > 100 *(short)char_I_deco_gas_change[4] ) | 1363 if( int_temp > 100 *(short)char_I_deco_gas_change[4] ) |
| 1364 deco_gas_change[4] = char_I_deco_gas_change[4]; | 1364 deco_gas_change[4] = char_I_deco_gas_change[4]; |
| 1365 } | 1365 } |
| 1366 | 1366 |
| 1367 const_ppO2 = char_I_const_ppO2 * 0.01; | 1367 const_ppO2 = char_I_const_ppO2 * 0.01; |
| 1368 deco_ppO2_change = char_I_deco_ppO2_change / 99.95 | 1368 deco_ppO2_change = char_I_deco_ppO2_change / 99.85 |
| 1369 + pres_surface | 1369 + pres_surface |
| 1370 + float_deco_distance; | 1370 + float_deco_distance; |
| 1371 deco_ppO2 = char_I_deco_ppO2 * 0.01; | 1371 deco_ppO2 = char_I_deco_ppO2 * 0.01; |
| 1372 float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01; | 1372 float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01; |
| 1373 float_saturation_multiplier = char_I_saturation_multiplier * 0.01; | 1373 float_saturation_multiplier = char_I_saturation_multiplier * 0.01; |
| 1385 assert( 0.00 <= He_ratio && He_ratio <= 1.00 ); | 1385 assert( 0.00 <= He_ratio && He_ratio <= 1.00 ); |
| 1386 assert( (N2_ratio + He_ratio) <= 0.95 ); | 1386 assert( (N2_ratio + He_ratio) <= 0.95 ); |
| 1387 assert( 0.800 < pres_respiration && pres_respiration < 14.0 ); | 1387 assert( 0.800 < pres_respiration && pres_respiration < 14.0 ); |
| 1388 | 1388 |
| 1389 pres_diluent = pres_respiration; | 1389 pres_diluent = pres_respiration; |
| 1390 if (char_I_const_ppO2 != 0) // new in v.101 | 1390 if( char_I_const_ppO2 != 0 ) // new in v.101 |
| 1391 { | 1391 { |
| 1392 pres_diluent -= const_ppO2; // new in v.101 | 1392 pres_diluent -= const_ppO2; // new in v.101 |
| 1393 pres_diluent /= N2_ratio + He_ratio; // new in v.101 | 1393 pres_diluent /= N2_ratio + He_ratio; // new in v.101 |
| 1394 if( pres_diluent > pres_respiration ) // new in v.101 | 1394 if( pres_diluent > pres_respiration ) // new in v.101 |
| 1395 pres_diluent = pres_respiration; // new in v.101 | 1395 pres_diluent = pres_respiration; // new in v.101 |
| 1396 | |
| 1397 char_O_diluent = (char)(pres_diluent/pres_respiration*100.0 + 0.5); | |
| 1398 char_O_diluent_ppO2 = (char)(pres_diluent * (1.0 - N2_ratio - He_ratio) * 100.0 + 0.5); | |
| 1396 } | 1399 } |
| 1397 if (pres_diluent > ppWVapour) // new in v.101 | 1400 |
| 1401 if( pres_diluent > ppWVapour ) // new in v.101 | |
| 1398 { | 1402 { |
| 1403 overlay float EAD, END; | |
| 1404 | |
| 1399 ppN2 = N2_ratio * (pres_diluent - ppWVapour); // changed in v.101 | 1405 ppN2 = N2_ratio * (pres_diluent - ppWVapour); // changed in v.101 |
| 1400 ppHe = He_ratio * (pres_diluent - ppWVapour); // changed in v.101 | 1406 ppHe = He_ratio * (pres_diluent - ppWVapour); // changed in v.101 |
| 1401 char_O_diluent = (char)(pres_diluent/pres_respiration*100.0); | 1407 |
| 1408 // EAD : Equivalent Air Dive. Equivalent depth for the same N2 level | |
| 1409 // with plain air. | |
| 1410 // ppN2 = 79% * (P_EAD - ppWVapour) | |
| 1411 // EAD = (P_EAD - Psurface) * 10 | |
| 1412 // ie: EAD = (ppN2 / 0.7902 + ppWVapour -Psurface) * 10 | |
| 1413 EAD = (ppN2 / 0.7902 + ppWVapour - pres_surface) * 9.985; | |
| 1414 if( EAD < 0.0 || EAD > 245.5 ) EAD = 0.0; | |
| 1415 char_O_EAD = (char)(EAD + 0.5); | |
| 1416 | |
| 1417 // END : Equivalent Narcotic Dive. | |
| 1418 // Here we count O2 as narcotic too. Hence everything but helium (has a narcosis factor of | |
| 1419 // 0.23 btw). Hence the formula becomes: | |
| 1420 // END * BarPerMeter * (1.0 - 0.0) - ppWVapour + Psurface == Pambient - ppHe - ppWVapour | |
| 1421 // ie: END = (Pambient - ppHe - Psurface) * 9.985 | |
| 1422 // | |
| 1423 // Source cited: | |
| 1424 // The Physiology and Medicine of Diving by Peter Bennett and David Elliott, | |
| 1425 // 4th edition, 1993, W.B.Saunders Company Ltd, London. | |
| 1426 END = (pres_respiration - ppHe - pres_surface) * 9.985; | |
| 1427 if( END < 0.0 || END > 245.5 ) END = 0.0; | |
| 1428 char_O_END = (char)(END + 0.5); | |
| 1402 } | 1429 } |
| 1403 else // new in v.101 | 1430 else // new in v.101 |
| 1404 { | 1431 { |
| 1405 ppN2 = 0.0; // new in v.101 | 1432 ppN2 = 0.0; // new in v.101 |
| 1406 ppHe = 0.0; // new in v.101 | 1433 ppHe = 0.0; // new in v.101 |
| 1407 char_O_diluent = 0; | 1434 char_O_EAD = char_O_END = 0; |
| 1408 } | 1435 } |
| 1409 | 1436 |
| 1410 if(!char_I_step_is_1min) | 1437 if(!char_I_step_is_1min) |
| 1411 calc_tissue(0); | 1438 calc_tissue(0); |
| 1412 else | 1439 else |
