From f4a147a5bc93c74dcc5c502190084ac8089ffdfb Mon Sep 17 00:00:00 2001 From: Roland Rossgotterer Date: Wed, 19 Jun 2019 14:58:13 +0200 Subject: [PATCH] [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. --- src/plugins/weatherdata/gfs/weatherdatagfs.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp index d6748ae5f..a66271c01 100644 --- a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp +++ b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp @@ -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::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);