cloudflight
2024-11-23 e5bfcecde9a5c696b3119ae29a6b7f2eb993cb82
Hydro/Yw.EPAnet.Calcu.Core/03-calcu/NetworkCalcuMinorLoss.cs
@@ -2,132 +2,133 @@
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;
    //    }
    //}
}