Shuxia Ning
2024-11-11 1d22616b251b366b9c238aa5f00fd630a95b8d81
Hydro/Yw.Hydro.Core/ParseHelper.cs
@@ -18,6 +18,67 @@
            #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)
            {
@@ -69,6 +130,23 @@
                    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);
                }
            }
@@ -174,83 +252,6 @@
                }
            }
            //闷头
            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 管段
@@ -300,7 +301,7 @@
            {
                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);
@@ -308,8 +309,8 @@
                    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);
                }
            }
@@ -318,7 +319,7 @@
            {
                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);
@@ -326,8 +327,8 @@
                    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);
                }
            }
@@ -342,7 +343,7 @@
                    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))
                    {
@@ -351,7 +352,6 @@
                    pumpModel.SpeedRatio = pump.SpeedRatio;
                    pumpModel.SpeedRatioPattern = pump.SpeedRatioPattern;
                    pumpModel.CurveQE = pump.CurveQE;
                    netWork.Pumps.Add(pumpModel);
                }
            }
@@ -361,18 +361,81 @@
            {
                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);
                    }
                }
            }