196 const double zb = 0.0, ze = 20.0;
197 const double rb = 0.0, re = 5.0;
198 const int nz = 4,
nr = 2;
200 const double Bz_val = 1.0, Br_val = 0.0;
202 std::string fname = writeXZFieldmap(tmpFile(
"uni.map"), zb, ze, nz, rb, re,
nr, Bz_val, Br_val);
204 Fieldmap* fm = Fieldmap::getFieldmap(fname);
205 Fieldmap::readMap(fname);
213 EXPECT_FALSE(outside);
214 EXPECT_NEAR(B[2], Bz_val, 1e-10);
215 EXPECT_NEAR(B[0], 0.0, 1e-10);
216 EXPECT_NEAR(B[1], 0.0, 1e-10);
224 const double zb = 0.0, ze = 10.0;
225 const double rb = 0.0, re = 5.0;
226 const int nz = 4,
nr = 2;
228 std::string fname = writeXZFieldmap(tmpFile(
"oz.map"), zb, ze, nz, rb, re,
nr);
229 Fieldmap* fm = Fieldmap::getFieldmap(fname);
230 Fieldmap::readMap(fname);
239 EXPECT_NEAR(B[0], 0.0, 1e-15);
240 EXPECT_NEAR(B[1], 0.0, 1e-15);
241 EXPECT_NEAR(B[2], 0.0, 1e-15);
250 EXPECT_NEAR(B[0], 0.0, 1e-15);
251 EXPECT_NEAR(B[1], 0.0, 1e-15);
252 EXPECT_NEAR(B[2], 0.0, 1e-15);
281 const double zb = 0.0, ze = 10.0;
282 const double rb = 0.0, re = 5.0;
283 const int nz = 4,
nr = 2;
285 std::string fname = writeXZFieldmap(tmpFile(
"ins.map"), zb, ze, nz, rb, re,
nr);
287 ASSERT_NE(fm,
nullptr);
290 EXPECT_TRUE(fm->isInside({0.0, 0.0, 0.05}));
292 EXPECT_TRUE(fm->isInside({0.0, 0.0, 0.0}));
294 EXPECT_TRUE(fm->isInside({0.0, 0.0, 0.099}));
296 EXPECT_FALSE(fm->isInside({0.0, 0.0, 0.10}));
298 EXPECT_FALSE(fm->isInside({0.0, 0.0, -0.01}));
300 EXPECT_FALSE(fm->isInside({0.10, 0.0, 0.05}));
353 const double zb = 0.0, ze = 10.0;
354 const double rb = 0.0, re = 5.0;
355 const int nz = 4,
nr = 4;
357 const double Bzmax = zend_m;
359 std::string fname = writeVaryingXZFieldmap(tmpFile(
"var.map"), zb, ze, nz, rb, re,
nr);
361 Fieldmap* fm = Fieldmap::getFieldmap(fname);
362 Fieldmap::readMap(fname);
370 EXPECT_NEAR(B[2], 0.05 / Bzmax, 1e-10);
371 EXPECT_NEAR(B[0], 0.0, 1e-10);
372 EXPECT_NEAR(B[1], 0.0, 1e-10);
382 EXPECT_NEAR(B[2], 0.05 / Bzmax, 1e-10);
384 EXPECT_NEAR(B[0], r_m / Bzmax, 1e-10);
385 EXPECT_NEAR(B[1], 0.0, 1e-10);
395 EXPECT_NEAR(B[2], 0.05 / Bzmax, 1e-10);
396 EXPECT_NEAR(B[0], 0.0, 1e-10);
397 EXPECT_NEAR(B[1], r_m / Bzmax, 1e-10);
406 EXPECT_NEAR(B[2], 0.03 / Bzmax, 1e-10);
416 const int npz = 3, npr = 2;
417 const double hz = 0.05, hr = 0.025;
418 const double zbegin = 0.0;
420 Kokkos::View<double*, Kokkos::HostSpace> Bz(
"Bz", npz * npr);
421 Kokkos::View<double*, Kokkos::HostSpace> Br(
"Br", npz * npr);
423 for (
int j = 0; j < npr; ++j)
424 for (
int i = 0; i < npz; ++i) {
425 Bz(j * npz + i) = 1.0;
426 Br(j * npz + i) = 0.5;
433 FM2DMagnetoStatic::computeField(R, B, Bz, Br, hr, hz, zbegin, npr, npz);
434 EXPECT_NEAR(B[2], 1.0, 1e-10);
436 EXPECT_NEAR(B[0], 0.0, 1e-10);
443 FM2DMagnetoStatic::computeField(R, B, Bz, Br, hr, hz, zbegin, npr, npz);
444 EXPECT_NEAR(B[2], 1.0, 1e-10);
445 EXPECT_NEAR(B[0], 0.5, 1e-10);
446 EXPECT_NEAR(B[1], 0.0, 1e-10);
453 FM2DMagnetoStatic::computeField(R, B, Bz, Br, hr, hz, zbegin, npr, npz);
454 EXPECT_NEAR(B[2], 0.0, 1e-15);
461 FM2DMagnetoStatic::computeField(R, B, Bz, Br, hr, hz, zbegin, npr, npz);
462 EXPECT_NEAR(B[0], 0.0, 1e-15);
463 EXPECT_NEAR(B[1], 0.0, 1e-15);
464 EXPECT_NEAR(B[2], 0.0, 1e-15);
490 const double zb = 0.0, ze = 10.0;
491 const double rb = 0.0, re = 5.0;
492 const int nz = 4,
nr = 2;
494 std::string fname = writeXZFieldmap(tmpFile(
"dim6.map"), zb, ze, nz, rb, re,
nr);
495 Fieldmap* fm = Fieldmap::getFieldmap(fname);
497 double xIni = 0.0, xFinal = 0.0, yIni = 0.0, yFinal = 0.0, zIni = 0.0, zFinal = 0.0;
565 const double zb = 0.0, ze = 10.0;
566 const double rb = 0.0, re = 5.0;
567 const int nz = 4,
nr = 2;
568 const double Bz_val = 1.0;
570 std::string fname = writeXZFieldmap(tmpFile(
"cycle.map"), zb, ze, nz, rb, re,
nr, Bz_val);
572 Fieldmap* fm = Fieldmap::getFieldmap(fname);
573 Fieldmap::readMap(fname);
580 EXPECT_NEAR(B[2], Bz_val, 1e-10);
588 EXPECT_NEAR(B[2], Bz_val, 1e-10);
625 const double zb = 0.0, ze = 10.0;
626 const double rb = 0.0, re = 5.0;
627 const int nz = 4,
nr = 2;
628 const double Bz_val = 2.0;
630 std::string fnameXZ = writeXZFieldmap(tmpFile(
"xz2.map"), zb, ze, nz, rb, re,
nr, Bz_val);
631 std::string fnameZX = writeZXFieldmap(tmpFile(
"zx2.map"), zb, ze, nz, rb, re,
nr, Bz_val);
633 Fieldmap* fmXZ = Fieldmap::getFieldmap(fnameXZ);
634 Fieldmap* fmZX = Fieldmap::getFieldmap(fnameZX);
635 Fieldmap::readMap(fnameXZ);
636 Fieldmap::readMap(fnameZX);
646 EXPECT_NEAR(B_xz[0], B_zx[0], 1e-10);
647 EXPECT_NEAR(B_xz[1], B_zx[1], 1e-10);
648 EXPECT_NEAR(B_xz[2], B_zx[2], 1e-10);
657 const double zb = 0.0, ze = 10.0;
658 const double rb = 0.0, re = 5.0;
659 const int nz = 4,
nr = 2;
661 std::string fname = writeXZFieldmap(
662 tmpFile(
"proj.map"), zb, ze, nz, rb, re,
nr,
664 Fieldmap* fm = Fieldmap::getFieldmap(fname);
665 Fieldmap::readMap(fname);
669 double x = r / std::sqrt(2.0);
670 double y = r / std::sqrt(2.0);
677 double expected_Bxy = 1.0 / std::sqrt(2.0);
678 EXPECT_NEAR(B[0], expected_Bxy, 1e-10);
679 EXPECT_NEAR(B[1], expected_Bxy, 1e-10);
680 EXPECT_NEAR(B[2], 1.0, 1e-10);
virtual bool getFieldstrength(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) const =0
Get the field strength at a given point.
virtual bool getFieldDerivative(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B, const DiffDirection &dir) const =0
Get the field derivative with respect to a direction.