MoCSI API Reference
Loading...
Searching...
No Matches
GenericManagingModule.h
Go to the documentation of this file.
1#ifndef TPM_SRC_GENERIC_MANAGING_MODULE_H
2#define TPM_SRC_GENERIC_MANAGING_MODULE_H
3
4#include <fstream>
5#include <memory>
6#include <string>
7#include <unordered_set>
8#include <utility>
9#include <valarray>
10
11#include "ChainManager.h"
12#include "GenericSubmodule.h"
13#include "IniParser.h"
14#include "InputManager.h"
15#include "SimulationClassBase.h"
16
27template <typename T>
29{
30 protected:
31 SimulationClassBase<T>* sim{}; // access to simulation class parameters
32 std::shared_ptr<std::valarray<T>>
33 module_field; // unique field that is defined by module (not a must)
35 "global"}; // A chain manager to store and execute submodel chains.
36 std::vector<std::string> m_generic_submodules; // The submodules that will be loaded into
37 // the chain, set by children.
38 InputManager ini_file_data; // The handler for the data which gets passed through the
39 // module-specific ini-file
40 bool in_snapshot{false}; // should something (default the field) be included in snapshot?
41 bool in_output{false}; // should something (default the field) be included in output?
43 '?'}; // the output field character. Also identifies return-call from load_snapshot
44
45 public:
51
52 virtual ~GenericManagingModule() = default;
53
60
61 virtual bool setup(std::vector<std::shared_ptr<GenericSubmodule<T>>> all_submodules)
62 {
63 return true;
64 }; // loads module into necessary module chains (auto load for calculation chains)
65 virtual bool exec(std::string_view param) = 0; // main functionality of the module
66
67 // different implementations for exec function, depending on module chain
68 virtual bool init() { return true; };
69 virtual bool preTimeStep() { return true; };
70 virtual bool postTimeStep() { return true; };
71 virtual bool postNonLinIter() { return true; };
72 virtual bool output() { return true; };
73 // Functions needed to specify auto-load and dependency if needed/wanted.
74 virtual std::vector<std::string> getChainInsertion() const
75 {
76 return {};
77 }; // Return empty vector as default
78 virtual std::vector<std::string> getDependencies() const
79 {
80 return {};
81 }; // Return empty vector as default
82 virtual void setSubmoduleList(std::vector<std::string> submodules)
83 {
85 }; // TODO: Replace by ini file
86 std::vector<std::string> getSubmoduleList() const { return m_generic_submodules; }
87
88 // Function to access the name of the module via the base class
89 virtual std::string_view getNameLocal() const = 0; // return name of module
90
97
103 void setSubmodules(std::vector<std::shared_ptr<GenericSubmodule<T>>> all_submodules)
104 {
105 std::vector<std::string> chain_names{sub_module_chain.getChainNames()};
107 for (auto& submodule : all_submodules)
108 {
109 std::unordered_set<std::string> requested_sub_modules(m_generic_submodules.begin(),
111 if (requested_sub_modules.find(static_cast<std::string>(submodule->getNameLocal()))
112 != requested_sub_modules.end())
113 {
114 for (const auto& key : chain_names)
115 {
117 submodule->setFieldPtr(module_field);
118 }
120 }
121 }
123 {
124 throw std::runtime_error(static_cast<std::string>(this->getNameLocal())
125 + ": Not all requested modules found in the registry.");
126 }
127 }
128
136 {
137 std::unordered_map<std::string, std::any> ini_file_content{this->ini_file_data.data()};
138 for (const auto& [key, map_content] : ini_file_content)
139 {
141 << " = " << std::any_cast<std::string>(map_content) << "\n";
142 }
143 }
144
154 const std::unordered_map<std::string, std::any>& global_ini_content)
155 {
156 for (const auto& [key, map_content] : global_ini_content)
157 {
158 this->ini_file_data.forceValueOverwrite(key,
159 std::any_cast<std::string>(map_content));
160 }
161 }
162};
163
164#endif
void insertModule(std::string_view key, const std::shared_ptr< ModuleType > &module)
Insert modules into chains. Generates a new chain, if the chain key does not yet exist.
Definition ChainManager.h:134
std::vector< std::string > getChainNames() const
Getter function for the chain names.
Definition ChainManager.h:309
Error class to throw when a module chain has circular or missing dependencies. Inherits from std::exc...
Definition ChainManager.h:28
Abstract base class for the managing modules. Managing modules are the highest tier of modules and ar...
Definition GenericManagingModule.h:29
virtual bool output()
Definition GenericManagingModule.h:72
virtual std::vector< std::string > getDependencies() const
Definition GenericManagingModule.h:78
InputManager ini_file_data
Definition GenericManagingModule.h:38
virtual void setSubmoduleList(std::vector< std::string > submodules)
Definition GenericManagingModule.h:82
SimulationClassBase< T > * sim
Definition GenericManagingModule.h:31
ChainManager< GenericSubmodule< T > > sub_module_chain
Definition GenericManagingModule.h:34
virtual bool setup(std::vector< std::shared_ptr< GenericSubmodule< T > > > all_submodules)
Definition GenericManagingModule.h:61
virtual std::vector< std::string > getChainInsertion() const
Definition GenericManagingModule.h:74
std::shared_ptr< std::valarray< T > > module_field
Definition GenericManagingModule.h:33
void writeToGlobalIniContent(std::ofstream &global_stream)
Function that writes the local ini file contents to the global ini file stream. "Tags" the keys with ...
Definition GenericManagingModule.h:135
void setSubmodules(std::vector< std::shared_ptr< GenericSubmodule< T > > > all_submodules)
Sets all the submodules of this module into their corresponding chains. Also sets their field-pointer...
Definition GenericManagingModule.h:103
GenericManagingModule()
Constructor without arguments. Will be employed when using the static modules registry.
Definition GenericManagingModule.h:50
bool in_snapshot
Definition GenericManagingModule.h:40
std::vector< std::string > m_generic_submodules
Definition GenericManagingModule.h:36
std::vector< std::string > getSubmoduleList() const
Definition GenericManagingModule.h:86
GenericManagingModule(SimulationClassBase< T > *l_sim)
Constructor to be preferably used when a module is created during runtime.
Definition GenericManagingModule.h:59
void overwriteLocalIniContent(const std::unordered_map< std::string, std::any > &global_ini_content)
Writes the (already trimmed to the local content) data from the global ini file to the local ini file...
Definition GenericManagingModule.h:153
virtual ~GenericManagingModule()=default
virtual bool init()
Definition GenericManagingModule.h:68
char field_id
Definition GenericManagingModule.h:42
virtual bool preTimeStep()
Definition GenericManagingModule.h:69
virtual bool postNonLinIter()
Definition GenericManagingModule.h:71
virtual std::string_view getNameLocal() const =0
virtual bool postTimeStep()
Definition GenericManagingModule.h:70
void setSimPointer(SimulationClassBase< T > *sim)
Setter function for the sim pointer. As the module is usually registered during static initialization...
Definition GenericManagingModule.h:96
bool in_output
Definition GenericManagingModule.h:41
virtual bool exec(std::string_view param)=0
This class that manages parameter input through the default ini and user supplied ini files + CLI....
Definition InputManager.h:26
std::unordered_map< std::string, std::any > data()
Definition InputManager.h:44
void forceValueOverwrite(const std::string &key, const std::string &value)
Definition InputManager.cpp:60