public bool Evaluate(AgAsDensityModelResultEval ResultEval)
        {
            _MsgCntr++;
            if (_Enabled && (ResultEval != null))
            {
                _Enabled = SetDensity(ResultEval);
            }

            return(_Enabled);
        }
        private bool SetDensity(AgAsDensityModelResultEval result)
        {
            bool   enabled  = false;
            double altitude = result.Altitude;

            if (!Double.IsNaN(altitude))
            {
                if (altitude < _LowestValidAlt)
                {
                    if (_outputLowAltMsg)
                    {
                        double altKm            = altitude / 1000.0;
                        double lowestValidAltKm = -LowestValidAlt / 1000.0;

                        string msg = "setDensity: altitude " + altKm.ToString("0.###") + " is less than minimum valid altitude ( " +
                                     lowestValidAltKm.ToString("0.###") + " km). Keeping density constant below this height.";

                        Message(AgEUtLogMsgType.eUtLogMsgWarning, msg);

                        _outputLowAltMsg = false;
                    }

                    altitude = _LowestValidAlt;
                }

                double diffAlt = _RefAltitude - altitude;
                double expArg  = diffAlt / _ScaleAltitude;

                if (_DebugMode)
                {
                    double altKm = altitude / 1000.0;
                    string msg   = "setDensity: alt= " + altKm.ToString("0.###") + ", expArg = " + expArg.ToString("0.###");
                    DebugMessage(msg);
                }

                if (expArg < 700.0)
                {
                    _Density = 0.0;
                }
                else
                {
                    if (expArg > _MaxScaleHeights)
                    {
                        if (_outputMaxHeightMsg)
                        {
                            double altKm = altitude / 1000.0;
                            string msg   = "setDensity: scaleHeight " + expArg.ToString("0.###") + " exceeds maximum allowed ( " +
                                           _MaxScaleHeights.ToString() + "), alt= " + altKm.ToString("0.###") + " km. Keeping density constant at maxScaleHeight.";
                            Message(AgEUtLogMsgType.eUtLogMsgAlarm, msg);

                            _outputMaxHeightMsg = false;
                        }

                        expArg = _MaxScaleHeights;
                    }

                    _Density = _RefDensity * Math.Exp(expArg);
                }

                if (!Double.IsNaN(_Density))
                {
                    result.SetDensity(_Density);
                    enabled = true;
                }
            }

            return(enabled);
        }