14 FieldstrengthBx_m(NULL),
15 FieldstrengthBy_m(NULL),
16 FieldstrengthBz_m(NULL) {
18 std::string tmpString;
26 bool parsing_passed =
true;
28 parsing_passed = interpreteLine<std::string>(file, tmpString);
30 parsing_passed = interpreteLine<std::string, std::string>(file, tmpString, tmpString);
33 if (tmpString !=
"TRUE" &&
36 "The second string on the first line of 3D field "
37 "maps has to be either TRUE or FALSE");
41 parsing_passed = (parsing_passed &&
43 parsing_passed = (parsing_passed &&
45 parsing_passed = (parsing_passed &&
49 parsing_passed = parsing_passed && interpreteLine<double>(file, tmpDouble);
52 parsing_passed = parsing_passed &&
60 zend_m = zbegin_m - 1e-3;
62 "Format of fieldmap '" +
Filename_m +
"' didn't pass basic test");
84 "Couldn't read fieldmap '" +
Filename_m +
"'");
96 std::string tmpString;
111 unsigned long index =
getIndex(i,0,k);
135 unsigned long index =
getIndex(i,0,k);
164 unsigned long index =
getIndex(i,j,k);
173 unsigned long index =
getIndex(i,j,k);
179 unsigned int i = num_gridpx_m - 1;
182 unsigned long index =
getIndex(i,j,k);
193 unsigned long index =
getIndex(i,j,k);
204 unsigned long index =
getIndex(i,j,k);
212 unsigned int i = num_gridpx_m - 1;
214 unsigned long index =
getIndex(i,j,k);
230 unsigned long index =
getIndex(i,j,k);
237 unsigned int index =
getIndex(i,j,k);
243 unsigned int k = num_gridpz_m - 1;
244 unsigned int index =
getIndex(i,j,k);
254 unsigned long index =
getIndex(i,j,k);
263 unsigned int index =
getIndex(i,j,k);
271 unsigned int k = num_gridpz_m - 1;
272 unsigned int index =
getIndex(i,j,k);
288 unsigned long index =
getIndex(i, j, k);
298 unsigned long index =
getIndex(i,j,k);
306 unsigned int k = num_gridpz_m - 1;
307 unsigned long index =
getIndex(i, j, k);
320 unsigned long index =
getIndex(i, j, k);
331 unsigned long index =
getIndex(i,j,k);
340 unsigned int k = num_gridpz_m - 1;
341 unsigned long index =
getIndex(i, j, k);
352 unsigned int i = num_gridpx_m - 1;
355 unsigned long index =
getIndex(i, j, k);
366 unsigned long index =
getIndex(i,j,k);
375 unsigned int k = num_gridpz_m - 1;
376 unsigned long index =
getIndex(i, j, k);
390 unsigned long index =
getIndex(i, j, k);
401 unsigned long index =
getIndex(i,j,k);
410 unsigned int k = num_gridpz_m - 1;
411 unsigned long index =
getIndex(i, j, k);
425 unsigned long index =
getIndex(i, j, k);
437 unsigned long index =
getIndex(i,j,k);
447 unsigned int k = num_gridpz_m - 1;
448 unsigned long index =
getIndex(i, j, k);
460 unsigned int i = num_gridpx_m - 1;
463 unsigned long index =
getIndex(i, j, k);
475 unsigned long index =
getIndex(i,j,k);
485 unsigned int k = num_gridpz_m - 1;
486 unsigned long index =
getIndex(i, j, k);
502 const double offWeight = 0.1, sumWeightInv = 1.0 / (1.0 + 4 * (1 + offWeight) * offWeight);
508 for (
int i2 = -1; i2 < 2; ++ i2) {
509 for (
int k2 = -1; k2 < 2; ++ k2) {
511 sum += weight * data[
getIndex(i + i2, j, k + k2)];
515 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
519 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
523 for (
int i2 = 0; i2 < 2; ++ i2) {
524 for (
int k2 = -1; k2 < 2; ++ k2) {
526 sum += weight * data[
getIndex(i + i2, j, k + k2)];
530 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
534 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
535 unsigned int i = num_gridpx_m - 1;
538 for (
int i2 = -1; i2 < 1; ++ i2) {
539 for (
int k2 = -1; k2 < 2; ++ k2) {
541 sum += weight * data[
getIndex(i + i2, j, k + k2)];
545 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
549 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
551 for (
unsigned int i = 1; i < num_gridpx_m - 1; ++ i) {
553 for (
int i2 = -1; i2 < 2; ++ i2) {
554 for (
int k2 = 0; k2 < 2; ++ k2) {
556 sum += weight * data[
getIndex(i + i2, j, k + k2)];
560 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
564 const double sumWeightInv = 1.0 / (1.0 + (3 + 2 * offWeight) * offWeight);
566 for (
unsigned int i = 1; i < num_gridpx_m - 1; ++ i) {
568 for (
int i2 = -1; i2 < 2; ++ i2) {
569 for (
int k2 = -1; k2 < 1; ++ k2) {
571 sum += weight * data[
getIndex(i + i2, j, k + k2)];
575 tmp[
getIndex(i, j, k)] = sum * sumWeightInv;
579 unsigned long index =
getIndex(0, j, 0);
580 tmp[index] = data[index];
583 unsigned long index =
getIndex(num_gridpx_m - 1, j, 0);
584 tmp[index] = data[index];
588 tmp[index] = data[index];
592 tmp[index] = data[index];
597 unsigned long index =
getIndex(i, j, k);
598 data[index] = tmp[index];
607 std::ofstream out(fname);
613 unsigned long index =
getIndex(i, j, k);
614 out << std::setw(14) << x
615 << std::setw(14) << y
616 << std::setw(14) << z
676 unsigned short switchX = ((corner &
HX) >> 2), switchY = ((corner &
HY) >> 1), switchZ = (corner &
HZ);
677 double factorX = 0.5 + (1 - 2 * switchX) * (0.5 - idx.
weight(0));
678 double factorY = 0.5 + (1 - 2 * switchY) * (0.5 - idx.
weight(1));
679 double factorZ = 0.5 + (1 - 2 * switchZ) * (0.5 - idx.
weight(2));
681 unsigned long i = idx.
i + switchX, j = idx.
j + switchY, k = idx.
k + switchZ;
683 return factorX * factorY * factorZ * data[
getIndex(i, j, k)];
unsigned int num_gridpy_m
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const
IndexTriplet getIndex(const Vector_t &X) const
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
Vector_t interpolateTrilinearly(const Vector_t &X) const
constexpr double e
The value of .
unsigned int num_gridpx_m
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
PETE_TBTree< FnCopysign, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > copysign(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
std::string toUpper(const std::string &str)
void disableFieldmapWarning()
virtual bool isInside(const Vector_t &r) const
void integrateBy(unsigned j)
static std::string typeset_msg(const std::string &msg, const std::string &title)
void integrateBx(unsigned j)
virtual void getFieldDimensions(double &zBegin, double &zEnd, double &rBegin, double &rEnd) const
T::PETE_Expr_t::PETE_Return_t sum(const PETE_Expr< T > &expr)
void saveField(const std::string &fname, unsigned int j) const
virtual void getInfo(Inform *msg)
virtual double getFrequency() const
FM3DMagnetoStaticExtended(std::string aFilename)
bool interpreteEOF(std::ifstream &in)
double getWeightedData(double *data, const IndexTriplet &idx, unsigned short corner) const
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
unsigned int num_gridpz_m
void getLine(std::ifstream &in, std::string &buffer)
double * FieldstrengthBx_m
Inform & level3(Inform &inf)
~FM3DMagnetoStaticExtended()
double * FieldstrengthBy_m
double * FieldstrengthBz_m
void integrateBz(unsigned j)
virtual void setFrequency(double freq)
void smoothData(double *data, unsigned j)
PETE_TUTree< FnFloor, typename T::PETE_Expr_t > floor(const PETE_Expr< T > &l)
Inform & endl(Inform &inf)