WSL/SLF GitLab Repository

Commit d10c68e2 authored by Mathias Bavay's avatar Mathias Bavay
Browse files

Small complement to the "filter dev" documentation. A first implementation of...

Small complement to the "filter dev" documentation. A first implementation of the wet globe temperature has been contributed, but this is NOT usable yet (a few coefficients still must be set for the convective heat transfer coefficient).
parent 1c83871e
...@@ -355,10 +355,11 @@ namespace mio { ...@@ -355,10 +355,11 @@ namespace mio {
* @endcode * @endcode
* -# Adding the created implementation file to meteoFilters/CMakeLists.txt in a similar way as for the other * -# Adding the created implementation file to meteoFilters/CMakeLists.txt in a similar way as for the other
* filters * filters
* -# Adding the filter in the processing loop, in BlockFactory::getBlock(), by adding three lines similar to: * -# Adding the filter in the processing loop, in meteoFilters/ProcessingBlock.cc in the BlockFactory::getBlock()
* method by adding three lines similar to:
* @code * @code
* else if (blockname == "MIN_MAX"){ * else if (blockname == "MIN_MAX"){
* return new FilterMinMax(vec_args); * return new FilterMinMax(vec_args, blockname);
* } * }
* @endcode * @endcode
* The key (here the string "MIN_MAX") is the key that the user will put in his io.ini to select the processing block. * The key (here the string "MIN_MAX") is the key that the user will put in his io.ini to select the processing block.
......
...@@ -107,6 +107,32 @@ double Atmosphere::wetBulbTemperature(const double& T, const double& RH, const d ...@@ -107,6 +107,32 @@ double Atmosphere::wetBulbTemperature(const double& T, const double& RH, const d
return ( T - (RH*Vp - Vp) * mixing_ratio * L / p / Cst::specific_heat_air ); return ( T - (RH*Vp - Vp) * mixing_ratio * L / p / Cst::specific_heat_air );
} }
/**
* @brief Black Globe Temperature.
* This is an estimation of the black globe temperature based on physical modeling as in
* V. E. Dimiceli, S. F. Piltz and S. A. Amburn, <i>"Estimation of Black Globe Temperature for Calculation of the Wet Bulb Globe Temperature Index"</i> in World Congress on Engineering and Computer Science, <b>2</b>, 2011.
* @param TA air temperature (K)
* @param RH relative humidity (between 0 and 1)
* @param VW wind velocity (m/s)
* @param iswr_dir direct solar SW radiation (W/m^2)
* @param iswr_diff diffuse solar SW radiation (W/m^2)
* @param cos_Z cosinus of the solar zenith angle
* @return black globe temperature (K)
*/
double Atmosphere::blackGlobeTemperature(const double& TA, const double& RH, const double& VW, const double& iswr_dir, const double& iswr_diff, const double& cos_Z)
{
const double a=1, b=1, c=1; //HACK: get real values!
const double S = iswr_dir + iswr_diff;
const double h = a * pow(S, b) * pow(cos_Z, c);
const double emissivity = 0.575 * pow(RH*waterSaturationPressure(TA), 1./7.);
const double B = S * (iswr_dir/(4.*Cst::stefan_boltzmann*cos_Z) + 1.2/Cst::stefan_boltzmann*iswr_diff) + emissivity*Optim::pow4(TA);
const double C = h * pow(VW, 0.58) / 5.3865e-8;
const double Tg = (B + C*TA + 7680000) / (C + 256000);
return Tg;
}
/** /**
* @brief Wind log profile. * @brief Wind log profile.
* This is used to compute the equivalent wind speed at a different height. * This is used to compute the equivalent wind speed at a different height.
...@@ -182,6 +208,28 @@ double Atmosphere::heatIndex(const double& TA, const double& RH) ...@@ -182,6 +208,28 @@ double Atmosphere::heatIndex(const double& TA, const double& RH)
return C_TO_K(HI); return C_TO_K(HI);
} }
/**
* @brief Wet Bulb Globe Temperature index.
* This is an index aiming at expressing the human-perceived air temperature due to humidity, wind and radiation.
* This is the foundation of ISO 7243 and is widely used for physical activity safety evaluation (for example for physical training).
* @param TA air temperature (K)
* @param RH relative humidity (between 0 and 1)
* @param VW wind velocity (m/s)
* @param iswr_dir direct solar SW radiation (W/m^2)
* @param iswr_diff diffuse solar SW radiation (W/m^2)
* @param cos_Z cosinus of the solar zenith angle
* @param altitude altitude of the point where to perform the calculation
* @return Heat index (K)
*/
double Atmosphere::WBGT_index(const double& TA, const double& RH, const double& VW, const double& iswr_dir, const double& iswr_diff, const double& cos_Z, const double& altitude)
{
const double NWB = wetBulbTemperature(TA, RH, altitude);
const double GT = blackGlobeTemperature(TA, RH, VW, iswr_dir, iswr_diff, cos_Z);
const double DB = TA;
return 0.7*NWB + 0.2*GT + 0.1*DB;
}
/** /**
* @brief Standard water vapor saturation * @brief Standard water vapor saturation
* @param T air temperature (K) * @param T air temperature (K)
......
...@@ -38,10 +38,12 @@ class Atmosphere { ...@@ -38,10 +38,12 @@ class Atmosphere {
static double virtualTemperatureFactor(const double& e, const double& p); static double virtualTemperatureFactor(const double& e, const double& p);
static double waterVaporDensity(const double& Temperature, const double& VaporPressure); static double waterVaporDensity(const double& Temperature, const double& VaporPressure);
static double wetBulbTemperature(const double& T, const double& RH, const double& altitude); static double wetBulbTemperature(const double& T, const double& RH, const double& altitude);
static double blackGlobeTemperature(const double& TA, const double& RH, const double& VW, const double& iswr_dir, const double& iswr_diff, const double& cos_Z);
static double windLogProfile(const double& v_ref, const double& z_ref, const double& z, const double& z0=0.03); static double windLogProfile(const double& v_ref, const double& z_ref, const double& z, const double& z0=0.03);
static double windChill(const double& TA, const double& VW); static double windChill(const double& TA, const double& VW);
static double heatIndex(const double& TA, const double& RH); static double heatIndex(const double& TA, const double& RH);
static double WBGT_index(const double& TA, const double& RH, const double& VW, const double& iswr_dir, const double& iswr_diff, const double& cos_Z, const double& altitude);
//clear sky emissivity //clear sky emissivity
static double Brutsaert_emissivity(const double& RH, const double& TA); static double Brutsaert_emissivity(const double& RH, const double& TA);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment