Skip to content

1D GRPIC #78

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 58 commits into
base: 1.2.0rc
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
dafb352
Merge branch 'entity-toolkit:master' into v1.0.0rc
StaticObserver Jul 2, 2024
e4e3f3c
Adding new metric flux_surface and its tests
StaticObserver Jul 2, 2024
33a69b2
generate tests for flux_surface
StaticObserver Jul 2, 2024
279c90b
Adding new metric flux_surface and its tests
StaticObserver Jul 2, 2024
6c37cb6
generate tests for flux_surface
StaticObserver Jul 2, 2024
8462651
Merge branch 'v1.0.0rc' of github.com:StaticObserver/entity into v1.0…
haykh Jul 2, 2024
bc6b981
fluxsurf headers in tests
haykh Jul 2, 2024
de6c8b5
lower accurracy for fs test
StaticObserver Jul 3, 2024
907c4be
Update flux_surface.h
StaticObserver Jul 3, 2024
fb297cf
Update fs.cpp
StaticObserver Jul 3, 2024
f644565
Merge remote-tracking branch 'origin/v1.0.0rc' into v1.0.0rc
StaticObserver Jul 3, 2024
24c6908
Update flux_surface.h
StaticObserver Jul 4, 2024
b7acda0
minor tweaks in flux_surf metric
haykh Jul 5, 2024
6868599
reduced acc for fs test
haykh Jul 5, 2024
608147d
slight fix in tests
haykh Jul 5, 2024
6423119
enums test upd
haykh Jul 5, 2024
7800969
added 1DGRPIC particle pusher and tests
StaticObserver Jul 8, 2024
7f4c1b9
Merge branch 'v1.0.0rc' of https://github.com/StaticObserver/entity i…
StaticObserver Jul 8, 2024
d61fb77
fix bugs in 1d grpic
StaticObserver Jul 9, 2024
b32bca0
fix bugs in 1d gr pusher
StaticObserver Jul 10, 2024
072a1f7
bug fix
StaticObserver Jul 10, 2024
dbead02
Turbulence testing.
jmahlmann Jul 10, 2024
f6ae199
fix bugs at ff_pusher
StaticObserver Jul 12, 2024
6eb3244
update tests of force free pusher
StaticObserver Jul 22, 2024
4a3a8cd
Merge branch 'v1.0.0rc' of https://github.com/StaticObserver/entity i…
StaticObserver Jul 22, 2024
a0f62f5
1d grpic
StaticObserver Jul 26, 2024
c6ef138
minor edit
StaticObserver Jul 26, 2024
bf5e368
fix errors in ff_pusher test
StaticObserver Jul 26, 2024
d108c55
Update metadomain.cpp
StaticObserver Aug 2, 2024
15d8176
Update enums.h
StaticObserver Aug 4, 2024
04134b5
Update particle_pusher_1D_gr.hpp
StaticObserver Aug 4, 2024
293550a
Update enums.cpp
StaticObserver Aug 4, 2024
a117c3a
step_forward() for 1d grpic
StaticObserver Aug 21, 2024
cc62f7c
1d grpic engine update
StaticObserver Aug 30, 2024
5c3376b
updated grpic.hpp
StaticObserver Sep 6, 2024
7142025
engine updated
StaticObserver Sep 25, 2024
76db7e4
change flux_surface to boyer_lindq_tp and update; updated 1d grpic pu…
StaticObserver Oct 10, 2024
5a8b64a
updated bltp metric and its tests
StaticObserver Oct 11, 2024
de38b91
fix errors
StaticObserver Oct 11, 2024
4321b01
fix errors
StaticObserver Oct 11, 2024
0aa6f32
little amends
StaticObserver Oct 12, 2024
615a4b1
fix bugs
StaticObserver Oct 14, 2024
603b764
fix bug in ff_pusher
StaticObserver Oct 14, 2024
29730e3
Merge branch '1d_grpic_dev' into v1.0.0rc
StaticObserver Oct 14, 2024
0aa85b7
add force-free terms in bltp metric; update tests for bltp metric
StaticObserver Oct 15, 2024
9ed4444
fix little errors in metric bltp and its tests
StaticObserver Oct 15, 2024
1ec8201
Merge branch 'v1.0.0rc' of https://github.com/StaticObserver/entity i…
StaticObserver Oct 15, 2024
fc221f6
Merge branch '1d_grpic_dev' into v1.0.0rc
StaticObserver Oct 15, 2024
42c7df9
adding grpic_1d.hpp; update ampere kernel for 1d grpic
StaticObserver Oct 15, 2024
88a6764
update grpic_1d.hpp
StaticObserver Oct 16, 2024
a6e9f89
adding file grpic_1d.cpp for 1DGRPIC engine
StaticObserver Oct 18, 2024
e65658a
Merge branch '1d_grpic_dev' into v1.0.0rc
StaticObserver Oct 18, 2024
140598e
add 1d ampere kernel
StaticObserver Oct 18, 2024
d9bb9f7
Merge branch 'dev/gr-1d' into v1.0.0rc
haykh Dec 26, 2024
8f9760c
Update enums.h
haykh Dec 26, 2024
c340694
Merge pull request #59 from StaticObserver/v1.0.0rc
haykh Dec 26, 2024
fcfa3ca
tests fail for metric & pusher tests WIP
haykh Dec 26, 2024
f1dcf3b
fix vec_trans in bltp metric;fix erros in ff_pusher test
StaticObserver Jan 2, 2025
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
2 changes: 1 addition & 1 deletion extern/Kokkos
Submodule Kokkos updated 599 files
2 changes: 1 addition & 1 deletion extern/adios2
Submodule adios2 updated 98 files
+9 −45 .circleci/config.yml
+0 −30 .github/workflows/sync.yml
+6 −2 .gitlab/config/SpackCIBridge.py
+1 −1 .gitlab/gitlab-ci-frontier.yml
+130 −0 .gitlab/gitlab-ci-spack.yml
+18 −0 bindings/Python/py11Variable.cpp
+4 −0 bindings/Python/py11Variable.h
+18 −0 bindings/Python/py11glue.cpp
+4 −0 cmake/DetectOptions.cmake
+9 −11 cmake/install/post/generate-adios2-config.sh.in
+310 −0 developer_docs/bp5format.md
+307 −0 developer_docs/bp5reader.md
+1 −1 docs/user_guide/source/advanced/gpu_aware.rst
+2 −1 docs/user_guide/source/components/engine.rst
+50 −31 docs/user_guide/source/engines/bp5.rst
+2 −1 docs/user_guide/source/setting_up/source/cmake.rst
+23 −0 python/adios2/variable.py
+4 −3 scripts/build_scripts/build-adios2-cuda-perlmutter.sh
+0 −33 scripts/build_scripts/build-adios2-cuda-summit.sh
+2 −2 scripts/build_scripts/build-adios2-kokkos-frontier.sh
+4 −3 scripts/build_scripts/build-adios2-kokkos-perlmutter.sh
+0 −60 scripts/build_scripts/build-adios2-kokkos-summit.sh
+1 −1 scripts/build_scripts/build-adios2-sycl-polaris.sh
+0 −25 scripts/ci/circle/findStatus.py
+45 −0 scripts/ci/circle/post-cdash-status
+0 −29 scripts/ci/circle/postCDashStatus.sh
+0 −81 scripts/ci/circle/run.sh
+1 −0 scripts/ci/cmake/adios-asan.supp
+5 −0 scripts/ci/cmake/ci-common.cmake
+1 −1 scripts/ci/cmake/ci-el7-spack.cmake
+1 −1 scripts/ci/cmake/ci-el7.cmake
+0 −35 scripts/ci/cmake/ci-fedora-openmpi-ubsan.cmake
+11 −3 scripts/ci/cmake/ci-uo-sanitizer-asan.cmake
+15 −3 scripts/ci/cmake/ci-uo-sanitizer-msan.cmake
+10 −3 scripts/ci/cmake/ci-uo-sanitizer-tsan.cmake
+11 −4 scripts/ci/cmake/ci-uo-sanitizer-ubsan.cmake
+0 −21 scripts/ci/images/fedora-asan/Dockerfile
+0 −22 scripts/ci/images/fedora-sanitizers-base/Dockerfile
+0 −10 scripts/ci/images/fedora-tsan/Dockerfile
+0 −8 scripts/ci/images/fedora-ubsan/Dockerfile
+49 −0 scripts/ci/images/opensuse-tw/build-images-opensuse-tw
+20 −0 scripts/ci/images/opensuse-tw/opensuse-tw-asan.dockerfile
+41 −62 scripts/ci/images/opensuse-tw/opensuse-tw-full-stack-onbuild.dockerfile
+3 −4 scripts/ci/images/opensuse-tw/opensuse-tw-msan.dockerfile
+33 −0 scripts/ci/images/opensuse-tw/opensuse-tw-sanitizer-base.dockerfile
+9 −0 scripts/ci/images/opensuse-tw/opensuse-tw-tsan.dockerfile
+5 −0 scripts/ci/images/opensuse-tw/opensuse-tw-ubsan.dockerfile
+2 −2 scripts/ci/images/opensuse-tw/toolchain-msan.cmake
+0 −0 scripts/ci/images/opensuse-tw/toolchain-tsan.cmake
+6 −0 scripts/ci/images/sync.dockerfile
+3 −3 scripts/dashboard/common.cmake
+2 −1 source/adios2/CMakeLists.txt
+1 −1 source/adios2/core/Engine.h
+3 −3 source/adios2/core/Variable.h
+2 −9 source/adios2/engine/bp5/BP5Engine.h
+65 −6 source/adios2/engine/bp5/BP5Reader.cpp
+213 −41 source/adios2/engine/bp5/BP5Writer.cpp
+7 −0 source/adios2/engine/bp5/BP5Writer.h
+18 −4 source/adios2/engine/campaign/CampaignReader.cpp
+1 −0 source/adios2/engine/campaign/CampaignReader.h
+3 −0 source/adios2/engine/campaign/CampaignReader.tcc
+1 −1 source/adios2/helper/adiosType.h
+0 −1 source/adios2/operator/compress/CompressMGARD.cpp
+10 −10 source/adios2/operator/compress/CompressSZ.cpp
+1 −1 source/adios2/operator/refactor/RefactorMDR.cpp
+3 −2 source/adios2/toolkit/format/bp/bp3/BP3Serializer.tcc
+5 −6 source/adios2/toolkit/format/bp5/BP5Base.h
+9 −21 source/adios2/toolkit/format/bp5/BP5Deserializer.cpp
+0 −1 source/adios2/toolkit/format/bp5/BP5Deserializer.h
+546 −0 source/adios2/toolkit/format/bp5/BP5Helper.cpp
+106 −0 source/adios2/toolkit/format/bp5/BP5Helper.h
+24 −2 source/adios2/toolkit/format/bp5/BP5Serializer.cpp
+12 −0 source/adios2/toolkit/profiling/iochrono/IOChrono.cpp
+1 −2 source/adios2/toolkit/query/BlockIndex.h
+36 −3 source/adios2/toolkit/remote/EVPathRemote.cpp
+2 −1 source/adios2/toolkit/remote/EVPathRemote.h
+1 −1 source/adios2/toolkit/remote/Remote.cpp
+1 −1 source/adios2/toolkit/remote/Remote.h
+1 −1 source/adios2/toolkit/remote/XrootdRemote.cpp
+2 −1 source/adios2/toolkit/remote/XrootdRemote.h
+4 −0 source/adios2/toolkit/remote/remote_common.cpp
+4 −0 source/adios2/toolkit/remote/remote_common.h
+194 −48 source/adios2/toolkit/remote/remote_server.cpp
+1 −2 source/adios2/toolkit/shm/TokenChain.h
+6 −0 source/adios2/toolkit/sst/cp/cp_writer.c
+1 −0 testing/adios2/derived/CMakeLists.txt
+26 −287 testing/adios2/derived/TestBPDerivedCorrectness.cpp
+388 −0 testing/adios2/derived/TestBPDerivedCorrectnessMPI.cpp
+18 −11 testing/adios2/engine/bp/CMakeLists.txt
+9 −9 testing/adios2/engine/bp/TestBPWriteMemorySelectionRead.cpp
+16 −11 testing/adios2/engine/bp/TestBPWriteReadADIOS2stdio.cpp
+8 −0 testing/adios2/engine/dataman/CMakeLists.txt
+3 −2 testing/adios2/engine/staging-common/TestSupp.cmake
+125 −1 testing/adios2/gpu-backend/TestBPWriteReadKokkos.cpp
+12 −0 testing/adios2/performance/metadata/PerfMetaData.cpp
+22 −0 testing/adios2/python/TestDerivedVariable.py
+24 −1 testing/adios2/python/TestVariable.py
+18 −0 thirdparty/ffs/ffs/ffs/ffs.c
6 changes: 5 additions & 1 deletion src/engines/grpic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @implements
* - ntt::GRPICEngine<> : ntt::Engine<>
* @cpp:
* - srpic.cpp
* - grpic.cpp
* @namespaces:
* - ntt::
*/
Expand Down Expand Up @@ -43,4 +43,8 @@ namespace ntt {

} // namespace ntt





#endif // ENGINES_GRPIC_GRPIC_H
245 changes: 245 additions & 0 deletions src/engines/grpic_1d.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
/**
* @file engines/grpic_1d.hpp
* @brief Simulation engien class which specialized on 1D GRPIC
* @implements
* - ntt::GRPICEngine_1D<> : ntt::Engine<>
* @cpp:
* - grpic_1d.cpp
* @namespaces:
* - ntt::
*/

#ifndef ENGINES_GRPIC_GRPIC_1D_H
#define ENGINES_GRPIC_GRPIC_1D_H

#include "enums.h"
#include "global.h"

#include "arch/kokkos_aliases.h"
#include "arch/traits.h"
#include "utils/log.h"
#include "utils/numeric.h"
#include "utils/timer.h"

#include "archetypes/particle_injector.h"
#include "framework/domain/domain.h"
#include "framework/parameters.h"

#include "metrics/boyer_lindq_tp.h"

#include "engines/engine.hpp"
#include "kernels/ampere_gr.hpp"
#include "kernels/currents_deposit.hpp"
#include "kernels/digital_filter.hpp"
#include "kernels/fields_bcs.hpp"
#include "kernels/particle_moments.hpp"
#include "kernels/particle_pusher_1D_gr.hpp"
#include "pgen.hpp"

