| | |
| | | pipe.Status = StatusType.DEFAULT; |
| | | pipe.StartNode = node1; |
| | | pipe.EndNode = node2; |
| | | pipe.Length = -1; |
| | | |
| | | |
| | | |
| | |
| | | }); |
| | | if (ConnectNode!=null) |
| | | { |
| | | list.Add(AddPipe(ConnectNode, net.StartPoint)); |
| | | var l = AddPipe(ConnectNode, net.StartPoint); |
| | | list.Add(l); |
| | | Hash_ID.Add(l.ID); |
| | | } |
| | | //BuildRelation(); |
| | | return list; |
| | |
| | | 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) |
| | | { |