cloudflight
2024-11-24 38d5a93ca9e47c8449e67433b9a0dd25d1defe25
Hydro/Yw.EPAnet.Calcu.Core/03-calcu/NetworkEnergyAnalyseExtensions.cs
@@ -11,10 +11,11 @@
        /// <summary>
        /// 分析整个管网的能量
        /// </summary>
        public static EnergyResult AnalyzeEnergy(this Network network,CalcuResult calcuResult)
        public static List<EnergyPoint> AnalyzeEnergy(this Network network,CalcuResult calcuResult)
        {
            var dictLinks = calcuResult.LinkList.ToDictionary(p => p.Id);
            var dictNodes = calcuResult.NodeList.ToDictionary(p => p.Id);
            var points=new List<EnergyPoint>();
            var result = new EnergyResult();
            //找到管网中需水量为负的节点
            var negativeDemandNodes = network.GetAllNodes().Where(n => 
@@ -40,6 +41,7 @@
                        EnergyPower = energyInW,
                       
                    };
                    points.Add(energyPoint);
                    result.InputEnergy.Add(n.Id,new List<EnergyPoint> { energyPoint });
                    result.InputTotalEnerge += energyInW;
                }
@@ -69,6 +71,7 @@
                        EnergyPower = energyInW,
                     
                    };
                    points.Add(energyPoint);
                    result.OutputEnergy.Add(n.Id, new List<EnergyPoint> { energyPoint });
                    result.OutputTotalEnerge += energyInW;
                }
@@ -100,6 +103,7 @@
                            EnergyPower = energypower,
                           
                        };
                        result.MinorLossTotalEnerge += energypower; 
                        //如果存在多个局部水头损失,需要累加合并
                        if (result.LossEnergy[Id].Any(e => e.EnergyType == eEnergyType.MinorLoss))
@@ -111,6 +115,8 @@
                        {
                            result.LossEnergy[Id].Add(energypoint);
                        }
                        var point = result.LossEnergy[Id].First(e => e.EnergyType == eEnergyType.MinorLoss);
                        points.Add(point);
                    }
                    if (p.EndMinorloss != 0)
@@ -138,6 +144,8 @@
                        {
                            result.LossEnergy[Id].Add(energypoint);
                        }
                        var point = result.LossEnergy[Id].First(e => e.EnergyType == eEnergyType.MinorLoss);
                        points.Add(point);
                    }
                    double pipeheadminorloss = 0;
@@ -148,14 +156,16 @@
                        double energypower = GetEnergyPowerByQH(flow, pipeheadminorloss);
                        var Id = p.Id;
                        if (!result.LossEnergy.ContainsKey(Id)) result.LossEnergy.Add(Id, new List<EnergyPoint>());
                        result.LossEnergy[Id].Add(new EnergyPoint
                        var energypoint = new EnergyPoint
                        {
                            Id = Id,
                            EnergyType = eEnergyType.MinorLoss,
                            EnergyPower = energypower,
                        });
                        };
                        result.LossEnergy[Id].Add(energypoint);
                        result.MinorLossTotalEnerge += energypower;
                        points.Add(energypoint);
                    }
                    
@@ -164,14 +174,16 @@
                        double energypower = GetEnergyPowerByQH(flow, headlossFriction);
                        var Id = p.Id;
                        if (!result.LossEnergy.ContainsKey(Id)) result.LossEnergy.Add(Id, new List<EnergyPoint>());
                        result.LossEnergy[Id].Add(new EnergyPoint
                        var energypoint = new EnergyPoint
                        {
                            Id = Id,
                            EnergyType = eEnergyType.FrictionalLoss,
                            EnergyPower = energypower,
                        });
                        };
                        result.LossEnergy[Id].Add(energypoint);
                        result.FrictionalLossTotalEnerge += energypower;
                        points.Add(energypoint);
                    }
@@ -190,33 +202,37 @@
                    {
                        var Type = eEnergyType.Promote;
                        if (!result.InputEnergy.ContainsKey(Id)) result.InputEnergy.Add(Id, new List<EnergyPoint>());
                        result.InputEnergy[Id].Add(new EnergyPoint
                        var energypoint = new EnergyPoint
                        {
                            Id = Id,
                            EnergyType = Type,
                            EnergyPower = energypower,
                        });
                        };
                        result.InputEnergy[Id].Add(energypoint);
                        result.InputTotalEnerge += energypower;
                        points.Add(energypoint);
                    }
                    else
                    {
                        var Type = eEnergyType.MinorLoss;
                        if (!result.LossEnergy.ContainsKey(Id)) result.LossEnergy.Add(Id, new List<EnergyPoint>());
                        result.LossEnergy[Id].Add(new EnergyPoint
                        EnergyPoint energypoint = new EnergyPoint
                        {
                            Id = Id,
                            EnergyType = Type,
                            EnergyPower = energypower,
                        });
                        };
                        result.LossEnergy[Id].Add(energypoint);
                        result.MinorLossTotalEnerge += energypower;
                        points.Add(energypoint);
                    }
                    
                }
            }
            return result;
            return points;
        }
        private static double GetEnergyPowerByQH(double flowQ,double head)