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); }