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 
88  static void dumpTemplate();
89 
91  void toYaml(void);
92 
94  std::string evolMetadata() const;
95 
97  std::string solMetadata(const double t) const;
98 
100  void read(YAML::Node);
101 
103  bool read(std::string filename);
104 
106  inline int getPrecision(void) const { return precision; }
107 
109  inline std::string getFileDisplayName(void) const { return fileDisplayName; }
110 
112  inline void setFileDisplayName(std::string _s) { fileDisplayName = _s; }
113 
115  inline void setPbName(std::string str) { pbName = str; }
116 
118  inline std::string getPbName(void) const { return pbName; }
119 
121  inline void setSimName(std::string str) { simName = str; }
122 
124  inline std::string getSimName(void) const { return simName; }
125 
127  inline void setScale(const double s) { _scale = s; }
128 
130  inline double getScale(void) const { return _scale; }
131 
133  inline void set_MAXITER(int i) { MAXITER = i; }
134 
136  bool withTsv;
137 
139  int verbose;
140 
142  double time_step;
143 
146 
148  bool recenter;
149 
152 
154  double threshold;
155 
158 
160  bool V_file;
161 
163  bool spin_acc;
164 
166  std::string sMx;
167 
169  std::string sMy;
170 
172  std::string sMz;
173 
175  std::string sM;
176 
178  std::string sBx;
179 
181  std::string sBy;
182 
184  std::string sBz;
185 
187  std::string sB;
188 
190  std::string sB_space;
191 
193  std::string sB_time;
194 
196  std::string restoreFileName;
197 
199  double initial_time = NAN;
200 
202  double DUMAX; // 0.1 for magnetostatic simulations; 0.02 for the dynamics
203 
205  double TOL;
206 
208  int MAXITER;
209 
211  std::vector<Tetra::prm> paramTetra;
212 
214  inline int findTetraRegionIdx(const std::string &name ) const
215  {
216  std::vector<Tetra::prm>::const_iterator result =
217  std::find_if(paramTetra.begin(), paramTetra.end(),
218  [name](Tetra::prm const &p) { return (p.regName == name); });
219 
220  int idx(-2);
221  if (result == paramTetra.end())
222  {
223  idx = -1;
224  }
225  else
226  {
227  idx = std::distance(paramTetra.begin(), result);
228  }
229  return idx;
230  };
231 
233  std::vector<Facette::prm> paramFacette;
234 
236  std::string r_path_output_dir;
237 
239  std::vector<std::string> evol_columns;
240 
242  double tf;
243 
245  double dt_min;
246 
248  double dt_max;
249 
251  inline int findFacetteRegionIdx(const std::string name ) const
252  {
253  std::vector<Facette::prm>::const_iterator result =
254  std::find_if(paramFacette.begin(), paramFacette.end(),
255  [name](Facette::prm const &p) { return (p.regName == name); });
256  int idx(-2);
257 
258  if (result == paramFacette.end())
259  {
260  idx = -1;
261  }
262  else
263  {
264  idx = std::distance(paramFacette.begin(), result);
265  }
266  return idx;
267  };
268 
272  inline mag_exprType getMagType() const
273  {
274  if (mag_parser.parameter_count() < 4) return POSITION_ONLY;
275  return POSITION_AND_REGIONS;
276  }
277 
282  inline Eigen::Vector3d getMagnetization(const Eigen::Ref<Eigen::Vector3d> p) const
283  {
284  Eigen::Vector3d tmp = mag_parser.get_vector(p);
285  tmp.normalize();
286  return tmp;
287  }
288 
293  inline Eigen::Vector3d getMagnetization(const Eigen::Ref<Eigen::Vector3d> p,
294  const std::vector<std::string> &regions) const
295  {
296  Eigen::Vector3d tmp = mag_parser.get_vector(p, regions);
297  tmp.normalize();
298  return tmp;
299  }
300 
305  inline Eigen::Vector3d getField(const double t_val) const
306  {
307  // If this is not meaningful, return a vector of NAN.
308  if (field_type != RtoR3)
309  { return {NAN, NAN, NAN}; }
310 
311  return (field_parser.get_vector(t_val))/mu0;
312  }
313 
317  inline field_exprType getFieldType(void) const
318  { return field_type; }
319 
324  inline Eigen::Vector3d getFieldSpace(const Eigen::Ref<Eigen::Vector3d> p) const
325  { return field_space_parser.get_vector(p); }
326 
331  inline double getFieldTime(const double t_val) const
332  { return (field_time_parser.get_scalar(t_val))/mu0; }
333 
334 private:
335  using MetadataItem = std::pair<std::string, std::string>;
337  std::vector<MetadataItem> userMetadata;
338  int precision;
339  std::string fileDisplayName;
340  double _scale;
341  std::string simName;
342  std::string pbName;
350 
353 
354  // field(x,y,z,t) = field_time(t) * field_space(x,y,z) with field_time R -> R and field_space R³->R³
357 
360 
362  std::ostringstream commonMetadata() const;
363 
365  const bool NORMALIZE = true;
366  };
367 
368 #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:109
std::string pbName
Definition: feellgoodSettings.h:342
void setFileDisplayName(std::string _s)
Definition: feellgoodSettings.h:112
std::string sB_space
Definition: feellgoodSettings.h:190
void toYaml(void)
Definition: feellgoodSettings.cpp:153
std::string r_path_output_dir
Definition: feellgoodSettings.h:236
double DUMAX
Definition: feellgoodSettings.h:202
void read(YAML::Node)
Definition: feellgoodSettings.cpp:316
int verbose
Definition: feellgoodSettings.h:139
static void dumpTemplate()
Definition: feellgoodSettings.cpp:145
bool spin_acc
Definition: feellgoodSettings.h:163
int getPrecision(void) const
Definition: feellgoodSettings.h:106
std::string sB_time
Definition: feellgoodSettings.h:193
void setScale(const double s)
Definition: feellgoodSettings.h:127
void setSimName(std::string str)
Definition: feellgoodSettings.h:121
const bool NORMALIZE
Definition: feellgoodSettings.h:365
Nodes::index recentering_direction
Definition: feellgoodSettings.h:151
int MAXITER
Definition: feellgoodSettings.h:208
bool V_file
Definition: feellgoodSettings.h:160
std::vector< MetadataItem > userMetadata
Definition: feellgoodSettings.h:337
std::pair< std::string, std::string > MetadataItem
Definition: feellgoodSettings.h:335
std::string evolMetadata() const
Definition: feellgoodSettings.cpp:293
std::string sMz
Definition: feellgoodSettings.h:172
field_exprType getFieldType(void) const
Definition: feellgoodSettings.h:317
ExpressionParser field_time_parser
Definition: feellgoodSettings.h:356
ExpressionParser field_parser
Definition: feellgoodSettings.h:352
std::vector< Facette::prm > paramFacette
Definition: feellgoodSettings.h:230
ExpressionParser field_space_parser
Definition: feellgoodSettings.h:359
double dt_max
Definition: feellgoodSettings.h:248
double initial_time
Definition: feellgoodSettings.h:199
ExpressionParser mag_parser
Definition: feellgoodSettings.h:343
std::string sM
Definition: feellgoodSettings.h:175
std::string sBz
Definition: feellgoodSettings.h:184
double getScale(void) const
Definition: feellgoodSettings.h:130
Eigen::Vector3d getMagnetization(const Eigen::Ref< Eigen::Vector3d > p, const std::vector< std::string > &regions) const
Definition: feellgoodSettings.h:293
std::string simName
Definition: feellgoodSettings.h:341
double getFieldTime(const double t_val) const
Definition: feellgoodSettings.h:331
void setPbName(std::string str)
Definition: feellgoodSettings.h:115
std::string getPbName(void) const
Definition: feellgoodSettings.h:118
std::string sMy
Definition: feellgoodSettings.h:169
std::string sBx
Definition: feellgoodSettings.h:178
bool withTsv
Definition: feellgoodSettings.h:136
int precision
Definition: feellgoodSettings.h:338
std::string solMetadata(const double t) const
Definition: feellgoodSettings.cpp:305
Settings()
Definition: feellgoodSettings.cpp:132
std::string restoreFileName
Definition: feellgoodSettings.h:196
mag_exprType getMagType() const
Definition: feellgoodSettings.h:272
bool recenter
Definition: feellgoodSettings.h:148
Eigen::Vector3d getMagnetization(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:282
std::string getSimName(void) const
Definition: feellgoodSettings.h:124
double TOL
Definition: feellgoodSettings.h:205
Eigen::Vector3d getFieldSpace(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:324
double tf
Definition: feellgoodSettings.h:242
double threshold
Definition: feellgoodSettings.h:154
void set_MAXITER(int i)
Definition: feellgoodSettings.h:133
std::vector< std::string > evol_columns
Definition: feellgoodSettings.h:239
static void dumpDefaults()
Definition: feellgoodSettings.cpp:143
Eigen::Vector3d getField(const double t_val) const
Definition: feellgoodSettings.h:305
int findTetraRegionIdx(const std::string &name) const
Definition: feellgoodSettings.h:214
double _scale
Definition: feellgoodSettings.h:340
std::string fileDisplayName
Definition: feellgoodSettings.h:339
std::string sB
Definition: feellgoodSettings.h:187
double dt_min
Definition: feellgoodSettings.h:245
int findFacetteRegionIdx(const std::string name) const
Definition: feellgoodSettings.h:251
std::string sMx
Definition: feellgoodSettings.h:166
std::vector< Tetra::prm > paramTetra
Definition: feellgoodSettings.h:211
field_exprType field_type
Definition: feellgoodSettings.h:349
std::string sBy
Definition: feellgoodSettings.h:181
int save_period
Definition: feellgoodSettings.h:145
double time_step
Definition: feellgoodSettings.h:142
int scalfmmNbTh
Definition: feellgoodSettings.h:157
std::ostringstream commonMetadata() const
Definition: feellgoodSettings.cpp:272
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:69
Definition: tetra.h:85
namespace Tetra header containing Tet class, some constants, and integrales