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