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 "spinTransferTorque.h"
20 #include "tetra.h"
21 #include "time_integration.h"
22 
33  {
34  UNDEF = -1,
35  RtoR3 = 1,
36  R4toR3 = 2
38  };
39 
62 class Settings
63  {
64 public:
71  Settings();
72 
74  static void dumpDefaults();
75 
77  void toYaml(void);
78 
80  std::string evolMetadata() const;
81 
83  std::string solMetadata(double t, std::string columnsTitle) const;
84 
86  void read(YAML::Node);
87 
89  bool read(std::string filename);
90 
92  inline int getPrecision(void) const { return precision; }
93 
95  inline std::string getFileDisplayName(void) const { return fileDisplayName; }
96 
98  inline void setFileDisplayName(std::string _s) { fileDisplayName = _s; }
99 
101  inline void setPbName(std::string str) { pbName = str; }
102 
104  inline std::string getPbName(void) const { return pbName; }
105 
107  inline void setSimName(std::string str) { simName = str; }
108 
110  inline std::string getSimName(void) const { return simName; }
111 
113  inline void setScale(const double s) { _scale = s; }
114 
116  inline double getScale(void) const { return _scale; }
117 
119  inline void set_MAXITER(int i) { MAXITER = i; }
120 
122  bool withTsv;
123 
125  int verbose;
126 
128  double time_step;
129 
132 
134  bool recenter;
135 
138 
140  double threshold;
141 
144 
147 
149  bool stt_flag;
150 
152  std::string sMx;
153 
155  std::string sMy;
156 
158  std::string sMz;
159 
161  std::string sM;
162 
164  std::string sBx;
165 
167  std::string sBy;
168 
170  std::string sBz;
171 
173  std::string sB;
174 
176  std::string sB_space;
177 
179  std::string sB_time;
180 
182  std::string restoreFileName;
183 
185  double initial_time = NAN;
186 
188  double DUMAX; // 0.1 for magnetostatic simulations; 0.02 for the dynamics
189 
191  double TOL;
192 
194  int MAXITER;
195 
197  std::vector<Tetra::prm> paramTetra;
198 
200  inline int findTetraRegionIdx(const std::string &name ) const
201  {
202  std::vector<Tetra::prm>::const_iterator result =
203  std::find_if(paramTetra.begin(), paramTetra.end(),
204  [name](Tetra::prm const &p) { return (p.regName == name); });
205 
206  int idx(-2);
207  if (result == paramTetra.end())
208  {
209  idx = -1;
210  }
211  else
212  {
213  idx = std::distance(paramTetra.begin(), result);
214  }
215  return idx;
216  };
217 
219  std::vector<Facette::prm> paramFacette;
220 
222  std::string r_path_output_dir;
223 
225  std::vector<std::string> evol_columns;
226 
228  double tf;
229 
231  double dt_min;
232 
234  double dt_max;
235 
237  inline int findFacetteRegionIdx(const std::string name ) const
238  {
239  std::vector<Facette::prm>::const_iterator result =
240  std::find_if(paramFacette.begin(), paramFacette.end(),
241  [name](Facette::prm const &p) { return (p.regName == name); });
242  int idx(-2);
243 
244  if (result == paramFacette.end())
245  {
246  idx = -1;
247  }
248  else
249  {
250  idx = std::distance(paramFacette.begin(), result);
251  }
252  return idx;
253  };
254 
259  inline Eigen::Vector3d getMagnetization(const Eigen::Ref<Eigen::Vector3d> p) const
260  {
261  Eigen::Vector3d tmp = mag_parser.get_vector(p);
262  tmp.normalize();
263  return tmp;
264  }
265 
270  inline Eigen::Vector3d getField(const double t_val) const
271  {
272  return (field_parser.get_vector(t_val))/mu0;
273  }
274 
278  inline field_exprType getFieldType(void) const
279  { return field_type; }
280 
285  inline Eigen::Vector3d getFieldSpace(const Eigen::Ref<Eigen::Vector3d> p) const
286  { return field_space_parser.get_vector(p); }
287 
292  inline double getFieldTime(const double t_val) const
293  { return (field_time_parser.get_scalar(t_val))/mu0; }
294 
295 private:
296  using MetadataItem = std::pair<std::string, std::string>;
298  std::vector<MetadataItem> userMetadata;
299  int precision;
300  std::string fileDisplayName;
301  double _scale;
302  std::string simName;
303  std::string pbName;
311 
314 
315  // field(x,y,z,t) = field_time(t) * field_space(x,y,z) with field_time R -> R and field_space R³->R³
318 
321 
323  std::ostringstream commonMetadata() const;
324  };
325 
326 #endif /* feellgoodSettings_h */
Definition: expression_parser.h:20
double get_scalar(double arg) const
Definition: expression_parser.cpp:67
Eigen::Vector3d get_vector(double arg) const
Definition: expression_parser.cpp:103
Container for all the settings provided by the user, with conversions to/from YAML.
Definition: feellgoodSettings.h:63
std::string getFileDisplayName(void) const
Definition: feellgoodSettings.h:95
std::string pbName
Definition: feellgoodSettings.h:303
void setFileDisplayName(std::string _s)
Definition: feellgoodSettings.h:98
std::string sB_space
Definition: feellgoodSettings.h:176
void toYaml(void)
Definition: feellgoodSettings.cpp:139
std::string r_path_output_dir
Definition: feellgoodSettings.h:222
double DUMAX
Definition: feellgoodSettings.h:188
void read(YAML::Node)
Definition: feellgoodSettings.cpp:300
int verbose
Definition: feellgoodSettings.h:125
int getPrecision(void) const
Definition: feellgoodSettings.h:92
std::string sB_time
Definition: feellgoodSettings.h:179
void setScale(const double s)
Definition: feellgoodSettings.h:113
void setSimName(std::string str)
Definition: feellgoodSettings.h:107
bool stt_flag
Definition: feellgoodSettings.h:149
Nodes::index recentering_direction
Definition: feellgoodSettings.h:137
int MAXITER
Definition: feellgoodSettings.h:194
std::vector< MetadataItem > userMetadata
Definition: feellgoodSettings.h:298
std::pair< std::string, std::string > MetadataItem
Definition: feellgoodSettings.h:296
std::string evolMetadata() const
Definition: feellgoodSettings.cpp:280
std::string sMz
Definition: feellgoodSettings.h:158
std::string solMetadata(double t, std::string columnsTitle) const
Definition: feellgoodSettings.cpp:292
field_exprType getFieldType(void) const
Definition: feellgoodSettings.h:278
ExpressionParser field_time_parser
Definition: feellgoodSettings.h:317
ExpressionParser field_parser
Definition: feellgoodSettings.h:313
std::vector< Facette::prm > paramFacette
Definition: feellgoodSettings.h:216
ExpressionParser field_space_parser
Definition: feellgoodSettings.h:320
double dt_max
Definition: feellgoodSettings.h:234
double initial_time
Definition: feellgoodSettings.h:185
ExpressionParser mag_parser
Definition: feellgoodSettings.h:304
std::string sM
Definition: feellgoodSettings.h:161
std::string sBz
Definition: feellgoodSettings.h:170
double getScale(void) const
Definition: feellgoodSettings.h:116
std::string simName
Definition: feellgoodSettings.h:302
double getFieldTime(const double t_val) const
Definition: feellgoodSettings.h:292
void setPbName(std::string str)
Definition: feellgoodSettings.h:101
std::string getPbName(void) const
Definition: feellgoodSettings.h:104
std::string sMy
Definition: feellgoodSettings.h:155
std::string sBx
Definition: feellgoodSettings.h:164
bool withTsv
Definition: feellgoodSettings.h:122
int precision
Definition: feellgoodSettings.h:299
Settings()
Definition: feellgoodSettings.cpp:127
std::string restoreFileName
Definition: feellgoodSettings.h:182
bool recenter
Definition: feellgoodSettings.h:134
Eigen::Vector3d getMagnetization(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:259
std::string getSimName(void) const
Definition: feellgoodSettings.h:110
double TOL
Definition: feellgoodSettings.h:191
STT p_stt
Definition: feellgoodSettings.h:146
Eigen::Vector3d getFieldSpace(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:285
double tf
Definition: feellgoodSettings.h:228
double threshold
Definition: feellgoodSettings.h:140
void set_MAXITER(int i)
Definition: feellgoodSettings.h:119
std::vector< std::string > evol_columns
Definition: feellgoodSettings.h:225
static void dumpDefaults()
Definition: feellgoodSettings.cpp:137
Eigen::Vector3d getField(const double t_val) const
Definition: feellgoodSettings.h:270
int findTetraRegionIdx(const std::string &name) const
Definition: feellgoodSettings.h:200
double _scale
Definition: feellgoodSettings.h:301
std::string fileDisplayName
Definition: feellgoodSettings.h:300
std::string sB
Definition: feellgoodSettings.h:173
double dt_min
Definition: feellgoodSettings.h:231
int findFacetteRegionIdx(const std::string name) const
Definition: feellgoodSettings.h:237
std::string sMx
Definition: feellgoodSettings.h:152
std::vector< Tetra::prm > paramTetra
Definition: feellgoodSettings.h:197
field_exprType field_type
Definition: feellgoodSettings.h:310
std::string sBy
Definition: feellgoodSettings.h:167
int save_period
Definition: feellgoodSettings.h:131
double time_step
Definition: feellgoodSettings.h:128
int scalfmmNbTh
Definition: feellgoodSettings.h:143
std::ostringstream commonMetadata() const
Definition: feellgoodSettings.cpp:259
contains namespace Facette header containing Fac class, and some constants and a less_than operator t...
field_exprType
Definition: feellgoodSettings.h:33
@ RtoR3
B(t)
Definition: feellgoodSettings.h:35
@ UNDEF
undefined
Definition: feellgoodSettings.h:34
@ R4toR3
Definition: feellgoodSettings.h:36
index
Definition: node.h:34
Definition: facette.h:43
Definition: spinTransferTorque.h:13
Definition: tetra.h:64
namespace Tetra header containing Tet class, some constants, and integrales