From 82f7f1ee492f1d92e0d4e3ab142b9348454474b2 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Wed, 10 Jan 2024 09:07:36 -0800 Subject: [PATCH] Fix plasma injection from file for parallel runs (#4597) The use of amrex::ParallelDescriptor::ReduceBoolOr was incorrect. The logic is also simplified, even though it may not the most efficient way. --- Source/Initialization/PlasmaInjector.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Source/Initialization/PlasmaInjector.cpp b/Source/Initialization/PlasmaInjector.cpp index 3b2ad76513a..008709abe48 100644 --- a/Source/Initialization/PlasmaInjector.cpp +++ b/Source/Initialization/PlasmaInjector.cpp @@ -501,18 +501,15 @@ void PlasmaInjector::setupExternalFile (amrex::ParmParse const& pp_species) } // IOProcessor // Broadcast charge and mass to non-IO processors if read in from the file - if (!charge_is_specified && !species_is_specified) { - // Use ReduceBoolOr since Bcast(bool) doesn't compile - amrex::ParallelDescriptor::ReduceBoolOr(charge_from_source, amrex::ParallelDescriptor::IOProcessorNumber()); - if (charge_from_source) { - amrex::ParallelDescriptor::Bcast(&charge, 1, amrex::ParallelDescriptor::IOProcessorNumber()); - } + std::array flags{charge_from_source, mass_from_source}; + amrex::ParallelDescriptor::Bcast(flags.data(), flags.size(), amrex::ParallelDescriptor::IOProcessorNumber()); + charge_from_source = flags[0]; + mass_from_source = flags[1]; + if (charge_from_source) { + amrex::ParallelDescriptor::Bcast(&charge, 1, amrex::ParallelDescriptor::IOProcessorNumber()); } - if (!mass_is_specified && !species_is_specified) { - amrex::ParallelDescriptor::ReduceBoolOr(mass_from_source, amrex::ParallelDescriptor::IOProcessorNumber()); - if (mass_from_source) { - amrex::ParallelDescriptor::Bcast(&mass, 1, amrex::ParallelDescriptor::IOProcessorNumber()); - } + if (mass_from_source) { + amrex::ParallelDescriptor::Bcast(&mass, 1, amrex::ParallelDescriptor::IOProcessorNumber()); } #else WARPX_ABORT_WITH_MESSAGE(