| | |
| | | |
| | | namespace Yw.EPAnet |
| | | { |
| | | /// <summary> |
| | | /// 管网计算拓展 |
| | | /// </summary> |
| | | public static class NetworkCalcuMinorExtensions |
| | | { |
| | | /// <summary> |
| | | /// 计算 |
| | | /// </summary> |
| | | public static CalcuResult CalcuMinorLoss(this Network network) |
| | | { |
| | | var minorResult = new CalcuResult(); |
| | | ///// <summary> |
| | | ///// 管网计算拓展 |
| | | ///// </summary> |
| | | //public static class NetworkCalcuMinorExtensions |
| | | //{ |
| | | // /// <summary> |
| | | // /// 计算 |
| | | // /// </summary> |
| | | // public static CalcuResult CalcuMinorLoss(this Network network) |
| | | // { |
| | | // var minorResult = new CalcuResult(); |
| | | |
| | | |
| | | //Null验证 |
| | | if (network == null) |
| | | { |
| | | minorResult.Succeed = false; |
| | | return minorResult; |
| | | } |
| | | // //Null验证 |
| | | // if (network == null) |
| | | // { |
| | | // minorResult.Succeed = false; |
| | | // return minorResult; |
| | | // } |
| | | |
| | | using (var calcResult = network.Calcu(false)) |
| | | { |
| | | network.GetAllLinks().ForEach(link => |
| | | { |
| | | if (calcResult.LinkDict.ContainsKey(link.Id)) |
| | | { |
| | | var resultLink = calcResult.LinkDict[link.Id]; |
| | | link.Flow = resultLink.Flow; |
| | | } |
| | | }); |
| | | } |
| | | // using (var calcResult = network.Calcu(false)) |
| | | // { |
| | | // network.GetAllLinks().ForEach(link => |
| | | // { |
| | | // if (calcResult.LinkDict.ContainsKey(link.Id)) |
| | | // { |
| | | // var resultLink = calcResult.LinkDict[link.Id]; |
| | | // link.Flow = resultLink.Flow; |
| | | // } |
| | | // }); |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | network.GetAllNodes().ForEach(n => |
| | | { |
| | | if (n is JunctionWT wt) |
| | | { |
| | | if (wt.PrevLinks.Count != 1 || wt.NextLinks.Count != 1) return; |
| | | var preLink = minorResult.GetLink(wt.PrevLinks[0].Id); |
| | | var nextLink = minorResult.GetLink(wt.NextLinks[0].Id); |
| | | preLink.EndNodeMinorlossCoff = wt.MinorLoss_WT / 2; |
| | | nextLink.StartNodeMinorlossCoff = wt.MinorLoss_WT / 2; |
| | | } |
| | | else if (n is Junction3T j3t) |
| | | { |
| | | if (j3t.PrevLinks.Count + j3t.NextLinks.Count != 3 || j3t.PrevLinks.Count==0 || j3t.NextLinks.Count==0) return; |
| | | List<ILink> branchlinks = new List<ILink>(); |
| | | ILink mainlink = null; |
| | | if (j3t.PrevLinks.Count==1)//一进,二出 |
| | | { |
| | | mainlink = j3t.PrevLinks[0]; |
| | | branchlinks= j3t.NextLinks; |
| | | } |
| | | else if(j3t.NextLinks.Count == 1)//一出,N进 |
| | | { |
| | | mainlink = j3t.NextLinks[0]; |
| | | branchlinks = j3t.PrevLinks; |
| | | } |
| | | if (branchlinks.Count==2) |
| | | { |
| | | var pipe0 = mainlink as Pipe; |
| | | var pipe1 = branchlinks[0] as Pipe; |
| | | var pipe2 = branchlinks[1] as Pipe; |
| | | string Id1 = pipe1.Diameter == pipe0.Diameter ? pipe1.Id : pipe2.Id; |
| | | string Id2 = pipe1.Diameter == pipe0.Diameter ? pipe2.Id : pipe1.Id; |
| | | var preLink = minorResult.GetLink(mainlink.Id); |
| | | var nextLink1 = minorResult.GetLink(Id1); |
| | | var nextLink2 = minorResult.GetLink(Id2); |
| | | nextLink1.StartNodeMinorlossCoff = j3t.MinorLoss_StraightThrough; |
| | | nextLink2.StartNodeMinorlossCoff = j3t.MinorLoss_BranchThrough; |
| | | } |
| | | else if (branchlinks.Count==1) |
| | | { |
| | | var pipe0 = mainlink as Pipe; |
| | | var pipe1 = branchlinks[0] as Pipe; |
| | | string Id1 = pipe1.Id; |
| | | var preLink = minorResult.GetLink(mainlink.Id); |
| | | var nextLink1 = minorResult.GetLink(Id1); |
| | | nextLink1.StartNodeMinorlossCoff = pipe1.Diameter == pipe0.Diameter? j3t.MinorLoss_StraightThrough: j3t.MinorLoss_BranchThrough; |
| | | } |
| | | // network.GetAllNodes().ForEach(n => |
| | | // { |
| | | // if (n is JunctionWT wt) |
| | | // { |
| | | // if (wt.PrevLinks.Count != 1 || wt.NextLinks.Count != 1) return; |
| | | // var preLink = minorResult.GetLink(wt.PrevLinks[0].Id); |
| | | // var nextLink = minorResult.GetLink(wt.NextLinks[0].Id); |
| | | // preLink.EndNodeMinorlossCoff = wt.MinorLoss_WT / 2; |
| | | // nextLink.StartNodeMinorlossCoff = wt.MinorLoss_WT / 2; |
| | | // } |
| | | // else if (n is Junction3T j3t) |
| | | // { |
| | | // if (j3t.PrevLinks.Count + j3t.NextLinks.Count != 3 || j3t.PrevLinks.Count==0 || j3t.NextLinks.Count==0) return; |
| | | // List<ILink> branchlinks = new List<ILink>(); |
| | | // ILink mainlink = null; |
| | | // if (j3t.PrevLinks.Count==1)//一进,二出 |
| | | // { |
| | | // mainlink = j3t.PrevLinks[0]; |
| | | // branchlinks= j3t.NextLinks; |
| | | // } |
| | | // else if(j3t.NextLinks.Count == 1)//一出,N进 |
| | | // { |
| | | // mainlink = j3t.NextLinks[0]; |
| | | // branchlinks = j3t.PrevLinks; |
| | | // } |
| | | // if (branchlinks.Count==2) |
| | | // { |
| | | // var pipe0 = mainlink as Pipe; |
| | | // var pipe1 = branchlinks[0] as Pipe; |
| | | // var pipe2 = branchlinks[1] as Pipe; |
| | | // string Id1 = pipe1.Diameter == pipe0.Diameter ? pipe1.Id : pipe2.Id; |
| | | // string Id2 = pipe1.Diameter == pipe0.Diameter ? pipe2.Id : pipe1.Id; |
| | | // var preLink = minorResult.GetLink(mainlink.Id); |
| | | // var nextLink1 = minorResult.GetLink(Id1); |
| | | // var nextLink2 = minorResult.GetLink(Id2); |
| | | // nextLink1.StartNodeMinorlossCoff = j3t.MinorLoss_StraightThrough; |
| | | // nextLink2.StartNodeMinorlossCoff = j3t.MinorLoss_BranchThrough; |
| | | // } |
| | | // else if (branchlinks.Count==1) |
| | | // { |
| | | // var pipe0 = mainlink as Pipe; |
| | | // var pipe1 = branchlinks[0] as Pipe; |
| | | // string Id1 = pipe1.Id; |
| | | // var preLink = minorResult.GetLink(mainlink.Id); |
| | | // var nextLink1 = minorResult.GetLink(Id1); |
| | | // nextLink1.StartNodeMinorlossCoff = pipe1.Diameter == pipe0.Diameter? j3t.MinorLoss_StraightThrough: j3t.MinorLoss_BranchThrough; |
| | | // } |
| | | |
| | | } |
| | | else if (n is Junction4T j4t) |
| | | { |
| | | if (j4t.PrevLinks.Count + j4t.NextLinks.Count != 4 ) return; |
| | | List<ILink> branchlinks = new List<ILink>(); |
| | | // } |
| | | // else if (n is Junction4T j4t) |
| | | // { |
| | | // if (j4t.PrevLinks.Count + j4t.NextLinks.Count != 4 ) return; |
| | | // List<ILink> branchlinks = new List<ILink>(); |
| | | |
| | | if (j4t.PrevLinks.Count == 1)//一进,二出 |
| | | { |
| | | // if (j4t.PrevLinks.Count == 1)//一进,二出 |
| | | // { |
| | | |
| | | branchlinks = j4t.NextLinks; |
| | | } |
| | | else if (j4t.NextLinks.Count == 1)//一出,N进 |
| | | { |
| | | // branchlinks = j4t.NextLinks; |
| | | // } |
| | | // else if (j4t.NextLinks.Count == 1)//一出,N进 |
| | | // { |
| | | |
| | | branchlinks = j4t.PrevLinks; |
| | | } |
| | | else if (j4t.NextLinks.Count==2) |
| | | { |
| | | branchlinks = j4t.NextLinks; |
| | | } |
| | | branchlinks.ForEach(link => |
| | | { |
| | | var pipe = link as Pipe; |
| | | var preLink = minorResult.GetLink(link.Id); |
| | | preLink.EndNodeMinorlossCoff = j4t.MinorLoss_Crossing; |
| | | }); |
| | | } |
| | | }); |
| | | // branchlinks = j4t.PrevLinks; |
| | | // } |
| | | // else if (j4t.NextLinks.Count==2) |
| | | // { |
| | | // branchlinks = j4t.NextLinks; |
| | | // } |
| | | // branchlinks.ForEach(link => |
| | | // { |
| | | // var pipe = link as Pipe; |
| | | // var preLink = minorResult.GetLink(link.Id); |
| | | // preLink.EndNodeMinorlossCoff = j4t.MinorLoss_Crossing; |
| | | // }); |
| | | // } |
| | | // }); |
| | | |
| | | |
| | | |
| | | return minorResult; |
| | | } |
| | | // return minorResult; |
| | | // } |
| | | |
| | | public static Link GetLink(this CalcuResult result, string linkId) |
| | | { |
| | | if (!result.LinkDict.ContainsKey(linkId)) |
| | | { |
| | | result.LinkDict.Add(linkId, new Link() { MinorlossCoff=0}); |
| | | // public static Link GetLink(this CalcuResult result, string linkId) |
| | | // { |
| | | // if (!result.LinkDict.ContainsKey(linkId)) |
| | | // { |
| | | // result.LinkDict.Add(linkId, new Link() { MinorlossCoff=0}); |
| | | |
| | | |
| | | } |
| | | return result.LinkDict[linkId] as Link; |
| | | } |
| | | } |
| | | // } |
| | | // return result.LinkDict[linkId] as Link; |
| | | // } |
| | | //} |
| | | |
| | | } |