#include <Kokkos_Core.hpp>
#include <Kokkos_ScatterView.hpp>

#include <string>
#include <utility>

namespace ntt {

template <class M>
class GRPICEngine_1D : public Engine<SimEngine::GRPIC, M> {

using base_t = Engine<SimEngine::GRPIC, M>;
using pgen_t = user::PGen<SimEngine::GRPIC, M>;
using domain_t = Domain<SimEngine::GRPIC, M>;
// constexprs
using base_t::pgen_is_ok;
// contents
using base_t::m_metadomain;
using base_t::m_params;
using base_t::m_pgen;
// methods
using base_t::init;
// variables
using base_t::dt;
using base_t::max_steps;
using base_t::runtime;
using base_t::step;
using base_t::time;

auto constexpr D { M::Dim };

public:
static constexpr auto S { SimEngine::GRPIC };

GRPICEngine_1D(SimulationParams& params)
: Engine<SimEngine::GRPIC, M> { params } {
raise::ErrorIf(D != Dim::_1D, "GRPICEngine_1D only works in 1D", HERE);
raise::ErrorIf(M.Lable != "boyer_lindq_tp", "GRPICEngine_1D only works with BoyerLindqTP metric", HERE);
}

~GRPICEngine_1D() = default;

void step_forward(timer::Timers&, Domain<SimEngine::GRPIC, M>&) override {
const auto sort_interval = m_params.template get<std::size_t>(
"particles.sort_interval");

if (step == 0) {
m_metadomain.CommunicateFields(dom, Comm::D);
/**
* !CommunicateFields, ParticleInjector: Special version for 1D GRPIC needed
*/
ParticleInjector(dom);
}

{
timers.start("ParticlePusher");
ParticlePush(dom);
timers.stop("ParticlePusher");

timers.start("CurrentDeposit");
Kokkos::deep_copy(dom.fields.cur, ZERO);
CurrentsDeposit(dom);
timers.stop("CurrentDeposit");

timers.start("Communications");
m_metadomain.SynchronizeFields(dom, Comm::J);
/**
* !SynchronizeFields: Special version for 1D GRPIC needed
*/
m_metadomain.CommunicateFields(dom, Comm::J);
timers.stop("Communications");

timers.start("CurrentFiltering");
CurrentsFilter(dom);
/**
* !CurrentsFilter: Special version for 1D GRPIC needed
*/
timers.stop("CurrentFiltering");

timers.start("Communications");
if ((sort_interval > 0) and (step % sort_interval == 0)) {
m_metadomain.CommunicateParticles(dom, &timers);
}
timers.stop("Communications");
}

{
timers.start("FieldSolver");
CurrentsAmpere(dom);
timers.stop("FieldSolver");

timers.start("Communications");
m_metadomain.CommunicateFields(dom, Comm::D | Comm::J);
timers.stop("Communications");

}

{
timers.start("Injector");
DischargeInjector(dom);
timers.stop("Injector");
}
}

void ParticlePush(domain_t& domain) {
for (auto& species : domain.species) {
species.set_unsorted();
logger::Checkpoint(
fmt::format("Launching particle pusher kernel for %d [%s] : %lu",
species.index(),
species.label().c_str(),
species.npart()),
HERE);
if (species.npart() == 0) {
continue;
}
const auto q_ovr_m = species.mass() > ZERO
? species.charge() / species.mass()
: ZERO;
// coeff = q / m dt omegaB0
const auto coeff = q_ovr_m * dt *
m_params.template get<real_t>("scales.omegaB0");
PrtlPusher::type pusher;
if (species.pusher() == PrtlPusher::FORCEFREE) {
pusher = PrtlPusher::FORCEFREE;
} else {
raise::Fatal("Invalid particle pusher", HERE);
}
// clang-format off
Kokkos::parallel_for(
"ParticlePusher",
species.rangeActiveParticles(),
kernel::gr::Pusher_kernel<BoyerLindqTP<Dim::_1D>>(
domain.fields.em,
species.i1,
species.i1_prev,
species.dx1,
species.dx1_prev,
species.px1,
species.tag,
domain.mesh.metric,
coeff, dt,
domain.mesh.n_active(in::x1),
1e-2,
30,
domain.mesh.n_active(in::x1)));
}
}

void CurrentsDeposit(domain_t& domain) {
auto scatter_cur = Kokkos::Experimental::create_scatter_view(
domain.fields.cur);
for (auto& species : domain.species) {
logger::Checkpoint(
fmt::format("Launching currents deposit kernel for %d [%s] : %lu %f",
species.index(),
species.label().c_str(),
species.npart(),
(double)species.charge()),
HERE);
if (species.npart() == 0 || cmp::AlmostZero(species.charge())) {
continue;
}
// clang-format off
/**
* !DepositCurrents_kernel: Special version for 1D GRPIC needed
*/
Kokkos::parallel_for("CurrentsDeposit",
species.rangeActiveParticles(),
kernel::DepositCurrents_kernel<SimEngine::GRPIC, M>(
scatter_cur,
species.i1,
species.i1_prev,
species.dx1,
species.dx1_prev,
species.px1,
species.weight,
species.tag,
domain.mesh.metric,
(real_t)(species.charge()),
dt));
}
Kokkos::Experimental::contribute(domain.fields.cur, scatter_cur);
}

void CurrentsAmpere(domain_t& domain) {
logger::Checkpoint("Launching Ampere kernel for adding currents", HERE);
const auto q0 = m_params.template get<real_t>("scales.q0");
const auto n0 = m_params.template get<real_t>("scales.n0");
const auto B0 = m_params.template get<real_t>("scales.B0");
const auto coeff = -dt * q0 * n0 / B0;
// clang-format off
Kokkos::parallel_for(
"Ampere",
domain.mesh.rangeActiveCells(),
kernel::gr::CurrentsAmpere_kernel_1D<M>(domain.fields.em,
domain.fields.cur,
domain.mesh.metric,
coeff));
}


}; // class GRPICEngine_1D

} // namespace ntt

