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
32 // Track time step too, to avoid rounding error in elapsed time for modules that need the
33 // exact time step.
34 int time_step{0};
35
36 int my_rank{0};
37 int world_size{1};
38
39#ifdef MPI_PRESENT
40 int my_sub_rank, sub_size, my_inter_rank; // rank and size variables
42 other_color_exists; // Helper variables for subcomm and intercomm creation
44 min_number_facets_per_proc; // Helper variables for domain decomp.
45 T local_convergence_diff; // This variable only gets used with MPI
46 T global_convergence_diff; // This variable only gets used with MPI
48#endif
49
50 // These getters seem wasteful, but I did it to encapsulate the strings as nothing should be
51 // able to change them at run time.
52 void setInitChainStr() { m_current_position = m_init_str; };
53 void setPreTimeStepChainStr() { m_current_position = m_preTs_str; };
54 void setPostTimeStepChainStr() { m_current_position = m_postTs_str; };
55 void setPostNonLinIterChainStr() { m_current_position = m_postNonLinIter_str; };
56 void setOutputChainStr() { m_current_position = m_output_str; };
57
58 virtual void setUserIni(const std::string& user_ini);
59 void printField(const std::string& key);
60 const std::valarray<T>& getField(const std::string& key) const;
61 const T& getFieldValue(const std::string& key, int pos) const;
62
63 virtual int run() = 0;
64
65 virtual ~SimulationClassBase() = default;
66
67 private:
68 std::string m_init_str{"InitChain"};
69 std::string m_preTs_str{"PreTimeStepChain"};
70 std::string m_postTs_str{"PostTimeStepChain"};
71 std::string m_postNonLinIter_str{"PostNonLinIterChain"};
72 std::string m_output_str{"OutputChain"};
73};
74
75template <typename T>
79
110template <typename T>
112{
113 // Merge build metadata into configuration
114 m_simulation_config.addBuildInfo();
115
116 // Parse command line arguments such as ini file and overrides
117 m_simulation_config.parseCommandLineArguments(
118 argc, argv, m_simulation_config.getStringParameters("ini_folder_path"));
119}
120
121template <typename T>
123{
124 // Merge build metadata into configuration
125 m_simulation_config.addBuildInfo();
126
127 // Load the ini file
128 m_simulation_config.loadUserInput(m_simulation_config.getStringParameters("ini_folder_path")
129 + user_ini);
130}
131
132template <typename T>
133const std::valarray<T>& SimulationClassBase<T>::getField(const std::string& key) const
134{
135 return m_field_map.at(key);
136}
137
138template <typename T>
139const T& SimulationClassBase<T>::getFieldValue(const std::string& key, int pos) const
140{
141 return m_field_map.at(key)[pos];
142}
143
144template <typename T>
146{
147 m_simulation_config.loadUserInput(m_simulation_config.getStringParameters("ini_folder_path")
148 + user_ini);
149}
150
151template <typename T>
153{
154 std::cout << key << ": ";
155 for (const auto& val : m_field_map[key])
156 {
157 std::cout << val << ' ';
158 }
159 std::cout << "\n";
160}
161
162#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:145
virtual ~SimulationClassBase()=default
void setPostNonLinIterChainStr()
Definition SimulationClassBase.h:55
SimulationClassBase()
Definition SimulationClassBase.h:76
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:133
const T & getFieldValue(const std::string &key, int pos) const
Definition SimulationClassBase.h:139
void setInitChainStr()
Definition SimulationClassBase.h:52
InputManager m_simulation_config
Definition SimulationClassBase.h:29
int time_step
Definition SimulationClassBase.h:34
void setOutputChainStr()
Definition SimulationClassBase.h:56
T elapsed_time
Definition SimulationClassBase.h:31
int my_rank
Definition SimulationClassBase.h:36
void setPreTimeStepChainStr()
Definition SimulationClassBase.h:53
std::string_view m_current_position
Definition SimulationClassBase.h:27
int world_size
Definition SimulationClassBase.h:37
void printField(const std::string &key)
Definition SimulationClassBase.h:152
void setPostTimeStepChainStr()
Definition SimulationClassBase.h:54