| | |
| | | |
| | | #region 节点 |
| | | |
| | | //水库 |
| | | if (model.Reservoirs != null && model.Reservoirs.Count > 0) |
| | | { |
| | | foreach (var reservoir in model.Reservoirs) |
| | | { |
| | | var reservoirModel = new Reservoir(); |
| | | reservoirModel.Id = reservoir.Code; |
| | | reservoirModel.Name = reservoir.Name; |
| | | reservoirModel.Quality = 0; |
| | | reservoirModel.Position = new Position2d(reservoir.Position2d.X, reservoir.Position2d.Y); |
| | | reservoirModel.PoolElev = reservoir.PoolElev ?? 0; |
| | | reservoirModel.Head = reservoir.Head; |
| | | reservoirModel.HeadPattern = reservoir.HeadPattern; |
| | | netWork.Reservoirs.Add(reservoirModel); |
| | | } |
| | | } |
| | | |
| | | //水池 |
| | | if (model.Tanks != null && model.Tanks.Count > 0) |
| | | { |
| | | foreach (var tank in model.Tanks) |
| | | { |
| | | var tankModel = new Tank(); |
| | | tankModel.Id = tank.Code; |
| | | tankModel.Name = tank.Name; |
| | | tankModel.Quality = 0; |
| | | 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.Diameter = tank.DN; |
| | | tankModel.MinVol = tank.MinVol; |
| | | tankModel.VolCurve = tank.VolCurve; |
| | | //tankModel.Overflow = tank.OverFlow; |
| | | 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 = 0; |
| | | 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.Diameter = waterbox.DN; |
| | | waterboxModel.MinVol = waterbox.MinVol; |
| | | waterboxModel.VolCurve = waterbox.VolCurve; |
| | | //waterboxModel.Overflow = waterbox.OverFlow; |
| | | netWork.Tanks.Add(waterboxModel); |
| | | } |
| | | } |
| | | |
| | | //连接节点 |
| | | if (model.Junctions != null && model.Junctions.Count > 0) |
| | | { |
| | |
| | | hydrantModel.DemandPattern = hydrant.DemandPattern; |
| | | hydrantModel.Coefficient = hydrant.Coefficient; |
| | | netWork.Hydrants.Add(hydrantModel); |
| | | } |
| | | } |
| | | |
| | | //闷头 |
| | | 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 = 0; |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | //闷头 |
| | | 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 = 0; |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | //水库 |
| | | if (model.Reservoirs != null && model.Reservoirs.Count > 0) |
| | | { |
| | | foreach (var reservoir in model.Reservoirs) |
| | | { |
| | | var reservoirModel = new Reservoir(); |
| | | reservoirModel.Id = reservoir.Code; |
| | | reservoirModel.Name = reservoir.Name; |
| | | reservoirModel.Quality = 0; |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | //水池 |
| | | if (model.Tanks != null && model.Tanks.Count > 0) |
| | | { |
| | | foreach (var tank in model.Tanks) |
| | | { |
| | | var tankModel = new Tank(); |
| | | tankModel.Id = tank.Code; |
| | | tankModel.Name = tank.Name; |
| | | tankModel.Quality = 0; |
| | | 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 = tank.DN; |
| | | 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 = 0; |
| | | 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.DN; |
| | | waterboxModel.Overflow = waterbox.OverFlow; |
| | | netWork.Tanks.Add(waterboxModel); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 管段 |
| | |
| | | { |
| | | foreach (var exchanger in model.Exchangers) |
| | | { |
| | | var exchangerModel = new HeatExchanger(); |
| | | var exchangerModel = new Exchanger(); |
| | | exchangerModel.Id = exchanger.Code; |
| | | exchangerModel.Name = exchanger.Name; |
| | | exchangerModel.StartNode = allNodes.Find(x => x.Id == exchanger.StartCode); |
| | |
| | | exchangerModel.LinkStatus = exchanger.LinkStatus; |
| | | exchangerModel.Diameter = exchanger.Diameter; |
| | | exchangerModel.MinorLoss = exchanger.MinorLoss; |
| | | exchangerModel.FlowHeadLossCurve = "GPVDefault"; |
| | | netWork.HeatExchangers.Add(exchangerModel); |
| | | exchangerModel.CurveQL = "GPVDefault"; |
| | | netWork.Exchangers.Add(exchangerModel); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | foreach (var compressor in model.Compressors) |
| | | { |
| | | var compressModel = new AirCompressor(); |
| | | var compressModel = new Compressor(); |
| | | compressModel.Id = compressor.Code; |
| | | compressModel.Name = compressor.Name; |
| | | compressModel.StartNode = allNodes.Find(x => x.Id == compressor.StartCode); |
| | |
| | | compressModel.LinkStatus = compressor.LinkStatus; |
| | | compressModel.Diameter = compressor.Diameter; |
| | | compressModel.MinorLoss = compressor.MinorLoss; |
| | | compressModel.FlowHeadLossCurve = "GPVDefault"; |
| | | netWork.AirCompressors.Add(compressModel); |
| | | compressModel.CurveQL = "GPVDefault"; |
| | | netWork.Compressors.Add(compressModel); |
| | | } |
| | | } |
| | | |
| | |
| | | pumpModel.StartNode = allNodes.Find(x => x.Id == pump.StartCode); |
| | | pumpModel.EndNode = allNodes.Find(x => x.Id == pump.EndCode); |
| | | pumpModel.LinkStatus = pump.LinkStatus; |
| | | pumpModel.RatedPower = pump.RatedP; |
| | | pumpModel.RatedP = pump.RatedP; |
| | | pumpModel.CurveQH = pump.CurveQH; |
| | | if (string.IsNullOrEmpty(pumpModel.CurveQH)) |
| | | { |
| | |
| | | |
| | | pumpModel.SpeedRatio = pump.SpeedRatio; |
| | | pumpModel.SpeedRatioPattern = pump.SpeedRatioPattern; |
| | | pumpModel.CurveQE = pump.CurveQE; |
| | | netWork.Pumps.Add(pumpModel); |
| | | } |
| | | } |
| | |
| | | { |
| | | 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.LinkStatus = valve.LinkStatus; |
| | | valveModel.Diameter = valve.Diameter; |
| | | valveModel.MinorLoss = valve.MinorLoss; |
| | | valveModel.ValveType = valve.ValveType; |
| | | valveModel.ValveSetting = valve.ValveSetting; |
| | | //止回阀被当成管道处理 |
| | | if (valve.ValveType == Yw.Hydro.ValveType.CV) |
| | | { |
| | | var pipeModel = new Pipe(); |
| | | pipeModel.Id = valve.Code; |
| | | pipeModel.Name = valve.Name; |
| | | pipeModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode); |
| | | pipeModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode); |
| | | pipeModel.LinkStatus = valve.LinkStatus; |
| | | pipeModel.Length = 0.01; |
| | | pipeModel.Diameter = valve.Diameter; |
| | | pipeModel.Roughness = 110; |
| | | pipeModel.MinorLoss = valve.MinorLoss; |
| | | netWork.Pipes.Add(pipeModel); |
| | | } |
| | | else |
| | | { |
| | | 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.LinkStatus = valve.LinkStatus; |
| | | valveModel.Diameter = valve.Diameter; |
| | | valveModel.MinorLoss = valve.MinorLoss; |
| | | valveModel.ValveType = valve.ValveType; |
| | | valveModel.ValveSetting = valve.ValveSetting; |
| | | switch (valve.ValveType) |
| | | { |
| | | case Yw.Hydro.ValveType.PRV://减压阀 |
| | | { |
| | | |
| | | netWork.Valves.Add(valveModel); |
| | | } |
| | | break; |
| | | case Yw.Hydro.ValveType.PSV://稳压阀 |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case Yw.Hydro.ValveType.PBV://压力制动阀 |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case Yw.Hydro.ValveType.FCV://流量控制阀 |
| | | { |
| | | |
| | | } |
| | | break; |
| | | case Yw.Hydro.ValveType.TCV://节流控制阀 |
| | | { |
| | | valveModel.ValveSetting = "0"; |
| | | var curveol = model.Curves?.Find(x => x.Code == valve.ValveSetting); |
| | | if (curveol != null) |
| | | { |
| | | var point2dList = curveol.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); |
| | | var ptCurveOL = new Yw.Geometry.CubicSpline2d(point2dList); |
| | | valveModel.ValveSetting = ptCurveOL.GetPointY(valve.OpeningDegree).ToString(); |
| | | if (valve.OpeningDegree > 0) |
| | | { |
| | | valveModel.LinkStatus = Yw.EPAnet.ValveStatus.None; |
| | | } |
| | | } |
| | | |
| | | } |
| | | break; |
| | | case Yw.Hydro.ValveType.GPV://常规阀门 |
| | | { |
| | | |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | netWork.Valves.Add(valveModel); |
| | | } |
| | | } |
| | | } |
| | | |