Shuxia Ning
2024-08-28 1a8a81785470302fc7fbd6914a9df5d1094dac2a
IStation.Service/08-algorithm/01-analysis/AnalysisHelper_Model.cs
@@ -40,6 +40,7 @@
                this.CalcFrequencyItems(50, 50, 50, 0.1);
            }
            /// <summary>
            /// 
            /// </summary>
@@ -48,9 +49,10 @@
            /// <param name="freMin"></param>
            /// <param name="freMax"></param>
            /// <param name="freSpace"></param>
            public AnaPump(Model.Pump rhs, double freDef, double freMin, double freMax, double freSpace) : this(rhs)
            /// <param name="fre_head_diff_avg_dict"></param>
            public AnaPump(Model.Pump rhs, double freDef, double freMin, double freMax, double freSpace, Dictionary<double,double?> fre_head_diff_avg_dict = null) : this(rhs)
            {
                this.CalcFrequencyItems(freDef, freMin, freMax, freSpace);
                this.CalcFrequencyItems(freDef, freMin, freMax, freSpace, fre_head_diff_avg_dict);
            }
            /// <summary>
@@ -118,17 +120,34 @@
            /// </summary>
            public bool AllowCalc { get; set; }
            void CalcFrequencyItems(double freDef, double freMin, double freMax, double freSpace)
            void CalcFrequencyItems(double freDef, double fre_min, double fre_max, double fre_space,  Dictionary<double, double?> fre_head_diff_avg_dict = null)
            {
                if (!this.AllowCalc)
                    return;
                this.AnaFrequencyItems = new List<AnaPumpFre>();
                for (double fre = freMax; fre >= freMin; fre -= freSpace)
                var exist_dict = fre_head_diff_avg_dict != null && fre_head_diff_avg_dict.Any();
                decimal fre_min_decimal = (decimal)fre_min;
                decimal fre_max_decimal = (decimal)fre_max;
                decimal fre_space_decimal = (decimal)fre_space;
                for (decimal fre_decimal = fre_max_decimal; fre_decimal >= fre_min_decimal; fre_decimal -= fre_space_decimal)
                {
                    var freItem = new AnaPumpFre();
                    freItem.Frequency = Math.Round(fre, 1);
                    freItem.CurveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(this.CurveQH, freDef, fre);
                    freItem.CurveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(this.CurveQP, freDef, fre);
                    freItem.Frequency = (double)Math.Round(fre_decimal, 1);
                    CurveExpress curve_qh = this.CurveQH;
                    double fre_double = (double)fre_decimal;
                    if (exist_dict)
                    {
                        if (fre_head_diff_avg_dict.ContainsKey(fre_double))
                        {
                            var head_diff_factor = fre_head_diff_avg_dict[fre_double] ?? 0;
                            var add_factor_points = this.CurveQH.DefinePoints
                                .Select(x => new Curve.CurvePoint(x.X, x.Y + head_diff_factor))
                                .ToList();
                            curve_qh = Curve.FitHelper.BuildCurveExpress(add_factor_points, eFitType.FourM);
                        }
                    }
                    freItem.CurveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(curve_qh, freDef, fre_double);
                    freItem.CurveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(this.CurveQP, freDef, fre_double);
                    this.AnaFrequencyItems.Add(freItem);
                }
            }