MeteoIODoc 20241221.207bde49
mio::ProcPSUMDistribute Class Reference

Detailed Description

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). And the accumulation has to be written on the last timestep of the accumulation period.

It supports the following arguments:

  • SOFT: if set to TRUE, missing accumulated values would be replaced by "0";
  • MEAS_PERIOD: measured accumulation period in seconds (mandatory).

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.

PSUM::filter1 = PSUM_DISTRIBUTE
PSUM::arg1::meas_period = 86400

#include <ProcPSUMDistribute.h>

Public Member Functions

 ProcPSUMDistribute (const std::vector< std::pair< std::string, std::string > > &vecArgs, const std::string &name, const Config &cfg)
 
virtual void process (const unsigned int &param, 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...
 
- Public Member Functions inherited from mio::ProcessingBlock
virtual ~ProcessingBlock ()
 
virtual void process (const unsigned int &param, const std::vector< MeteoData > &ivec, std::vector< MeteoData > &ovec)=0
 
virtual void process (Date &dateStart, Date &dateEnd)
 
std::string getName () const
 
const ProcessingPropertiesgetProperties () const
 
const std::string toString () const
 
bool skipStation (const std::string &station_id) const
 Should the provided station be skipped in the processing? More...
 
bool noStationsRestrictions () const
 
const std::vector< DateRangegetTimeRestrictions () const
 
bool skipHeight (const double &height) const
 Should the provided height be skipped in the processing? More...
 

Static Public Member Functions

static void SmartDistributePSUM (const double &precip, const size_t &start_idx, const size_t &end_idx, const size_t &paramindex, std::vector< MeteoData > &vecM)
 
static void CstDistributePSUM (const double &precip, const size_t &start_idx, const size_t &end_idx, const size_t &paramindex, std::vector< MeteoData > &vecM)
 
- Static Public Member Functions inherited from mio::ProcessingBlock
static void readCorrections (const std::string &filter, const std::string &filename, std::vector< double > &X, std::vector< double > &Y)
 Read a data file structured as X Y value on each lines. More...
 
static void readCorrections (const std::string &filter, const std::string &filename, std::vector< double > &X, std::vector< double > &Y1, std::vector< double > &Y2)
 Read a data file structured as X Y1 Y2 value on each lines. More...
 
static std::vector< double > readCorrections (const std::string &filter, const std::string &filename, const size_t &col_idx, const char &c_type, const double &init)
 Read a correction file applicable to repeating time period. More...
 
static std::vector< offset_specreadCorrections (const std::string &filter, const std::string &filename, const double &TZ, const size_t &col_idx=2)
 Read a correction file, ie a file structured as timestamps followed by values on each lines. More...
 
static std::map< std::string, std::vector< DateRange > > readDates (const std::string &filter, const std::string &filename, const double &TZ)
 Read a list of date ranges by stationIDs from a file. More...
 

Additional Inherited Members

- Static Public Attributes inherited from mio::ProcessingBlock
static const double default_height
 
- Protected Member Functions inherited from mio::ProcessingBlock
 ProcessingBlock (const std::vector< std::pair< std::string, std::string > > &vecArgs, const std::string &name, const Config &cfg)
 protected constructor only to be called by children More...
 
- Static Protected Member Functions inherited from mio::ProcessingBlock
static void extract_dbl_vector (const unsigned int &param, const std::vector< MeteoData > &ivec, std::vector< double > &ovec)
 
static void extract_dbl_vector (const unsigned int &param, const std::vector< const MeteoData * > &ivec, std::vector< double > &ovec)
 
- Protected Attributes inherited from mio::ProcessingBlock
const std::set< std::string > excluded_stations
 
const std::set< std::string > kept_stations
 
const std::vector< DateRangetime_restrictions
 
std::set< double > included_heights
 
std::set< double > excluded_heights
 
bool all_heights
 
ProcessingProperties properties
 
const std::string block_name
 
- Static Protected Attributes inherited from mio::ProcessingBlock
static const double soil_albedo = .23
 
static const double snow_albedo = .85
 
static const double snow_thresh = .1
 parametrize the albedo from HS More...
 

Constructor & Destructor Documentation

◆ ProcPSUMDistribute()

mio::ProcPSUMDistribute::ProcPSUMDistribute ( const std::vector< std::pair< std::string, std::string > > &  vecArgs,
const std::string &  name,
const Config cfg 
)

Member Function Documentation

◆ CstDistributePSUM()

void mio::ProcPSUMDistribute::CstDistributePSUM ( const double &  precip,
const size_t &  start_idx,
const size_t &  end_idx,
const size_t &  paramindex,
std::vector< MeteoData > &  vecM 
)
static

◆ process()

void mio::ProcPSUMDistribute::process ( const unsigned int &  param,
const std::vector< MeteoData > &  ivec,
std::vector< MeteoData > &  ovec 
)
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.

◆ SmartDistributePSUM()

void mio::ProcPSUMDistribute::SmartDistributePSUM ( const double &  precip,
const size_t &  start_idx,
const size_t &  end_idx,
const size_t &  paramindex,
std::vector< MeteoData > &  vecM 
)
static

The documentation for this class was generated from the following files: