111 const double dt = 1.0e-12;
113 ippl::Vector<float, 3> Pol{1.0f, 0.0f, 0.0f};
116 pusher.
evolve(Pol, P, E, B, dt, mass_mu_eV, charge_mu, anom_mu);
118 const double omegaC = cyclotronFreq(1.0, 1.0);
119 const double expectedPhi = (1.0 + anom_mu) * omegaC * dt;
122 const double cosX =
static_cast<double>(Pol[0]);
123 const double sinY =
static_cast<double>(Pol[1]);
124 const double actualPhi = std::atan2(std::fabs(sinY), cosX);
125 EXPECT_NEAR(actualPhi, expectedPhi, 1.0e-9);
128 const double mag2 =
static_cast<double>(Pol[0]) * Pol[0] +
static_cast<double>(Pol[1]) * Pol[1]
129 +
static_cast<double>(Pol[2]) * Pol[2];
130 EXPECT_NEAR(std::sqrt(mag2), 1.0, 1.0e-6);
133 EXPECT_NEAR(
static_cast<double>(Pol[2]), 0.0, 1.0e-7);
141 const double dt = 1.0e-9;
143 ippl::Vector<float, 3> Pol{0.0f, 0.0f, 1.0f};
146 pusher.
evolve(Pol, P, E, B, dt, mass_mu_eV, charge_mu, anom_mu);
148 EXPECT_NEAR(
static_cast<double>(Pol[0]), 0.0, 1.0e-12);
149 EXPECT_NEAR(
static_cast<double>(Pol[1]), 0.0, 1.0e-12);
150 EXPECT_NEAR(
static_cast<double>(Pol[2]), 1.0, 1.0e-7);
157 const double dt = 1.0e-9;
159 ippl::Vector<float, 3> Pol{1.0f, 0.0f, 0.0f};
162 pusher.
evolve(Pol, P, E, B, dt, mass_mu_eV, charge_mu, anom_mu);
164 EXPECT_FLOAT_EQ(Pol[0], 1.0f);
165 EXPECT_FLOAT_EQ(Pol[1], 0.0f);
166 EXPECT_FLOAT_EQ(Pol[2], 0.0f);
173 const double dt = 1.0e-12;
175 ippl::Vector<float, 3> Pol{1.0f, 0.0f, 0.0f};
177 for (
int i = 0; i < 1000; ++i) {
178 pusher.
evolve(Pol, P, E, B, dt, mass_mu_eV, charge_mu, anom_mu);
180 const double mag2 =
static_cast<double>(Pol[0]) * Pol[0] +
static_cast<double>(Pol[1]) * Pol[1]
181 +
static_cast<double>(Pol[2]) * Pol[2];
182 EXPECT_NEAR(std::sqrt(mag2), 1.0, 1.0e-5);
KOKKOS_INLINE_FUNCTION void evolve(SpinVec &Pol, const Vector_t< double, 3 > &P, const Vector_t< double, 3 > &Ef, const Vector_t< double, 3 > &Bf, const double &dt, const double &mass, const double &charge, const double &anom) const