16 FieldstrengthBx_m(nullptr),
17 FieldstrengthBy_m(nullptr),
18 FieldstrengthBz_m(nullptr) {
20 std::string tmpString;
28 bool parsing_passed =
true;
30 parsing_passed = interpretLine<std::string>(file, tmpString);
32 parsing_passed = interpretLine<std::string, std::string>(file, tmpString, tmpString);
35 if (tmpString !=
"TRUE" &&
38 "The second string on the first line of 3D field "
39 "maps has to be either TRUE or FALSE");
43 parsing_passed = (parsing_passed &&
45 parsing_passed = (parsing_passed &&
47 parsing_passed = (parsing_passed &&
51 parsing_passed = parsing_passed && interpretLine<double>(file, tmpDouble);
54 parsing_passed = parsing_passed &&
62 zend_m = zbegin_m - 1e-3;
64 "Format of fieldmap '" +
Filename_m +
"' didn't pass basic test");
86 "Couldn't read fieldmap '" +
Filename_m +
"'");
103 std::string tmpString;
118 unsigned long index =
getIndex(i,0,k);
131 unsigned int centerX =
static_cast<unsigned int>(std::round(-
xbegin_m /
hx_m));
142 unsigned long index =
getIndex(i,0,k);
169 unsigned long index =
getIndex(i,j,k);
178 unsigned long index =
getIndex(i,j,k);
184 unsigned int i = num_gridpx_m - 1;
187 unsigned long index =
getIndex(i,j,k);
198 unsigned long index =
getIndex(i,j,k);
209 unsigned long index =
getIndex(i,j,k);
217 unsigned int i = num_gridpx_m - 1;
219 unsigned long index =
getIndex(i,j,k);
235 unsigned long index =
getIndex(i,j,k);
242 unsigned int index =
getIndex(i,j,k);
248 unsigned int k = num_gridpz_m - 1;
249 unsigned int index =
getIndex(i,j,k);
259 unsigned long index =
getIndex(i,j,k);
268 unsigned int index =
getIndex(i,j,k);
276 unsigned int k = num_gridpz_m - 1;
277 unsigned int index =
getIndex(i,j,k);
293 unsigned long index =
getIndex(i, j, k);
303 unsigned long index =
getIndex(i,j,k);
311 unsigned int k = num_gridpz_m - 1;
312 unsigned long index =
getIndex(i, j, k);
325 unsigned long index =
getIndex(i, j, k);
336 unsigned long index =
getIndex(i,j,k);
345 unsigned int k = num_gridpz_m - 1;
346 unsigned long index =
getIndex(i, j, k);
357 unsigned int i = num_gridpx_m - 1;
360 unsigned long index =
getIndex(i, j, k);
371 unsigned long index =
getIndex(i,j,k);
380 unsigned int k = num_gridpz_m - 1;
381 unsigned long index =
getIndex(i, j, k);
395 unsigned long index =
getIndex(i, j, k);
406 unsigned long index =
getIndex(i,j,k);
415 unsigned int k = num_gridpz_m - 1;
416 unsigned long index =
getIndex(i, j, k);
430 unsigned long index =
getIndex(i, j, k);
442 unsigned long index =
getIndex(i,j,k);
452 unsigned int k = num_gridpz_m - 1;
453 unsigned long index =
getIndex(i, j, k);
465 unsigned int i = num_gridpx_m - 1;
468 unsigned long index =
getIndex(i, j, k);
480 unsigned long index =
getIndex(i,j,k);
490 unsigned int k = num_gridpz_m - 1;
491 unsigned long index =
getIndex(i, j, k);
507 const double offWeight = 0.1, sumWeightInv = 1.0 / (1.0 + 4 * (1 + offWeight) * offWeight);
513 for (
int i2 = -1; i2 < 2; ++ i2) {
514 for (
int k2 = -1; k2 < 2; ++ k2) {
516 sum += weight * data[
getIndex(i + i2, j, k + k2)];
520 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
524 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
528 for (
int i2 = 0; i2 < 2; ++ i2) {
529 for (
int k2 = -1; k2 < 2; ++ k2) {
531 sum += weight * data[
getIndex(i + i2, j, k + k2)];
535 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
539 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
540 unsigned int i = num_gridpx_m - 1;
543 for (
int i2 = -1; i2 < 1; ++ i2) {
544 for (
int k2 = -1; k2 < 2; ++ k2) {
546 sum += weight * data[
getIndex(i + i2, j, k + k2)];
550 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
554 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
556 for (
unsigned int i = 1; i < num_gridpx_m - 1; ++ i) {
558 for (
int i2 = -1; i2 < 2; ++ i2) {
559 for (
int k2 = 0; k2 < 2; ++ k2) {
561 sum += weight * data[
getIndex(i + i2, j, k + k2)];
565 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
569 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
571 for (
unsigned int i = 1; i < num_gridpx_m - 1; ++ i) {
573 for (
int i2 = -1; i2 < 2; ++ i2) {
574 for (
int k2 = -1; k2 < 1; ++ k2) {
576 sum += weight * data[
getIndex(i + i2, j, k + k2)];
580 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
584 unsigned long index =
getIndex(0, j, 0);
585 tmp[index] = data[index];
588 unsigned long index =
getIndex(num_gridpx_m - 1, j, 0);
589 tmp[index] = data[index];
593 tmp[index] = data[index];
597 tmp[index] = data[index];
602 unsigned long index =
getIndex(i, j, k);
603 data[index] = tmp[index];
612 std::ofstream out(fname);
618 unsigned long index =
getIndex(i, j, k);
619 out << std::setw(14) << x
620 << std::setw(14) << y
621 << std::setw(14) << z
679 unsigned short switchX = ((corner &
HX) >> 2), switchY = ((corner &
HY) >> 1), switchZ = (corner &
HZ);
680 double factorX = 0.5 + (1 - 2 * switchX) * (0.5 - idx.
weight(0));
681 double factorY = 0.5 + (1 - 2 * switchY) * (0.5 - idx.
weight(1));
682 double factorZ = 0.5 + (1 - 2 * switchZ) * (0.5 - idx.
weight(2));
684 unsigned long i = idx.
i + switchX, j = idx.
j + switchY, k = idx.
k + switchZ;
686 return factorX * factorY * factorZ * data[
getIndex(i, j, k)];
void saveField(const std::string &fname, unsigned int j) const
PETE_TBTree< FnCopysign, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > copysign(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
Vector_t interpolateTrilinearly(const Vector_t &X) const
static std::string typeset_msg(const std::string &msg, const std::string &title)
double getWeightedData(double *data, const IndexTriplet &idx, unsigned short corner) const
std::string toUpper(const std::string &str)
double * FieldstrengthBz_m
Inform & endl(Inform &inf)
bool interpreteEOF(std::ifstream &in)
IndexTriplet getIndex(const Vector_t &X) const
void integrateBz(unsigned j)
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
virtual void getFieldDimensions(double &zBegin, double &zEnd) const
double * FieldstrengthBx_m
T::PETE_Expr_t::PETE_Return_t sum(const PETE_Expr< T > &expr)
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const
std::shared_ptr< _FM3DMagnetoStaticExtended > FM3DMagnetoStaticExtended
unsigned int num_gridpy_m
virtual double getFrequency() const
void disableFieldmapWarning()
unsigned int num_gridpz_m
void integrateBy(unsigned j)
virtual bool isInside(const Vector_t &r) const
void getLine(std::ifstream &in, std::string &buffer)
virtual ~_FM3DMagnetoStaticExtended()
Inform & level3(Inform &inf)
void integrateBx(unsigned j)
constexpr double e
The value of .
virtual void setFrequency(double freq)
void smoothData(double *data, unsigned j)
_FM3DMagnetoStaticExtended(const std::string &filename)
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
static FM3DMagnetoStaticExtended create(const std::string &filename)
virtual void getInfo(Inform *msg)
unsigned int num_gridpx_m
double * FieldstrengthBy_m