12#ifndef SEIMS_MODULE_FACTORY_H
13#define SEIMS_MODULE_FACTORY_H
24#define DLLINSTANCE HINSTANCE
26#define DLLINSTANCE void*
31typedef const char*(*MetadataFunction)();
46 vector<string>& moduleIDs,
47 map<string, SEIMSModuleSetting *>& moduleSettings,
48 vector<DLLINSTANCE>& dllHandles,
49 map<string, InstanceFunction>& instanceFuncs,
50 map<string, MetadataFunction>& metadataFuncs,
61 int mpi_rank = 0,
int mpi_size = -1);
66 int mpi_rank = 0,
int mpi_size = -1);
90 map<string, vector<ParamInfo<FLTPT> *> >&
GetModuleParams() {
return m_moduleParams; }
96 map<string, vector<ParamInfo<FLTPT> *> >&
GetModuleInputs() {
return m_moduleInputs; }
135 static bool ReadConfigFile(
const char* configFileName, vector<string>& moduleIDs,
136 map<string, SEIMSModuleSetting *>& moduleSettings);
157 map<string, SEIMSModuleSetting *>& moduleSettings,
158 vector<DLLINSTANCE>& dllHandles,
159 map<string, InstanceFunction>& instanceFuncs,
160 map<string, MetadataFunction>& metadataFuncs,
173 static void ReadDLL(
const string& module_path,
const string&
id,
const string& dllID,
174 vector<DLLINSTANCE>& dllHandles,
175 map<string, InstanceFunction>& instanceFuncs,
176 map<string, MetadataFunction>& metadataFuncs);
196 static void ReadIOSetting(
string& moduleID, TiXmlDocument& doc, SEIMSModuleSetting* setting,
197 const string& header,
const string& title,
221 vector<string> m_moduleIDs;
223 map<string, InstanceFunction> m_instanceFuncs;
225 map<string, MetadataFunction> m_metadataFuncs;
227 vector<DLLINSTANCE> m_dllHandles;
229 map<string, SEIMSModuleSetting *> m_settings;
231 map<string, vector<ParamInfo<FLTPT>*> > m_moduleParams;
233 map<string, vector<ParamInfo<int>*> > m_moduleParamsInt;
235 map<string, vector<ParamInfo<FLTPT>*> > m_moduleInputs;
237 map<string, vector<ParamInfo<int>*> > m_moduleInputsInt;
239 map<string, vector<ParamInfo<FLTPT>*> > m_moduleOutputs;
241 map<string, vector<ParamInfo<int>*> > m_moduleOutputsInt;
243 map<string, vector<ParamInfo<FLTPT>*> > m_moduleInOutputs;
245 map<string, vector<ParamInfo<int>*> > m_moduleInOutputsInt;
247 vector<ParamInfo<FLTPT> *> m_tfValueInputs;
249 vector<ParamInfo<int>*> m_tfValueInputsInt;
Class to store parameter item information.
User-defined module information in config.fig.
Parent class for all modules in SEIMS.
#define CVT_INT(param)
A reference to the postfix of executable file for RELWITHDEBINFO mode.
Definition: basic.h:325
Base class for classes that cannot be copied.
Definition: basic.h:385
Class to store and manage parameter information from the parameter database.
Definition: ParamInfo.h:37
static dimensionTypes MatchType(const string &strType)
Match data type, e.g., 1D array.
map< string, vector< ParamInfo< int > * > > & GetModuleInOutputsInt()
Get integer InOutput of modules, in and out from current module.
Definition: ModuleFactory.h:111
map< string, vector< ParamInfo< FLTPT > * > > & GetModuleInOutputs()
Get InOutput of modules, in and out from current module.
Definition: ModuleFactory.h:108
static bool ReadConfigFile(const char *configFileName, vector< string > &moduleIDs, map< string, SEIMSModuleSetting * > &moduleSettings)
Read configuration file.
SimulationModule * GetInstance(const string &moduleID)
Get module instance by moduleID.
Definition: ModuleFactory.h:179
map< string, vector< ParamInfo< int > * > > & GetModuleInputsInt()
Get integer input of modules, from other modules.
Definition: ModuleFactory.h:99
static string GetComparableName(string ¶Name)
Get comparable name after underscore if necessary, e.g., T_PET => use PET.
int GetTransferredInputsIntCount()
Get the count of transferred single integer value inputs.
Definition: ModuleFactory.h:123
void GetValueFromDependencyModule(int iModule, vector< SimulationModule * > &modules)
Get value from dependency modules.
vector< ParamInfo< int > * > & GetTransferredInputsInt()
Get transferred single integer value inputs across subbasins.
Definition: ModuleFactory.h:117
static ParamInfo< FLTPT > * FindDependentParam(ParamInfo< FLTPT > *paramInfo, vector< string > &moduleIDs, map< string, vector< ParamInfo< FLTPT > * > > &moduleOutputs)
Find dependent parameters.
static void ReadParameterSetting(string &moduleID, TiXmlDocument &doc, SEIMSModuleSetting *setting, map< string, vector< ParamInfo< FLTPT > * > > &moduleParams, map< string, vector< ParamInfo< int > * > > &moduleParamsInt)
Read module's parameters setting from XML string.
ModuleFactory(string model_name, vector< string > &moduleIDs, map< string, SEIMSModuleSetting * > &moduleSettings, vector< DLLINSTANCE > &dllHandles, map< string, InstanceFunction > &instanceFuncs, map< string, MetadataFunction > &metadataFuncs, map< string, vector< ParamInfo< FLTPT > * > > &moduleParams, map< string, vector< ParamInfo< int > * > > &moduleParamsInt, map< string, vector< ParamInfo< FLTPT > * > > &moduleInputs, map< string, vector< ParamInfo< int > * > > &moduleInputsInt, map< string, vector< ParamInfo< FLTPT > * > > &moduleOutputs, map< string, vector< ParamInfo< int > * > > &moduleOutputsInt, map< string, vector< ParamInfo< FLTPT > * > > &moduleInOutputs, map< string, vector< ParamInfo< int > * > > &moduleInOutputsInt, vector< ParamInfo< FLTPT > * > &tfValueInputs, vector< ParamInfo< int > * > &tfValueInputsInt, int mpi_rank=0, int mpi_size=-1)
Constructor.
int GetTransferredInputsCount()
Get the count of transferred single value inputs.
Definition: ModuleFactory.h:120
map< string, SEIMSModuleSetting * > & GetModuleSettings()
Get map of module settings.
Definition: ModuleFactory.h:87
vector< string > & GetModuleIDs()
Get unique module IDs.
Definition: ModuleFactory.h:84
map< string, vector< ParamInfo< FLTPT > * > > & GetModuleInputs()
Get Input of modules, from other modules.
Definition: ModuleFactory.h:96
static void ReadDLL(const string &module_path, const string &id, const string &dllID, vector< DLLINSTANCE > &dllHandles, map< string, InstanceFunction > &instanceFuncs, map< string, MetadataFunction > &metadataFuncs)
Load function pointers from .DLL or .so.
void CreateModuleList(vector< SimulationModule * > &modules, int nthread=1)
Create a set of objects and set up the relationship among them. Return time-consuming.
vector< ParamInfo< FLTPT > * > & GetTransferredInputs()
Get transferred single value inputs across subbasins.
Definition: ModuleFactory.h:114
static bool LoadSettingsFromFile(const char *filename, vector< vector< string > > &settings)
Load modules setting from file.
int m_mpi_size
Rank size for MPI.
Definition: ModuleFactory.h:216
static ModuleFactory * Init(const string &module_path, InputArgs *input_args, int mpi_rank=0, int mpi_size=-1)
Initialization for exception-safe constructor.
static void ReadIOSetting(string &moduleID, TiXmlDocument &doc, SEIMSModuleSetting *setting, const string &header, const string &title, map< string, vector< ParamInfo< FLTPT > * > > &vars, map< string, vector< ParamInfo< int > * > > &varsInt)
Read module's input, output, and in/output setting from XML string.
bool FindOutputParameter(string &outputID, int &iModule, ParamInfo< FLTPT > *¶Info)
Find outputID parameter's module. Return Module index iModule and its ParamInfo<FLTPT>
map< string, vector< ParamInfo< FLTPT > * > > & GetModuleParams()
Get Parameters of modules.
Definition: ModuleFactory.h:90
map< string, vector< ParamInfo< int > * > > & GetModuleParamsInt()
Get integer parameters of modules.
Definition: ModuleFactory.h:93
string GetModuleID(int i) const
Get Module ID by index.
Definition: ModuleFactory.h:81
map< string, vector< ParamInfo< FLTPT > * > > & GetModuleOutputs()
Get Output of modules, out from current module.
Definition: ModuleFactory.h:102
static transferTypes MatchTransferType(const string &tfType)
Match data transfer type, e.g., TF_SingleValue.
map< string, vector< ParamInfo< int > * > > & GetModuleOutputsInt()
Get integer Output of modules, out from current module.
Definition: ModuleFactory.h:105
int m_mpi_rank
Rank ID for MPI, starts from 0 to mpi_size_ - 1.
Definition: ModuleFactory.h:214
~ModuleFactory()
Destructor.
static bool LoadParseLibrary(const string &module_path, vector< string > &moduleIDs, map< string, SEIMSModuleSetting * > &moduleSettings, vector< DLLINSTANCE > &dllHandles, map< string, InstanceFunction > &instanceFuncs, map< string, MetadataFunction > &metadataFuncs, map< string, vector< ParamInfo< FLTPT > * > > &moduleParams, map< string, vector< ParamInfo< int > * > > &moduleParamsInt, map< string, vector< ParamInfo< FLTPT > * > > &moduleInputs, map< string, vector< ParamInfo< int > * > > &moduleInputsInt, map< string, vector< ParamInfo< FLTPT > * > > &moduleOutputs, map< string, vector< ParamInfo< int > * > > &moduleOutputsInt, map< string, vector< ParamInfo< FLTPT > * > > &moduleInOutputs, map< string, vector< ParamInfo< int > * > > &moduleInOutputsInt, vector< ParamInfo< FLTPT > * > &tfValueInputs, vector< ParamInfo< int > * > &tfValueInputsInt)
Load and parse module libraries.
static bool IsConstantInputFromName(const string &name)
Is constant input?
static ParamInfo< int > * FindDependentParam(ParamInfo< int > *paramInfo, vector< string > &moduleIDs, map< string, vector< ParamInfo< int > * > > &moduleOutputs)
Find dependent parameters.
Linking user-defined modules to create the modeling workflow.
Definition: ModuleFactory.h:40
Base module for all simulation modules in SEIMS.
Definition: SimulationModule.h:46
transferTypes
Float values be transferred across subbasins for MPI version.
Definition: MetadataInfoConst.h:86
dimensionTypes
enum of dimension data types
Definition: MetadataInfoConst.h:63
Parse the input arguments as a class which can be easily extended.
All BMPs scenario related data, classes, and functions.
Definition: BMPArealSourceFactory.h:22