Distributes precipitation on the preceeding timesteps in a physically plausible way This assumes that the precipitation has been measured on intervals greater than the sampling interval of the data file (for example, 24 hours accumulations written once per day in an hourly file, the other timesteps receiving nodata). The accumulation has to be written on the last timestep of the accumulation period.
The measured accumulation period is provided as argument (in seconds). If using the "soft" argument, missing accumulated values would be replaced by "0". The precipitation is distributed on the preceeding timesteps by using criterias on relative humidity and the difference between the air temperature and the surface temperature.
#include <ProcPSUMDistribute.h>
Public Member Functions | |
ProcPSUMDistribute (const std::vector< std::string > &vec_args, const std::string &name) | |
virtual void | process (const unsigned int ¶m, const std::vector< MeteoData > &ivec, std::vector< MeteoData > &ovec) |
Distributes a precipitation sum over the most probable preceeding time steps. This works by looking at various criterias (like relative humidity, TA-TSS, etc) and picking up the time steps that show the highest scores. About this index usage in the code below: When looking into the ovec vector, they are: More... | |
![]() | |
virtual | ~ProcessingBlock () |
std::string | getName () const |
const ProcessingProperties & | getProperties () const |
const std::string | toString () const |
Static Public Member Functions | |
static void | SmartDistributePSUM (const double &precip, const size_t &start_idx, const size_t &end_idx, const size_t ¶mindex, std::vector< MeteoData > &vecM) |
static void | CstDistributePSUM (const double &precip, const size_t &start_idx, const size_t &end_idx, const size_t ¶mindex, std::vector< MeteoData > &vecM) |
Additional Inherited Members | |
![]() | |
ProcessingBlock (const std::string &name) | |
protected constructor only to be called by children More... | |
void | convert_args (const size_t &min_nargs, const size_t &max_nargs, const std::vector< std::string > &vec_args, std::vector< double > &dbl_args) const |
![]() | |
static bool | is_soft (std::vector< std::string > &vec_args) |
static void | readCorrections (const std::string &filter, const std::string &filename, const char &c_type, const double &init, std::vector< double > &corrections) |
![]() | |
ProcessingProperties | properties |
const std::string | block_name |
![]() | |
static const double | soil_albedo = .23 |
static const double | snow_albedo = .85 |
static const double | snow_thresh = .1 |
parametrize the albedo from HS More... | |
mio::ProcPSUMDistribute::ProcPSUMDistribute | ( | const std::vector< std::string > & | vec_args, |
const std::string & | name | ||
) |
|
static |
|
virtual |
Distributes a precipitation sum over the most probable preceeding time steps. This works by looking at various criterias (like relative humidity, TA-TSS, etc) and picking up the time steps that show the highest scores. About this index usage in the code below: When looking into the ovec vector, they are:
___▒_____________▒_____________▒____ ↑ ↑ ii endIdx
The goal is that the only "hard" references we can have are the accumulated value (ie the only values != nodata) and therefore their index are always kept (as ii and endIdx). This leads to the many "ii+1" in the code below since the period over which the data has to be distributed starts at ii+1 and goes until endIdx (which will become the new ii for the next iteration).
Implements mio::ProcessingBlock.
|
static |