Skip to content
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

Fix MPI Signal Handling on Perlmutter #3029

Merged
merged 4 commits into from
Apr 7, 2022

Conversation

ax3l
Copy link
Member

@ax3l ax3l commented Apr 6, 2022

Follow-up to #2896. Not part of release 22.04.
First seen by @RTSandberg and @Yin-YinjianZhao.

Thx to @kngott and Brandon for rapid NERSC consulting support.

Fix: MPI_C(XX)_BOOL

C99 types were aded in MPI-2.2, while Cray's MPICH fork in version 8.1.13 defines MPI_CXX_BOOL to MPI_DATATYPE_NULL on Perlmutter.

We could use MPI_C_BOOL, which is technically a _Bool from (deprecated: C++17; removed: C++20) - or we simply do a static assert on sizeof(bool) and communicate as a MPI_BYTE or MPI_CHAR.

Do not Broadcast if no action is registered

Do no MPI Comms if no action is configured.

@ax3l ax3l added bug Something isn't working bug: affects latest release Bug also exists in latest release version component: parallelization Guard cell exchanges and particle redistribution labels Apr 6, 2022
@ax3l ax3l requested a review from PhilMiller April 6, 2022 20:36
C99 types were aded in MPI-2.2, while Cray's MPICH fork in version
8.1.13 defines `MPI_CXX_BOOL` to `MPI_DATATYPE_NULL` on Perlmutter.

