13 inFile >> NumberOfPoints[0] >> NumberOfPoints[1] >> NumberOfPoints[2];
14 inFile >> ReferencePoint[0] >> ReferencePoint[1] >> ReferencePoint[2];
15 inFile >> BasicDistance0[0] >> BasicDistance0[1] >> BasicDistance0[2];
18 inFile >> NumberOfPoints[0] >> NumberOfPoints[1] >> NumberOfPoints[2];
19 inFile >> ReferencePoint[0] >> ReferencePoint[1] >> ReferencePoint[2];
20 inFile >> BasicDistance0[0] >> BasicDistance0[1] >> BasicDistance0[2];
21 inFile >> BasicDistance1[0][0] >> BasicDistance1[1][0] >> BasicDistance1[2][0];
22 inFile >> BasicDistance1[0][1] >> BasicDistance1[1][1] >> BasicDistance1[2][1];
23 inFile >> BasicDistance1[0][2] >> BasicDistance1[1][2] >> BasicDistance1[2][2];
24 inFile >> BasicDistance2[0][0] >> BasicDistance2[1][0] >> BasicDistance2[2][0];
25 inFile >> BasicDistance2[0][1] >> BasicDistance2[1][1] >> BasicDistance2[2][1];
26 inFile >> BasicDistance2[0][2] >> BasicDistance2[1][2] >> BasicDistance2[2][2];
27 inFile >> EasyCoordinate[0] >> EasyCoordinate[1] >> EasyCoordinate[2];
30 inFile >> NumberOfPoints[0] >> NumberOfPoints[1] >> NumberOfPoints[2];
31 inFile >> ReferencePoint[0] >> ReferencePoint[1] >> ReferencePoint[2];
32 inFile >> BasicDistance0[0] >> BasicDistance0[1] >> BasicDistance0[2];
35 inFile >> NumberOfPoints[0] >> NumberOfPoints[1] >> NumberOfPoints[2];
36 inFile >> ReferencePoint[0] >> ReferencePoint[1] >> ReferencePoint[2];
37 inFile >> BasicDistance0[0] >> BasicDistance0[1] >> BasicDistance0[2];
38 inFile >> BasicDistance1[0][0] >> BasicDistance1[1][0] >> BasicDistance1[2][0];
39 inFile >> BasicDistance1[0][1] >> BasicDistance1[1][1] >> BasicDistance1[2][1];
40 inFile >> BasicDistance1[0][2] >> BasicDistance1[1][2] >> BasicDistance1[2][2];
41 inFile >> BasicDistance2[0][0] >> BasicDistance2[1][0] >> BasicDistance2[2][0];
42 inFile >> BasicDistance2[0][1] >> BasicDistance2[1][1] >> BasicDistance2[2][1];
43 inFile >> BasicDistance2[0][2] >> BasicDistance2[1][2] >> BasicDistance2[2][2];
44 inFile >> EasyCoordinate[0] >> EasyCoordinate[1] >> EasyCoordinate[2];
47 inFile >> NumberOfPoints[0] >> NumberOfPoints[1] >> NumberOfPoints[2];
48 inFile >> ReferencePoint[0] >> ReferencePoint[1] >> ReferencePoint[2];
49 inFile >> BasicDistance0[0] >> BasicDistance0[1] >> BasicDistance0[2];
50 inFile >> RParAsFunOfPhi[0] >> RParAsFunOfPhi[1] >> RParAsFunOfPhi[2] >> RParAsFunOfPhi[3];
58 int nLines = NumberOfPoints[0]*NumberOfPoints[1]*NumberOfPoints[2];
59 FieldValues.reserve(nLines);
61 for (
int iLine=0; iLine<nLines; ++iLine){
62 inFile >> Bx >> By >> Bz;
63 FieldEntry.
putB3(Bx,By,Bz);
64 FieldValues.push_back(FieldEntry);
70 if (lastEntry !=
"complete"){
72 cout <<
"error during file reading: file is not complete" << endl;
81 if (type == 0)
cout <<
" grid type = " << type <<
" --> not determined" << endl;
82 if (type == 1)
cout <<
" grid type = " << type <<
" --> (x,y,z) cube" << endl;
83 if (type == 2)
cout <<
" grid type = " << type <<
" --> (x,y,z) trapezoid" << endl;
84 if (type == 3)
cout <<
" grid type = " << type <<
" --> (r,phi,z) cube" << endl;
85 if (type == 4)
cout <<
" grid type = " << type <<
" --> (r,phi,z) trapezoid" << endl;
86 if (type == 5)
cout <<
" grid type = " << type <<
" --> (r,phi,z) 1/sin(phi)" << endl;
92 double dB[3] = {0.,0.,0.};
97 putCoordGetInd(X1,X2,X3,index[0],index[1],index[2]);
98 int index0[3] = {0,0,0};
99 int index1[3] = {0,0,0};
100 for (
int i=0;
i<3; ++
i){
101 if (NumberOfPoints[
i] > 1){
102 index0[
i] =
max(0,index[
i]);
103 if (index0[i] > NumberOfPoints[i]-2) index0[
i] = NumberOfPoints[
i]-2;
104 index1[
i] =
max(1,index[i]+1);
105 if (index1[i] > NumberOfPoints[i]-1) index1[
i] = NumberOfPoints[
i]-1;
112 putIndicesGetB(index0[0],index0[1],index0[2],tmpB[0],tmpB[1],tmpB[2]);
113 putIndGetCoord(index0[0],index0[1],index0[2],tmpX[0],tmpX[1],tmpX[2]);
114 MagInterpol.
defineCellPoint000(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
115 putIndicesGetB(index1[0],index0[1],index0[2],tmpB[0],tmpB[1],tmpB[2]);
116 putIndGetCoord(index1[0],index0[1],index0[2],tmpX[0],tmpX[1],tmpX[2]);
117 MagInterpol.
defineCellPoint100(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
118 putIndicesGetB(index0[0],index1[1],index0[2],tmpB[0],tmpB[1],tmpB[2]);
119 putIndGetCoord(index0[0],index1[1],index0[2],tmpX[0],tmpX[1],tmpX[2]);
120 MagInterpol.
defineCellPoint010(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
121 putIndicesGetB(index1[0],index1[1],index0[2],tmpB[0],tmpB[1],tmpB[2]);
122 putIndGetCoord(index1[0],index1[1],index0[2],tmpX[0],tmpX[1],tmpX[2]);
123 MagInterpol.
defineCellPoint110(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
124 putIndicesGetB(index0[0],index0[1],index1[2],tmpB[0],tmpB[1],tmpB[2]);
125 putIndGetCoord(index0[0],index0[1],index1[2],tmpX[0],tmpX[1],tmpX[2]);
126 MagInterpol.
defineCellPoint001(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
127 putIndicesGetB(index1[0],index0[1],index1[2],tmpB[0],tmpB[1],tmpB[2]);
128 putIndGetCoord(index1[0],index0[1],index1[2],tmpX[0],tmpX[1],tmpX[2]);
129 MagInterpol.
defineCellPoint101(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
130 putIndicesGetB(index0[0],index1[1],index1[2],tmpB[0],tmpB[1],tmpB[2]);
131 putIndGetCoord(index0[0],index1[1],index1[2],tmpX[0],tmpX[1],tmpX[2]);
132 MagInterpol.
defineCellPoint011(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
133 putIndicesGetB(index1[0],index1[1],index1[2],tmpB[0],tmpB[1],tmpB[2]);
134 putIndGetCoord(index1[0],index1[1],index1[2],tmpX[0],tmpX[1],tmpX[2]);
135 MagInterpol.
defineCellPoint111(tmpX[0],tmpX[1],tmpX[2],
double(tmpB[0]),
double(tmpB[1]),
double(tmpB[2]));
149 double pnt[3] = {X1,X2,X3};
153 for (
int i=0;
i<3; ++
i){
154 index[
i] =
int((pnt[
i]-ReferencePoint[
i])/BasicDistance0[i]);
159 for (
int i=0;
i<3; ++
i){
160 if (EasyCoordinate[
i]){
161 index[
i] =
int((pnt[i]-ReferencePoint[i])/BasicDistance0[i]);
164 for (
int i=0;
i<3; ++
i){
165 if (!EasyCoordinate[
i]){
166 double stepSize = BasicDistance0[
i];
168 for (
int j=0; j<3; ++j){
169 stepSize += BasicDistance1[
i][j]*index[j];
170 offset += BasicDistance2[
i][j]*index[j];
172 index[
i] =
int((pnt[i]-(ReferencePoint[i] + offset))/stepSize);
177 for (
int i=0;
i<3; ++
i){
178 index[
i] =
int((pnt[
i]-ReferencePoint[
i])/BasicDistance0[i]);
183 for (
int i=0;
i<3; ++
i){
184 if (EasyCoordinate[
i]){
185 index[
i] =
int((pnt[i]-ReferencePoint[i])/BasicDistance0[i]);
188 for (
int i=0;
i<3; ++
i){
189 if (!EasyCoordinate[
i]){
190 double stepSize = BasicDistance0[
i];
192 for (
int j=0; j<3; ++j){
193 stepSize += BasicDistance1[
i][j]*index[j];
194 offset += BasicDistance2[
i][j]*index[j];
196 index[
i] =
int((pnt[i]-(ReferencePoint[i] + offset))/stepSize);
201 double sinPhi =
sin(pnt[1]);
202 double stepSize = RParAsFunOfPhi[0] + RParAsFunOfPhi[1]/sinPhi - RParAsFunOfPhi[2] - RParAsFunOfPhi[3]/sinPhi;
203 stepSize = stepSize/(NumberOfPoints[0]-1);
204 double startingPoint = RParAsFunOfPhi[2] + RParAsFunOfPhi[3]/sinPhi;
205 index[0] =
int((pnt[0]-startingPoint)/stepSize);
206 index[1] =
int((pnt[1]-ReferencePoint[1])/BasicDistance0[1]);
207 index[2] =
int((pnt[2]-ReferencePoint[2])/BasicDistance0[2]);
220 FieldEntry = FieldValues.operator[](lineNumber(Index1, Index2, Index3));
221 Bx = FieldEntry.
bx();
222 By = FieldEntry.
by();
223 Bz = FieldEntry.
bz();
229 int index[3] = {Index1, Index2, Index3};
233 for (
int i=0;
i<3; ++
i){
234 pnt[
i] = ReferencePoint[
i] + BasicDistance0[
i]*index[
i];
238 for (
int i=0;
i<3; ++
i){
239 if (EasyCoordinate[
i]){
240 pnt[
i] = ReferencePoint[
i] + BasicDistance0[
i]*index[
i];
243 double stepSize = BasicDistance0[
i];
245 for (
int j=0; j<3; ++j){
246 stepSize += BasicDistance1[
i][j]*index[j];
247 offset += BasicDistance2[
i][j]*index[j];
249 pnt[
i] = ReferencePoint[
i] + offset + stepSize*index[
i];
254 for (
int i=0;
i<3; ++
i){
255 pnt[
i] = ReferencePoint[
i] + BasicDistance0[
i]*index[
i];
259 for (
int i=0;
i<3; ++
i){
260 if (EasyCoordinate[
i]){
261 pnt[
i] = ReferencePoint[
i] + BasicDistance0[
i]*index[
i];
264 double stepSize = BasicDistance0[
i];
266 for (
int j=0; j<3; ++j){
267 stepSize += BasicDistance1[
i][j]*index[j];
268 offset += BasicDistance2[
i][j]*index[j];
270 pnt[
i] = ReferencePoint[
i] + offset + stepSize*index[
i];
275 pnt[2] = ReferencePoint[2] + BasicDistance0[2]*index[2];
276 pnt[1] = ReferencePoint[1] + BasicDistance0[1]*index[1];
277 double sinPhi =
sin(pnt[1]);
278 double stepSize = RParAsFunOfPhi[0] + RParAsFunOfPhi[1]/sinPhi - RParAsFunOfPhi[2] - RParAsFunOfPhi[3]/sinPhi;
279 stepSize = stepSize/(NumberOfPoints[0]-1);
280 double startingPoint = RParAsFunOfPhi[2] + RParAsFunOfPhi[3]/sinPhi;
281 pnt[0] = startingPoint + stepSize*index[0];
293 return Index1*NumberOfPoints[1]*NumberOfPoints[2] + Index2*NumberOfPoints[2] + Index3;
void load(const std::string &name)
load grid binary file
void putCoordGetInd(double X1, double X2, double X3, int &Index1, int &Index2, int &Index3)
void defineCellPoint100(double X1, double X2, double X3, double F1, double F2, double F3)
void putB3(float Bx, float By, float Bz)
Sin< T >::type sin(const T &t)
int gridType()
returns value of GridType (and eventually prints the type + short description)
void defineCellPoint110(double X1, double X2, double X3, double F1, double F2, double F3)
void putIndGetCoord(int Index1, int Index2, int Index3, double &X1, double &X2, double &X3)
void defineCellPoint101(double X1, double X2, double X3, double F1, double F2, double F3)
void putSCoordGetVField(double X1, double X2, double X3, double &F1, double &F2, double &F3)
receive the interpolated field (out) at any point in space (in)
void defineCellPoint010(double X1, double X2, double X3, double F1, double F2, double F3)
int lineNumber(int Index1, int Index2, int Index3)
void defineCellPoint111(double X1, double X2, double X3, double F1, double F2, double F3)
void defineCellPoint000(double X1, double X2, double X3, double F1, double F2, double F3)
provide the interpolation algorithm with 8 points, where the field is known (in)
void putIndicesGetB(int Index1, int Index2, int Index3, float &Bx, float &By, float &Bz)
void defineCellPoint001(double X1, double X2, double X3, double F1, double F2, double F3)
void defineCellPoint011(double X1, double X2, double X3, double F1, double F2, double F3)
void interpolateAtPoint(double X1, double X2, double X3, float &Bx, float &By, float &Bz)
interpolates the magnetic field at input coordinate point and returns field values ...