NGen
Loading...
Searching...
No Matches
data_access::WrappedDataProvider Class Referenceabstract

Simple implementation that basically wraps another instance. More...

#include <WrappedDataProvider.hpp>

+ Inheritance diagram for data_access::WrappedDataProvider:
+ Collaboration diagram for data_access::WrappedDataProvider:

Public Types

using data_type = DataType
 This class provides a generic interface to data services.
 
using selection_type = SelectionType
 

Public Member Functions

 WrappedDataProvider (GenericDataProvider *provider)
 Primary constructor for instances.
 
 WrappedDataProvider (WrappedDataProvider &provider_to_copy)
 Copy constructor.
 
 WrappedDataProvider (WrappedDataProvider &&provider_to_move)
 Move constructor.
 
void finalize () override
 Release any resources that should not be held as the run is shutting down.
 
boost::span< const std::string > get_available_variable_names () const override
 Get the available variable names object.
 
long get_data_start_time () const override
 Get the inclusive beginning of the period of time over which this instance can provide data for this forcing.
 
long get_data_stop_time () const override
 Get the exclusive ending of the period of time over which this instance can provide data for this forcing.
 
long record_duration () const override
 Return the stride in the time dimension.
 
size_t get_ts_index_for_time (const time_t &epoch_time) const override
 Get the index of the forcing time step that contains the given point in time.
 
double get_value (const CatchmentAggrDataSelector &selector, ReSampleMethod m) override
 Get the value of a forcing property for an arbitrary time period, converting units if needed.
 
std::vector< double > get_values (const CatchmentAggrDataSelector &selector, ReSampleMethod m) override
 
bool is_property_sum_over_time_step (const std::string &name) const override
 Get whether a property's per-time-step values are each an aggregate sum over the entire time step.
 
virtual data_type get_value (const selection_type &selector, ReSampleMethod m=SUM)=0
 Get the value of a forcing property for an arbitrary time period, converting units if needed.
 
virtual std::vector< data_typeget_values (const selection_type &selector, ReSampleMethod m=SUM)=0
 Get the values of a forcing property for an arbitrary time period, converting units if needed.
 

Protected Attributes

GenericDataProviderwrapped_provider
 

Detailed Description

Simple implementation that basically wraps another instance.

The primary purpose is to support self-referencing as a forcing provider (e.g., for ET) without introducing any circular references in smart pointers.

Instances of this type must be used carefully, as they do not contain any mechanisms for making sure they actually point to a valid backing object.

Member Typedef Documentation

◆ data_type

template<class DataType , class SelectionType >
using data_access::DataProvider< DataType, SelectionType >::data_type = DataType
inherited

This class provides a generic interface to data services.

◆ selection_type

template<class DataType , class SelectionType >
using data_access::DataProvider< DataType, SelectionType >::selection_type = SelectionType
inherited

Constructor & Destructor Documentation

◆ WrappedDataProvider() [1/3]

data_access::WrappedDataProvider::WrappedDataProvider ( GenericDataProvider * provider)
inlineexplicit

Primary constructor for instances.

Parameters
providerSimple pointer to some existing ForcingProvider object for this new instance to wrap.

◆ WrappedDataProvider() [2/3]

data_access::WrappedDataProvider::WrappedDataProvider ( WrappedDataProvider & provider_to_copy)
inline

Copy constructor.

Parameters
provider_to_copy

◆ WrappedDataProvider() [3/3]

data_access::WrappedDataProvider::WrappedDataProvider ( WrappedDataProvider && provider_to_move)
inline

Move constructor.

Parameters
provider_to_move

Member Function Documentation

◆ finalize()

void data_access::WrappedDataProvider::finalize ( )
inlineoverridevirtual

Release any resources that should not be held as the run is shutting down.

In particular, this should be called before MPI_Finalize()

Reimplemented from data_access::DataProvider< DataType, SelectionType >.

◆ get_available_variable_names()

boost::span< const std::string > data_access::WrappedDataProvider::get_available_variable_names ( ) const
inlineoverridevirtual

Get the available variable names object.

Returns
const std::vector<std::string>& the names of available data variables

Implements data_access::DataProvider< DataType, SelectionType >.

References data_access::DataProvider< DataType, SelectionType >::get_available_variable_names(), and wrapped_provider.

◆ get_data_start_time()

long data_access::WrappedDataProvider::get_data_start_time ( ) const
inlineoverridevirtual

Get the inclusive beginning of the period of time over which this instance can provide data for this forcing.

Returns
The inclusive beginning of the period of time over which this instance can provide this data.

Implements data_access::DataProvider< DataType, SelectionType >.

References data_access::DataProvider< DataType, SelectionType >::get_data_start_time(), and wrapped_provider.

◆ get_data_stop_time()