We could use `MPI_C_BOOL`, which is technically a `_Bool` from
[<cstdbool>](https://en.cppreference.com/w/cpp/header/cstdbool)
(deprecated: C++17; removed: C++20) - or we simply do a static
assert on `sizeof(bool)` and communicate as a `MPI_BYTE` or
`MPI_CHAR`.
@ax3l ax3l force-pushed the fix-signalHandling branch from 664d267 to 60d47a8 Compare April 6, 2022 20:43
@ax3l ax3l added component: core Core WarpX functionality and removed bug: affects latest release Bug also exists in latest release version labels Apr 6, 2022
@ax3l ax3l changed the title [WIP] Fix MPI Signal Handling on Perlmutter Fix MPI Signal Handling on Perlmutter Apr 6, 2022
@ax3l ax3l force-pushed the fix-signalHandling branch from 8ee5afc to a114840 Compare April 6, 2022 21:26
@ax3l ax3l force-pushed the fix-signalHandling branch from a114840 to ddfe999 Compare April 6, 2022 21:34
@@ -140,6 +152,10 @@ SignalHandling::InitSignalHandling()
void
SignalHandling::CheckSignals()
{
// Do not perform MPI communication if no signal action is configured
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment here threw me off - I was going to remark that this check should come after the testing of signal flags, lest signal handling be disabled in the single-process case. I had to think to realize that this is itself a check whether any signal handling is enabled. Please reword the comment

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thx, rephrased :)

@@ -162,14 +178,19 @@ SignalHandling::CheckSignals()

#if defined(AMREX_USE_MPI)
auto comm = amrex::ParallelDescriptor::Communicator();
static_assert(sizeof(bool) == 1, "We communicate bools as 1 byte-sized type in MPI");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please comment that this is an accommodation for Cray's deficient MPI implementation. They support the MPI 3 asynchronous collective, but not the simple datatype definition.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it's a pitty!
Will add the same description as in the PR to make clear why we hack back to bytes

bool
SignalHandling::anySignalConfActive ()
{
bool any_signal_active = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this maybe be a member variable of SignalHandling, that can be set just once, rather than looping over everything twice every step?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that probably makes sense, yes.
I was coding this in a way that one could register signals later on, e.g., from the Python layer. But not sure if that's truly needed.

We set that variable at the end of the config step, so even if someone configures it later, it would be set consistently.

@PhilMiller
Copy link
Member

Code and updated documentation look fine to me.

@ax3l
Copy link
Member Author

ax3l commented Apr 7, 2022

@PhilMiller thank you for the review, updated accordingly :)


for (int signal_number = 0; signal_number < NUM_SIGNALS; ++signal_number) {
for (int signal_request = 0; signal_request < SIGNAL_REQUESTS_SIZE; ++signal_request) {
m_any_signal_action_active |= signal_conf_requests[signal_request][signal_number];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can just set this to true at line 128

Copy link
Member Author

@ax3l ax3l Apr 7, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, cannot follow, do you mean line 138?
Even then I am not sure - if init handling is called but no conf request was passed, then I still want this to be false, no?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was suggesting inside the if (signal_active) { block - i.e. exactly where we're already checking the array entries

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, of course. good idea :)

Copy link
Member

@PhilMiller PhilMiller left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Up to you whether to do the last suggested simplification.

@RemiLehe RemiLehe merged commit 85180be into ECP-WarpX:development Apr 7, 2022
@ax3l ax3l deleted the fix-signalHandling branch April 7, 2022 17:41
@ax3l ax3l added the component: ABLASTR components shared with other PIC codes label Apr 7, 2022
roelof-groenewald added a commit to ModernElectron/WarpX that referenced this pull request Apr 7, 2022
* Moving Frame Field Probe Functionality (ECP-WarpX#2996)

* DRAFT for Moving Frame

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Adds m_last_compute_step

* Generalized SetParticlePosition, semicolons and formatting

* Update Source/Diagnostics/ReducedDiags/FieldProbe.H

Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Moved particle push before calculations. Condensed stuff.

* Fixed Velocity, added start and stop time functionality

* Documentation

* Apply suggestions from code review

Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Empty-Commit

* Fixed ParallelFor from review

* FP moving window in laser_acceleration 1d, 2d, 3d test

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Line detector instead of point

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Refactoring: More General Interfaces (ECP-WarpX#2991)

* Refactoring: More General Interfaces (J, rho)

* Refactoring: More General Interfaces (E, B)

* Refactoring: More General Interfaces (rho)

* Fix const Correctness

* Fix const Correctness (continued)

* Fix Bugs

* Refactoring: More General Interfaces (averaged E, averaged B)

* LoadBalanceCosts: num_cells & num_macro_particles (ECP-WarpX#3019)

* Examples: LBC in Laser-Ion Example

* LoadBalanceCosts: num_cells & num_macro_particles

* Fix Script: Wrong Header Counting

Spliced out the first to columns twice.

* Fix Script: Blocking Factor

The script did not work if a direction only had one block

* Fix Script: 2D/3D

There is no generic way from the data we write to find this out,
without breaking corner cases such as one-block in one direction.

* LoadBalanceCosts: Fix Unused Vars in Script

Leftover to ECP-WarpX#3019

* Semicoarsening in electrostatic solvers (ECP-WarpX#3024)

* Semicoarsening in electrostatic solvers

Enable semicoarsening in electrostatic solvers if the problem is anisotropic
due to relativistic beam and/or anisotropic cell spacing.

* Update relativistic_space_charge_initialization benchmark

* AMReX: Update to latest commit (ECP-WarpX#3021)

* Added PlasmaLens class to PICMI (ECP-WarpX#3025)

* Added PlasmaLens class to PICMI

* Added CI test

* Added PICMI input file

* Fixed the output dir for the CI test

* Add `_plt` to Output File Prefix

Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>

* Minor fixes removing warnings from MSVC C++ (ECP-WarpX#3022)

* Fix MPI Signal Handling on Perlmutter (ECP-WarpX#3029)

* Fix: `MPI_CXX_BOOL` -> `MPI_BYTE`

C99 types were aded in MPI-2.2, while Cray's MPICH fork in version
8.1.13 defines `MPI_CXX_BOOL` to `MPI_DATATYPE_NULL` on Perlmutter.

We could use `MPI_C_BOOL`, which is technically a `_Bool` from
[<cstdbool>](https://en.cppreference.com/w/cpp/header/cstdbool)
(deprecated: C++17; removed: C++20) - or we simply do a static
assert on `sizeof(bool)` and communicate as a `MPI_BYTE` or
`MPI_CHAR`.

* Signals: Do no MPI Comms if none is configured

* Docs: Link and Explain Allowed Signal Values

* Review Comments & Style

* Extend `do_pml_Lo/Hi` to MR Levels (ECP-WarpX#2890)

* Vay Deposition: Fix SyncCurrent, FFTs (ECP-WarpX#3012)

* Implemented the BCK fallback for the ECT solver (ECP-WarpX#3016)

* Implemented the BCK fallback for the ECT solver

* Ignored an unused variable

* Bug fix

* Fix issue with preprocessor directive

* Added comments

* Implemented suggestions from code review

* Fixed tilebox

* Improved warning

* Using WarpX::RecordWarning instead of amrex::Print()

* Ignoring RZ

* Improving comment

* Bug Fix

* Lowered warning priority

* Ignoring low priority warnings in ECT tests

Co-authored-by: lgiacome <lorenzo.giacome@cern.ch>

* No longer use a while loop in driving the simulation (#167)

* add persistent flag for whether a terminate signal was received that can be read by python

* handle checkpointing through sim_control

* change terminateFlag from type int to bool

* fix unintended changes to changelog

* specify terminateFlag return type

* code cleanup

* revert upstream changes

* remove use of while loop to run simulation

* changes requested during PR review

Co-authored-by: Tiberius Rheaume <35204125+TiberiusRheaume@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>
Co-authored-by: Weiqun Zhang <WeiqunZhang@lbl.gov>
Co-authored-by: David Grote <grote1@llnl.gov>
Co-authored-by: Lorenzo Giacomel <47607756+lgiacome@users.noreply.github.com>
Co-authored-by: lgiacome <lorenzo.giacome@cern.ch>
RevathiJambunathan pushed a commit to RevathiJambunathan/WarpX that referenced this pull request May 3, 2022
* CI: Fix Small Issue w/ Langmuir Plots (ECP-WarpX#3010)

* Release 22.04 (ECP-WarpX#3018)

* AMReX: 22.04

* PICSAR: 22.04

* WarpX: 22.04

* Switch test to use common build with openPMD enabled (ECP-WarpX#2988)

* Switch test to use common build with OpenPMD enabled

* Match GNU make to CMake change

Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Allow process signals to trigger checkpoint or break behavior (ECP-WarpX#2896)

* Beginnings of signal handling machinery

* Add tentative logic to make checkpoint call

* Adapt formatting slightly

* Add calls to read signals and set up signal handlers

* Initialize signal flag array

* Add parsing of signal names, and fix some whitespace issues

* Skip signal setup on Windows

* added checkpoint and break signal inputs to picmi.py

* Address initial review requests

* Correct comment to match changed code

* Convert maximum signal number to a symbolic name

* Always parse signal input, and error out on Windows or wherever it may be unsupported

* Typo fix

* Add missing reset of checkpoint signal flag

* Add reset of break signal, in support of Python or library usage

* Test for a configured checkpoint diag when asked to checkpoint on a signal

* Fix typo in Linux code path

* Clean up MPI support

* Use symbolic name for maximum signal number

* Fix unused variable in the no-MPI case

* Add missing header inclusions

* Switch signal parsing to an enumerated table

* Test signal handling for Linux, not GNU C library

* Avoid another magic number

* Update MPI_Ibcast call to match symbolic array length

* Update loop over signal flags to use symbolic limit

* Match #includes to usage

* Add omitted C++ std <atomic> header include

* Guard entire set of signal definitions as *nix-only, not for Windows

* Broaden Windows exclusion to avoid zero-length array that displeases MSVC++

* Check return value from sigaction()

* Convert conditional calls to Abort() to assertions

* Move check for platform support to input parsing

* Shift signal handling code over toward ABLASTR to share with ImpactX and Hipace++

* Minor cleanup

* A bit more cleanup

* Fix formatting nits

* Add AMReX error handling on MPI calls

* Add ABLASTR signal handling code to GNU makefile too

* Document new input parameters

* Use ABLASTR assertion macros in ABLASTR code

* Convert requests limit value to a requests array size

* Generalize signal handling to an arbitrary set of potential actions

* Rename class to match usage and file name

* Stick stuff in ABLASTR namespace

* Indent conditional includes as requested

Co-authored-by: Roelof <roelof.groenewald@modernelectron.com>

* Moving Frame Field Probe Functionality (ECP-WarpX#2996)

* DRAFT for Moving Frame

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Adds m_last_compute_step

* Generalized SetParticlePosition, semicolons and formatting

* Update Source/Diagnostics/ReducedDiags/FieldProbe.H

Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Moved particle push before calculations. Condensed stuff.

* Fixed Velocity, added start and stop time functionality

* Documentation

* Apply suggestions from code review

Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Empty-Commit

* Fixed ParallelFor from review

* FP moving window in laser_acceleration 1d, 2d, 3d test

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Line detector instead of point

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Refactoring: More General Interfaces (ECP-WarpX#2991)

* Refactoring: More General Interfaces (J, rho)

* Refactoring: More General Interfaces (E, B)

* Refactoring: More General Interfaces (rho)

* Fix const Correctness

* Fix const Correctness (continued)

* Fix Bugs

* Refactoring: More General Interfaces (averaged E, averaged B)

* LoadBalanceCosts: num_cells & num_macro_particles (ECP-WarpX#3019)

* Examples: LBC in Laser-Ion Example

* LoadBalanceCosts: num_cells & num_macro_particles

* Fix Script: Wrong Header Counting

Spliced out the first to columns twice.

* Fix Script: Blocking Factor

The script did not work if a direction only had one block

* Fix Script: 2D/3D

There is no generic way from the data we write to find this out,
without breaking corner cases such as one-block in one direction.

* LoadBalanceCosts: Fix Unused Vars in Script

Leftover to ECP-WarpX#3019

* Semicoarsening in electrostatic solvers (ECP-WarpX#3024)

* Semicoarsening in electrostatic solvers

Enable semicoarsening in electrostatic solvers if the problem is anisotropic
due to relativistic beam and/or anisotropic cell spacing.

* Update relativistic_space_charge_initialization benchmark

* AMReX: Update to latest commit (ECP-WarpX#3021)

* Added PlasmaLens class to PICMI (ECP-WarpX#3025)

* Added PlasmaLens class to PICMI

* Added CI test

* Added PICMI input file

* Fixed the output dir for the CI test

* Add `_plt` to Output File Prefix

Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>

* Minor fixes removing warnings from MSVC C++ (ECP-WarpX#3022)

* Fix MPI Signal Handling on Perlmutter (ECP-WarpX#3029)

* Fix: `MPI_CXX_BOOL` -> `MPI_BYTE`

C99 types were aded in MPI-2.2, while Cray's MPICH fork in version
8.1.13 defines `MPI_CXX_BOOL` to `MPI_DATATYPE_NULL` on Perlmutter.

We could use `MPI_C_BOOL`, which is technically a `_Bool` from
[<cstdbool>](https://en.cppreference.com/w/cpp/header/cstdbool)
(deprecated: C++17; removed: C++20) - or we simply do a static
assert on `sizeof(bool)` and communicate as a `MPI_BYTE` or
`MPI_CHAR`.

* Signals: Do no MPI Comms if none is configured

* Docs: Link and Explain Allowed Signal Values

* Review Comments & Style

* Extend `do_pml_Lo/Hi` to MR Levels (ECP-WarpX#2890)

* Vay Deposition: Fix SyncCurrent, FFTs (ECP-WarpX#3012)

* Implemented the BCK fallback for the ECT solver (ECP-WarpX#3016)

* Implemented the BCK fallback for the ECT solver

* Ignored an unused variable

* Bug fix

* Fix issue with preprocessor directive

* Added comments

* Implemented suggestions from code review

* Fixed tilebox

* Improved warning

* Using WarpX::RecordWarning instead of amrex::Print()

* Ignoring RZ

* Improving comment

* Bug Fix

* Lowered warning priority

* Ignoring low priority warnings in ECT tests

Co-authored-by: lgiacome <lorenzo.giacome@cern.ch>

* Signal: Cleanup (Simplify) (ECP-WarpX#3031)

Simplify the logic by fusing a loop.

* Fix Bug in `WarpX::MoveWindow` (ECP-WarpX#3034)

* [pre-commit.ci] pre-commit autoupdate (ECP-WarpX#3039)

updates:
- [github.com/pre-commit/pre-commit-hooks: v4.1.0 → v4.2.0](pre-commit/pre-commit-hooks@v4.1.0...v4.2.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* AMReX: Update to latest commit (ECP-WarpX#3037)

* RZ + openPMD : don't transpose data, save data with shape (Nm, Nz, Nr) (ECP-WarpX#3030)

* part_per_grid/cell : cartesian diag in RZ/openPMD

* RZ+openPMD : flexible ZR or RZ order

* fix logic if not in RZ

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix regression test, remove transpose and refactor

* Update Source/Diagnostics/WarpXOpenPMD.cpp

* Fix: Doxygen, Consistent Naming, Comments, Style

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Remi Lehe <remi.lehe@normalesup.org>
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>

* Remove Nodal Synchronization of J and Rho (ECP-WarpX#3038)

* Remove Nodal Sync of J and Rho

* Reset Benchmark of reduced_diags_single_precision

* Avoid unnecessary construction of CopyParticleAttribs (ECP-WarpX#3042)

If it's not used there is no reason to construct a CopyParticleAttribs
object.  In fact, it could result in a runtime `std::out_of_range` error in
`std::map::at()` because `tmp_particle_data` is used in the
CopyParticleAttribs constructor, but in `PhysicalParticleContainer::Evolve`,
`tmp_particle_data` is properly prepared only when doing back transformed
diagnostics.

* AMReX/PICSAR: Weekly Update (ECP-WarpX#3046)

* [pre-commit.ci] pre-commit autoupdate (ECP-WarpX#3049)

updates:
- [github.com/hadialqattan/pycln: v1.2.5 → v1.3.1](hadialqattan/pycln@v1.2.5...v1.3.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Summit: Prepend Hostname & Mapping (ECP-WarpX#3040)

Add an additional `jsrun` command on Summit so that one can easier map the run output to a hostname. Write a `task_host_mapping.txt` file for each run.

* Fix a bug about particle weight. (ECP-WarpX#3052)

Co-authored-by: Yinjian Zhao <yin@Yinjians-MacBook-Air.local>

* add after diagnostic python callback (ECP-WarpX#3043)

* Current Deposition Interfaces: Always Pass `dt` & `relative_time` (ECP-WarpX#2937)

* Current Deposition Interfaces: Always Pass `dt` & `relative_time`

* Fix CI Failures

* Fix 1D/RZ Warnings

* Fix RZ Bug

* Fix Bugs

* Minimize Changes, Fix Roundoff Errors

* Cleaning

* Remove dt From doDepositionShapeN

* Cleaning Esirkepov Deposition

* Cleaning Vay Deposition

* Fix Roundoff Errors

* Fix Roundoff Errors (continued)

* Fix Bug (RZ)

* `Stencil.py`: Follow PEP 8 Coding Style (ECP-WarpX#3055)

* `Stencil.py`: Follow PEP 8 Coding Style

* Commit Suggestion by @dpgrote

* Perlmutter: Boost Software Module (QED) (ECP-WarpX#3053)

* Perlmutter: Boost

Document a compatible Boost module on Perlmutter.
This is needed for detailed table generation for the QED module
(`WarpX_QED_TABLE_GEN=ON`).

* CMake: Update PICSAR

Include a fix for a compile error on CPU for QED table gen.

* Docs: Ascent 0.8.0 on Summit (ECP-WarpX#3057)

Update the Ascent installation location to use Cyrus' new install
for us.

* AMReX: Weekly Update (ECP-WarpX#3059)

* Doc: PICMI HPC System Update Requirements (ECP-WarpX#3060)

Since these requirements (i.e., PICMI) change quite rapidly, document
the line close to the `pip` install line.

* Add profiling to ParticleBoundaryBuffer::gatherParticles (ECP-WarpX#3061)

This turned out to be a major portion of a particle-heavy simulation,
and was being entirely attributed to WarpX::Evolve().

* Update CUDA repo key (ECP-WarpX#3069)

Nvidia has made changes in the signing keys.

https://forums.developer.nvidia.com/t/notice-cuda-linux-repository-key-rotation/212771

Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
Co-authored-by: Phil Miller <unmobile+gh@gmail.com>
Co-authored-by: Roelof <roelof.groenewald@modernelectron.com>
Co-authored-by: Tiberius Rheaume <35204125+TiberiusRheaume@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Weiqun Zhang <WeiqunZhang@lbl.gov>
Co-authored-by: David Grote <grote1@llnl.gov>
Co-authored-by: Lorenzo Giacomel <47607756+lgiacome@users.noreply.github.com>
Co-authored-by: lgiacome <lorenzo.giacome@cern.ch>
Co-authored-by: Ryan Sandberg <RSandberg@lbl.gov>
Co-authored-by: Remi Lehe <remi.lehe@normalesup.org>
Co-authored-by: Yinjian Zhao <yinjianzhao@lbl.gov>
Co-authored-by: Yinjian Zhao <yin@Yinjians-MacBook-Air.local>
Co-authored-by: Roelof Groenewald <40245517+roelof-groenewald@users.noreply.github.com>
Co-authored-by: Phil Miller <phil@intensecomputing.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working component: ABLASTR components shared with other PIC codes component: core Core WarpX functionality component: parallelization Guard cell exchanges and particle redistribution
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants