14#ifndef SIMULATION_MOUDULE_BASE
15#define SIMULATION_MOUDULE_BASE
27using namespace utils_time;
55 virtual void SetDate(time_t t,
int year_idx);
67 virtual void SetValue(
const char* key,
int value) {
69 "Set function of parameter " +
string(key) +
" is not implemented.");
73 virtual void SetValue(
const char* key, FLTPT value) {
75 "Set function of parameter " +
string(key) +
" is not implemented.");
81 "Set function of parameter " +
string(key) +
" is not implemented.");
87 "Set function of parameter " +
string(key) +
" is not implemented.");
91 virtual void Set1DData(
const char* key,
int n,
int* data) {
93 "Set function of parameter " +
string(key) +
" is not implemented.");
97 virtual void Set1DData(
const char* key,
int n, FLTPT* data) {
99 "Set function of parameter " +
string(key) +
" is not implemented.");
103 virtual void Set2DData(
const char* key,
int nrows,
int ncols,
int** data) {
105 "Set function of parameter " +
string(key) +
" is not implemented.");
109 virtual void Set2DData(
const char* key,
int nrows,
int ncols, FLTPT** data) {
111 "Set function of parameter " +
string(key) +
" is not implemented.");
115 virtual void GetValue(
const char* key,
int* value) {
117 "Get function of parameter " +
string(key) +
" is not implemented.");
121 virtual void GetValue(
const char* key, FLTPT* value) {
123 "Get function of parameter " +
string(key) +
" is not implemented.");
127 virtual void Get1DData(
const char* key,
int* n,
int** data) {
129 "Get function of parameter " +
string(key) +
" is not implemented.");
133 virtual void Get1DData(
const char* key,
int* n, FLTPT** data) {
135 "Get function of parameter " +
string(key) +
" is not implemented.");
139 virtual void Get2DData(
const char* key,
int* nrows,
int* ncols,
int*** data) {
141 "Get function of parameter " +
string(key) +
" is not implemented.");
145 virtual void Get2DData(
const char* key,
int* nrows,
int* ncols, FLTPT*** data) {
147 "Get function of parameter " +
string(key) +
" is not implemented.");
152 throw ModelException(
"SimulationModule",
"SetScenario",
"Set scenario function is not implemented.");
157 throw ModelException(
"SimulationModule",
"SetReaches",
"Set reaches function is not implemented.");
162 throw ModelException(
"SimulationModule",
"SetSubbasins",
"Set subbasins function is not implemented.");
182 virtual bool CheckInputSize(
const char* module_id,
const char* key,
int nrows,
int& m_nrows);
194 virtual bool CheckInputSize2D(
const char* module_id,
const char* key,
int nrows,
int ncols,
int& m_nrows,
int& m_ncols);
243 virtual void SetRasterPositionDataPointer(
const char* key,
int** positions) {
244 throw ModelException(
"SimulationModule",
"SetRasterPositionDataPointer",
245 "Set function of parameter " +
string(key) +
" is not implemented.");
291#define CHECK_DATA(moduleID, expression, desc) if ((expression)) \
292 throw ModelException(moduleID, "CheckInputData", string(desc))
294#define CHECK_POINTER(moduleID, param) if (nullptr == (param)) \
295 throw ModelException(moduleID, "CheckInputData", string(#param) + string(" MUST NOT be NULL!"))
297#define CHECK_POSITIVE(moduleID, param) if ((param) <= 0) \
298 throw ModelException(moduleID, "CheckInputData", string(#param) + string(" MUST be positive!"))
300#define CHECK_NONNEGATIVE(moduleID, param) if ((param) < 0) \
301 throw ModelException(moduleID, "CheckInputData", string(#param) + string(" MUST be greater or equal than zero!"))
303#define CHECK_NEGATIVE(moduleID, param) if ((param) >= 0) \
304 throw ModelException(moduleID, "CheckInputData", string(#param) + string(" MUST be negative!"))
306#define CHECK_ZERO(moduleID, param) if (FloatEqual(CVT_DBL(param), 0.)) \
307 throw ModelException(moduleID, "CheckInputData", string(#param) + string(" MUST NOT be zero!"))
309#define CHECK_NODATA(moduleID, param) if (FloatEqual(CVT_DBL(param), NODATA_VALUE)) \
310 throw ModelException(moduleID, "CheckInputData", string(#param) + string(" MUST NOT be NODATA_VALUE!"))
Scenario class in BMP database.
@ TIMESTEP_CHANNEL
Channel scale.
Definition: SimulationModule.h:37
@ TIMESTEP_SIMULATION
Whole simulation scale.
Definition: SimulationModule.h:38
@ TIMESTEP_HILLSLOPE
Hillslope scale.
Definition: SimulationModule.h:36
Main class of scenario in BMP database.
Definition: Scenario.h:47
Base type of all interfaces.
Definition: basic.h:407
Print the exception message.
Definition: basic.h:416
Class to store reach related parameters from REACHES table.
Class for managing subbasin data.
Read and store all reaches information as input parameters.
Definition: clsReach.h:88
Manager all Subbasin related parameters and methods.
Definition: clsSubbasin.h:214
virtual void SetClimateDataType(int data_type)
Set climate data type, P, M, PET etc.
Definition: SimulationModule.h:63
int m_month
month since January - [1,12]
Definition: SimulationModule.h:273
bool m_reCalIntermediates
need to recalculate intermediate parameters?
Definition: SimulationModule.h:283
virtual void ResetSubTimeStep()
Reset subtime step.
Definition: SimulationModule.h:229
bool IsInputsSetDone()
Whether the inputs (i.e., inputs derived from other modules) have been set.
Definition: SimulationModule.h:234
virtual TimeStepType GetTimeStepType()
Get time step type, default is hillslope process.
Definition: SimulationModule.h:224
virtual void SetDate(time_t t, int year_idx)
Set date time, as well as the sequence number of the entire simulation. Added by LJ for statistics co...
virtual void Set2DData(const char *key, int nrows, int ncols, FLTPT **data)
Set 2D data, by default, DT_Raster2D, float.
Definition: SimulationModule.h:109
virtual bool CheckInputSize2D(const char *module_id, const char *key, int nrows, int ncols, int &m_nrows, int &m_ncols)
Check data length of the two dimensions (i.e., nRows and nCols) of the input array-based data.
virtual bool CheckInputSize(const char *module_id, const char *key, int nrows, int &m_nrows)
Check data length of the first dimension (i.e., nRows) of the input array-based data.
virtual void Set1DData(const char *key, int n, int *data)
Set 1D data, by default, DT_Raster1D, integer.
Definition: SimulationModule.h:91
virtual void Set2DData(const char *key, int nrows, int ncols, int **data)
Set 2D data, by default, DT_Raster2D, integer.
Definition: SimulationModule.h:103
virtual void SetValueByIndex(const char *key, int index, int value)
Set single value to array1D by index, used in MPI version for passing values of subbasins,...
Definition: SimulationModule.h:79
virtual void SetScenario(Scenario *sce)
Set pointer of Scenario class which contains all BMP information. Added by LJ, 2016-6-14.
Definition: SimulationModule.h:151
bool m_inputsSetDone
Whether the inputs parameters (i.e., parameters derived from other modules) have been set.
Definition: SimulationModule.h:281
virtual int Execute()
Execute the simulation. Return 0 for success.
Definition: SimulationModule.h:52
void SetReCalIntermediates(const bool recal)
set whether intermediate parameters need to recalculated
Definition: SimulationModule.h:240
virtual void InitialIntermediates()
Initialize intermediate parameters for reducing computing amount.
Definition: SimulationModule.h:216
virtual void Get1DData(const char *key, int *n, int **data)
Get 1D data, by default, DT_Raster1D, integer.
Definition: SimulationModule.h:127
virtual void SetReaches(clsReaches *rches)
Set pointer of clsReaches class which contains all reaches information. Added by LJ,...
Definition: SimulationModule.h:156
time_t m_date
date time
Definition: SimulationModule.h:267
void SetInputsDone(const bool set_done)
Change the status of setting inputs parameters.
Definition: SimulationModule.h:237
virtual void InitialOutputs()
Initialize output variables.
Definition: SimulationModule.h:202
int m_day
day of the month - [1,31]
Definition: SimulationModule.h:275
virtual bool CheckInputData()
Check the input data.
Definition: SimulationModule.h:172
virtual void Get2DData(const char *key, int *nrows, int *ncols, FLTPT ***data)
Get 2D data, by default, DT_Raster2D, float.
Definition: SimulationModule.h:145
virtual void Get2DData(const char *key, int *nrows, int *ncols, int ***data)
Get 2D data, by default, DT_Raster2D, integer.
Definition: SimulationModule.h:139
virtual void GetValue(const char *key, FLTPT *value)
Get value, DT_Single, float.
Definition: SimulationModule.h:121
int m_dayOfYear
day of year - [1, 366]
Definition: SimulationModule.h:277
int m_year
year
Definition: SimulationModule.h:271
virtual void SetTheadNumber(const int thread_num)
Set thread number for OpenMP.
Definition: SimulationModule.h:58
virtual void SetValue(const char *key, int value)
Set data, DT_Single, integer.
Definition: SimulationModule.h:67
virtual void SetSubbasins(clsSubbasins *subbsns)
Set pointer of clsSubbasins class which contains all subbasins information. Added by LJ,...
Definition: SimulationModule.h:161
virtual void Get1DData(const char *key, int *n, FLTPT **data)
Get 1D data, by default, DT_Raster1D, float.
Definition: SimulationModule.h:133
int m_yearIdx
index of current year of simulation, e.g., the simulation period from 2010 to 2015,...
Definition: SimulationModule.h:269
int m_tsCounter
sub-timestep counter
Definition: SimulationModule.h:279
virtual void GetValue(const char *key, int *value)
Get value, DT_Single, integer.
Definition: SimulationModule.h:115
virtual void SetValueByIndex(const char *key, int index, FLTPT value)
Set single value to array1D by index, used in MPI version for passing values of subbasins,...
Definition: SimulationModule.h:85
virtual void SetValue(const char *key, FLTPT value)
Set data, DT_Single, float point number (float or double)
Definition: SimulationModule.h:73
virtual void Set1DData(const char *key, int n, FLTPT *data)
Set 1D data, by default, DT_Raster1D, float.
Definition: SimulationModule.h:97
SimulationModule()
Constructor.
Base module for all simulation modules in SEIMS.
Definition: SimulationModule.h:46
TimeStepType
Time step types.
Definition: SimulationModule.h:35
All BMPs scenario related data, classes, and functions.
Definition: BMPArealSourceFactory.h:22
Common Cross-platform Geographic Library (CCGL)
void SetOpenMPThread(int n)
Set the omp thread number by given thread number.
Time and datetime related functions in CCGL.