예제 #1
0
        private void CalcPipe(Pipe pipe)
        {
            if (pipe.StartNode.P == 0)
            {
                CalcNode(pipe.StartNode);
            }

            if (pipe.StartNode.P == 0) return;
            ZInterpolationData interpolatedParams = interpolator.FindValue((double) pipe.StartNode.T - 273,
                (double) pipe.StartNode.P*1e-5);
            double Gi = (double) pipe.StartNode.G;

            // 1. Расчёт скорости смеси
            double V = Gi/(interpolatedParams.Ro*Math.PI*Math.Pow(pipe.Data.inner_d, 2)/4);
            // 2. Расчёт числа Рейнольса
            double Re = V * pipe.Data.inner_d / interpolatedParams.V;
            // 3. Коэффициент теплоотдачи от газожидкостной смеси к трубе
            double alpha = 0.021 * interpolatedParams.C / pipe.Data.inner_d * Math.Pow(Re, 0.8) * Math.Pow(_fieldData.Pr, 0.43);
            // 4.	Условный коэффициент теплоотдачи от теплоизоляции в грунт
            double alpha_gr = 2 * _fieldData.LyambdaGr / (pipe.Data.outer_d + 2 * _fieldData.ThicknessIsol) / Math.Log(2 * _fieldData.Depth
                                                                                                              /pipe.Data.outer_d + Math.Sqrt(Math.Pow(2* _fieldData.Depth/pipe.Data.outer_d, 2) - 1));
            // 5.	Коэффициент теплопередачи (расчётный)
            double lyambdaOkr = 5; //коэффициент теплоотдачи откружающей среды
            double ThicknessSnow = 0;
            double K_tp = 1/(1/alpha + _fieldData.Thickness/_fieldData.LyambdaTr + _fieldData.ThicknessIsol
                             / _fieldData.LyambdaIs + ThicknessSnow / _fieldData.LyambdaSn + 1 / lyambdaOkr);

            // 6.	Температура на выходе
            double alpha_tr = 1.0*K_t*K_tp*Math.PI*pipe.Data.inner_d /Gi/_fieldData.Csm; //коэффициент Шухова

            double dt = (1 - Math.Exp(-alpha_tr * pipe.Data.length)) * ((double)pipe.StartNode.T - pipe.Data.temper);
            pipe.EndNode.T += (pipe.StartNode.T - dt)*pipe.StartNode.G;

            // 6а.	Давление на выходе
            double lyambda_0_tr = 0.067*Math.Pow(158/Re + 2*pipe.Data.roughness/pipe.Data.inner_d, 0.2);
            //double big_unkown_coef = lyambda_0_tr * pipe.Data.Length / pipe.Data.InnerD * interpolatedParams.Ro / Math.Pow(interpolatedParams.Ro * Math.PI * Math.Pow(pipe.Data.InnerD, 2) / 4, 2) / 2;
            double dp = lyambda_0_tr*pipe.Data.length/pipe.Data.inner_d*interpolatedParams.Ro*V*V/2;
            if (pipe.StartNode.P > dp) pipe.EndNode.P += (pipe.StartNode.P - K_p * dp) * pipe.StartNode.G;
            pipe.EndNode.G += pipe.StartNode.G;
        }
예제 #2
0
        private void CalcPipe(Pipe pipe)
        {
            if (pipe.StartNode.P_.Max(x => x) == 0)
            {
                CalcNode(pipe.StartNode);
            }

            if (pipe.EndNode.Name == "N5101")
            {
                string g = "";
            }

            //pipe.EndNode.P_ = new double[5];
            //pipe.EndNode.T_ = new double[5];
            //pipe.EndNode.G_ = new double[5];

            for (int m = 0; m < 5; m++)
            {
                if (pipe.StartNode.P_[m] == 0) return;

                ZInterpolationData interpolatedParams = interpolator.FindValue(pipe.StartNode.T_[m] - 273, pipe.StartNode.P_[m]*1e-5);
                double Gi = pipe.StartNode.G_[m];

                // 1. Расчёт скорости смеси
                double V = Gi/(interpolatedParams.Ro*Math.PI*Math.Pow(pipe.Data.inner_d, 2)/4);
                // 2. Расчёт числа Рейнольса
                double Re = V * pipe.Data.inner_d / interpolatedParams.V;
                // 3. Коэффициент теплоотдачи от газожидкостной смеси к трубе
                double alpha = 0.021 * interpolatedParams.C / pipe.Data.inner_d * Math.Pow(Re, 0.8) * Math.Pow(_fieldData.Pr, 0.43);
                // 4.	Условный коэффициент теплоотдачи от теплоизоляции в грунт
                double alpha_gr = 2*_fieldData.LyambdaGr/(pipe.Data.outer_d + 2*_fieldData.ThicknessIsol)/Math.Log(2*_fieldData.Depth
                                                                                                                  / pipe.Data.outer_d +
                                                                                                                  Math.Sqrt(
                                                                                                                      Math.Pow(
                                                                                                                          2*
                                                                                                                          _fieldData.Depth/
                                                                                                                          pipe.Data.outer_d,
                                                                                                                          2) - 1));
                // 5.	Коэффициент теплопередачи (расчётный)
                double lyambdaOkr = 5; //коэффициент теплоотдачи откружающей среды
                double K_tp = 1/(1/alpha + _fieldData.Thickness/_fieldData.LyambdaTr + _fieldData.ThicknessIsol
                                 /_fieldData.LyambdaIs + _fieldData.ThicknessSnow/_fieldData.LyambdaSn + 1/lyambdaOkr);

                // 6.	Температура на выходе
                double alpha_tr = 1.0 * K_t * K_tp * Math.PI * pipe.Data.inner_d / Gi / _fieldData.Csm; //коэффициент Шухова

                double dt = (1 - Math.Exp(-alpha_tr*pipe.Data.length))*((double) pipe.StartNode.T_[m] - pipe.Data.temper);
                pipe.EndNode.T_[m] += (pipe.StartNode.T_[m] - dt) * pipe.StartNode.G_[m];

                // 6а.	Давление на выходе
                double lyambda_0_tr = 0.067 * Math.Pow(158 / Re + 2 * pipe.Data.roughness / pipe.Data.inner_d, 0.2);
                double dp = lyambda_0_tr*pipe.Data.length/pipe.Data.inner_d*interpolatedParams.Ro*V*V/2;
                if (pipe.StartNode.P_[m] > dp) pipe.EndNode.P_[m] += (pipe.StartNode.P_[m] - K_p * dp) * pipe.StartNode.G_[m];
                pipe.EndNode.G_[m] += pipe.StartNode.G_[m];
            }
        }