Molecular Dynamics  v0.4
Project for the Practical hosted by the Scientific Computing Chair
enumsStructs.h
Go to the documentation of this file.
1 //
2 // Created by daniel on 29.05.24.
3 //
4 
5 #pragma once
6 
7 #include <array>
8 
9 namespace enumsStructs {
13  enum class Side {
15  };
16 
20  enum class TypeOfForce {
22  };
23 
27  enum class TypeOfModel {
29  };
30 
34  enum class BoundaryCondition {
36  };
37 
38  struct BoundarySet {
45  };
46 
47  enum class TypeOfThermostat {
49  };
50 
53  };
58  double deltaT;
59  double endT;
61  };
62 
67  double deltaT;
68  double endT;
70  double rCutOff;
71  std::array<double, 3> domainSize;
73  };
74 
78  struct Cuboid {
79  std::array<double, 3> position;
80  std::array<unsigned, 3> dimensions;
81  double h;
82  double mass;
83  std::array<double, 3> initVelocity;
86  double epsilon;
87  double sigma;
88  bool fixed;
89  };
90 
94  struct Disc {
95  std::array<double, 3> center;
96  std::array<double, 3> initVelocity;
97  int N;
98  double h;
99  double mass;
102  double epsilon;
103  double sigma;
104  bool fixed;
105  };
106 
107  struct Sphere {
108  std::array<double, 3> center;
109  std::array<double, 3> initVelocity;
110  int N;
111  double h;
112  double mass;
115  double epsilon;
116  double sigma;
117  bool fixed;
118  };
119 
123  struct ParticleType {
124  std::array<double, 3> x;
125  std::array<double, 3> v;
126  double m;
127  double epsilon;
128  double sigma;
129  };
130 
135  //If set to false, all other parameters are ignored
139  //If set to false, maxTemperatureChange will be ignored
146  };
147 
152  //Setting
154  bool pull;
156  std::array<double, 3> pullingForce;
157  double r0;
158  double k;
159  //Membrane itself
160  std::array<double, 3> initialVelocity;
161  std::array<double, 3> position;
162  unsigned N1;
163  unsigned N2;
164  double mass;
165  double h;
166  double epsilon;
167  double sigma;
168  };
169 
174  //general
177  bool gravityOn;
178  std::array<double, 3> gravityVector;
180 
181  //parallelization strategy
183 
184  //thermostat
186 
187  //membrane
189 
190  //model to use in the simulation
192 
193  //Parameters for DirectSumModel
195 
196  //Parameters for LinkedCellModel
198 
199  //Particles and objects of particles
200  std::vector<Cuboid> cuboids;
201  std::vector<Disc> discs;
202  std::vector<ParticleType> particles;
203  std::vector<Sphere> spheres;
204  };
205 
213  inline TypeOfForce setForce(const std::string &selectedForce) {
214  static const std::unordered_map<std::string, TypeOfForce> formatMap = {
215  {"Gravity", TypeOfForce::gravity},
216  {"LennardJonesForce", TypeOfForce::lennardJonesForce}
217  };
218 
219  auto it = formatMap.find(selectedForce);
220  return (it != formatMap.end()) ? it->second : TypeOfForce::invalid;
221  }
222 
231  static const std::unordered_map<TypeOfForce, std::string> formatMap = {
232  {TypeOfForce::gravity, "Gravity"},
233  {TypeOfForce::lennardJonesForce, "LennardJonesForce"}
234  };
235  auto it = formatMap.find(force);
236  return (it != formatMap.end()) ? it->second : "Invalid";
237  }
238 
246  inline TypeOfModel setModel(const std::string &selectedModel) {
247  static const std::unordered_map<std::string, TypeOfModel> formatMap = {
248  {"DirectSum", TypeOfModel::directSum},
249  {"LinkedCells", TypeOfModel::linkedCells}
250  };
251 
252  auto it = formatMap.find(selectedModel);
253  return (it != formatMap.end()) ? it->second : TypeOfModel::invalid;
254  }
255 
264  static const std::unordered_map<TypeOfModel, std::string> formatMap = {
265  {TypeOfModel::directSum, "DirectSum"},
266  {TypeOfModel::linkedCells, "LinkedCells"}
267  };
268  auto it = formatMap.find(model);
269  return (it != formatMap.end()) ? it->second : "Invalid";
270  }
271 
279  inline BoundaryCondition setBoundaryCondition(const std::string &selectedBoundaryCondition) {
280  static const std::unordered_map<std::string, BoundaryCondition> formatMap = {
281  {"Reflective", BoundaryCondition::reflective},
282  {"Outflow", BoundaryCondition::outflow},
283  {"Periodic", BoundaryCondition::periodic}
284  };
285  auto it = formatMap.find(selectedBoundaryCondition);
286  return (it != formatMap.end()) ? it->second : BoundaryCondition::invalid;
287  }
288 
297  static const std::unordered_map<BoundaryCondition, std::string> formatMap = {
298  {BoundaryCondition::reflective, "Reflective"},
299  {BoundaryCondition::outflow, "Outflow"},
300  {BoundaryCondition::periodic, "Periodic"}
301  };
302  auto it = formatMap.find(boundaryCondition);
303  return (it != formatMap.end()) ? it->second : "Invalid";
304  }
305 
314  inline TypeOfThermostat setTypeOfThermostat(const std::string &typeOfThermostat) {
315  static const std::unordered_map<std::string, TypeOfThermostat> formatMap = {
318  };
319  auto it = formatMap.find(typeOfThermostat);
320  return (it != formatMap.end()) ? it->second : throw std::runtime_error("Invalid thermostat selected!");
321  }
322 
331  inline ParallelizationStrategy setTypeOfParallelizationStrategy(const std::string &typeOfParallelizationStrategy) {
332  static const std::unordered_map<std::string, ParallelizationStrategy> formatMap = {
335  {"Skipping", ParallelizationStrategy::skipping},
337  };
338  auto it = formatMap.find(typeOfParallelizationStrategy);
339  return (it != formatMap.end()) ? it->second : throw std::runtime_error("Invalid parallelizatin strategy selected!");
340  }
341 
342 
343 }
Class corresponding to the BoundaryCondition schema type.
Definition: ConfigurationFile.h:6538
Enumeration class corresponding to the ParallelizationStrategy schema type.
Definition: ConfigurationFile.h:1802
Enumeration class corresponding to the force schema type.
Definition: ConfigurationFile.h:6026
Class corresponding to the model schema type.
Definition: ConfigurationFile.h:2755
Definition: enumsStructs.h:9
TypeOfForce setForce(const std::string &selectedForce)
Convert string selection to enum value.
Definition: enumsStructs.h:213
TypeOfModel setModel(const std::string &selectedModel)
Convert string selection to corresponding enum value.
Definition: enumsStructs.h:246
std::string getForce(TypeOfForce &force)
Convert enum value to string.
Definition: enumsStructs.h:230
TypeOfForce
Definition: enumsStructs.h:20
TypeOfThermostat setTypeOfThermostat(const std::string &typeOfThermostat)
Convert string selection to corresponding enum value.
Definition: enumsStructs.h:314
ParallelizationStrategy setTypeOfParallelizationStrategy(const std::string &typeOfParallelizationStrategy)
Convert string selection to corresponding enum value.
Definition: enumsStructs.h:331
BoundaryCondition setBoundaryCondition(const std::string &selectedBoundaryCondition)
Convert string selection to corresponding enum value.
Definition: enumsStructs.h:279
TypeOfThermostat
Definition: enumsStructs.h:47
std::string getModel(TypeOfModel &model)
Convert enum value to string.
Definition: enumsStructs.h:263
std::string getBoundaryCondition(BoundaryCondition &boundaryCondition)
Convert enum value to string.
Definition: enumsStructs.h:296
TypeOfModel
Definition: enumsStructs.h:27
Side
Definition: enumsStructs.h:13
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-unstructured.h:270
Definition: enumsStructs.h:38
BoundaryCondition right
Definition: enumsStructs.h:40
BoundaryCondition left
Definition: enumsStructs.h:42
BoundaryCondition bottom
Definition: enumsStructs.h:44
BoundaryCondition front
Definition: enumsStructs.h:39
BoundaryCondition back
Definition: enumsStructs.h:41
BoundaryCondition top
Definition: enumsStructs.h:43
Definition: enumsStructs.h:78
double brownianMotionAverageVelocity
Definition: enumsStructs.h:85
std::array< double, 3 > position
Definition: enumsStructs.h:79
double sigma
Definition: enumsStructs.h:87
double h
Definition: enumsStructs.h:81
double epsilon
Definition: enumsStructs.h:86
double mass
Definition: enumsStructs.h:82
bool fixed
Definition: enumsStructs.h:88
std::array< double, 3 > initVelocity
Definition: enumsStructs.h:83
std::array< unsigned, 3 > dimensions
Definition: enumsStructs.h:80
int dimensionsBrownianMotion
Definition: enumsStructs.h:84
Definition: enumsStructs.h:57
double endT
Definition: enumsStructs.h:59
double deltaT
Definition: enumsStructs.h:58
TypeOfForce force
Definition: enumsStructs.h:60
Definition: enumsStructs.h:94
std::array< double, 3 > center
Definition: enumsStructs.h:95
double h
Definition: enumsStructs.h:98
double sigma
Definition: enumsStructs.h:103
int N
Definition: enumsStructs.h:97
double brownianMotionAverageVelocity
Definition: enumsStructs.h:101
double epsilon
Definition: enumsStructs.h:102
int dimensionsBrownianMotion
Definition: enumsStructs.h:100
bool fixed
Definition: enumsStructs.h:104
double mass
Definition: enumsStructs.h:99
std::array< double, 3 > initVelocity
Definition: enumsStructs.h:96
double endT
Definition: enumsStructs.h:68
std::array< double, 3 > domainSize
Definition: enumsStructs.h:71
double deltaT
Definition: enumsStructs.h:67
double rCutOff
Definition: enumsStructs.h:70
TypeOfForce force
Definition: enumsStructs.h:69
BoundarySet boundaryConditions
Definition: enumsStructs.h:72
Definition: enumsStructs.h:151
bool pull
Definition: enumsStructs.h:154
double epsilon
Definition: enumsStructs.h:166
double h
Definition: enumsStructs.h:165
double mass
Definition: enumsStructs.h:164
double sigma
Definition: enumsStructs.h:167
unsigned N2
Definition: enumsStructs.h:163
bool membraneSetting
Definition: enumsStructs.h:153
double r0
Definition: enumsStructs.h:157
unsigned N1
Definition: enumsStructs.h:162
std::array< double, 3 > initialVelocity
Definition: enumsStructs.h:160
std::array< double, 3 > position
Definition: enumsStructs.h:161
int pullingActiveUntil
Definition: enumsStructs.h:155
double k
Definition: enumsStructs.h:158
std::array< double, 3 > pullingForce
Definition: enumsStructs.h:156
Definition: enumsStructs.h:123
double m
Definition: enumsStructs.h:126
std::array< double, 3 > x
Definition: enumsStructs.h:124
double sigma
Definition: enumsStructs.h:128
double epsilon
Definition: enumsStructs.h:127
std::array< double, 3 > v
Definition: enumsStructs.h:125
Definition: enumsStructs.h:173
MembraneParameters membraneParameters
Definition: enumsStructs.h:188
std::vector< Sphere > spheres
Definition: enumsStructs.h:203
std::vector< Disc > discs
Definition: enumsStructs.h:201
std::vector< Cuboid > cuboids
Definition: enumsStructs.h:200
std::vector< ParticleType > particles
Definition: enumsStructs.h:202
DirectSumSimulationParameters parametersDirectSum
Definition: enumsStructs.h:194
ThermostatParameters thermostatParameters
Definition: enumsStructs.h:185
int maxNumThreads
Definition: enumsStructs.h:179
LinkedCellsSimulationParameters parametersLinkedCells
Definition: enumsStructs.h:197
std::array< double, 3 > gravityVector
Definition: enumsStructs.h:178
int outputFrequency
Definition: enumsStructs.h:176
bool gravityOn
Definition: enumsStructs.h:177
TypeOfModel model
Definition: enumsStructs.h:191
ParallelizationStrategy parallelizationStrategy
Definition: enumsStructs.h:182
std::string outputFileName
Definition: enumsStructs.h:175
Definition: enumsStructs.h:107
std::array< double, 3 > center
Definition: enumsStructs.h:108
double h
Definition: enumsStructs.h:111
double epsilon
Definition: enumsStructs.h:115
int N
Definition: enumsStructs.h:110
double sigma
Definition: enumsStructs.h:116
bool fixed
Definition: enumsStructs.h:117
int dimensionsBrownianMotion
Definition: enumsStructs.h:113
double mass
Definition: enumsStructs.h:112
double brownianMotionAverageVelocity
Definition: enumsStructs.h:114
std::array< double, 3 > initVelocity
Definition: enumsStructs.h:109
Definition: enumsStructs.h:134
int applyAfterHowManySteps
Definition: enumsStructs.h:144
int dimensions
Definition: enumsStructs.h:145
bool initialiseSystemWithBrownianMotion
Definition: enumsStructs.h:138
bool useThermostat
Definition: enumsStructs.h:136
double initialTemperature
Definition: enumsStructs.h:141
bool applyScalingGradually
Definition: enumsStructs.h:140
double maxTemperatureChange
Definition: enumsStructs.h:143
double targetTemperature
Definition: enumsStructs.h:142
TypeOfThermostat typeOfThermostat
Definition: enumsStructs.h:137