long data_access::WrappedDataProvider::get_data_stop_time ( ) const
inlineoverridevirtual

Get the exclusive ending of the period of time over which this instance can provide data for this forcing.

Returns
The exclusive ending of the period of time over which this instance can provide this data.

Implements data_access::DataProvider< DataType, SelectionType >.

References data_access::DataProvider< DataType, SelectionType >::get_data_stop_time(), and wrapped_provider.

◆ get_ts_index_for_time()

size_t data_access::WrappedDataProvider::get_ts_index_for_time ( const time_t & epoch_time) const
inlineoverridevirtual

Get the index of the forcing time step that contains the given point in time.

An std::out_of_range exception should be thrown if the time is not in any time step.

Parameters
epoch_timeThe point in time, as a seconds-based epoch time.
Returns
The index of the forcing time step that contains the given point in time.
Exceptions
std::out_of_rangeIf the given point is not in any time step.

Implements data_access::DataProvider< DataType, SelectionType >.

References data_access::DataProvider< DataType, SelectionType >::get_ts_index_for_time(), and wrapped_provider.

◆ get_value() [1/2]

template<class DataType , class SelectionType >
virtual data_type data_access::DataProvider< DataType, SelectionType >::get_value ( const selection_type & selector,
ReSampleMethod m = SUM )
pure virtualinherited

Get the value of a forcing property for an arbitrary time period, converting units if needed.

An std::out_of_range exception should be thrown if the data for the time period is not available.

Parameters
selectorData required to establish what subset of the stored data should be accessed
mHow data is to be resampled if there is a mismatch in data alignment or repeat rate
Returns
The value of the forcing property for the described time period, with units converted if needed.
Exceptions
std::out_of_rangeIf data for the time period is not available.

Referenced by get_value(), and realization::Bmi_Module_Formulation::set_model_inputs_prior_to_update().

◆ get_value() [2/2]

double data_access::WrappedDataProvider::get_value ( const CatchmentAggrDataSelector & selector,
ReSampleMethod m )
inlineoverride

Get the value of a forcing property for an arbitrary time period, converting units if needed.

An std::out_of_range exception should be thrown if the data for the time period is not available.

Parameters
output_nameThe name of the forcing property of interest.
init_time_epochThe epoch time (in seconds) of the start of the time period.
duration_secondsThe length of the time period, in seconds.
output_unitsThe expected units of the desired output value.
Returns
The value of the forcing property for the described time period, with units converted if needed.
Exceptions
std::out_of_rangeIf data for the time period is not available.

References data_access::DataProvider< DataType, SelectionType >::get_value(), and wrapped_provider.

◆ get_values() [1/2]

template<class DataType , class SelectionType >
virtual std::vector< data_type > data_access::DataProvider< DataType, SelectionType >::get_values ( const selection_type & selector,
ReSampleMethod m = SUM )
pure virtualinherited

Get the values of a forcing property for an arbitrary time period, converting units if needed.

An std::out_of_range exception should be thrown if the data for the time period is not available.

If a provider doesn't implement this function, then by default, get_values will be a simple proxy to get_value with the result wrapped in a std::vector<double>

Parameters
output_nameThe name of the forcing property of interest.
init_time_epochThe epoch time (in seconds) of the start of the time period.
duration_secondsThe length of the time period, in seconds.
output_unitsThe expected units of the desired output value.
Returns
std::vector<double> The vector of values of the forcing property for the described time period, with units converted if needed.
Exceptions
std::out_of_rangeIf data for the time period is not available.

Referenced by get_values(), and realization::Bmi_Module_Formulation::set_model_inputs_prior_to_update().

◆ get_values() [2/2]

std::vector< double > data_access::WrappedDataProvider::get_values ( const CatchmentAggrDataSelector & selector,
ReSampleMethod m )
inlineoverride

◆ is_property_sum_over_time_step()

bool data_access::WrappedDataProvider::is_property_sum_over_time_step ( const std::string & name) const
inlineoverridevirtual

Get whether a property's per-time-step values are each an aggregate sum over the entire time step.

Certain properties, like rain fall, are aggregated sums over an entire time step. Others, such as pressure, are not such sums and instead something else like an instantaneous reading or an average value.

It may be the case that forcing data is needed for some discretization different than the forcing time step. This aspect must be known in such cases to perform the appropriate value interpolation.

Parameters
nameThe name of the forcing property for which the current value is desired.
Returns
Whether the property's value is an aggregate sum.

Reimplemented from data_access::DataProvider< DataType, SelectionType >.

References data_access::DataProvider< DataType, SelectionType >::is_property_sum_over_time_step(), and wrapped_provider.

◆ record_duration()

long data_access::WrappedDataProvider::record_duration ( ) const
inlineoverridevirtual

Member Data Documentation

◆ wrapped_provider


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