Feellgood
feellgoodSettings.h
Go to the documentation of this file.
1 #ifndef feellgoodSettings_h
2 #define feellgoodSettings_h
3 
9 #include <cmath>
10 #include <iostream>
11 #include <map>
12 #include <string>
13 #include <vector>
14 
15 #include <yaml-cpp/yaml.h>
16 
17 #include "expression_parser.h"
18 #include "facette.h"
19 #include "tetra.h"
20 #include "time_integration.h"
21 
28  {
31  };
32 
43  {
44  UNDEF = -1,
45  RtoR3 = 1,
46  R4toR3 = 2
48  };
49 
72 class Settings
73  {
74 public:
81  Settings();
82 
84  static void dumpDefaults();
85 
87  void toYaml(void);
88 
90  std::string evolMetadata() const;
91 
93  std::string solMetadata(const double t) const;
94 
96  void read(YAML::Node);
97 
99  bool read(std::string filename);
100 
102  inline int getPrecision(void) const { return precision; }
103 
105  inline std::string getFileDisplayName(void) const { return fileDisplayName; }
106 
108  inline void setFileDisplayName(std::string _s) { fileDisplayName = _s; }
109 
111  inline void setPbName(std::string str) { pbName = str; }
112 
114  inline std::string getPbName(void) const { return pbName; }
115 
117  inline void setSimName(std::string str) { simName = str; }
118 
120  inline std::string getSimName(void) const { return simName; }
121 
123  inline void setScale(const double s) { _scale = s; }
124 
126  inline double getScale(void) const { return _scale; }
127 
129  inline void set_MAXITER(int i) { MAXITER = i; }
130 
132  bool withTsv;
133 
135  int verbose;
136 
138  double time_step;
139 
142 
144  bool recenter;
145 
148 
150  double threshold;
151 
154 
156  bool V_file;
157 
159  bool spin_acc;
160 
162  std::string sMx;
163 
165  std::string sMy;
166 
168  std::string sMz;
169 
171  std::string sM;
172 
174  std::string sBx;
175 
177  std::string sBy;
178 
180  std::string sBz;
181 
183  std::string sB;
184 
186  std::string sB_space;
187 
189  std::string sB_time;
190 
192  std::string restoreFileName;
193 
195  double initial_time = NAN;
196 
198  double DUMAX; // 0.1 for magnetostatic simulations; 0.02 for the dynamics
199 
201  double TOL;
202 
204  int MAXITER;
205 
207  std::vector<Tetra::prm> paramTetra;
208 
210  inline int findTetraRegionIdx(const std::string &name ) const
211  {
212  std::vector<Tetra::prm>::const_iterator result =
213  std::find_if(paramTetra.begin(), paramTetra.end(),
214  [name](Tetra::prm const &p) { return (p.regName == name); });
215 
216  int idx(-2);
217  if (result == paramTetra.end())
218  {
219  idx = -1;
220  }
221  else
222  {
223  idx = std::distance(paramTetra.begin(), result);
224  }
225  return idx;
226  };
227 
229  std::vector<Facette::prm> paramFacette;
230 
232  std::string r_path_output_dir;
233 
235  std::vector<std::string> evol_columns;
236 
238  double tf;
239 
241  double dt_min;
242 
244  double dt_max;
245 
247  inline int findFacetteRegionIdx(const std::string name ) const
248  {
249  std::vector<Facette::prm>::const_iterator result =
250  std::find_if(paramFacette.begin(), paramFacette.end(),
251  [name](Facette::prm const &p) { return (p.regName == name); });
252  int idx(-2);
253 
254  if (result == paramFacette.end())
255  {
256  idx = -1;
257  }
258  else
259  {
260  idx = std::distance(paramFacette.begin(), result);
261  }
262  return idx;
263  };
264 
268  inline mag_exprType getMagType() const
269  {
270  if (mag_parser.parameter_count() < 4) return POSITION_ONLY;
271  return POSITION_AND_REGIONS;
272  }
273 
278  inline Eigen::Vector3d getMagnetization(const Eigen::Ref<Eigen::Vector3d> p) const
279  {
280  Eigen::Vector3d tmp = mag_parser.get_vector(p);
281  tmp.normalize();
282  return tmp;
283  }
284 
289  inline Eigen::Vector3d getMagnetization(const Eigen::Ref<Eigen::Vector3d> p,
290  const std::vector<std::string> &regions) const
291  {
292  Eigen::Vector3d tmp = mag_parser.get_vector(p, regions);
293  tmp.normalize();
294  return tmp;
295  }
296 
301  inline Eigen::Vector3d getField(const double t_val) const
302  {
303  return (field_parser.get_vector(t_val))/mu0;
304  }
305 
309  inline field_exprType getFieldType(void) const
310  { return field_type; }
311 
316  inline Eigen::Vector3d getFieldSpace(const Eigen::Ref<Eigen::Vector3d> p) const
317  { return field_space_parser.get_vector(p); }
318 
323  inline double getFieldTime(const double t_val) const
324  { return (field_time_parser.get_scalar(t_val))/mu0; }
325 
326 private:
327  using MetadataItem = std::pair<std::string, std::string>;
329  std::vector<MetadataItem> userMetadata;
330  int precision;
331  std::string fileDisplayName;
332  double _scale;
333  std::string simName;
334  std::string pbName;
342 
345 
346  // field(x,y,z,t) = field_time(t) * field_space(x,y,z) with field_time R -> R and field_space R³->R³
349 
352 
354  std::ostringstream commonMetadata() const;
355 
357  const bool NORMALIZE = true;
358  };
359 
360 #endif /* feellgoodSettings_h */
Definition: expression_parser.h:22
double get_scalar(double arg) const
Definition: expression_parser.cpp:81
Eigen::Vector3d get_vector(double arg) const
Definition: expression_parser.cpp:117
int parameter_count() const
Definition: expression_parser.h:47
Container for all the settings provided by the user, with conversions to/from YAML.
Definition: feellgoodSettings.h:73
std::string getFileDisplayName(void) const
Definition: feellgoodSettings.h:105
std::string pbName
Definition: feellgoodSettings.h:334
void setFileDisplayName(std::string _s)
Definition: feellgoodSettings.h:108
std::string sB_space
Definition: feellgoodSettings.h:186
void toYaml(void)
Definition: feellgoodSettings.cpp:144
std::string r_path_output_dir
Definition: feellgoodSettings.h:232
double DUMAX
Definition: feellgoodSettings.h:198
void read(YAML::Node)
Definition: feellgoodSettings.cpp:307
int verbose
Definition: feellgoodSettings.h:135
bool spin_acc
Definition: feellgoodSettings.h:159
int getPrecision(void) const
Definition: feellgoodSettings.h:102
std::string sB_time
Definition: feellgoodSettings.h:189
void setScale(const double s)
Definition: feellgoodSettings.h:123
void setSimName(std::string str)
Definition: feellgoodSettings.h:117
const bool NORMALIZE
Definition: feellgoodSettings.h:357
Nodes::index recentering_direction
Definition: feellgoodSettings.h:147
int MAXITER
Definition: feellgoodSettings.h:204
bool V_file
Definition: feellgoodSettings.h:156
std::vector< MetadataItem > userMetadata
Definition: feellgoodSettings.h:329
std::pair< std::string, std::string > MetadataItem
Definition: feellgoodSettings.h:327
std::string evolMetadata() const
Definition: feellgoodSettings.cpp:284
std::string sMz
Definition: feellgoodSettings.h:168
field_exprType getFieldType(void) const
Definition: feellgoodSettings.h:309
ExpressionParser field_time_parser
Definition: feellgoodSettings.h:348
ExpressionParser field_parser
Definition: feellgoodSettings.h:344
std::vector< Facette::prm > paramFacette
Definition: feellgoodSettings.h:226
ExpressionParser field_space_parser
Definition: feellgoodSettings.h:351
double dt_max
Definition: feellgoodSettings.h:244
double initial_time
Definition: feellgoodSettings.h:195
ExpressionParser mag_parser
Definition: feellgoodSettings.h:335
std::string sM
Definition: feellgoodSettings.h:171
std::string sBz
Definition: feellgoodSettings.h:180
double getScale(void) const
Definition: feellgoodSettings.h:126
Eigen::Vector3d getMagnetization(const Eigen::Ref< Eigen::Vector3d > p, const std::vector< std::string > &regions) const
Definition: feellgoodSettings.h:289
std::string simName
Definition: feellgoodSettings.h:333
double getFieldTime(const double t_val) const
Definition: feellgoodSettings.h:323
void setPbName(std::string str)
Definition: feellgoodSettings.h:111
std::string getPbName(void) const
Definition: feellgoodSettings.h:114
std::string sMy
Definition: feellgoodSettings.h:165
std::string sBx
Definition: feellgoodSettings.h:174
bool withTsv
Definition: feellgoodSettings.h:132
int precision
Definition: feellgoodSettings.h:330
std::string solMetadata(const double t) const
Definition: feellgoodSettings.cpp:296
Settings()
Definition: feellgoodSettings.cpp:131
std::string restoreFileName
Definition: feellgoodSettings.h:192
mag_exprType getMagType() const
Definition: feellgoodSettings.h:268
bool recenter
Definition: feellgoodSettings.h:144
Eigen::Vector3d getMagnetization(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:278
std::string getSimName(void) const
Definition: feellgoodSettings.h:120
double TOL
Definition: feellgoodSettings.h:201
Eigen::Vector3d getFieldSpace(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:316
double tf
Definition: feellgoodSettings.h:238
double threshold
Definition: feellgoodSettings.h:150
void set_MAXITER(int i)
Definition: feellgoodSettings.h:129
std::vector< std::string > evol_columns
Definition: feellgoodSettings.h:235
static void dumpDefaults()
Definition: feellgoodSettings.cpp:142
Eigen::Vector3d getField(const double t_val) const
Definition: feellgoodSettings.h:301
int findTetraRegionIdx(const std::string &name) const
Definition: feellgoodSettings.h:210
double _scale
Definition: feellgoodSettings.h:332
std::string fileDisplayName
Definition: feellgoodSettings.h:331
std::string sB
Definition: feellgoodSettings.h:183
double dt_min
Definition: feellgoodSettings.h:241
int findFacetteRegionIdx(const std::string name) const
Definition: feellgoodSettings.h:247
std::string sMx
Definition: feellgoodSettings.h:162
std::vector< Tetra::prm > paramTetra
Definition: feellgoodSettings.h:207
field_exprType field_type
Definition: feellgoodSettings.h:341
std::string sBy
Definition: feellgoodSettings.h:177
int save_period
Definition: feellgoodSettings.h:141
double time_step
Definition: feellgoodSettings.h:138
int scalfmmNbTh
Definition: feellgoodSettings.h:153
std::ostringstream commonMetadata() const
Definition: feellgoodSettings.cpp:263
contains namespace Facette header containing Fac class, and some constants and a less_than operator t...
field_exprType
Definition: feellgoodSettings.h:43
@ RtoR3
B(t)
Definition: feellgoodSettings.h:45
@ UNDEF
undefined
Definition: feellgoodSettings.h:44
@ R4toR3
Definition: feellgoodSettings.h:46
mag_exprType
Definition: feellgoodSettings.h:28
@ POSITION_AND_REGIONS
M(x, y, z, regions)
Definition: feellgoodSettings.h:30
@ POSITION_ONLY
M(x, y, z)
Definition: feellgoodSettings.h:29
index
Definition: node.h:34
Definition: facette.h:42
Definition: tetra.h:61
namespace Tetra header containing Tet class, some constants, and integrales