comparison Discovery/Src/vpm.c @ 863:0c89c6fa949c Evo_2_23 tip

Bugfix empty line in deco plan (VPM only): Floating numbers were used to calculate the target slot for the time entry of a deco stop. The float rounding caused a time to be written into one line above the intended one. In the next step the misplaced time was overwritten by the next shallower stop. To fix the problem the index calculation has been corrected and in addition digit numbers have generally been added to floating point operations to make the floating operation more visible.
author Ideenmodellierer
date Tue, 02 Jul 2024 20:05:08 +0200
parents b7d93ff6b3b2
children
comparison
equal deleted inserted replaced
862:974648b5ccfe 863:0c89c6fa949c
163 floorf(*x + 0.5f) : -floorf(0.5f - *x) ); 163 floorf(*x + 0.5f) : -floorf(0.5f - *x) );
164 } 164 }
165 165
166 static float r_int(float *x) 166 static float r_int(float *x)
167 { 167 {
168 return( (*x>0) ? floorf(*x) : -floorf(- *x) ); 168 return( (*x>0.0) ? floorf(*x) : -floorf(- *x) );
169 } 169 }
170 170
171 /** private functions 171 /** private functions
172 */ 172 */
173 extern int radius_root_finder (float *a, float *b, float *c,float *low_bound, float *high_bound, float *ending_radius); 173 extern int radius_root_finder (float *a, float *b, float *c,float *low_bound, float *high_bound, float *ending_radius);
636 // buehlmann safety 636 // buehlmann safety
637 if(buehlmannSafety) 637 if(buehlmannSafety)
638 { 638 {
639 for (i = 0; i < 16; i++) 639 for (i = 0; i < 16; i++)
640 { 640 {
641 tissue_He_saturation[i] = helium_pressure[i] / 10; 641 tissue_He_saturation[i] = helium_pressure[i] / 10.0;
642 tissue_N2_saturation[i] = nitrogen_pressure[i] / 10; 642 tissue_N2_saturation[i] = nitrogen_pressure[i] / 10.0;
643 } 643 }
644 644
645 if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_stop_depth / 10.0f) + pInput->pressure_surface_bar)) 645 if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_stop_depth / 10.0f) + pInput->pressure_surface_bar))
646 { 646 {
647 647
648 vpm_violates_buehlmann = true; 648 vpm_violates_buehlmann = true;
649 do { 649 do {
650 deco_stop_depth += 3; 650 deco_stop_depth += 3.0;
651 } while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_stop_depth / 10.0f) + pInput->pressure_surface_bar)); 651 } while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_stop_depth / 10.0f) + pInput->pressure_surface_bar));
652 } 652 }
653 } 653 }
654 654
655 /* =============================================================================== */ 655 /* =============================================================================== */
702 702
703 /* =============================================================================== */ 703 /* =============================================================================== */
704 /* ASSIGN VARIABLES FOR ASCENT FROM START OF DECO ZONE TO FIRST STOP. SAVE */ 704 /* ASSIGN VARIABLES FOR ASCENT FROM START OF DECO ZONE TO FIRST STOP. SAVE */
705 /* FIRST STOP DEPTH FOR LATER USE WHEN COMPUTING THE FINAL ASCENT PROFILE */ 705 /* FIRST STOP DEPTH FOR LATER USE WHEN COMPUTING THE FINAL ASCENT PROFILE */
706 /* =============================================================================== */ 706 /* =============================================================================== */
707 deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10); 707 deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10.0);
708 starting_depth = depth_start_of_deco_calc; 708 starting_depth = depth_start_of_deco_calc;
709 first_stop_depth = deco_stop_depth; 709 first_stop_depth = deco_stop_depth;
710 first_stop = true; 710 first_stop = true;
711 } 711 }
712 /* =============================================================================== */ 712 /* =============================================================================== */
753 BOYLES_LAW_COMPENSATION(&fist_stop_depth2, &deco_stop_depth, &step_size); 753 BOYLES_LAW_COMPENSATION(&fist_stop_depth2, &deco_stop_depth, &step_size);
754 } 754 }
755 decompression_stop(&deco_stop_depth, &step_size, false); 755 decompression_stop(&deco_stop_depth, &step_size, false);
756 starting_depth = deco_stop_depth; 756 starting_depth = deco_stop_depth;
757 757
758 if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10) 758 if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10.0)
759 deco_stop_depth = 0; 759 deco_stop_depth = 0;
760 else 760 else
761 { 761 {
762 deco_stop_depth = deco_stop_depth - step_size; 762 deco_stop_depth = deco_stop_depth - step_size;
763 deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10); 763 deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10.0);
764 } 764 }
765 765
766 count++; 766 count++;
767 //if(count > 14) 767 //if(count > 14)
768 //return CALC_CRITICAL2; 768 //return CALC_CRITICAL2;
895 //static int dp_max; 895 //static int dp_max;
896 //static float surfacetime; 896 //static float surfacetime;
897 // _Bool first_stop = false; 897 // _Bool first_stop = false;
898 float tissue_He_saturation[16]; 898 float tissue_He_saturation[16];
899 float tissue_N2_saturation[16]; 899 float tissue_N2_saturation[16];
900 float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40); 900 float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40.0);
901 //max_first_stop_depth = fmaxf(first_stop_depth,max_first_stop_depth); 901 //max_first_stop_depth = fmaxf(first_stop_depth,max_first_stop_depth);
902 902
903 /** CALC DECO Ceiling ******************************************************************/ 903 /** CALC DECO Ceiling ******************************************************************/
904 /** Not when Future stops */ 904 /** Not when Future stops */
905 if(vpm_calc_what == DECOSTOPS) 905 if(vpm_calc_what == DECOSTOPS)
923 } 923 }
924 if(buehlmannSafety) 924 if(buehlmannSafety)
925 { 925 {
926 for (i = 0; i < 16; i++) 926 for (i = 0; i < 16; i++)
927 { 927 {
928 tissue_He_saturation[i] = helium_pressure[i] / 10; 928 tissue_He_saturation[i] = helium_pressure[i] / 10.0;
929 tissue_N2_saturation[i] = nitrogen_pressure[i] / 10; 929 tissue_N2_saturation[i] = nitrogen_pressure[i] / 10.0;
930 } 930 }
931 931
932 if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar)) 932 if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar))
933 { 933 {
934
935 vpm_violates_buehlmann = true; 934 vpm_violates_buehlmann = true;
936 do { 935 do {
937 deco_ceiling_depth += 0.1f; 936 deco_ceiling_depth += 0.1f;
938 } while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar)); 937 } while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar));
939 } 938 }
961 // buehlmann safety 960 // buehlmann safety
962 if(vpm_violates_buehlmann) 961 if(vpm_violates_buehlmann)
963 { 962 {
964 for (i = 0; i < 16; i++) 963 for (i = 0; i < 16; i++)
965 { 964 {
966 tissue_He_saturation[i] = helium_pressure[i] / 10; 965 tissue_He_saturation[i] = helium_pressure[i] / 10.0;
967 tissue_N2_saturation[i] = nitrogen_pressure[i] / 10; 966 tissue_N2_saturation[i] = nitrogen_pressure[i] / 10.0;
968 } 967 }
969 968
970 if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar)) 969 if(!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar))
971 { 970 {
972
973 vpm_violates_buehlmann = true; 971 vpm_violates_buehlmann = true;
974 do { 972 do {
975 deco_ceiling_depth += 0.1f; 973 deco_ceiling_depth += 0.1f;
976 } while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar)); 974 } while (!decom_tissue_test_tolerance(tissue_N2_saturation, tissue_He_saturation, vpm_buehlmann_safety_gradient, (deco_ceiling_depth / 10.0f) + pInput->pressure_surface_bar));
977 } 975 }
981 deco_ceiling_depth = first_stop_depth; 979 deco_ceiling_depth = first_stop_depth;
982 pDecoInfo->output_ceiling_meter = deco_ceiling_depth ; 980 pDecoInfo->output_ceiling_meter = deco_ceiling_depth ;
983 } 981 }
984 else 982 else
985 { 983 {
986 pDecoInfo->output_ceiling_meter = 0; 984 pDecoInfo->output_ceiling_meter = 0.0;
987 } 985 }
988 986
989 // fix hw 160627 987 // fix hw 160627
990 if(pDecoInfo->output_ceiling_meter < 0) 988 if(pDecoInfo->output_ceiling_meter < 0.0)
991 pDecoInfo->output_ceiling_meter = 0; 989 pDecoInfo->output_ceiling_meter = 0.0;
992 990
993 /*** End CALC ceiling ***************************************************/ 991 /*** End CALC ceiling ***************************************************/
994 } 992 }
995 993
996 994
1005 float stop_time; 1003 float stop_time;
1006 int count = 0; 1004 int count = 0;
1007 static int dp_max; 1005 static int dp_max;
1008 static float surfacetime; 1006 static float surfacetime;
1009 _Bool first_stop = false; 1007 _Bool first_stop = false;
1008
1009 short stop_time_seconds;
1010
1010 max_first_stop_depth = fmaxf(first_stop_depth,max_first_stop_depth); 1011 max_first_stop_depth = fmaxf(first_stop_depth,max_first_stop_depth);
1011 if(begin) 1012 if(begin)
1012 { 1013 {
1013 gCNS_VPM = 0; 1014 gCNS_VPM = 0;
1014 dp_max = 0; 1015 dp_max = 0;
1103 { 1104 {
1104 dp = 0; 1105 dp = 0;
1105 } 1106 }
1106 else 1107 else
1107 { 1108 {
1108 dp = 1 + (int)((deco_stop_depth - (pDiveSettings->input_second_to_last_stop_depth_bar * 10)) / step_size); 1109 dp = 1 + (unsigned short)((deco_stop_depth - (pDiveSettings->input_second_to_last_stop_depth_bar * 10.0)) / step_size);
1109 } 1110 }
1110 dp_max = (int)fmaxf(dp_max,dp); 1111
1112 //dp_max = (int)fmaxf(dp_max,dp);
1113 if(dp > dp_max)
1114 {
1115 dp_max = dp;
1116 }
1111 if(dp < DECOINFO_STRUCT_MAX_STOPS) 1117 if(dp < DECOINFO_STRUCT_MAX_STOPS)
1112 { 1118 {
1113 int stop_time_seconds = fminf((999 * 60), (int)(stop_time *60)); 1119 stop_time_seconds = (short) fminf((999.9 * 60.0), (stop_time *60.0));
1114 // 1120 //
1115 1121
1116 //if(vpm_calc_what == DECOSTOPS) 1122 //if(vpm_calc_what == DECOSTOPS)
1117 pDecoInfo->output_stop_length_seconds[dp] = (unsigned short)stop_time_seconds; 1123 pDecoInfo->output_stop_length_seconds[dp] = stop_time_seconds;
1118 //else 1124 //else
1119 //decostop_bailout[dp] = (unsigned short)stop_time_seconds; 1125 //decostop_bailout[dp] = (unsigned short)stop_time_seconds;
1120 } 1126 }
1121 } 1127 }
1122 1128
1131 /* 0.2 msw and minimum stop time set at 0.1 minute (6 seconds), a near */ 1137 /* 0.2 msw and minimum stop time set at 0.1 minute (6 seconds), a near */
1132 /* continuous decompression schedule can be computed. */ 1138 /* continuous decompression schedule can be computed. */
1133 /* =============================================================================== */ 1139 /* =============================================================================== */
1134 1140
1135 starting_depth = deco_stop_depth; 1141 starting_depth = deco_stop_depth;
1136 if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10) 1142 if(deco_stop_depth == (float)pDiveSettings->last_stop_depth_bar * 10.0)
1137 deco_stop_depth = 0; 1143 deco_stop_depth = 0.0;
1138 else 1144 else
1139 { 1145 {
1140 deco_stop_depth = deco_stop_depth - step_size; 1146 deco_stop_depth = deco_stop_depth - step_size;
1141 deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10); 1147 deco_stop_depth = fmaxf(deco_stop_depth,(float)pDiveSettings->last_stop_depth_bar * 10.0);
1142 } 1148 }
1143 1149
1144 last_run_time = run_time; 1150 last_run_time = run_time;
1145 count++; 1151 count++;
1146 //if(count > 14) 1152 //if(count > 14)
1156 pDecoInfo->output_stop_length_seconds[dp] = 0; 1162 pDecoInfo->output_stop_length_seconds[dp] = 0;
1157 //else 1163 //else
1158 //decostop_bailout[dp] = 0; 1164 //decostop_bailout[dp] = 0;
1159 } 1165 }
1160 } 1166 }
1161 pDecoInfo->output_time_to_surface_seconds = (int)(surfacetime * 60); 1167 pDecoInfo->output_time_to_surface_seconds = (int)(surfacetime * 60.0);
1162 pDecoInfo->output_ndl_seconds = 0; 1168 pDecoInfo->output_ndl_seconds = 0;
1163 1169
1164 vpm_calc_deco_ceiling(); 1170 vpm_calc_deco_ceiling();
1165 /* end of deco stop lo */ 1171 /* end of deco stop lo */
1166 return CALC_END; 1172 return CALC_END;
1407 /* =============================================================================== */ 1413 /* =============================================================================== */
1408 /* The tolerated ambient pressure cannot be less than zero absolute, i.e., */ 1414 /* The tolerated ambient pressure cannot be less than zero absolute, i.e., */
1409 /* the vacuum of outer space! */ 1415 /* the vacuum of outer space! */
1410 /* =============================================================================== */ 1416 /* =============================================================================== */
1411 1417
1412 if (tolerated_ambient_pressure < 0) { 1418 if (tolerated_ambient_pressure < 0.0) {
1413 tolerated_ambient_pressure = 0; 1419 tolerated_ambient_pressure = 0.0;
1414 } 1420 }
1415 compartment_deco_ceiling[i - 1] = 1421 compartment_deco_ceiling[i - 1] =
1416 tolerated_ambient_pressure - barometric_pressure; 1422 tolerated_ambient_pressure - barometric_pressure;
1417 } 1423 }
1418 1424
1736 //>>>>>>>>>>>>>>>>>>>> 1742 //>>>>>>>>>>>>>>>>>>>>
1737 //Test depth to calculate helium_rate and nitrogen_rate 1743 //Test depth to calculate helium_rate and nitrogen_rate
1738 ending_ambient_pressure = starting_ambient_pressure/2; 1744 ending_ambient_pressure = starting_ambient_pressure/2;
1739 1745
1740 time_test = (ending_ambient_pressure - starting_ambient_pressure) / *rate; 1746 time_test = (ending_ambient_pressure - starting_ambient_pressure) / *rate;
1741 decom_get_inert_gases(starting_ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin ); 1747 decom_get_inert_gases(starting_ambient_pressure / 10.0, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin );
1742 decom_get_inert_gases(ending_ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_end, &fraction_helium_end ); 1748 decom_get_inert_gases(ending_ambient_pressure / 10.0, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_end, &fraction_helium_end );
1743 initial_inspired_he_pressure = (starting_ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin; 1749 initial_inspired_he_pressure = (starting_ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin;
1744 initial_inspired_n2_pressure = (starting_ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_nitrogen_begin; 1750 initial_inspired_n2_pressure = (starting_ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_nitrogen_begin;
1745 helium_rate = ((ending_ambient_pressure - WATER_VAPOR_PRESSURE)* fraction_helium_end - initial_inspired_he_pressure)/time_test; 1751 helium_rate = ((ending_ambient_pressure - WATER_VAPOR_PRESSURE)* fraction_helium_end - initial_inspired_he_pressure)/time_test;
1746 nitrogen_rate = ((ending_ambient_pressure - WATER_VAPOR_PRESSURE)* fraction_nitrogen_end - initial_inspired_n2_pressure)/time_test; 1752 nitrogen_rate = ((ending_ambient_pressure - WATER_VAPOR_PRESSURE)* fraction_nitrogen_end - initial_inspired_n2_pressure)/time_test;
1747 //>>>>>>>>>>>>>>>>>>>>> 1753 //>>>>>>>>>>>>>>>>>>>>>
1768 /* somewhere between these endpoints. The algorithm checks to make sure that */ 1774 /* somewhere between these endpoints. The algorithm checks to make sure that */
1769 /* the solution lies in between these bounds by first computing the low bound */ 1775 /* the solution lies in between these bounds by first computing the low bound */
1770 /* and high bound function values. */ 1776 /* and high bound function values. */
1771 /* =============================================================================== */ 1777 /* =============================================================================== */
1772 1778
1773 low_bound = 0.; 1779 low_bound = 0.0;
1774 high_bound = starting_ambient_pressure / *rate * -1.0f; 1780 high_bound = starting_ambient_pressure / *rate * -1.0f;
1775 for (i = 1; i <= 16; ++i) 1781 for (i = 1; i <= 16; ++i)
1776 { 1782 {
1777 initial_helium_pressure = helium_pressure[i - 1]; 1783 initial_helium_pressure = helium_pressure[i - 1];
1778 initial_nitrogen_pressure = nitrogen_pressure[i - 1]; 1784 initial_nitrogen_pressure = nitrogen_pressure[i - 1];
1983 float fraction_nitrogen_begin; 1989 float fraction_nitrogen_begin;
1984 int count = 0; 1990 int count = 0;
1985 _Bool buehlmann_wait = false; 1991 _Bool buehlmann_wait = false;
1986 float tissue_He_saturation[16]; 1992 float tissue_He_saturation[16];
1987 float tissue_N2_saturation[16]; 1993 float tissue_N2_saturation[16];
1988 float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40); 1994 float vpm_buehlmann_safety_gradient = 1.0f - (((float)pDiveSettings->vpm_conservatism) / 40.0);
1989 /* loop */ 1995 /* loop */
1990 /* =============================================================================== */ 1996 /* =============================================================================== */
1991 /* CALCULATIONS */ 1997 /* CALCULATIONS */
1992 /* =============================================================================== */ 1998 /* =============================================================================== */
1993 1999
1995 // temp_segment_time = segment_time; 2001 // temp_segment_time = segment_time;
1996 ambient_pressure = *deco_stop_depth + barometric_pressure; 2002 ambient_pressure = *deco_stop_depth + barometric_pressure;
1997 //ending_ambient_pressure = ambient_pressure; 2003 //ending_ambient_pressure = ambient_pressure;
1998 decom_get_inert_gases(ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin ); 2004 decom_get_inert_gases(ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]), &fraction_nitrogen_begin, &fraction_helium_begin );
1999 2005
2000 if(*deco_stop_depth == (float)(pDiveSettings->last_stop_depth_bar * 10)) 2006 if(*deco_stop_depth == (pDiveSettings->last_stop_depth_bar * 10.0))
2001 next_stop = 0; 2007 next_stop = 0;
2002 else 2008 else
2003 { 2009 {
2004 next_stop = *deco_stop_depth - *step_size; 2010 next_stop = *deco_stop_depth - *step_size;
2005 next_stop = fmaxf(next_stop,(float)pDiveSettings->last_stop_depth_bar * 10); 2011 next_stop = fmaxf(next_stop, pDiveSettings->last_stop_depth_bar * 10.0);
2006 } 2012 }
2007 2013
2008 inspired_helium_pressure = 2014 inspired_helium_pressure =
2009 (ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin; 2015 (ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin;
2010 inspired_nitrogen_pressure = 2016 inspired_nitrogen_pressure =
2020 { 2026 {
2021 calc_deco_ceiling(&deco_ceiling_depth, false); //weg, weil auf jeden Fall schleife für safety und so konservativer 2027 calc_deco_ceiling(&deco_ceiling_depth, false); //weg, weil auf jeden Fall schleife für safety und so konservativer
2022 } 2028 }
2023 else 2029 else
2024 { 2030 {
2025 deco_ceiling_depth = next_stop + 1; 2031 deco_ceiling_depth = next_stop + 1.0;
2026 } 2032 }
2027 if(deco_ceiling_depth > next_stop) 2033 if(deco_ceiling_depth > next_stop)
2028 { 2034 {
2029 while (deco_ceiling_depth > next_stop) 2035 while (deco_ceiling_depth > next_stop)
2030 { 2036 {
2031 2037
2032 segment_time += 60; 2038 segment_time += 60.0;
2033 if(segment_time >= 999 ) 2039 if(segment_time >= 999.0 )
2034 { 2040 {
2035 segment_time = 999 ; 2041 segment_time = 999.0 ;
2036 run_time += segment_time; 2042 run_time += segment_time;
2037 return; 2043 return;
2038 } 2044 }
2039 //goto L700; 2045 //goto L700;
2040 initial_CNS = gCNS_VPM; 2046 initial_CNS = gCNS_VPM;
2048 } 2054 }
2049 calc_deco_ceiling(&deco_ceiling_depth, false); 2055 calc_deco_ceiling(&deco_ceiling_depth, false);
2050 } 2056 }
2051 if(deco_ceiling_depth < next_stop) 2057 if(deco_ceiling_depth < next_stop)
2052 { 2058 {
2053 segment_time -= 60; 2059 segment_time -= 60.0;
2054 gCNS_VPM = initial_CNS; 2060 gCNS_VPM = initial_CNS;
2055 for (i = 0; i < 16; i++) 2061 for (i = 0; i < 16; i++)
2056 { 2062 {
2057 helium_pressure[i] = initial_helium_pressure[i]; 2063 helium_pressure[i] = initial_helium_pressure[i];
2058 nitrogen_pressure[i] = initial_nitrogen_pressure[i]; 2064 nitrogen_pressure[i] = initial_nitrogen_pressure[i];
2088 } 2094 }
2089 buehlmann_wait = false; 2095 buehlmann_wait = false;
2090 while (buehlmann_wait || (deco_ceiling_depth > next_stop)) 2096 while (buehlmann_wait || (deco_ceiling_depth > next_stop))
2091 { 2097 {
2092 //time_counter = temp_segment_time; 2098 //time_counter = temp_segment_time;
2093 segment_time += 1; 2099 segment_time += 1.0;
2094 2100
2095 if(segment_time >= 999 ) 2101 if(segment_time >= 999.0 )
2096 { 2102 {
2097 segment_time = 999 ; 2103 segment_time = 999.0 ;
2098 run_time += segment_time; 2104 run_time += segment_time;
2099 return; 2105 return;
2100 } 2106 }
2101 //goto L700; 2107 //goto L700;
2102 initial_CNS = gCNS_VPM; 2108 initial_CNS = gCNS_VPM;
2103 decom_oxygen_calculate_cns_exposure(60*1,&pDiveSettings->decogaslist[mix_number],ambient_pressure/10,&gCNS_VPM); 2109 decom_oxygen_calculate_cns_exposure(60*1,&pDiveSettings->decogaslist[mix_number],ambient_pressure/10.0, &gCNS_VPM);
2104 for (i = 0; i < 16; i++) 2110 for (i = 0; i < 16; i++)
2105 { 2111 {
2106 initial_helium_pressure[i] = helium_pressure[i]; 2112 initial_helium_pressure[i] = helium_pressure[i];
2107 initial_nitrogen_pressure[i] = nitrogen_pressure[i]; 2113 initial_nitrogen_pressure[i] = nitrogen_pressure[i];
2108 helium_pressure[i] += (inspired_helium_pressure - helium_pressure[i]) * float_buehlmann_He_factor_expositon_one_minute[i]; 2114 helium_pressure[i] += (inspired_helium_pressure - helium_pressure[i]) * float_buehlmann_He_factor_expositon_one_minute[i];
2300 int count = 0; 2306 int count = 0;
2301 int status = CALC_END; 2307 int status = CALC_END;
2302 2308
2303 for(i = 0; i < 16;i++) 2309 for(i = 0; i < 16;i++)
2304 { 2310 {
2305 future_helium_pressure[i] = pInput->tissue_helium_bar[i] * 10;//tissue_He_saturation[st_dive][i] * 10; 2311 future_helium_pressure[i] = pInput->tissue_helium_bar[i] * 10.0;//tissue_He_saturation[st_dive][i] * 10;
2306 future_nitrogen_pressure[i] = pInput->tissue_nitrogen_bar[i] * 10; 2312 future_nitrogen_pressure[i] = pInput->tissue_nitrogen_bar[i] * 10.0;
2307 } 2313 }
2308 temp_segment_time = 0; 2314 temp_segment_time = 0;
2309 2315
2310 mix_number = 0; 2316 mix_number = 0;
2311 ambient_pressure = pInput->pressure_ambient_bar * 10; 2317 ambient_pressure = pInput->pressure_ambient_bar * 10.0;
2312 decom_get_inert_gases( ambient_pressure / 10, (&pDiveSettings->decogaslist[mix_number]) , &fraction_nitrogen_begin, &fraction_helium_begin ); 2318 decom_get_inert_gases( ambient_pressure / 10.0, (&pDiveSettings->decogaslist[mix_number]) , &fraction_nitrogen_begin, &fraction_helium_begin );
2313 inspired_helium_pressure =(ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin; 2319 inspired_helium_pressure =(ambient_pressure - WATER_VAPOR_PRESSURE) * fraction_helium_begin;
2314 inspired_nitrogen_pressure =(ambient_pressure - WATER_VAPOR_PRESSURE) *fraction_nitrogen_begin; 2320 inspired_nitrogen_pressure =(ambient_pressure - WATER_VAPOR_PRESSURE) *fraction_nitrogen_begin;
2315 2321
2316 status = CALC_END; 2322 status = CALC_END;
2317 while (status == CALC_END) 2323 while (status == CALC_END)