| | |
| | | /// <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 => |
| | |
| | | EnergyPower = energyInW, |
| | | |
| | | }; |
| | | points.Add(energyPoint); |
| | | result.InputEnergy.Add(n.Id,new List<EnergyPoint> { energyPoint }); |
| | | result.InputTotalEnerge += energyInW; |
| | | } |
| | |
| | | EnergyPower = energyInW, |
| | | |
| | | }; |
| | | points.Add(energyPoint); |
| | | result.OutputEnergy.Add(n.Id, new List<EnergyPoint> { energyPoint }); |
| | | result.OutputTotalEnerge += energyInW; |
| | | } |
| | |
| | | EnergyPower = energypower, |
| | | |
| | | }; |
| | | |
| | | result.MinorLossTotalEnerge += energypower; |
| | | //如果存在多个局部水头损失,需要累加合并 |
| | | if (result.LossEnergy[Id].Any(e => e.EnergyType == eEnergyType.MinorLoss)) |
| | |
| | | { |
| | | result.LossEnergy[Id].Add(energypoint); |
| | | } |
| | | var point = result.LossEnergy[Id].First(e => e.EnergyType == eEnergyType.MinorLoss); |
| | | points.Add(point); |
| | | } |
| | | |
| | | if (p.EndMinorloss != 0) |
| | |
| | | { |
| | | result.LossEnergy[Id].Add(energypoint); |
| | | } |
| | | var point = result.LossEnergy[Id].First(e => e.EnergyType == eEnergyType.MinorLoss); |
| | | points.Add(point); |
| | | } |
| | | |
| | | double pipeheadminorloss = 0; |
| | |
| | | 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); |
| | | } |
| | | |
| | | |
| | |
| | | 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); |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | 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) |