From 531e9b2ccf0ddf87f776f43378650d5169292bcb Mon Sep 17 00:00:00 2001 From: cloudflight <cloudflight@126.com> Date: 星期六, 08 六月 2024 11:59:03 +0800 Subject: [PATCH] 2024年6月8日 --- Hydraulic/Hydro.MapView/MapViewNetWork.cs | 94 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 94 insertions(+), 0 deletions(-) diff --git a/Hydraulic/Hydro.MapView/MapViewNetWork.cs b/Hydraulic/Hydro.MapView/MapViewNetWork.cs index d683d4e..0c75ef8 100644 --- a/Hydraulic/Hydro.MapView/MapViewNetWork.cs +++ b/Hydraulic/Hydro.MapView/MapViewNetWork.cs @@ -864,6 +864,100 @@ return list; //return new List<TimePoint>(); } + public List<TimePoint> WaterDistribution(string inpPath, string configPath = null,List<WaterEquivalentSettings> settings=null,double TotalDemand=-1) + { + if (TotalDemand<0) + { + throw new Exception("TotalDemand must be set"); + } + WdnmoParam wdnmoParam = new WdnmoParam(); + int setID = 1; + var SumCount= settings.Sum(s => s.Meters.Count); + wdnmoParam.VarSets_Import = new List<vSet>(); + wdnmoParam.Vars_Import = new List<variable>(); + settings.ForEach(s => + { + double CurrentDemand = TotalDemand * s.Meters.Count/ SumCount ; + vSet vset = new vSet(); + vset.ID = 10000 + setID; + vset.Name = $"姘磋〃闆嗗悎{setID}"; + + vset.IndicatorType = "鑺傜偣鑷敱鍘嬪姏"; + vset.ObjectType = "鑺傜偣"; + vset.defaultExpress = "鏈�灏忓��"; + vset.isNode = true; + vset.IDs = s.Meters; + wdnmoParam.VarSets_Import.Add(vset); + + variable var0= new variable(); + var0.ID = 20000 + setID; + var0.Name = $"姘撮噺鍒嗛厤鍙傛暟{setID}"; + var0.expressString = $"{CurrentDemand}:"; + s.waterEquivalents.WaterEquivalentCollection.ForEach(w => + { + for (int i=0;i< w.Count;i++) + { + //濡傛灉var0.expressString鏈�鍚庝竴涓瓧绗︽槸鍐掑彿锛岃鏄庢槸绗竴涓紝涓嶉渶瑕佸姞閫楀彿 + if (var0.expressString[var0.expressString.Length - 1] != ':') + { + var0.expressString += ","; + } + var0.expressString += $"{w.ID},{w.MinRatedFlow},{w.RatedFlow}"; + } + }); + var0.IndicatorType = "褰撻噺鍒嗛厤"; + var0.logicType = "姘撮噺鍒嗛厤"; + var0.modelObjectID = $"{{|{vset.Name}|}}"; + var0.expressType = "鍩哄噯鍊�(鐣岄潰)"; + wdnmoParam.Vars_Import.Add(var0); + + setID++; + + }); + + Nodes.ForEach(n => + { + //if (n is JunctionViewModel || n is MeterViewModel || n is NozzleViewModel) + { + wdnmoParam.ResultPoints.Add(new TimePoint { Key = $"Press_{n.ID}" }); + wdnmoParam.ResultPoints.Add(new TimePoint { Key = $"Head_{n.ID}" }); + wdnmoParam.ResultPoints.Add(new TimePoint { Key = $"Demand_{n.ID}" }); + } + }); + Links.ForEach(n => + { + //if (n is PipeViewModel || n is PumpViewModel || n is ValveViewModel) + { + wdnmoParam.ResultPoints.Add(new TimePoint { Key = $"Flow_{n.ID}" }); + wdnmoParam.ResultPoints.Add(new TimePoint { Key = $"Velocity_{n.ID}" }); + wdnmoParam.ResultPoints.Add(new TimePoint { Key = $"Headloss_{n.ID}" }); + + } + }); + + calc c = new calc(); + var list = c.GetCalcResult(inpPath, wdnmoParam, configPath); + if (list == null) return list; + list.Sort((a, b) => string.Compare(a.Key, b.Key)); + Nodes.Sort((a, b) => string.Compare(a.ID, b.ID)); + Links.Sort((a, b) => string.Compare(a.ID, b.ID)); + SetNodeFromWparam(this, list, "Press"); + SetNodeFromWparam(this, list, "Head"); + SetNodeFromWparam(this, list, "Demand"); + + SetLinkFromWparam(this, list, "Flow"); + SetLinkFromWparam(this, list, "Velocity"); + SetLinkFromWparam(this, list, "Headloss"); + + Links.ForEach(l => + { + l.EN_HEADLOSS_MINOR = (float)Math.Round(l.MinorLoss * Math.Pow(l.EN_VELOCITY, 2) / 2 / 9.8, 4); + l.EN_HEADLOSS_LINE = l.EN_HEADLOSS - l.EN_HEADLOSS_MINOR; + }); + this._isCalculated = true; + return list; + //return new List<TimePoint>(); + } public List<TimePoint> CalcByVal(WDNModelOptimizer wdo, Result val) { -- Gitblit v1.9.3