예제 #1
0
        /// <summary>
        /// Checks whether a particular gas exceeds
        /// the rate of change nominated in the
        /// appropriate table.
        /// </summary>
        /// <param name="currentDga">The current or latest DGA.</param>
        /// <param name="previousDga">The previous DGA.</param>
        /// <param name="gas">The Gas for which the rate needs to be checked</param>
        /// <returns>True if the table value is exceeded</returns>
        private bool CheckRateOfChange(DissolvedGasAnalysis currentDga, DissolvedGasAnalysis previousDga, Gas gas, ref List <IOutput> outputs)
        {
            var rateOfChange = helper.RateOfChange(currentDga, previousDga, gas, new TimeUnits.Year());
            var lowerRate    = TypicalRatesOfIncrease[gas].Item1;
            var upperRate    = TypicalRatesOfIncrease[gas].Item2;
            var rateUnit     = "ul/l/year";

            // If oil volume is available, make the appropriate conversion.
            if (OilVolume != null && OilVolume.Value != 0.0)
            {
                rateOfChange = rateOfChange * OilVolume.ConvertTo(new VolumeUnits.Litre());
                lowerRate    = lowerRate * OilVolume.ConvertTo(new VolumeUnits.Litre());
                upperRate    = upperRate * OilVolume.ConvertTo(new VolumeUnits.Litre());
                rateUnit     = "ul/year";
            }

            if (rateOfChange != null && rateOfChange > upperRate)
            {
                if (!outputs.Exists(o => o.Name == $"{gas.ToString()} Rate of Change"))
                {
                    outputs.Add(new Output()
                    {
                        Name = $"{gas.ToString()} Rate of Change", Description = $"The rate of change of {gas.ToString()} is {rateOfChange.Value.ToString("0.00")} {rateUnit} which is higher than the typical value of {upperRate.ToString("0.00")} {rateUnit}."
                    });
                }
                return(true);
            }
            else if (rateOfChange != null && rateOfChange <= lowerRate)
            {
                if (!outputs.Exists(o => o.Name == $"{gas.ToString()} Rate of Change"))
                {
                    outputs.Add(new Output()
                    {
                        Name = $"{gas.ToString()} Rate of Change", Description = $"The rate of change of {gas.ToString()} is {rateOfChange.Value} {rateUnit} which is lower than the typical value of {lowerRate} {rateUnit}."
                    });
                }
                return(false);
            }

            return(false);
        }