MoCSI API Reference
Loading...
Searching...
No Matches
SimulationClassBase.h
Go to the documentation of this file.
1#ifndef SIMULATION_CLASS_BASE_H
2#define SIMULATION_CLASS_BASE_H
3
4#include <iostream>
5#include <map>
6#include <memory>
7#include <string>
8#include <valarray>
9
10#include "DenseMatrix.h"
11#include "InputManager.h"
12
13template <typename T>
15{
16 public:
18 SimulationClassBase(const int argc, const char* argv[]);
19 SimulationClassBase(const std::string& user_ini);
20
21 std::map<std::string, std::valarray<T>> m_field_map{};
22 std::string_view m_current_position;
23
24 InputManager m_simulation_config{"ini_files/default.ini"};
25
27 // Track time step too, to avoid rounding error in elapsed time for modules that need the
28 // exact time step.
29 int time_step{0};
30
31 // These getters seem wasteful, but I did it to encapsulate the strings as nothing should be
32 // able to change them at run time.
33 void setInitChainStr() { m_current_position = m_init_str; };
34 void setPreTimeStepChainStr() { m_current_position = m_preTs_str; };
35 void setPostTimeStepChainStr() { m_current_position = m_postTs_str; };
36 void setPostNonLinIterChainStr() { m_current_position = m_postNonLinIter_str; };
37 void setOutputChainStr() { m_current_position = m_output_str; };
38
39 virtual void setUserIni(const std::string& user_ini);
40 void printField(const std::string& key);
41 const std::valarray<T>& getField(const std::string& key) const;
42 const T& getFieldValue(const std::string& key, int pos) const;
43
44 virtual int run() = 0;
45
46 virtual ~SimulationClassBase() = default;
47
48 private:
49 std::string m_init_str{"InitChain"};
50 std::string m_preTs_str{"PreTimeStepChain"};
51 std::string m_postTs_str{"PostTimeStepChain"};
52 std::string m_postNonLinIter_str{"PostNonLinIterChain"};
53 std::string m_output_str{"OutputChain"};
54};
55
56template <typename T>
60
91template <typename T>
93{
94 // Merge build metadata into configuration
95 m_simulation_config.addBuildInfo();
96
97 // Parse command line arguments such as ini file and overrides
98 m_simulation_config.parseCommandLineArguments(
99 argc, argv, m_simulation_config.getStringParameters("ini_folder_path"));
100}
101
102template <typename T>
104{
105 // Merge build metadata into configuration
106 m_simulation_config.addBuildInfo();
107
108 // Load the ini file
109 m_simulation_config.loadUserInput(m_simulation_config.getStringParameters("ini_folder_path")
110 + user_ini);
111}
112
113template <typename T>
114const std::valarray<T>& SimulationClassBase<T>::getField(const std::string& key) const
115{
116 return m_field_map.at(key);
117}
118
119template <typename T>
120const T& SimulationClassBase<T>::getFieldValue(const std::string& key, int pos) const
121{
122 return m_field_map.at(key)[pos];
123}
124
125template <typename T>
127{
128 m_simulation_config.loadUserInput(m_simulation_config.getStringParameters("ini_folder_path")
129 + user_ini);
130}
131
132template <typename T>
134{
135 std::cout << key << ": ";
136 for (const auto& val : m_field_map[key])
137 {
138 std::cout << val << ' ';
139 }
140 std::cout << "\n";
141}
142
143#endif
Error class to throw when a module chain has circular or missing dependencies. Inherits from std::exc...
Definition ChainManager.h:28
This class that manages parameter input through the default ini and user supplied ini files + CLI....
Definition InputManager.h:26
Definition SimulationClassBase.h:15
virtual int run()=0
virtual void setUserIni(const std::string &user_ini)
Definition SimulationClassBase.h:126
virtual ~SimulationClassBase()=default
void setPostNonLinIterChainStr()
Definition SimulationClassBase.h:36
SimulationClassBase()
Definition SimulationClassBase.h:57
std::map< std::string, std::valarray< T > > m_field_map
Definition SimulationClassBase.h:21
const std::valarray< T > & getField(const std::string &key) const
Definition SimulationClassBase.h:114
const T & getFieldValue(const std::string &key, int pos) const
Definition SimulationClassBase.h:120
void setInitChainStr()
Definition SimulationClassBase.h:33
InputManager m_simulation_config
Definition SimulationClassBase.h:24
int time_step
Definition SimulationClassBase.h:29
void setOutputChainStr()
Definition SimulationClassBase.h:37
T elapsed_time
Definition SimulationClassBase.h:26
void setPreTimeStepChainStr()
Definition SimulationClassBase.h:34
std::string_view m_current_position
Definition SimulationClassBase.h:22
void printField(const std::string &key)
Definition SimulationClassBase.h:133
void setPostTimeStepChainStr()
Definition SimulationClassBase.h:35