14 std::string tmpString;
22 bool parsing_passed = true;
24 parsing_passed = interpretLine<std::string, std::string>(file, tmpString, tmpString);
27 file, tmpString, tmpString, tmpString);
30 if (tmpString !=
"TRUE" && tmpString !=
"FALSE")
32 "FM2DMagnetoStatic::FM2DMagnetoStatic",
33 "The third string on the first line of 2D field "
34 "maps has to be either TRUE or FALSE");
39 if (tmpString ==
"ZX") {
47 }
else if (tmpString ==
"XZ") {
56 std::cerr <<
"unknown orientation of 2D magnetostatic fieldmap" << std::endl;
57 parsing_passed =
false;
70 if (!parsing_passed) {
74 "FM2DMagnetoStatic::FM2DMagnetoStatic",
75 "An error occured when reading the fieldmap '" +
Filename_m +
"'");
105 std::string tmpString;
171 const double RR = std::sqrt(R(0) * R(0) + R(1) * R(1));
173 const int indexr = std::abs((
int)std::floor(RR /
hr_m));
174 const double leverr = (RR /
hr_m) - indexr;
176 const int indexz = std::abs((
int)std::floor((R(2) -
zbegin_m) /
hz_m));
177 const double leverz = (R(2) -
zbegin_m) /
hz_m - indexz;
187 const double BfieldR = (1.0 - leverz) * (1.0 - leverr) *
FieldstrengthBr_m[index1]
192 const double BfieldZ = (1.0 - leverz) * (1.0 - leverr) *
FieldstrengthBz_m[index1]
198 B(0) += BfieldR * R(0) / RR;
199 B(1) += BfieldR * R(1) / RR;
208 double BfieldR, BfieldZ;
210 const double RR = std::sqrt(R(0) * R(0) + R(1) * R(1));
212 const int indexr = (int)std::floor(RR /
hr_m);
213 const double leverr = (RR /
hr_m) - indexr;
215 const int indexz = (int)std::floor((R(2)) /
hz_m);
216 const double leverz = (R(2) /
hz_m) - indexz;
229 BfieldR = (1.0 - leverr)
242 BfieldZ = (1.0 - leverr)
424 B(0) += BfieldR * R(0) / RR;
425 B(1) += BfieldR * R(1) / RR;
437 double& ,
double& ,
double& ,
double& ,
double& ,
ippl::Vector< T, Dim > Vector_t
std::string toUpper(const std::string &str)
bool interpreteEOF(std::ifstream &in)
void disableFieldmapWarning()
static std::string typeset_msg(const std::string &msg, const std::string &title)
bool interpretLine(std::ifstream &in, S &value, const bool &file_length_known=true)
void getLine(std::ifstream &in, std::string &buffer)
virtual double getFrequency() const
virtual void getInfo(Inform *msg)
virtual void getFieldDimensions(double &zBegin, double &zEnd) const
double * FieldstrengthBr_m
double * FieldstrengthBz_m
virtual void setFrequency(double freq)
FM2DMagnetoStatic(std::string aFilename)
virtual bool getFieldstrength(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) const
virtual bool getFieldDerivative(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B, const DiffDirection &dir) const