Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
356 changes: 175 additions & 181 deletions src/kernels/particle_pusher_sr.hpp

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/kernels/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ gen_test(prtl_bc)
gen_test(flds_bc)
gen_test(pusher)
gen_test(ext_force)
gen_test(qed)
72 changes: 42 additions & 30 deletions src/kernels/tests/ext_force.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ void put_value(array_t<T*>& arr, T v, index_t p) {
struct Force {
const std::vector<spidx_t> species { 1 };

Force() {}

Force(real_t force) : force { force } {}

Inline auto fx1(const spidx_t&, const simtime_t&, const coord_t<Dim::_3D>&) const
Expand All @@ -69,7 +71,7 @@ struct Force {
}

private:
const real_t force;
const real_t force { ZERO };
};

template <SimEngine::type S, typename M>
Expand Down Expand Up @@ -171,8 +173,9 @@ void testPusher(const std::vector<std::size_t>& res) {
const real_t eps = std::is_same_v<real_t, float> ? 1e-4 : 1e-6;

const auto ext_force = Force { f_mag };
const auto force =
kernel::sr::Force<Dim::_3D, Coord::Cart, decltype(ext_force), false> { ext_force };
auto force = kernel::sr::Force<Dim::_3D, Coord::Cart, decltype(ext_force), false> {
ext_force
};

static plog::RollingFileAppender<plog::NttInfoFormatter> file_appender(
"pusher_log.csv");
Expand All @@ -183,24 +186,30 @@ void testPusher(const std::vector<std::size_t>& res) {
const real_t time = t * dt;

// clang-format off
auto pusher_params = kernel::sr::PusherParams<Minkowski<Dim::_3D>, decltype(force)>(
PrtlPusher::BORIS,
kernel::sr::DisableGCA, kernel::sr::EnableExtForce,
kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric,
(simtime_t)time, coeff, dt,
nx1, nx2, nx3,
boundaries,
ZERO, ZERO, ZERO);
pusher_params.force = &force;
// clang-format on
Kokkos::parallel_for(
"pusher",
CreateRangePolicy<Dim::_1D>({0}, {2}),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>, decltype(force)>(PrtlPusher::BORIS,
false, true, kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric, force,
(simtime_t)time, coeff, dt,
nx1, nx2, nx3,
boundaries,
ZERO, ZERO, ZERO));
CreateRangePolicy<Dim::_1D>({ 0 }, { 2 }),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>, decltype(force)>(
pusher_params));

auto i1_prev_ = Kokkos::create_mirror_view(i1_prev);
auto i2_prev_ = Kokkos::create_mirror_view(i2_prev);
Expand Down Expand Up @@ -239,16 +248,18 @@ void testPusher(const std::vector<std::size_t>& res) {
i1_(1),
i2_(1),
i3_(1),
dx1_( 1),
dx2_( 1),
dx3_( 1),
ux1_( 1),
ux2_( 1),
ux3_( 1));
dx1_(1),
dx2_(1),
dx3_(1),
ux1_(1),
ux2_(1),
ux3_(1));

{
const real_t ux1_expect = ux1_0 + (time + dt) * f_mag * std::sin(ONE) * std::sin(ONE);
const real_t ux2_expect = ux2_0 + (time + dt) * f_mag * std::sin(ONE) * std::cos(ONE);
const real_t ux1_expect = ux1_0 + (time + dt) * f_mag * std::sin(ONE) *
std::sin(ONE);
const real_t ux2_expect = ux2_0 + (time + dt) * f_mag * std::sin(ONE) *
std::cos(ONE);
const real_t ux3_expect = ux3_0 + (time + dt) * f_mag * std::cos(ONE);

check_value(t, ux1_(0), ux1_expect, eps, "Particle #1 ux1");
Expand All @@ -257,15 +268,16 @@ void testPusher(const std::vector<std::size_t>& res) {
}

{
const real_t ux1_expect = -ux1_0 + (time + dt) * f_mag * std::sin(ONE) * std::sin(ONE);
const real_t ux2_expect = -ux2_0 + (time + dt) * f_mag * std::sin(ONE) * std::cos(ONE);
const real_t ux1_expect = -ux1_0 + (time + dt) * f_mag * std::sin(ONE) *
std::sin(ONE);
const real_t ux2_expect = -ux2_0 + (time + dt) * f_mag * std::sin(ONE) *
std::cos(ONE);
const real_t ux3_expect = -ux3_0 + (time + dt) * f_mag * std::cos(ONE);

check_value(t, ux1_(1), ux1_expect, eps, "Particle #2 ux1");
check_value(t, ux2_(1), ux2_expect, eps, "Particle #2 ux2");
check_value(t, ux3_(1), ux3_expect, eps, "Particle #2 ux3");
}

}
}

