[GFS] Properly validate cloud pressure levels

For some reason, the parser returned 0.0 instead of 9.998e20 for undefined values.
Atmospheric pressure levels cannot be lower than 1000, hence use this as the lower boundary.
In all other circumstances, the pressure level needs to be set (either to real value or to nan) for the follow up code to detect undefined values.
This commit is contained in:
Roland Rossgotterer
2019-06-19 14:58:13 +02:00
committed by Mat Sutcliffe
parent d79e090d46
commit f4a147a5bc

View File

@@ -732,22 +732,22 @@ namespace BlackWxPlugin
{
for (auto &gridPoint : m_gfsWeatherGrid)
{
static const g2float minimumLayer = 0.0;
static const g2float minimumLevel = 1000.0;
float levelPressure = std::numeric_limits<float>::quiet_NaN();
g2float fieldValue = fld[gridPoint.fieldPosition];
// A value of 9.999e20 is undefined. Check that the pressure value is below
if (fieldValue < 9.998e20f) { levelPressure = fld[gridPoint.fieldPosition]; }
if (fieldValue < 9.998e20f && fieldValue > minimumLevel) { levelPressure = fld[gridPoint.fieldPosition]; }
switch (surfaceType)
{
case LowCloudBottomLevel:
case MiddleCloudBottomLevel:
case HighCloudBottomLevel:
if (fieldValue > minimumLayer) { gridPoint.cloudLayers[level].bottomLevelPressure = levelPressure; }
gridPoint.cloudLayers[level].bottomLevelPressure = levelPressure;
break;
case LowCloudTopLevel:
case MiddleCloudTopLevel:
case HighCloudTopLevel:
if (fieldValue > minimumLayer) { gridPoint.cloudLayers[level].topLevelPressure = levelPressure; }
gridPoint.cloudLayers[level].topLevelPressure = levelPressure;
break;
default:
Q_ASSERT(false);