74 size_t totalParticles = 1001;
75 const size_t nranks =
static_cast<size_t>(std::max(1, ippl::Comm->size()));
76 pc->allocateParticles(totalParticles / nranks + 2 * nranks + 16);
81 ASSERT_EQ(birthTimes.size(), totalParticles);
82 EXPECT_TRUE(std::is_sorted(birthTimes.begin(), birthTimes.end()));
83 EXPECT_GE(birthTimes.front(), -0.5 * sampler.
getEmissionTime() - 1.0e-15);
84 EXPECT_LE(birthTimes.back(), 0.5 * sampler.
getEmissionTime() + 1.0e-15);
89 EXPECT_EQ(globalLocalNum(), 0u);
103 const size_t totalParticles = 1007;
104 const size_t nranks =
static_cast<size_t>(std::max(1, ippl::Comm->size()));
105 pc->allocateParticles(totalParticles / nranks + 2 * nranks + 16);
107 size_t mutableTotal = totalParticles;
111 const double dts[] = {0.07, 0.11, 0.05, 0.13};
112 for (
int step = 0; step < 1000 && !sampler.
isEmissionDone(t); ++step) {
113 const double dt = dts[step % 4];
120 EXPECT_EQ(globalLocalNum(), totalParticles);
137 const size_t nranks =
static_cast<size_t>(std::max(1, ippl::Comm->size()));
138 pc->allocateParticles(4 / nranks + 2 * nranks + 8);
142 EXPECT_EQ(globalLocalNum(), 0u);
159 const size_t nranks =
static_cast<size_t>(std::max(1, ippl::Comm->size()));
160 pc->allocateParticles(3 / nranks + 2 * nranks + 8);
164 const size_t totalNew = 2;
165 const size_t rank =
static_cast<size_t>(ippl::Comm->rank());
166 const size_t base = totalNew / nranks;
167 const size_t rem = totalNew % nranks;
168 const size_t nlocalExpected = base + (rank < rem ? 1 : 0);
169 const size_t localOffset = rank * base + std::min(rank, rem);
171 ASSERT_EQ(pc->getLocalNum(), nlocalExpected);
173 auto RviewDevice = pc->R.getView();
174 auto PviewDevice = pc->P.getView();
175 auto dtviewDevice = pc->dt.getView();
176 auto Rview = Kokkos::create_mirror_view(RviewDevice);
177 auto Pview = Kokkos::create_mirror_view(PviewDevice);
178 auto dtview = Kokkos::create_mirror_view(dtviewDevice);
179 Kokkos::deep_copy(Rview, RviewDevice);
180 Kokkos::deep_copy(Pview, PviewDevice);
181 Kokkos::deep_copy(dtview, dtviewDevice);
183 const std::vector<double> birthTimes = {1.0e-13, 4.0e-13};
184 const double gamma = std::sqrt(1.0 + P0[2] * P0[2]);
185 const double betaZ = P0[2] / gamma;
187 for (
size_t i = 0; i < nlocalExpected; ++i) {
188 const double expectedDt = 5.0e-13 - birthTimes[localOffset + i];
189 EXPECT_NEAR(dtview(i), expectedDt, 1.0e-18);
190 EXPECT_DOUBLE_EQ(Pview(i)[0], P0[0]);
191 EXPECT_DOUBLE_EQ(Pview(i)[1], P0[1]);
192 EXPECT_DOUBLE_EQ(Pview(i)[2], P0[2]);
193 EXPECT_NEAR(Rview(i)[2], 0.5 * betaZ *
Physics::c * expectedDt, 1.0e-12);
197 EXPECT_EQ(globalLocalNum(), totalNew);
219 EXPECT_DOUBLE_EQ(refP[0], 0.0);
220 EXPECT_DOUBLE_EQ(refP[1], 0.0);
221 EXPECT_DOUBLE_EQ(refP[2], 0.5 * std::sqrt(
dot(P0, P0)));