public static void CreateData() { Oil Nafta = new Oil((float)0.02, 864, 15); List <int> X_Spots = new List <int>(Enumerable.Range(0, 121)).Where(x => x % 5 == 0).ToList(); List <int> Z_Spots = new List <int>(); for (int i = 0; i < X_Spots.Count; i++) { Z_Spots.Add(new Random().Next(35, 55)); } Pipeline PipeLine = new Pipeline(12, 120, (float)0.82, (float)0.01, (float)0.2, Z_Spots, X_Spots, 120, 40); Pump pump_1 = new Pump(30, (float)279.44688, (float)-0.008687, (float)0.0000011734, (float)-0.000000002225, (float)802.70329, (float)0.18507, (float)0.000183, (float)-0.000000039357); List <Pump> pumpsColl = new List <Pump> { pump_1, pump_1 }; Station station_1 = new Station("Main station", 120, 0, pumpsColl); Station station_2 = new Station("Intermediate station", 110, 60, pumpsColl); SectorFromNPStoNPS FirstSector = new SectorFromNPStoNPS(PipeLine, station_1); SectorFromNPStoNPS SecondSector = new SectorFromNPStoNPS(PipeLine, station_2); LinkedSectorFromNPStoNPS StationNodes = new LinkedSectorFromNPStoNPS(); StationNodes.AppendFirst(FirstSector); StationNodes.AppendFirst(SecondSector); MainAlgorithms.ConvergenceIteration(StationNodes, Nafta, PipeLine); }
static void IterationAlgorithm(SectorFromNPStoNPS NPS_Pipe, Oil oil, List <float> HeadArray, float speed, ref float EndPressure, out string TextMessage) { TextMessage = ""; float Q = (float)(PI * speed * Math.Pow(NPS_Pipe.pipe.Diameter, 2) / 4); var Reyn = NumberReynolds(Q, NPS_Pipe.pipe.Diameter, oil.Viscosity); var HydroRes = HydroResist(NPS_Pipe.pipe.Roughness, Reyn); var HydroLoss = HydroLosses(HydroRes, Q, NPS_Pipe.pipe.Diameter) * 1000; // multiplicate to get losses per one km! var Head = EndPressure; // Переменная напора. Изначально равна конечно напору в ТП. for (int i = NPS_Pipe.X_SpotsSector.Count - 1; i > 0; i--) { Head = Head + HydroLoss * (NPS_Pipe.X_SpotsSector[i] - NPS_Pipe.X_SpotsSector[i - 1]); // Если начало самотечного участка if (Head < NPS_Pipe.Z_SpotsSector[i - 1] + oil.VapourPressure) { Head = NPS_Pipe.Z_SpotsSector[i - 1] + oil.VapourPressure; } // Если напор выше максимального для трубы if (Head > NPS_Pipe.pipe.MaxPressure) { TextMessage += $"Pressure on {NPS_Pipe.X_SpotsSector[i]} kilometer is exceeded"; } HeadArray.Add(Head); } if (Head > NPS_Pipe.pipe.MaxPressure) { TextMessage += $"Outlet pressure on station {NPS_Pipe.station.Name} is exceeded\n"; } Head = Head - NPS_Pipe.station.GetDiffPresure(Q); if (Head < NPS_Pipe.station.HighSpot + NPS_Pipe.station.CavitaionPressure) { TextMessage += $"Inlet pressure on station {NPS_Pipe.station.Name} is too small"; } HeadArray.Append(Head); EndPressure = Head; }
public Node(SectorFromNPStoNPS data) { Data = data; }