Expand Down
34 changes: 19 additions & 15 deletions src/kernels/tests/gca_pusher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,24 +156,28 @@ void testPusher(const std::vector<std::size_t>& res) {

for (auto t { 0u }; t < 2000; ++t) {
// clang-format off
const auto pusher_params = kernel::sr::PusherParams<Minkowski<Dim::_3D>>(
PrtlPusher::BORIS,
kernel::sr::EnableGCA, kernel::sr::DisableExtForce,
kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric,
ZERO, coeff, dt,
nx1, nx2, nx3,
boundaries,
(real_t)10000.0, ONE, ZERO);
// clang-format on
Kokkos::parallel_for(
"pusher",
CreateRangePolicy<Dim::_1D>({0}, {2}),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>>(PrtlPusher::BORIS,
true, false, kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric,
ZERO, coeff, dt,
nx1, nx2, nx3,
boundaries,
(real_t)10000.0, ONE, ZERO));
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>>(pusher_params));

auto ux1_ = Kokkos::create_mirror_view(ux1);
auto ux2_ = Kokkos::create_mirror_view(ux2);
Expand Down
16 changes: 8 additions & 8 deletions src/kernels/tests/prtl_bc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@ void testPeriodicBC(const std::vector<std::size_t>& res,
const std::map<std::string, real_t>& params = {}) {
errorIf(res.size() != M::Dim, "res.size() != M::Dim");
errorIf(M::CoordType != Coord::Cart, "M::CoordType != Coord::Cart");
// aliases
const auto NoGCA = false;
const auto NoExtForce = false;

boundaries_t<real_t> extent;
extent = ext;
Expand Down Expand Up @@ -211,10 +208,10 @@ void testPeriodicBC(const std::vector<std::size_t>& res,

for (auto n { 0 }; n < n_iter; ++n) {
// clang-format off
Kokkos::parallel_for(
"pusher", CreateRangePolicy<Dim::_1D>({ 0 }, { 2 }),
kernel::sr::Pusher_kernel<M>(PrtlPusher::BORIS,
NoGCA, NoExtForce, kernel::sr::Cooling::None,
const auto pusher_params = kernel::sr::PusherParams<M>(
PrtlPusher::BORIS,
kernel::sr::DisableGCA, kernel::sr::DisableExtForce,
kernel::sr::Cooling::None,
emfield,
sp_idx,
i1, i2, i3,
Expand All @@ -227,8 +224,11 @@ void testPeriodicBC(const std::vector<std::size_t>& res,
time, coeff, dt,
nx1, nx2, nx3,
boundaries,
ZERO, ZERO, ZERO));
ZERO, ZERO, ZERO);
// clang-format on
Kokkos::parallel_for("pusher",
CreateRangePolicy<Dim::_1D>({ 0 }, { 2 }),
kernel::sr::Pusher_kernel<M>(pusher_params));
auto i1_ = Kokkos::create_mirror_view(i1);
auto i2_ = Kokkos::create_mirror_view(i2);
auto i3_ = Kokkos::create_mirror_view(i3);
Expand Down
58 changes: 25 additions & 33 deletions src/kernels/tests/pusher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,43 +158,36 @@ void testPusher(const std::vector<std::size_t>& res) {
const real_t time = t * dt;

// clang-format off
auto pusher_params = kernel::sr::PusherParams<Minkowski<Dim::_3D>>(
PrtlPusher::BORIS,
kernel::sr::DisableGCA, kernel::sr::DisableExtForce,
kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric,
ZERO, coeff, dt,
nx1, nx2, nx3,
boundaries,
ZERO, ZERO, ZERO);
// clang-format on

Kokkos::parallel_for(
"pusher",
CreateRangePolicy<Dim::_1D>({0}, {1}),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>>(PrtlPusher::BORIS,
false, false, kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric,
ZERO, coeff, dt,
nx1, nx2, nx3,
boundaries,
ZERO, ZERO, ZERO));
CreateRangePolicy<Dim::_1D>({ 0 }, { 1 }),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>>(pusher_params));

pusher_params.pusher = PrtlPusher::VAY;

Kokkos::parallel_for(
"pusher",
CreateRangePolicy<Dim::_1D>({1}, {2}),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>>(PrtlPusher::VAY,
false, false, kernel::sr::Cooling::None,
emfield,
sp,
i1, i2, i3,
i1_prev, i2_prev, i3_prev,
dx1, dx2, dx3,
dx1_prev, dx2_prev, dx3_prev,
ux1, ux2, ux3,
phi, tag,
metric,
ZERO, coeff, dt,
nx1, nx2, nx3,
boundaries,
ZERO, ZERO, ZERO));
CreateRangePolicy<Dim::_1D>({ 1 }, { 2 }),
kernel::sr::Pusher_kernel<Minkowski<Dim::_3D>>(pusher_params));

auto i1_prev_ = Kokkos::create_mirror_view(i1_prev);
auto i2_prev_ = Kokkos::create_mirror_view(i2_prev);
Expand Down Expand Up @@ -252,7 +245,6 @@ void testPusher(const std::vector<std::size_t>& res) {
check_value(t, ux1_(1), ux1_expect, eps, "Particle #2 ux1");
check_value(t, ux2_(1), ux2_expect, eps, "Particle #2 ux2");
check_value(t, ux3_(1), ux3_expect, eps, "Particle #2 ux3");

}
}

Expand Down
Loading