private void CalcNode(Node node) { if (node.wells.Count != 0) { double TG = 0, PG = 0, G = 0; foreach (var well in node.wells) { if (well.Data.gas_output + well.Data.cond_output != 0) CalcShtutzer(well); TG += well.Data.inlet_T * (well.Gg + well.Gl); PG += well.Data.inlet_P * (well.Gg + well.Gl); G += (well.Gg + well.Gl); } if (G == 0) { node.T = 0; node.P = 0; } else { node.T = TG/G; node.P = PG/G; } node.G = G; } else { var _pipes = _graph.pipes.Where(x => x.EndNode == node).ToList(); if (_pipes.Count == 0) { node.P = 0; node.T = 0; node.G = 0; } else { foreach (var pipe in _pipes) { CalcPipe(pipe); } if (node.G != 0) { node.T /= node.G; node.P /= node.G; } else { node.T = 0; node.P = 0; } } } }
private void FindBindNodes(Node endNode) { var bindNodes = dbEntities.gather_points.Where(x => x.next_gather_point_id == endNode.Id).ToList().Select(x => new Node {Id = x.gather_point_id, Name = x.name, NextNode = endNode}).ToList(); if (bindNodes.Count > 0) { nodes.AddRange(bindNodes); foreach (var node in bindNodes) { FindBindNodes(node); } } }
private void GetNodes() { var sborNode = dbEntities.gather_points.Where(x => x.next_gather_point_id == null).ToList(); if (sborNode.Count() != 1) throw new Exception("Конечный пункт сбора либо не задан, либо не уникален."); nodes.Add(new Node {Id = sborNode.First().gather_point_id, Name = sborNode.First().name, NextNode = null, P = 0, G = 0, T = 0}); endNode = nodes[0]; FindBindNodes(endNode); AddWells(); }
private void CalcNode(Node node) { if (node.wells.Count != 0) { WellData firstWell = null; double TG = 0, PG = 0, G = 0; for (int i = 0; i < node.wells.Count(); i++) //выполняем расчет G для всех скважин { node.wells[i].G = new double[5]; node.wells[i].P = new double[5]; if (node.wells[i].Gkr == 0) continue; if (firstWell == null) //если скважина первая, то считаем для нее давление { firstWell = node.wells[i]; node.wells[i].P[0] = beta_kr * node.wells[i].Pkr; node.wells[i].G[0] = Math.Sqrt(node.wells[i].a[2]) * node.wells[i].Gkr; for (int m = 1; m < 5; m++) { node.wells[i].P[m] = (m * 0.25 * (1 - beta_kr) + beta_kr) * node.wells[i].Pkr; node.wells[i].G[m] = Math.Sqrt(node.wells[i].a[0] * Math.Pow(m * 0.25,2) + node.wells[i].a[1] * m * 0.25 + node.wells[i].a[2]) * node.wells[i].Gkr; } } else { for (int m = 0; m < 5; m++) { node.wells[i].G[m] = Math.Sqrt(node.wells[i].a[0] * Math.Pow(m * 0.25, 2) + node.wells[i].a[1] * m * 0.25 + node.wells[i].a[2]) * node.wells[i].Gkr; } } } //считаем в узле сбора node.P_ = new double[5]; node.G_ = new double[5]; node.T_ = new double[5]; if (firstWell == null) { node.T = 0; node.P = 0; return; } for (int i = 0; i < 5; i++) { double big_unkown_coef = 300; node.P_[i] = firstWell.P[i] - K_p * big_unkown_coef * firstWell.G[i]; for (int j = 0; j < node.wells.Count(); j++) TG += node.wells[j].Data.inlet_T*node.wells[j].G[i]; node.G_[i] = node.wells.Sum(x => x.G[i]); if (node.G_[i] == 0) node.T_[i] = 0; else node.T_[i] = TG/node.G_[i]; TG = 0; } node.a = GetParabolCoefs(new[] {node.P_[0], node.P_[1], node.P_[2]}, new[] {node.G_[0], node.G_[1], node.G_[2]}); node.b = GetParabolCoefs(new[] { node.P_[2], node.P_[3], node.P_[4] }, new[] { node.G_[2], node.G_[3], node.G_[4]}); //считаем давление в остальных скважинах for (int j = 1; j < node.wells.Count(); j++) //выполняем расчет для первой скважины { for (int m = 1; m < 5; m++) { double big_unkown_coef = 300; node.wells[j].P[m] = firstWell.P[m] + K_p * big_unkown_coef * firstWell.G[m]; } } } else { if (node.Name == "K336") { string f = ""; } var _pipes = _graph.pipes.Where(x => x.EndNode == node).ToList(); if (_pipes.Count == 0) { node.P_ = new double[5]; node.G_ = new double[5]; node.a = new double[5]; node.b = new double[5]; node.P = 0; node.T = 0; node.G = 0; } else { foreach (var pipe in _pipes) { CalcPipe(pipe); } for (int i = 0; i < 5; i++) { if (node.G_[i] == 0) { node.T_[i] = 0; node.P_[i] = 0; } else { node.T_[i] /= node.G_[i]; node.P_[i] /= node.G_[i]; } } if (node.P_.Max(x => x) == 0) { node.a = new double[5]; node.b = new double[5]; } else { node.a = GetParabolCoefs(new[] {node.P_[0], node.P_[1], node.P_[2]}, new[] {node.G_[0], node.G_[1], node.G_[2]}); node.b = GetParabolCoefs(new[] {node.P_[2], node.P_[3], node.P_[4]}, new[] {node.G_[2], node.G_[3], node.G_[4]}); } } } }