| | |
| | | /// <summary> |
| | | /// 局部水头损失 |
| | | /// </summary> |
| | | public double MinorHeadLoss |
| | | { |
| | | get |
| | | { |
| | | return StartHead - EndHead; |
| | | } |
| | | } |
| | | public double MinorHeadLoss { get; set; } = 0; |
| | | |
| | | |
| | | public double Distance { get; set; } |
| | | } |
| | |
| | | { |
| | | Id = node.Id, |
| | | StartHead = dictNodes[node.Id].Head, |
| | | Head = dictNodes[node.Id].Head, |
| | | EndHead = dictNodes[node.Id].Head, |
| | | Elev = elev, |
| | | Distance = length |
| | |
| | | length += p.Length; |
| | | |
| | | } |
| | | |
| | | nodeEnd.Distance = length; |
| | | chartNodes.Add(nodeEnd); |
| | | |
| | | for (int i=0;i<links.Count;i++) |
| | |
| | | //根据p.diameter和p.flow计算流速 |
| | | double velocity = dictLinks[ p.Id].Flow/ (Math.PI * Math.Pow(p.Diameter / 2, 2)); |
| | | //根据流速计算局部水头损失 |
| | | double minorloss1 = p.StartMinorloss* Math.Pow(velocity, 2) / 2 / 9.81; |
| | | double minorloss2 = p.EndMinorloss * Math.Pow(velocity, 2) / 2 / 9.81; |
| | | double minorloss1 = dictLinks[p.Id].StartMinorLoss; |
| | | double minorloss2 = dictLinks[p.Id].EndMinorLoss; |
| | | |
| | | |
| | | if (i < links.Count - 1) |
| | | { |
| | | |
| | | chartNodes[i].EndHead = chartNodes[i].Head - minorloss1; |
| | | chartNodes[i].MinorHeadLoss += minorloss1; |
| | | chartNodes[i + 1].StartHead = chartNodes[i+1].Head + minorloss2; |
| | | chartNodes[i + 1].MinorHeadLoss += minorloss2; |
| | | |
| | | chartNodes[i + 1].StartHead = chartNodes[i].EndHead - minorloss2; |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | chartNodes[i].EndHead = chartNodes[i].Head - minorloss1; |
| | | chartNodes[i].MinorHeadLoss += minorloss1; |
| | | } |
| | | |
| | | } |
| | |
| | | var dictLinks = calcuResult.LinkList.ToDictionary(p => p.Id); |
| | | var dictNodes = calcuResult.NodeList.ToDictionary(p => p.Id); |
| | | var visitedNodes = new HashSet<Node>(); |
| | | visitedNodes.Add(startJunc); |
| | | var nextLinks = startJunc.GetNextLinks(calcuResult.LinkList); |
| | | if (nextLinks.Count <= 0) return nextLinks; |
| | | if (nextLinks==null || nextLinks.Count <= 0) return nextLinks; |
| | | |
| | | var maxlink = nextLinks.OrderByDescending(o => Math.Abs(dictLinks[o.Id].Flow)).ToList()[0]; |
| | | return network.TraversePipeNetworkALL(maxlink, visitedNodes, 1, true); |
| | | var maxlink = nextLinks.OrderByDescending(o => Math.Abs(dictLinks[o.Id].Flow)).ToList()[0]; |
| | | return network.TraversePipeNetworkALL(maxlink, visitedNodes, 1, true, calcuResult); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="direction">遍历方向,0表示双向,1表示正向,-1表示反向</param> |
| | | /// <param name="isOnlyMax">是否只取最大流量的分支</param> |
| | | /// <returns></returns> |
| | | public static List<Link> TraversePipeNetworkALL(this Network network, Link startLink, HashSet<Node> visitedNodes = null, int direction = 0, bool isOnlyMax = false,CalcuResult calcuResult=null) |
| | | public static List<Link> TraversePipeNetworkALL(this Network network, Link startLink, HashSet<Node> visitedNodes, int direction = 0, bool isOnlyMax = false,CalcuResult calcuResult=null) |
| | | { |
| | | var dictLinks = calcuResult.LinkList.ToDictionary(p => p.Id); |
| | | var dictNodes = calcuResult.NodeList.ToDictionary(p => p.Id); |
| | |
| | | Queue<Link> queue = new Queue<Link>(); |
| | | |
| | | queue.Enqueue(startLink); |
| | | if (visitedNodes == null) |
| | | visitedNodes = new HashSet<Node>(); |
| | | |
| | | |
| | | while (queue.Count > 0) |
| | | { |