Beispiel #1
0
        /// <summary>
        /// /
        /// </summary>
        /// <param name="R"> Радиус до эпицентра взрыва, метры</param>
        /// <param name="M"> Масса вещества, тонны</param>
        /// <param name="substance"> Тип вещества (из списка)</param>
        /// <param name="P"> Плотность населения, тыс.чел /км^2 </param>
        /// <param name="one"> Взрыв 1 цистерны или группы </param>
        /// 
        public static void Raschet2(double R, double M, double Q0, double P, bool one, Solve2 obj, double k1, double k2, double Vb, double Dm, bool secondPart)
        {
            //коэффициент условий хранения
            double z = 0.9;
            if (one) z = 0.5;
            obj.z = z;
            //масса в тротиловом эквиваленте
            double m = z * M; //т
            obj.m = m;
            //Радиус бризантного действия
            double r1 = 17.5 * Math.Pow(m, 1.0 / 3.0); //м
            obj.r1 = r1;
            //Радиус огненного шара
            double r2 = 1.7 * r1; //м
            obj.r2 = r2;
            //Избыточное давление в зоне огненного шара
            double dPf2 = 1300 * Math.Pow((r1 / r2), 3) + 50; //кПа
            obj.dPf2 = dPf2;
            //Избыточное давление в зоне действия воздушной ударной волны
            double K = 0.24 * R / r1;
            obj.K = K;
            double dPf3 = 0;
            if (K <= 2) {
                dPf3 = 700 / (3*Math.Sqrt(1+ 29.8*Math.Pow(K, 3)) - 1); //кПа
            }
            else {
                dPf3 = 22 / (K * Math.Sqrt(Math.Log(K)+0.158)); //кПа
            }
            obj.dPf3 = dPf3;
            //Угловой коэффициент взаимного расположения объекта и источника взрыва
            double F = r2 * r2 * r1 / Math.Sqrt(Math.Pow(r2 * r2 + R * R, 3));
            obj.F = F;
            //Прозрачность атмосферы
            double T = 1 - 0.058 * Math.Log(R);
            obj.T = T;

            //Интенсивность теплового излучения
            double I = Q0 * F * T; //кДж*м^2/c
            obj.I = I;
            //Продолжительность существования огненного шара
            double t = 0.45 * Math.Pow(m, 1.0 / 3.0);
            obj.t = t;
            //Удельная теплота пожара
            double U = I * t; //кДж/(м^2)
            obj.U = U;
            //Число погибших людей
            double Ncm = 3 * P * Math.Pow(m, 1.0 / 3.0);
            obj.Ncm = Ncm;

            //Вторая часть

            if (secondPart) {
                //Радиус зоны токсичного задымления
                double R3 = (3.42 / k1) * Math.Pow((m / (Vb * k2 * Dm)), 2.0/3.0);
                obj.R3 = R3;
            }
        }
Beispiel #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            Double.TryParse(textBox1.Text, out R);
            Double.TryParse(textBox2.Text, out M);
            Double.TryParse(textBox3.Text, out P);
            Double.TryParse(textBox4.Text, out Vb);

            Solve2 test = new Solve2();
            bool secondPart = false;
            if (checkBox1.Checked == true) {
                secondPart = true;
                //ПО ТАБЛИЦЕ НАХОДИМ Dm 4 табл приложение 1.
                //Токсодоза Вещества Смертельная
                Dm = 3.2;
            }

            string[][] need_data = (new WorkWithFile(data + "table_6.bjd")).writtingToArray(new char[]{'|', '|'});

            foreach(var arg in need_data)
            {
                if (arg[0] == substance)
                {
                    Double.TryParse(arg[1], out Q0);
                    break;
                }
            }

            Solve2.Raschet2(R, M, Q0, P, one, test, k1, k2, Vb, Dm, secondPart);
            //test.U
            need_data = (new WorkWithFile(tables + @"\Annex_1\table_2.bjd")).writtingToArray(new char[]{'|', '|'});
            string str1 = "";
            string str2 = "";
            foreach (var arg1 in need_data)
            {
                string[] mass1 = arg1[1].Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries);
                string[] mass2 = arg1[2].Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries);

                if(test.U >= Double.Parse(mass1[0]) && test.U <= Double.Parse(mass1[1]))
                {
                    str1 += arg1[0] + ": Обугливание \n";
                }
                else
                {
                    if(test.U >= Double.Parse(mass2[0]))
                    {
                        str1 += arg1[0] + ": Устойчивое горение\n";
                    }
                    else{
                        str1 += arg1[0] + ": Нет эффекта\n";
                    }
                }
            }

            need_data = (new WorkWithFile(tables + @"\Annex_1\table_3.bjd")).writtingToArray(new char[]{'|', '|'});
            foreach(var arg1 in need_data)
            {
                string[] mass;
                if (arg1[2].Contains(">"))
                {
                    mass = arg1[2].Split(new char[]{'>'}, StringSplitOptions.RemoveEmptyEntries);
                }
                else
                {
                    mass = arg1[2].Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries);
                }

                if( test.U >= Double.Parse(mass[0]) && test.U <= Double.Parse(mass[1]))
                {
                    str2 += arg1[3] + " " + arg1[4] + "\n";
                }
            }
            if(str2 == "") {str2 = "Пострадавших от ожогов нет";}
            MessageBox.Show(test.ToString() + "\n--------------------------------------------------------------------------------\n" + str1 +
                           "\n--------------------------------------------------------------------------------\n" + str2);

            if (secondPart) MessageBox.Show("Радиус зоны токсичного задымления, м: " + test.R3);
        }