#endif // ENGINES_GRPIC_GRPIC_1D_H
39 changes: 24 additions & 15 deletions src/global/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
* @file enums.h
* @brief Special enum variables describing the simulation
* @implements
* - enum ntt::Coord // Cart, Sph, Qsph
* - enum ntt::Coord // Cart, Sph, Qsph, Fs
* - enum ntt::Metric // Minkowski, Spherical, QSpherical,
* Kerr_Schild, QKerr_Schild, Kerr_Schild_0
* Kerr_Schild, QKerr_Schild, Kerr_Schild_0, BoyerLindqTP
* - enum ntt::SimEngine // SRPIC, GRPIC
* - enum ntt::PrtlBC // periodic, absorb, atmosphere, custom,
* reflect, horizon, axis, sync
Expand Down Expand Up @@ -134,12 +134,13 @@ namespace ntt {
Cart = 1,
Sph = 2,
Qsph = 3,
Bltp = 4,
};

constexpr Coord(uint8_t c) : enums_hidden::BaseEnum<Coord> { c } {}

static constexpr type variants[] = { Cart, Sph, Qsph };
static constexpr const char* lookup[] = { "cart", "sph", "qsph" };
static constexpr type variants[] = { Cart, Sph, Qsph, Bltp };
static constexpr const char* lookup[] = { "cart", "sph", "qsph", "bltp" };
static constexpr std::size_t total = sizeof(variants) / sizeof(variants[0]);
};

