16 FieldstrengthEz_m(nullptr),
17 FieldstrengthEx_m(nullptr),
18 FieldstrengthEy_m(nullptr),
19 FieldstrengthBz_m(nullptr),
20 FieldstrengthBx_m(nullptr),
21 FieldstrengthBy_m(nullptr) {
22 std::string tmpString;
29 bool parsing_passed =
true;
31 parsing_passed = interpretLine<std::string>(file, tmpString);
33 parsing_passed = interpretLine<std::string, std::string>(file, tmpString, tmpString);
36 if (tmpString !=
"TRUE" && tmpString !=
"FALSE")
38 "FM3DDynamic::FM3DDynamic",
39 "The second string on the first line of 3D field "
40 "maps has to be either TRUE or FALSE");
45 parsing_passed = parsing_passed && interpretLine<double>(file,
frequency_m);
56 for (
unsigned long i = 0;
61 && interpretLine<double>(
62 file, tmpDouble, tmpDouble, tmpDouble, tmpDouble, tmpDouble, tmpDouble);
69 if (!parsing_passed) {
73 "FM3DDynamic::FM3DDynamic",
74 "An error occured when reading the fieldmap '" +
Filename_m +
"'");
107 std::string tmpString;
127 interpretLine<double>(
153 ii = index_x * deltaX + index_y * deltaY;
164 for (
unsigned long i = 0; i < totalSize; ++i) {
179 std::vector<Vector_t<double, 3>> bf(ef);
182 const unsigned long index_z = k;
184 const unsigned long index_y = j * deltaY;
186 const unsigned long index = i * deltaX + index_y + index_z;
227 const unsigned int index_x =
static_cast<int>(std::floor((R(0) -
xbegin_m) /
hx_m));
228 const double lever_x = (R(0) -
xbegin_m) /
hx_m - index_x;
230 const unsigned int index_y =
static_cast<int>(std::floor((R(1) -
ybegin_m) /
hy_m));
231 const double lever_y = (R(1) -
ybegin_m) /
hy_m - index_y;
233 const unsigned int index_z = (int)std::floor((R(2) -
zbegin_m) /
hz_m);
234 const double lever_z = (R(2) -
zbegin_m) /
hz_m - index_z;
245 const unsigned int deltaZ = 1;
247 const unsigned long index1 = index_x * deltaX + index_y * deltaY + index_z * deltaZ;
249 E(0) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEx_m[index1]
250 + lever_x * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEx_m[index1 + deltaX]
251 + (1.0 - lever_x) * lever_y * (1.0 - lever_z) *
FieldstrengthEx_m[index1 + deltaY]
252 + lever_x * lever_y * (1.0 - lever_z) *
FieldstrengthEx_m[index1 + deltaX + deltaY]
253 + (1.0 - lever_x) * (1.0 - lever_y) * lever_z *
FieldstrengthEx_m[index1 + deltaZ]
254 + lever_x * (1.0 - lever_y) * lever_z *
FieldstrengthEx_m[index1 + deltaX + deltaZ]
255 + (1.0 - lever_x) * lever_y * lever_z *
FieldstrengthEx_m[index1 + deltaY + deltaZ]
256 + lever_x * lever_y * lever_z *
FieldstrengthEx_m[index1 + deltaX + deltaY + deltaZ];
258 E(1) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEy_m[index1]
259 + lever_x * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEy_m[index1 + deltaX]
260 + (1.0 - lever_x) * lever_y * (1.0 - lever_z) *
FieldstrengthEy_m[index1 + deltaY]
261 + lever_x * lever_y * (1.0 - lever_z) *
FieldstrengthEy_m[index1 + deltaX + deltaY]
262 + (1.0 - lever_x) * (1.0 - lever_y) * lever_z *
FieldstrengthEy_m[index1 + deltaZ]
263 + lever_x * (1.0 - lever_y) * lever_z *
FieldstrengthEy_m[index1 + deltaX + deltaZ]
264 + (1.0 - lever_x) * lever_y * lever_z *
FieldstrengthEy_m[index1 + deltaY + deltaZ]
265 + lever_x * lever_y * lever_z *
FieldstrengthEy_m[index1 + deltaX + deltaY + deltaZ];
267 E(2) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEz_m[index1]
268 + lever_x * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEz_m[index1 + deltaX]
269 + (1.0 - lever_x) * lever_y * (1.0 - lever_z) *
FieldstrengthEz_m[index1 + deltaY]
270 + lever_x * lever_y * (1.0 - lever_z) *
FieldstrengthEz_m[index1 + deltaX + deltaY]
271 + (1.0 - lever_x) * (1.0 - lever_y) * lever_z *
FieldstrengthEz_m[index1 + deltaZ]
272 + lever_x * (1.0 - lever_y) * lever_z *
FieldstrengthEz_m[index1 + deltaX + deltaZ]
273 + (1.0 - lever_x) * lever_y * lever_z *
FieldstrengthEz_m[index1 + deltaY + deltaZ]
274 + lever_x * lever_y * lever_z *
FieldstrengthEz_m[index1 + deltaX + deltaY + deltaZ];
276 B(0) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBx_m[index1]
277 + lever_x * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBx_m[index1 + deltaX]
278 + (1.0 - lever_x) * lever_y * (1.0 - lever_z) *
FieldstrengthBx_m[index1 + deltaY]
279 + lever_x * lever_y * (1.0 - lever_z) *
FieldstrengthBx_m[index1 + deltaX + deltaY]
280 + (1.0 - lever_x) * (1.0 - lever_y) * lever_z *
FieldstrengthBx_m[index1 + deltaZ]
281 + lever_x * (1.0 - lever_y) * lever_z *
FieldstrengthBx_m[index1 + deltaX + deltaZ]
282 + (1.0 - lever_x) * lever_y * lever_z *
FieldstrengthBx_m[index1 + deltaY + deltaZ]
283 + lever_x * lever_y * lever_z *
FieldstrengthBx_m[index1 + deltaX + deltaY + deltaZ];
285 B(1) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBy_m[index1]
286 + lever_x * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBy_m[index1 + deltaX]
287 + (1.0 - lever_x) * lever_y * (1.0 - lever_z) *
FieldstrengthBy_m[index1 + deltaY]
288 + lever_x * lever_y * (1.0 - lever_z) *
FieldstrengthBy_m[index1 + deltaX + deltaY]
289 + (1.0 - lever_x) * (1.0 - lever_y) * lever_z *
FieldstrengthBy_m[index1 + deltaZ]
290 + lever_x * (1.0 - lever_y) * lever_z *
FieldstrengthBy_m[index1 + deltaX + deltaZ]
291 + (1.0 - lever_x) * lever_y * lever_z *
FieldstrengthBy_m[index1 + deltaY + deltaZ]
292 + lever_x * lever_y * lever_z *
FieldstrengthBy_m[index1 + deltaX + deltaY + deltaZ];
294 B(2) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBz_m[index1]
295 + lever_x * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBz_m[index1 + deltaX]
296 + (1.0 - lever_x) * lever_y * (1.0 - lever_z) *
FieldstrengthBz_m[index1 + deltaY]
297 + lever_x * lever_y * (1.0 - lever_z) *
FieldstrengthBz_m[index1 + deltaX + deltaY]
298 + (1.0 - lever_x) * (1.0 - lever_y) * lever_z *
FieldstrengthBz_m[index1 + deltaZ]
299 + lever_x * (1.0 - lever_y) * lever_z *
FieldstrengthBz_m[index1 + deltaX + deltaZ]
300 + (1.0 - lever_x) * lever_y * lever_z *
FieldstrengthBz_m[index1 + deltaY + deltaZ]
301 + lever_x * lever_y * lever_z *
FieldstrengthBz_m[index1 + deltaX + deltaY + deltaZ];
317 double& ,
double& ,
double& ,
double& ,
double& ,
356 F[i].first =
hz_m * i;
361 if (opal->isOptimizerRun())
365 std::ofstream out(fname);
369 out << std::setw(16) << std::setprecision(8) << F[i].first << std::setw(16)
370 << std::setprecision(8) << E(0) << std::setw(16) << std::setprecision(8) << E(1)
371 << std::setw(16) << std::setprecision(8) << E(2) << std::setw(16)
372 << std::setprecision(8) << B(0) << std::setw(16) << std::setprecision(8) << B(1)
373 << std::setw(16) << std::setprecision(8) << B(2) <<
"\n";
constexpr KOKKOS_INLINE_FUNCTION auto first()
Inform & endl(Inform &inf)
Inform & level3(Inform &inf)
constexpr double two_pi
The value of.
constexpr double e
The value of.
constexpr double mu_0
The permeability of vacuum in Vs/Am.
constexpr double MVpm2Vpm
std::string combineFilePath(std::initializer_list< std::string > ilist)
std::string toUpper(const std::string &str)
std::unique_ptr< Inform > Info
static OpalData * getInstance()
bool interpreteEOF(std::ifstream &in)
void disableFieldmapWarning()
static std::string typeset_msg(const std::string &msg, const std::string &title)
void getLine(std::ifstream &in, std::string &buffer)
void write3DField(unsigned int nx, unsigned int ny, unsigned int nz, const std::pair< double, double > &xrange, const std::pair< double, double > &yrange, const std::pair< double, double > &zrange, const std::vector< Vector_t< double, 3 > > &ef, const std::vector< Vector_t< double, 3 > > &bf)
virtual void getInfo(Inform *msg)
double * FieldstrengthEx_m
3D array with Ex
double hy_m
length between points in grid, y-direction
double * FieldstrengthBx_m
3D array with Bx
unsigned int num_gridpz_m
Read in number of points after 0(not counted here) in grid, z-direction.
unsigned int num_gridpy_m
Read in number of points after 0(not counted here) in grid, r-direction.
double * FieldstrengthEz_m
3D array with Ez
unsigned int num_gridpx_m
Read in number of points after 0(not counted here) in grid, r-direction.
virtual bool getFieldstrength(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) const
virtual void getOnaxisEz(std::vector< std::pair< double, double > > &F)
double * FieldstrengthBy_m
3D array with By
virtual void setFrequency(double freq)
FM3DDynamic(std::string aFilename)
double hx_m
length between points in grid, x-direction
double * FieldstrengthBz_m
3D array with Bz
virtual void getFieldDimensions(double &zBegin, double &zEnd) const
virtual bool getFieldDerivative(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B, const DiffDirection &dir) const
virtual double getFrequency() const
double hz_m
length between points in grid, z-direction
double * FieldstrengthEy_m
3D array with Ey