aboutsummaryrefslogtreecommitdiff
path: root/Source/Diagnostics/FullDiagnostics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Diagnostics/FullDiagnostics.cpp')
-rw-r--r--Source/Diagnostics/FullDiagnostics.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/Source/Diagnostics/FullDiagnostics.cpp b/Source/Diagnostics/FullDiagnostics.cpp
index fb7a055f6..79791ae8e 100644
--- a/Source/Diagnostics/FullDiagnostics.cpp
+++ b/Source/Diagnostics/FullDiagnostics.cpp
@@ -5,6 +5,7 @@
#include "ComputeDiagFunctors/DivEFunctor.H"
#include "ComputeDiagFunctors/PartPerCellFunctor.H"
#include "ComputeDiagFunctors/PartPerGridFunctor.H"
+#include "ComputeDiagFunctors/ParticleReductionFunctor.H"
#include "ComputeDiagFunctors/RhoFunctor.H"
#include "Diagnostics/Diagnostics.H"
#include "Diagnostics/ParticleDiag/ParticleDiag.H"
@@ -408,10 +409,13 @@ FullDiagnostics::InitializeFieldFunctors (int lev)
// Species index to loop over species that dump rho per species
int i = 0;
- m_all_field_functors[lev].resize( m_varnames.size() );
+ const auto nvar = static_cast<int>(m_varnames_fields.size());
+ const auto nspec = static_cast<int>(m_pfield_species.size());
+ const auto ntot = static_cast<int>(nvar + m_pfield_varnames.size() * nspec);
+
+ m_all_field_functors[lev].resize(ntot);
// Fill vector of functors for all components except individual cylindrical modes.
- const auto n = static_cast<int>(m_all_field_functors[lev].size());
- for (int comp=0; comp<n; comp++){
+ for (int comp=0; comp<nvar; comp++){
if ( m_varnames[comp] == "Ex" ){
m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 0), lev, m_crse_ratio);
} else if ( m_varnames[comp] == "Ey" ){
@@ -456,6 +460,14 @@ FullDiagnostics::InitializeFieldFunctors (int lev)
amrex::Abort("Error: " + m_varnames[comp] + " is not a known field output type");
}
}
+ // Add functors for average particle data for each species
+ for (int pcomp=0; pcomp<int(m_pfield_varnames.size()); pcomp++) {
+ std::string varname = m_pfield_varnames[pcomp];
+ for (int ispec=0; ispec<int(m_pfield_species.size()); ispec++) {
+ m_all_field_functors[lev][nvar + pcomp * nspec + ispec] = std::make_unique<ParticleReductionFunctor>(nullptr,
+ lev, m_crse_ratio, m_pfield_strings[varname], m_pfield_species_index[ispec]);
+ }
+ }
AddRZModesToDiags( lev );
}