Expand All @@ -154,16 +155,19 @@ namespace ntt {
Kerr_Schild = 4,
QKerr_Schild = 5,
Kerr_Schild_0 = 6,
BoyerLindqTP = 7,
};

constexpr Metric(uint8_t c) : enums_hidden::BaseEnum<Metric> { c } {}

static constexpr type variants[] = { Minkowski, Spherical,
QSpherical, Kerr_Schild,
QKerr_Schild, Kerr_Schild_0 };
static constexpr const char* lookup[] = { "minkowski", "spherical",
"qspherical", "kerr_schild",
"qkerr_schild", "kerr_schild_0" };
QKerr_Schild, Kerr_Schild_0,
BoyerLindqTP };
static constexpr const char* lookup[] = { "minkowski", "spherical",
"qspherical", "kerr_schild",
"qkerr_schild", "kerr_schild_0",
"boyer_lindq_tp" };
static constexpr std::size_t total = sizeof(variants) / sizeof(variants[0]);
};

Expand Down Expand Up @@ -239,18 +243,23 @@ namespace ntt {
static constexpr const char* label = "prtl_pusher";

enum type : uint8_t {
INVALID = 0,
BORIS = 1,
VAY = 2,
PHOTON = 3,
NONE = 4,
INVALID = 0,
BORIS = 1,
VAY = 2,
PHOTON = 3,
FORCEFREE = 4,
NONE = 5,
};

constexpr PrtlPusher(uint8_t c)
: enums_hidden::BaseEnum<PrtlPusher> { c } {}

static constexpr type variants[] = { BORIS, VAY, PHOTON, NONE };
static constexpr const char* lookup[] = { "boris", "vay", "photon", "none" };
static constexpr type variants[] = { BORIS, VAY, PHOTON, FORCEFREE, NONE };
static constexpr const char* lookup[] = { "boris",
"vay",
"photon",
"forcefree",
"none" };
static constexpr std::size_t total = sizeof(variants) / sizeof(variants[0]);
};

