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 
30  {
31  UNDEF = -1,
32  RtoR3 = 1,
33  R4toR3 = 2
34  };
35 
41 class Settings
42  {
43 public:
45  Settings();
46 
48  static void dumpDefaults();
49 
51  void infos(void);
52 
54  std::string evolMetadata(std::string realWorldTime) const;
55 
57  std::string solMetadata(double t, std::string columnsTitle) const;
58 
60  void read(YAML::Node);
61 
63  bool read(std::string filename);
64 
66  inline int getPrecision(void) const { return precision; }
67 
69  inline std::string getFileDisplayName(void) const { return fileDisplayName; }
70 
72  inline void setFileDisplayName(std::string _s) { fileDisplayName = _s; }
73 
75  inline void setPbName(std::string str) { pbName = str; }
76 
78  inline std::string getPbName(void) const { return pbName; }
79 
81  inline void setSimName(std::string str) { simName = str; }
82 
84  inline std::string getSimName(void) const { return simName; }
85 
87  inline void setScale(const double s) { _scale = s; }
88 
90  inline double getScale(void) const { return _scale; }
91 
93  inline void set_MAXITER(int i) { MAXITER = i; }
94 
96  bool withTsv;
97 
99  int verbose;
100 
102  double time_step;
103 
106 
108  bool recenter;
109 
112 
114  double threshold;
115 
118 
121 
124 
126  bool stt_flag;
127 
129  std::string sMx;
130 
132  std::string sMy;
133 
135  std::string sMz;
136 
138  std::string sM;
139 
141  std::string sBx;
142 
144  std::string sBy;
145 
147  std::string sBz;
148 
150  std::string sB;
151 
153  std::string sB_space;
154 
156  std::string sB_time;
157 
159  std::string restoreFileName;
160 
162  double initial_time = NAN;
163 
165  double DUMAX; // 0.1 for magnetostatic simulations; 0.02 for the dynamics
166 
168  double TOL;
169 
171  int MAXITER;
172 
176  double ILU_tol;
177 
182 
184  std::vector<Tetra::prm> paramTetra;
185 
187  inline int findTetraRegionIdx(const std::string name ) const
188  {
189  std::vector<Tetra::prm>::const_iterator result =
190  std::find_if(paramTetra.begin(), paramTetra.end(),
191  [name](Tetra::prm const &p) { return (p.regName == name); });
192 
193  int idx(-2);
194  if (result == paramTetra.end())
195  {
196  idx = -1;
197  }
198  else
199  {
200  idx = std::distance(paramTetra.begin(), result);
201  }
202  return idx;
203  };
204 
206  std::vector<Facette::prm> paramFacette;
207 
209  std::string r_path_output_dir;
210 
212  std::vector<std::string> evol_columns;
213 
215  double tf;
216 
218  double dt_min;
219 
221  double dt_max;
222 
224  inline int findFacetteRegionIdx(const std::string name ) const
225  {
226  std::vector<Facette::prm>::const_iterator result =
227  std::find_if(paramFacette.begin(), paramFacette.end(),
228  [name](Facette::prm const &p) { return (p.regName == name); });
229  int idx(-2);
230 
231  if (result == paramFacette.end())
232  {
233  idx = -1;
234  }
235  else
236  {
237  idx = std::distance(paramFacette.begin(), result);
238  }
239  return idx;
240  };
241 
247  inline Eigen::Vector3d getMagnetization(const Eigen::Ref<Eigen::Vector3d> p) const
248  {
249  Eigen::Vector3d tmp = mag_parser.get_vector(p);
250  tmp.normalize();
251  return tmp;
252  }
253 
257  inline Eigen::Vector3d getField(const double t_val) const
258  {
259  return (field_parser.get_vector(t_val))/mu0;
260  }
261 
265  inline field_exprType getFieldType(void) const
266  { return field_type; }
267 
269  inline Eigen::Vector3d getFieldSpace(const Eigen::Ref<Eigen::Vector3d> p) const
270  { return field_space_parser.get_vector(p); }
271 
273  inline double getFieldTime(const double t_val) const
274  { return (field_time_parser.get_scalar(t_val))/mu0; }
275 
276 private:
277  int precision;
278  std::string fileDisplayName;
279  double _scale;
280  std::string simName;
281  std::string pbName;
289 
292 
293  // field(x,y,z,t) = field_time(t) * field_space(x,y,z) with field_time R -> R and field_space R³->R³
296 
299  };
300 
301 #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
Definition: feellgoodSettings.h:42
int ILU_fill_factor
Definition: feellgoodSettings.h:181
std::string getFileDisplayName(void) const
Definition: feellgoodSettings.h:69
std::string pbName
Definition: feellgoodSettings.h:281
void setFileDisplayName(std::string _s)
Definition: feellgoodSettings.h:72
std::string sB_space
Definition: feellgoodSettings.h:153
int solverNbTh
Definition: feellgoodSettings.h:117
std::string r_path_output_dir
Definition: feellgoodSettings.h:209
double DUMAX
Definition: feellgoodSettings.h:165
void read(YAML::Node)
Definition: feellgoodSettings.cpp:268
int verbose
Definition: feellgoodSettings.h:99
int getPrecision(void) const
Definition: feellgoodSettings.h:66
void infos(void)
Definition: feellgoodSettings.cpp:124
std::string sB_time
Definition: feellgoodSettings.h:156
void setScale(const double s)
Definition: feellgoodSettings.h:87
void setSimName(std::string str)
Definition: feellgoodSettings.h:81
bool stt_flag
Definition: feellgoodSettings.h:126
Nodes::index recentering_direction
Definition: feellgoodSettings.h:111
std::string evolMetadata(std::string realWorldTime) const
Definition: feellgoodSettings.cpp:240
int MAXITER
Definition: feellgoodSettings.h:171
std::string sMz
Definition: feellgoodSettings.h:135
std::string solMetadata(double t, std::string columnsTitle) const
Definition: feellgoodSettings.cpp:260
field_exprType getFieldType(void) const
Definition: feellgoodSettings.h:265
ExpressionParser field_time_parser
Definition: feellgoodSettings.h:295
ExpressionParser field_parser
Definition: feellgoodSettings.h:291
std::vector< Facette::prm > paramFacette
Definition: feellgoodSettings.h:203
ExpressionParser field_space_parser
Definition: feellgoodSettings.h:298
double dt_max
Definition: feellgoodSettings.h:221
double initial_time
Definition: feellgoodSettings.h:162
ExpressionParser mag_parser
Definition: feellgoodSettings.h:282
std::string sM
Definition: feellgoodSettings.h:138
std::string sBz
Definition: feellgoodSettings.h:147
double getScale(void) const
Definition: feellgoodSettings.h:90
std::string simName
Definition: feellgoodSettings.h:280
double getFieldTime(const double t_val) const
Definition: feellgoodSettings.h:273
void setPbName(std::string str)
Definition: feellgoodSettings.h:75
std::string getPbName(void) const
Definition: feellgoodSettings.h:78
std::string sMy
Definition: feellgoodSettings.h:132
std::string sBx
Definition: feellgoodSettings.h:141
bool withTsv
Definition: feellgoodSettings.h:96
int precision
Definition: feellgoodSettings.h:277
Settings()
Definition: feellgoodSettings.cpp:112
std::string restoreFileName
Definition: feellgoodSettings.h:159
bool recenter
Definition: feellgoodSettings.h:108
Eigen::Vector3d getMagnetization(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:247
std::string getSimName(void) const
Definition: feellgoodSettings.h:84
double TOL
Definition: feellgoodSettings.h:168
STT p_stt
Definition: feellgoodSettings.h:123
Eigen::Vector3d getFieldSpace(const Eigen::Ref< Eigen::Vector3d > p) const
Definition: feellgoodSettings.h:269
double tf
Definition: feellgoodSettings.h:215
double threshold
Definition: feellgoodSettings.h:114
int findTetraRegionIdx(const std::string name) const
Definition: feellgoodSettings.h:187
void set_MAXITER(int i)
Definition: feellgoodSettings.h:93
std::vector< std::string > evol_columns
Definition: feellgoodSettings.h:212
static void dumpDefaults()
Definition: feellgoodSettings.cpp:122
Eigen::Vector3d getField(const double t_val) const
Definition: feellgoodSettings.h:257
double _scale
Definition: feellgoodSettings.h:279
std::string fileDisplayName
Definition: feellgoodSettings.h:278
std::string sB
Definition: feellgoodSettings.h:150
double dt_min
Definition: feellgoodSettings.h:218
int findFacetteRegionIdx(const std::string name) const
Definition: feellgoodSettings.h:224
std::string sMx
Definition: feellgoodSettings.h:129
std::vector< Tetra::prm > paramTetra
Definition: feellgoodSettings.h:184
double ILU_tol
Definition: feellgoodSettings.h:176
field_exprType field_type
Definition: feellgoodSettings.h:288
std::string sBy
Definition: feellgoodSettings.h:144
int save_period
Definition: feellgoodSettings.h:105
double time_step
Definition: feellgoodSettings.h:102
int scalfmmNbTh
Definition: feellgoodSettings.h:120
contains namespace Facette header containing Fac class, and some constants and a less_than operator t...
field_exprType
Definition: feellgoodSettings.h:30
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