| | |
| | | public FreCombine() { } |
| | | public List<int> Flags { get; set; } |
| | | public int RunCount { get; set; } |
| | | public double Frequency { get; set; } |
| | | public double Flow { get; set; } |
| | | public double Head { get; set; } |
| | | public double Power { get; set; } |
| | | public double Efficiency { get; set; } |
| | | public double Frequency { get; set; } |
| | | public double Speed { get; set; } |
| | | public List<FrePump> FrePumps { get; set; } |
| | | |
| | | public void Round() |
| | | { |
| | | this.Flow = Math.Round(this.Flow, 1); |
| | | this.Head = Math.Round(this.Head, 3); |
| | | this.Power = Math.Round(this.Power, 1); |
| | | this.Efficiency = Math.Round(this.Efficiency, 1); |
| | | this.Frequency = Math.Round(this.Frequency, 1); |
| | | this.Speed = Math.Round(this.Speed, 1); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public class FrePump |
| | | { |
| | | public FrePump() { } |
| | | public int Flag { get; set; } |
| | | public double Flow { get; set; } |
| | | public double Head { get; set; } |
| | | public double Power { get; set; } |
| | | public double Efficiency { get; set; } |
| | | public double Frequency { get; set; } |
| | | public double Speed { get; set; } |
| | | |
| | | public void Round() |
| | | { |
| | | this.Flow = Math.Round(this.Flow, 1); |
| | | this.Head = Math.Round(this.Head, 3); |
| | | this.Power = Math.Round(this.Power, 1); |
| | | this.Efficiency = Math.Round(this.Efficiency, 1); |
| | | this.Frequency = Math.Round(this.Frequency, 1); |
| | | this.Speed = Math.Round(this.Speed, 1); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | public double Flow { get; set; } |
| | | public double Head { get; set; } |
| | | public double Power { get; set; } |
| | | public double Efficiency { get; set; } |
| | | public double WP { get; set; } |
| | | public double UWP { get; set; } |
| | | public List<FreCombine> Combines { get; set; } |
| | | public List<int> Flags { get; set; } |
| | | public int FlagCount { get; set; } |
| | | public string Remark { get; set; } |
| | | public double MeritRatio { get; set; } |
| | | |
| | | public void Round() |
| | | { |
| | | this.Flow = Math.Round(this.Flow, 1); |
| | | this.Head = Math.Round(this.Head, 3); |
| | | this.Power = Math.Round(this.Power, 1); |
| | | this.Efficiency = Math.Round(this.Efficiency, 1); |
| | | this.WP = Math.Round(this.WP, 2); |
| | | this.UWP = Math.Round(this.UWP, 2); |
| | | |
| | | if (this.Combines != null && this.Combines.Any()) |
| | | { |
| | | foreach (var combine in Combines) |
| | | { |
| | | combine.Round(); |
| | | if (combine.FrePumps != null && combine.FrePumps.Any()) |
| | | { |
| | | foreach (var pump in combine.FrePumps) |
| | | { |
| | | pump.Round(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | |
| | | |
| | | #endregion |
| | | |
| | | var pump_nr_dict = pumps.ToDictionary(x => x.ID, x => x.Nr); |
| | | var pump_flag_list = pumps.Select(x => x.ID).ToList(); |
| | | var optimal_combine_list = new List<OptimalCombine>(); |
| | | for (int pumpCount = 1; pumpCount <= pumps.Count; pumpCount++) |
| | |
| | | var freCombine = new FreCombine(); |
| | | freCombine.Frequency = (double)fre; |
| | | freCombine.Flags = new List<int>(); |
| | | freCombine.FrePumps = new List<FrePump>(); |
| | | foreach (var item in conclusion_list_dic) |
| | | { |
| | | var conclusion = item.Value.Find(x => x.Pump1 == (double)fre); |
| | |
| | | freCombine.Flow += conclusion.Flow; |
| | | freCombine.Power += conclusion.Power; |
| | | freCombine.RunCount++; |
| | | |
| | | var fre_pump = new FrePump(); |
| | | fre_pump.Flag = item.Key; |
| | | fre_pump.Flow = conclusion.Flow; |
| | | fre_pump.Head = target_head; |
| | | fre_pump.Power = conclusion.Power; |
| | | fre_pump.Efficiency = CurveCalcuHelper.CalculateE(fre_pump.Flow, fre_pump.Head, fre_pump.Power); |
| | | fre_pump.Frequency = freCombine.Frequency; |
| | | fre_pump.Speed = (double)fre / 50 * pump_nr_dict[item.Key]; |
| | | freCombine.FrePumps.Add(fre_pump); |
| | | } |
| | | } |
| | | if (freCombine.Flags.Count < 1) |
| | |
| | | var freCombine = new FreCombine(); |
| | | freCombine.Frequency = (double)fre; |
| | | freCombine.Flags = new List<int>(); |
| | | freCombine.FrePumps = new List<FrePump>(); |
| | | foreach (var item in conclusion_list_dic) |
| | | { |
| | | var conclusion = item.Value.Find(x => x.Pump1 == (double)fre); |
| | |
| | | freCombine.Flow += conclusion.Flow; |
| | | freCombine.Power += conclusion.Power; |
| | | freCombine.RunCount++; |
| | | |
| | | var fre_pump = new FrePump(); |
| | | fre_pump.Flag = item.Key; |
| | | fre_pump.Flow = conclusion.Flow; |
| | | fre_pump.Head = target_head; |
| | | fre_pump.Power = conclusion.Power; |
| | | fre_pump.Efficiency = CurveCalcuHelper.CalculateE(fre_pump.Flow, fre_pump.Head, fre_pump.Power); |
| | | fre_pump.Frequency = freCombine.Frequency; |
| | | fre_pump.Speed = (double)fre / 50 * pump_nr_dict[item.Key]; |
| | | freCombine.FrePumps.Add(fre_pump); |
| | | } |
| | | } |
| | | if (freCombine.Flags.Count < 1) |
| | |
| | | } |
| | | |
| | | |
| | | var efficiency = CurveCalcuHelper.CalculateE(total_flow, target_head, total_power); |
| | | var wp = CurveCalcuHelper.CalculateWP(total_power, total_flow); |
| | | var uwp = CurveCalcuHelper.CalculateUWP(total_power, total_flow, target_head); |
| | | |
| | | #region 分析最优组合方案 |
| | | |
| | | var optimal_combine = new OptimalCombine(); |
| | |
| | | optimal_combine.Combines.Add(optimal_combine_part2); |
| | | optimal_combine.Flags.AddRange(optimal_combine_part2.Flags); |
| | | } |
| | | optimal_combine.Flow = Math.Round(total_flow, 1); |
| | | optimal_combine.Power = Math.Round(total_power, 1); |
| | | optimal_combine.Flow = total_flow; |
| | | optimal_combine.Head = target_head; |
| | | optimal_combine.Power = total_power; |
| | | optimal_combine.Efficiency = efficiency; |
| | | optimal_combine.WP = wp; |
| | | optimal_combine.UWP = uwp; |
| | | |
| | | optimal_combine.Flags = optimal_combine.Flags.OrderBy(x => x).ToList(); |
| | | optimal_combine.FlagCount = optimal_combine.Flags.Count; |
| | | optimal_combine.Remark = IntListHelper.ToString(optimal_combine.Flags); |
| | | |
| | | optimal_combine.MeritRatio = combine_merit_ratio; |
| | | optimal_combine.Head = Math.Round(target_head, 1); |
| | | optimal_combine_list.Add(optimal_combine); |
| | | |
| | | #endregion |
| | |
| | | return default; |
| | | |
| | | optimal_combine_list = optimal_combine_list.OrderByDescending(x => x.MeritRatio).ToList(); |
| | | return optimal_combine_list.First(); |
| | | var opt = optimal_combine_list.First(); |
| | | opt.Round(); |
| | | return opt; |
| | | } |
| | | |
| | | |