WeatherDataGfs: Calculate dew point

refs #663
This commit is contained in:
Roland Winklmeier
2016-06-04 23:59:42 +02:00
parent 4a489c642f
commit 027b344d11
2 changed files with 20 additions and 2 deletions

View File

@@ -12,9 +12,11 @@
#include "blackmisc/logmessage.h"
#include "blackmisc/math/mathutils.h"
#include "blackmisc/geo/coordinategeodetic.h"
#include "blackmisc/pq/temperature.h"
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <cmath>
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);

View File

@@ -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;