From 0e0709e63ed50093d09fb88ac1ea4eb9b5a37afc Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期二, 13 八月 2024 02:08:46 +0800 Subject: [PATCH] Yw.EPAnet修改 --- Hydro/Yw.Hydro.Core/ParseHelper.cs | 355 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 308 insertions(+), 47 deletions(-) diff --git a/Hydro/Yw.Hydro.Core/ParseHelper.cs b/Hydro/Yw.Hydro.Core/ParseHelper.cs index 898975a..e482ceb 100644 --- a/Hydro/Yw.Hydro.Core/ParseHelper.cs +++ b/Hydro/Yw.Hydro.Core/ParseHelper.cs @@ -1,6 +1,4 @@ -锘縰sing Yw.EPAnet.Calcu; - -namespace Yw.Hydro +锘縩amespace Yw.Hydro { /// <summary> /// 瑙f瀽杈呭姪绫� @@ -10,28 +8,186 @@ /// <summary> /// /// </summary> - public static NetWork ToNetWork(Yw.Model.HydroModelInfo model) + public static Network ToNetwork(Yw.Model.HydroModelInfo model) { if (model == null) { return default; } - var netWork = new NetWork(); + var netWork = new Network(); + + #region 鑺傜偣 //杩炴帴鑺傜偣 if (model.Junctions != null && model.Junctions.Count > 0) { foreach (var junction in model.Junctions) { - var junctionModel = new JunctionModel(); - junctionModel.ID = junction.Code; + var junctionModel = new Junction(); + junctionModel.Id = junction.Code; junctionModel.Name = junction.Name; - junctionModel.Elev = (float)junction.Elev; - junctionModel.Demand = junction.Demand.HasValue ? (float)junction.Demand.Value : 0; - junctionModel.PatternID = junction.DemandPattern; - junctionModel.X = (float)junction.Position2d.X; - junctionModel.Y = (float)junction.Position2d.Y; - netWork.Nodes.Add(junctionModel); + junctionModel.Quality = junction.Quality; + junctionModel.Position = new Position2d(junction.Position2d.X, junction.Position2d.Y); + junctionModel.Elev = junction.Elev; + junctionModel.Demand = junction.Demand; + junctionModel.DemandPattern = junction.DemandPattern; + + netWork.Junctions.Add(junctionModel); + } + } + + //鍠峰槾 + if (model.Nozzles != null && model.Nozzles.Count > 0) + { + foreach (var nozzle in model.Nozzles) + { + var nozzleModel = new Nozzle(); + nozzleModel.Id = nozzle.Code; + nozzleModel.Name = nozzle.Name; + nozzleModel.Quality = nozzle.Quality; + nozzleModel.Position = new Position2d(nozzle.Position2d.X, nozzle.Position2d.Y); + nozzleModel.Elev = nozzle.Elev; + nozzleModel.Demand = nozzle.Demand; + nozzleModel.DemandPattern = nozzle.DemandPattern; + nozzleModel.Coefficient = nozzle.Coefficient; + netWork.Nozzles.Add(nozzleModel); + } + } + + //娑堢伀鏍� + if (model.Hydrants != null && model.Hydrants.Count > 0) + { + foreach (var hydrant in model.Hydrants) + { + var hydrantModel = new Hydrant(); + hydrantModel.Id = hydrant.Code; + hydrantModel.Name = hydrant.Name; + hydrantModel.Quality = hydrant.Quality; + hydrantModel.Position = new Position2d(hydrant.Position2d.X, hydrant.Position2d.Y); + hydrantModel.Elev = hydrant.Elev; + hydrantModel.Demand = hydrant.Demand; + hydrantModel.DemandPattern = hydrant.DemandPattern; + hydrantModel.Coefficient = hydrant.Coefficient; + netWork.Hydrants.Add(hydrantModel); + } + } + + //寮ご + if (model.Elbows != null && model.Elbows.Count > 0) + { + foreach (var elbow in model.Elbows) + { + var elbowModel = new Junction(); + elbowModel.Id = elbow.Code; + elbowModel.Name = elbow.Name; + elbowModel.Quality = elbow.Quality; + elbowModel.Position = new Position2d(elbow.Position2d.X, elbow.Position2d.Y); + elbowModel.Elev = elbow.Elev; + elbowModel.Demand = elbow.Demand; + elbowModel.DemandPattern = elbow.DemandPattern; + netWork.Junctions.Add(elbowModel); + } + } + + //涓夐�� + if (model.Threelinks != null && model.Threelinks.Count > 0) + { + foreach (var threelink in model.Threelinks) + { + var threelinkModel = new Junction(); + threelinkModel.Id = threelink.Code; + threelinkModel.Name = threelink.Name; + threelinkModel.Quality = threelink.Quality; + threelinkModel.Position = new Position2d(threelink.Position2d.X, threelink.Position2d.Y); + threelinkModel.Elev = threelink.Elev; + threelinkModel.Demand = threelink.Demand; + threelinkModel.DemandPattern = threelink.DemandPattern; + netWork.Junctions.Add(threelinkModel); + } + } + + //鍥涢�� + if (model.Fourlinks != null && model.Fourlinks.Count > 0) + { + foreach (var fourlink in model.Fourlinks) + { + var fourlinkModel = new Junction(); + fourlinkModel.Id = fourlink.Code; + fourlinkModel.Name = fourlink.Name; + fourlinkModel.Quality = fourlink.Quality; + fourlinkModel.Position = new Position2d(fourlink.Position2d.X, fourlink.Position2d.Y); + fourlinkModel.Elev = fourlink.Elev; + fourlinkModel.Demand = fourlink.Demand; + fourlinkModel.DemandPattern = fourlink.DemandPattern; + netWork.Junctions.Add(fourlinkModel); + } + } + + //姘磋〃 + if (model.Meters != null && model.Meters.Count > 0) + { + foreach (var meter in model.Meters) + { + var meterModel = new Meter(); + meterModel.Id = meter.Code; + meterModel.Name = meter.Name; + meterModel.Quality = meter.Quality; + meterModel.Position = new Position2d(meter.Position2d.X, meter.Position2d.Y); + meterModel.Elev = meter.Elev; + meterModel.Demand = meter.Demand; + meterModel.DemandPattern = meter.DemandPattern; + netWork.Meters.Add(meterModel); + } + } + + //娴侀噺璁� + if (model.Flowmeters != null && model.Flowmeters.Count > 0) + { + foreach (var flowmeter in model.Flowmeters) + { + var flowmeterModel = new Junction(); + flowmeterModel.Id = flowmeter.Code; + flowmeterModel.Name = flowmeter.Name; + flowmeterModel.Quality = flowmeter.Quality; + flowmeterModel.Position = new Position2d(flowmeter.Position2d.X, flowmeter.Position2d.Y); + flowmeterModel.Elev = flowmeter.Elev; + flowmeterModel.Demand = flowmeter.Demand; + flowmeterModel.DemandPattern = flowmeter.DemandPattern; + netWork.Junctions.Add(flowmeterModel); + } + } + + //鍘嬪姏琛� + if (model.Pressmeters != null && model.Pressmeters.Count > 0) + { + foreach (var pressmeter in model.Pressmeters) + { + var pressmeterModel = new Junction(); + pressmeterModel.Id = pressmeter.Code; + pressmeterModel.Name = pressmeter.Name; + pressmeterModel.Quality = pressmeter.Quality; + pressmeterModel.Position = new Position2d(pressmeter.Position2d.X, pressmeter.Position2d.Y); + pressmeterModel.Elev = pressmeter.Elev; + pressmeterModel.Demand = pressmeter.Demand; + pressmeterModel.DemandPattern = pressmeter.DemandPattern; + netWork.Junctions.Add(pressmeterModel); + } + } + + //闂峰ご + if (model.Bluntheads != null && model.Bluntheads.Count > 0) + { + foreach (var blunthead in model.Bluntheads) + { + var bluntheadModel = new Junction(); + bluntheadModel.Id = blunthead.Code; + bluntheadModel.Name = blunthead.Name; + bluntheadModel.Quality = blunthead.Quality; + bluntheadModel.Position = new Position2d(blunthead.Position2d.X, blunthead.Position2d.Y); + bluntheadModel.Elev = blunthead.Elev; + bluntheadModel.Demand = blunthead.Demand; + bluntheadModel.DemandPattern = blunthead.DemandPattern; + netWork.Junctions.Add(bluntheadModel); } } @@ -40,14 +196,15 @@ { foreach (var reservoir in model.Reservoirs) { - var reservoirModel = new ReservoisModel(); - reservoirModel.ID = reservoir.Code; + var reservoirModel = new Reservoir(); + reservoirModel.Id = reservoir.Code; reservoirModel.Name = reservoir.Name; - reservoirModel.Head = (float)reservoir.Head; - reservoirModel.PatternID = reservoir.HeadPattern; - reservoirModel.X = (float)reservoir.Position2d.X; - reservoirModel.Y = (float)reservoir.Position2d.Y; - netWork.Nodes.Add(reservoirModel); + reservoirModel.Quality = reservoir.Quality; + reservoirModel.Position = new Position2d(reservoir.Position2d.X, reservoir.Position2d.Y); + reservoirModel.PoolElev = reservoir.PoolElev.HasValue ? reservoir.PoolElev.Value : 0; + reservoirModel.Head = reservoir.Head; + reservoirModel.HeadPattern = reservoir.HeadPattern; + netWork.Reservoirs.Add(reservoirModel); } } @@ -56,37 +213,103 @@ { foreach (var tank in model.Tanks) { - var tankModel = new TankModel(); - tankModel.ID = tank.Code; + var tankModel = new Tank(); + tankModel.Id = tank.Code; tankModel.Name = tank.Name; - tankModel.Elev = (float)tank.PoolElev; - tankModel.InitLevel = (float)tank.InitLevel; - tankModel.MaxLevel = (float)tank.MaxLevel; - tankModel.MinLevel = (float)tank.MinLevel; - tankModel.MinVol = (float)tank.MinVol; + tankModel.Quality = tank.Quality; + tankModel.Position = new Position2d(tank.Position2d.X, tank.Position2d.Y); + tankModel.PoolElev = tank.PoolElev; + tankModel.InitLevel = tank.InitLevel; + tankModel.MaxLevel = tank.MaxLevel; + tankModel.MinLevel = tank.MinLevel; + tankModel.MinVol = tank.MinVol; tankModel.VolCurve = tank.VolCurve; - tankModel.Diameter = (float)tank.Diameter; - tankModel.X = (float)tank.Position2d.X; - tankModel.Y = (float)tank.Position2d.Y; - netWork.Nodes.Add(tankModel); + tankModel.Diameter = tank.Diameter; + netWork.Tanks.Add(tankModel); } } + + //姘寸 + if (model.Waterboxs != null && model.Waterboxs.Count > 0) + { + foreach (var waterbox in model.Waterboxs) + { + var waterboxModel = new Tank(); + waterboxModel.Id = waterbox.Code; + waterboxModel.Name = waterbox.Name; + waterboxModel.Quality = waterbox.Quality; + waterboxModel.Position = new Position2d(waterbox.Position2d.X, waterbox.Position2d.Y); + waterboxModel.PoolElev = waterbox.PoolElev; + waterboxModel.InitLevel = waterbox.InitLevel; + waterboxModel.MaxLevel = waterbox.MaxLevel; + waterboxModel.MinLevel = waterbox.MinLevel; + waterboxModel.MinVol = waterbox.MinVol; + waterboxModel.VolCurve = waterbox.VolCurve; + waterboxModel.Diameter = waterbox.Diameter; + netWork.Tanks.Add(waterboxModel); + } + } + + #endregion + + #region 绠℃ + + var allNodes = netWork.GetAllNodes(); //绠¢亾 if (model.Pipes != null && model.Pipes.Count > 0) { foreach (var pipe in model.Pipes) { - var pipeModel = new PipeModel(); - pipeModel.ID = pipe.Code; + var pipeModel = new Pipe(); + pipeModel.Id = pipe.Code; pipeModel.Name = pipe.Name; - pipeModel.Node1 = pipe.StartCode; - pipeModel.Node2 = pipe.EndCode; - pipeModel.Length = (float)pipe.Length; - pipeModel.Diameter = (float)pipe.Diameter; - pipeModel.Roughness = (float)pipe.Roughness; - pipeModel.MinorLoss = (float)pipe.MinorLoss; - netWork.Links.Add(pipeModel); + pipeModel.StartNode = allNodes.Find(x => x.Id == pipe.StartCode); + pipeModel.EndNode = allNodes.Find(x => x.Id == pipe.EndCode); + //杩樻湁涓�涓姸鎬� + pipeModel.Length = pipe.Length; + pipeModel.Diameter = pipe.Diameter; + pipeModel.Roughness = pipe.Roughness; + pipeModel.MinorLoss = pipe.MinorLoss; + netWork.Pipes.Add(pipeModel); + } + } + + //杩囨浮浠� + if (model.Translations != null && model.Translations.Count > 0) + { + foreach (var translation in model.Translations) + { + var translationModel = new Pipe(); + translationModel.Id = translation.Code; + translationModel.Name = translation.Name; + translationModel.StartNode = allNodes.Find(x => x.Id == translation.StartCode); + translationModel.EndNode = allNodes.Find(x => x.Id == translation.EndCode); + //杩樻湁涓�涓姸鎬� + translationModel.Length = translation.Length; + translationModel.Diameter = translation.Diameter; + translationModel.Roughness = translation.Roughness; + translationModel.MinorLoss = translation.MinorLoss; + netWork.Pipes.Add(translationModel); + } + } + + //鎹㈢儹鍣� + if (model.Exchangers != null && model.Exchangers.Count > 0) + { + foreach (var exchanger in model.Exchangers) + { + var exchangerModel = new Pipe(); + exchangerModel.Id = exchanger.Code; + exchangerModel.Name = exchanger.Name; + exchangerModel.StartNode = allNodes.Find(x => x.Id == exchanger.StartCode); + exchangerModel.EndNode = allNodes.Find(x => x.Id == exchanger.EndCode); + //杩樻湁涓�涓姸鎬� + exchangerModel.Length = exchanger.Length; + exchangerModel.Diameter = exchanger.Diameter; + exchangerModel.Roughness = exchanger.Roughness; + exchangerModel.MinorLoss = exchanger.MinorLoss; + netWork.Pipes.Add(exchangerModel); } } @@ -95,18 +318,56 @@ { foreach (var pump in model.Pumps) { - var pumpModel = new PumpModel(); - pumpModel.ID = pump.Code; + var pumpModel = new Pump(); + pumpModel.Id = pump.Code; pumpModel.Name = pump.Name; - pumpModel.Node1 = pump.StartCode; - pumpModel.Node2 = pump.EndCode; + pumpModel.StartNode = allNodes.Find(x => x.Id == pump.StartCode); + pumpModel.EndNode = allNodes.Find(x => x.Id == pump.EndCode); pumpModel.RatedPower = pump.RatedPower; - pumpModel.FlowCurveID = pump.CurveQH; - // pumpModel.Status = HyCore.ObjectEnum.StatusType.OPEN; - netWork.Links.Add(pumpModel); + pumpModel.CurveQH = pump.CurveQH; + pumpModel.SpeedRatio = pump.SpeedRatio; + pumpModel.SpeedRatioPattern = pump.SpeedRatioPattern; + pumpModel.Price = pump.Price; + pumpModel.PricePattern = pump.PricePattern; + pumpModel.CurveQE = pump.CurveQE; + netWork.Pumps.Add(pumpModel); } } + //闃�闂� + if (model.Valves != null && model.Valves.Count > 0) + { + foreach (var valve in model.Valves) + { + var valveModel = new Yw.EPAnet.Valve(); + valveModel.Id = valve.Code; + valveModel.Name = valve.Name; + valveModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode); + valveModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode); + valveModel.Diameter = valve.Diameter; + valveModel.MinorLoss = valve.MinorLoss; + valveModel.ValveType = valve.ValveType; + valveModel.ValveSetting = valve.ValveSetting; + + netWork.Valves.Add(valveModel); + } + } + + + #endregion + + #region 鑺傜偣杩炴帴 + + var allLinks = netWork.GetAllLinks(); + foreach (var node in allNodes) + { + var links = allLinks.Where(x => x.StartNode.Id == node.Id || x.EndNode.Id == node.Id).ToList(); + node.Links = links; + } + + #endregion + + return netWork; } -- Gitblit v1.9.3