30int main(
int argc,
char* argv[])
32 boost::program_options::options_description options(
33 "Usage: test1 [options (options given on the command line "
34 "override options given everywhere else)], where options are:"
36 options.add_options()(
"help",
"print this help message")(
"verbose",
"print run time information");
38 TB0 background_B(&options);
43 boost::program_options::variables_map option_variables;
46 boost::program_options::store(boost::program_options::parse_command_line(argc, argv, options), option_variables);
47 boost::program_options::notify(option_variables);
49 boost::program_options::store(boost::program_options::parse_environment(options,
"GUMICS_"), option_variables);
50 boost::program_options::notify(option_variables);
53 if (option_variables.count(
"help") > 0) {
58 if (option_variables.count(
"verbose") > 0) {
62 background_B.initialize();
65 cout <<
"Testing background magnetic field calculation..." << endl;
73 center[3] = {0, 0, 0};
81 cout <<
"Cube center at "
82 << center[0] /
R_E <<
", " << center[1] /
R_E <<
", " << center[2] /
R_E <<
" (R_E):"
87 previous_difference = std::numeric_limits<double>::max(),
88 difference = std::numeric_limits<double>::max();
90 for (
double size = 1 *
R_E; size >= 0.01 *
R_E; size /= 2) {
91 start[0] = center[0] - size / 2;
92 start[1] = center[1] - size / 2;
93 start[2] = center[2] - size / 2;
94 end[0] = center[0] + size / 2;
95 end[1] = center[1] + size / 2;
96 end[2] = center[2] + size / 2;
99 result_x = 0, result_y = 0, result_z = 0,
100 reference_x = 0, reference_y = 0, reference_z = 0;
102 get_dipole_B(center[0], center[1], center[2], reference_x, reference_y, reference_z);
104 background_B.BackgroundVolumeAverageFast(start, end, result_x, result_y, result_z);
107 dx = result_x - reference_x,
108 dy = result_y - reference_y,
109 dz = result_z - reference_z,
111 difference =
sqrt(
dx*
dx + dy*dy + dz*dz);
114 cout <<
"Difference for size " << size /
R_E <<
" (R_E): " << difference << endl;
117 if (difference >= previous_difference) {
118 cerr << __FILE__ <<
":" << __LINE__
119 <<
" New difference (" << difference
120 <<
") is larger than previous (" << previous_difference
126 previous_difference = difference;
132 center[1] = -3 *
R_E;
136 cout <<
"Cube center at "
137 << center[0] /
R_E <<
", " << center[1] /
R_E <<
", " << center[2] /
R_E <<
" (R_E):"
141 previous_difference = std::numeric_limits<double>::max(),
142 difference = std::numeric_limits<double>::max();
144 for (
double size = 1 *
R_E; size >= 0.01 *
R_E; size /= 2) {
145 start[0] = center[0] - size / 2;
146 start[1] = center[1] - size / 2;
147 start[2] = center[2] - size / 2;
148 end[0] = center[0] + size / 2;
149 end[1] = center[1] + size / 2;
150 end[2] = center[2] + size / 2;
153 result_x = 0, result_y = 0, result_z = 0,
154 reference_x = 0, reference_y = 0, reference_z = 0;
156 get_dipole_B(center[0], center[1], center[2], reference_x, reference_y, reference_z);
158 background_B.BackgroundVolumeAverageFast(start, end, result_x, result_y, result_z);
161 dx = result_x - reference_x,
162 dy = result_y - reference_y,
163 dz = result_z - reference_z,
165 difference =
sqrt(
dx*
dx + dy*dy + dz*dz);
168 cout <<
"Difference for size " << size /
R_E <<
" (R_E): " << difference << endl;
171 if (difference >= previous_difference) {
172 cerr << __FILE__ <<
":" << __LINE__
173 <<
" New difference (" << difference
174 <<
") is larger than previous (" << previous_difference
180 previous_difference = difference;
190 cout <<
"Cube center at "
191 << center[0] /
R_E <<
", " << center[1] /
R_E <<
", " << center[2] /
R_E <<
" (R_E):"
195 previous_difference = std::numeric_limits<double>::max(),
196 difference = std::numeric_limits<double>::max();
198 for (
double size = 1 *
R_E; size >= 0.01 *
R_E; size /= 2) {
199 start[0] = center[0] - size / 2;
200 start[1] = center[1] - size / 2;
201 start[2] = center[2] - size / 2;
202 end[0] = center[0] + size / 2;
203 end[1] = center[1] + size / 2;
204 end[2] = center[2] + size / 2;
207 result_x = 0, result_y = 0, result_z = 0,
208 reference_x = 0, reference_y = 0, reference_z = 0;
210 get_dipole_B(center[0], center[1], center[2], reference_x, reference_y, reference_z);
212 background_B.BackgroundVolumeAverageFast(start, end, result_x, result_y, result_z);
215 dx = result_x - reference_x,
216 dy = result_y - reference_y,
217 dz = result_z - reference_z,
219 difference =
sqrt(
dx*
dx + dy*dy + dz*dz);
222 cout <<
"Difference for size " << size /
R_E <<
" (R_E): " << difference << endl;
225 if (difference >= previous_difference) {
226 cerr << __FILE__ <<
":" << __LINE__
227 <<
" New difference (" << difference
228 <<
") is larger than previous (" << previous_difference
234 previous_difference = difference;
240 center[1] = -2 *
R_E;
244 cout <<
"Cube center at "
245 << center[0] /
R_E <<
", " << center[1] /
R_E <<
", " << center[2] /
R_E <<
" (R_E):"
249 previous_difference = std::numeric_limits<double>::max(),
250 difference = std::numeric_limits<double>::max();
252 for (
double size = 1 *
R_E; size >= 0.01 *
R_E; size /= 2) {
253 start[0] = center[0] - size / 2;
254 start[1] = center[1] - size / 2;
255 start[2] = center[2] - size / 2;
256 end[0] = center[0] + size / 2;
257 end[1] = center[1] + size / 2;
258 end[2] = center[2] + size / 2;
261 result_x = 0, result_y = 0, result_z = 0,
262 reference_x = 0, reference_y = 0, reference_z = 0;
264 get_dipole_B(center[0], center[1], center[2], reference_x, reference_y, reference_z);
266 background_B.BackgroundVolumeAverageFast(start, end, result_x, result_y, result_z);
269 dx = result_x - reference_x,
270 dy = result_y - reference_y,
271 dz = result_z - reference_z,
273 difference =
sqrt(
dx*
dx + dy*dy + dz*dz);
276 cout <<
"Difference for size " << size /
R_E <<
" (R_E): " << difference << endl;
279 if (difference >= previous_difference) {
280 cerr << __FILE__ <<
":" << __LINE__
281 <<
" New difference (" << difference
282 <<
") is larger than previous (" << previous_difference
288 previous_difference = difference;
293 center[0] = 0.26 *
R_E;
294 center[1] = 0.26 *
R_E;
295 center[2] = 0.26 *
R_E;
298 cout <<
"Cube center at "
299 << center[0] /
R_E <<
", " << center[1] /
R_E <<
", " << center[2] /
R_E <<
" (R_E):"
303 previous_difference = std::numeric_limits<double>::max(),
304 difference = std::numeric_limits<double>::max();
306 for (
double size = 1 *
R_E; size >= 0.01 *
R_E; size /= 2) {
307 start[0] = center[0] - size / 2;
308 start[1] = center[1] - size / 2;
309 start[2] = center[2] - size / 2;
310 end[0] = center[0] + size / 2;
311 end[1] = center[1] + size / 2;
312 end[2] = center[2] + size / 2;
315 result_x = 0, result_y = 0, result_z = 0,
316 reference_x = 0, reference_y = 0, reference_z = 0;
318 get_dipole_B(center[0], center[1], center[2], reference_x, reference_y, reference_z);
320 background_B.BackgroundVolumeAverageFast(start, end, result_x, result_y, result_z);
323 dx = result_x - reference_x,
324 dy = result_y - reference_y,
325 dz = result_z - reference_z,
327 difference =
sqrt(
dx*
dx + dy*dy + dz*dz);
330 cout <<
"Difference for size " << size /
R_E <<
" (R_E): " << difference << endl;
333 if (difference >= previous_difference) {
334 cerr << __FILE__ <<
":" << __LINE__
335 <<
" New difference (" << difference
336 <<
") is larger than previous (" << previous_difference
342 previous_difference = difference;
345 cout <<
"PASSED" << endl;