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; }
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]; } }