diff --git a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp index a738262eb..5d745a167 100644 --- a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp +++ b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp @@ -12,9 +12,11 @@ #include "blackmisc/logmessage.h" #include "blackmisc/math/mathutils.h" #include "blackmisc/geo/coordinategeodetic.h" +#include "blackmisc/pq/temperature.h" #include #include #include +#include using namespace BlackMisc; using namespace BlackMisc::Aviation; @@ -256,8 +258,11 @@ namespace BlackWxPlugin GfsIsobaricLayer isobaricLayer = isobaricLayerIt.value(); CAltitude level(isobaricLayerIt.key(), CAltitude::MeanSeaLevel, CLengthUnit::ft()); - CTemperatureLayer temperature(level, CTemperature(isobaricLayer.temperature, CTemperatureUnit::K()), {}, isobaricLayer.relativeHumidity); - temperatureLayers.insert(temperature); + auto temperature = CTemperature { isobaricLayer.temperature, CTemperatureUnit::K() }; + auto dewPoint = calculateDewPoint(temperature, isobaricLayer.relativeHumidity); + + CTemperatureLayer temperatureLayer(level, temperature, dewPoint, isobaricLayer.relativeHumidity); + temperatureLayers.insert(temperatureLayer); double windDirection = -1 * CMathUtils::rad2deg(std::atan2(-isobaricLayer.windU, isobaricLayer.windV)); windDirection += 180.0; @@ -672,6 +677,15 @@ namespace BlackWxPlugin } } + CTemperature CWeatherDataGfs::calculateDewPoint(const CTemperature &temperature, double relativeHumidity) + { + double temperatureInCelsius = temperature.value(CTemperatureUnit::C()); + double saturationVaporPressure = 6.112 * std::exp((17.67 * temperatureInCelsius)/(temperatureInCelsius + 243.5)); + double vaporPressure = saturationVaporPressure * ( relativeHumidity / 100.0); + double dewPointInCelsius = std::log(vaporPressure / 6.112) * 243.5 / (17.67 - std::log(vaporPressure / 6.112)); + return { dewPointInCelsius, CTemperatureUnit::C() }; + } + BlackCore::IWeatherData *CWeatherDataGfsFactory::create(QObject *parent) { return new CWeatherDataGfs(parent); diff --git a/src/plugins/weatherdata/gfs/weatherdatagfs.h b/src/plugins/weatherdata/gfs/weatherdatagfs.h index b8af21fae..b6a2cd143 100644 --- a/src/plugins/weatherdata/gfs/weatherdatagfs.h +++ b/src/plugins/weatherdata/gfs/weatherdatagfs.h @@ -25,6 +25,8 @@ class QNetworkAccessManager; +namespace BlackMisc { namespace PhysicalQuantities { class CTemperature; }} + namespace BlackWxPlugin { namespace Gfs @@ -145,6 +147,8 @@ namespace BlackWxPlugin void setSurfaceRain(const g2float *fld); void setSurfaceSnow(const g2float *fld); + BlackMisc::PhysicalQuantities::CTemperature calculateDewPoint(const BlackMisc::PhysicalQuantities::CTemperature &temperature, double relativeHumidity); + BlackMisc::Weather::CWeatherGrid m_grid; BlackMisc::PhysicalQuantities::CLength m_maxRange;