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#ifdef MPI_PRESENT
5#include <mpi.h>
6#endif
7
8#include <iostream>
9#include <map>
10#include <memory>
11#include <string>
12#include <valarray>
13
14#include "DenseMatrix.h"
15#include "InputManager.h"
16
17template <typename T>
19{
20 public:
22 SimulationClassBase(const int argc, const char* argv[]);
23 SimulationClassBase(const std::string& user_ini);
24
25 std::map<std::string, std::valarray<T>> m_field_map{};
26 std::string_view
27 m_current_position; // make sure it always points to a valid std::string member
28
29 InputManager m_simulation_config{"ini_files/default.ini"};
30
31 T global_convergence_diff; // Max. difference between inner iterations
33 // Track time step too, to avoid rounding error in elapsed time for modules that need the
34 // exact time step.
35 int time_step{0};
36
37 int my_rank{0};
38 int world_size{1};
39
40#ifdef MPI_PRESENT
41 int my_sub_rank, sub_size, my_inter_rank; // rank and size variables
43 other_color_exists; // Helper variables for subcomm and intercomm creation
45 min_number_facets_per_proc; // Helper variables for domain decomp.
46 T local_convergence_diff; // This variable only gets used with MPI
47 T max_var_value; // This variable only gets used with MPI
49#endif
50
51 // These getters seem wasteful, but I did it to encapsulate the strings as nothing should be
52 // able to change them at run time.
53 void setInitChainStr() { m_current_position = m_init_str; };
54 void setPreTimeStepChainStr() { m_current_position = m_preTs_str; };
55 void setPostTimeStepChainStr() { m_current_position = m_postTs_str; };
56 void setPostNonLinIterChainStr() { m_current_position = m_postNonLinIter_str; };
57 void setOutputChainStr() { m_current_position = m_output_str; };
58
59 virtual void setUserIni(const std::string& user_ini);
60 void printField(const std::string& key);
61 const std::valarray<T>& getField(const std::string& key) const;
62 const T& getFieldValue(const std::string& key, int pos) const;
63
64 virtual int run() = 0;
65
66 virtual ~SimulationClassBase() = default;
67
68 private:
69 std::string m_init_str{"InitChain"};
70 std::string m_preTs_str{"PreTimeStepChain"};
71 std::string m_postTs_str{"PostTimeStepChain"};
72 std::string m_postNonLinIter_str{"PostNonLinIterChain"};
73 std::string m_output_str{"OutputChain"};
74};
75
76template <typename T>
80
111template <typename T>
113{
114 // Merge build metadata into configuration
115 m_simulation_config.addBuildInfo();
116
117 // Parse command line arguments such as ini file and overrides
118 m_simulation_config.parseCommandLineArguments(
119 argc, argv, m_simulation_config.getStringParameters("ini_folder_path"));
120}
121
122template <typename T>
124{
125 // Merge build metadata into configuration
126 m_simulation_config.addBuildInfo();
127
128 // Load the ini file
129 m_simulation_config.loadUserInput(m_simulation_config.getStringParameters("ini_folder_path")
130 + user_ini);
131}
132
133template <typename T>
134const std::valarray<T>& SimulationClassBase<T>::getField(const std::string& key) const
135{
136 return m_field_map.at(key);
137}
138
139template <typename T>
140const T& SimulationClassBase<T>::getFieldValue(const std::string& key, int pos) const
141{
142 return m_field_map.at(key)[pos];
143}
144
145template <typename T>
147{
148 m_simulation_config.loadUserInput(m_simulation_config.getStringParameters("ini_folder_path")
149 + user_ini);
150}
151
152template <typename T>
154{
155 std::cout << key << ": ";
156 for (const auto& val : m_field_map[key])
157 {
158 std::cout << val << ' ';
159 }
160 std::cout << "\n";
161}
162
163#endif
Concrete implementation of a matrix class representing a Compressed Sparse Rows (CSR) matrix....
Definition CsrMatrix.h:37
CsrSparseMatrix()
Constructor for an empty CsrSparseMatrix object. Leaves all storage arrays empty but sets the flag to...
Definition CsrMatrix.h:94
This class that manages parameter input through the default ini and user supplied ini files + CLI....
Definition InputManager.h:26
Definition SimulationClassBase.h:19
virtual int run()=0
virtual void setUserIni(const std::string &user_ini)
Definition SimulationClassBase.h:146
virtual ~SimulationClassBase()=default
void setPostNonLinIterChainStr()
Definition SimulationClassBase.h:56
SimulationClassBase()
Definition SimulationClassBase.h:77
std::map< std::string, std::valarray< T > > m_field_map
Definition SimulationClassBase.h:25
const std::valarray< T > & getField(const std::string &key) const
Definition SimulationClassBase.h:134
const T & getFieldValue(const std::string &key, int pos) const
Definition SimulationClassBase.h:140
void setInitChainStr()
Definition SimulationClassBase.h:53
InputManager m_simulation_config
Definition SimulationClassBase.h:29
int time_step
Definition SimulationClassBase.h:35
void setOutputChainStr()
Definition SimulationClassBase.h:57
T elapsed_time
Definition SimulationClassBase.h:32
T global_convergence_diff
Definition SimulationClassBase.h:31
int my_rank
Definition SimulationClassBase.h:37
void setPreTimeStepChainStr()
Definition SimulationClassBase.h:54
std::string_view m_current_position
Definition SimulationClassBase.h:27
int world_size
Definition SimulationClassBase.h:38
void printField(const std::string &key)
Definition SimulationClassBase.h:153
void setPostTimeStepChainStr()
Definition SimulationClassBase.h:55