Expand Down
11 changes: 6 additions & 5 deletions src/global/tests/enums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,17 @@ auto main() -> int {

using enum_str_t = const std::vector<std::string>;

enum_str_t all_coords = { "cart", "sph", "qsph" };
enum_str_t all_metrics = { "minkowski", "spherical", "qspherical",
"kerr_schild", "qkerr_schild", "kerr_schild_0" };
enum_str_t all_coords = { "cart", "sph", "qsph", "bltp" };
enum_str_t all_metrics = { "minkowski", "spherical", "qspherical",
"kerr_schild", "qkerr_schild", "kerr_schild_0",
"boyer_lindq_tp" };
enum_str_t all_simulation_engines = { "srpic", "grpic" };
enum_str_t all_particle_bcs = { "periodic", "absorb", "atmosphere", "custom",
"reflect", "horizon", "axis", "sync" };
enum_str_t all_fields_bcs = { "periodic", "absorb", "atmosphere", "custom",
"horizon", "conductor", "axis", "sync" };
enum_str_t all_particle_pushers = { "boris", "vay", "photon", "none" };
enum_str_t all_coolings = { "synchrotron", "none" };
enum_str_t all_particle_pushers = { "boris", "vay", "photon", "forcefree", "none" };
enum_str_t all_coolings = { "synchrotron", "none" };

enum_str_t all_out_flds = { "e", "dive", "d", "divd", "b",
"h", "j", "a", "t", "rho",
Expand Down
Loading
Loading