diff options
Diffstat (limited to 'Source/WarpXIO.cpp')
-rw-r--r-- | Source/WarpXIO.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Source/WarpXIO.cpp b/Source/WarpXIO.cpp index adb7b6cf7..0a9efa486 100644 --- a/Source/WarpXIO.cpp +++ b/Source/WarpXIO.cpp @@ -393,6 +393,52 @@ WarpX::InitFromCheckpoint () } +std::unique_ptr<MultiFab> +WarpX::GetCellCenteredData() { + + const int ng = 1; + const int nc = 10; + const int lev = 0; + auto cc = std::unique_ptr<MultiFab>( new MultiFab(boxArray(lev), + DistributionMap(lev), + nc, ng) ); + + Array<const MultiFab*> srcmf(BL_SPACEDIM); + int dcomp = 0; + + // first the electric field + PackPlotDataPtrs(srcmf, Efield_aux[lev]); + amrex::average_edge_to_cellcenter(*cc, dcomp, srcmf); +#if (BL_SPACEDIM == 2) + MultiFab::Copy(*cc, *cc, dcomp+1, dcomp+2, 1, ng); + amrex::average_node_to_cellcenter(*cc, dcomp+1, *Efield_aux[lev][1], 0, 1); +#endif + dcomp += 3; + + // then the magnetic field + PackPlotDataPtrs(srcmf, Bfield_aux[lev]); + amrex::average_face_to_cellcenter(*cc, dcomp, srcmf); +#if (BL_SPACEDIM == 2) + MultiFab::Copy(*cc, *cc, dcomp+1, dcomp+2, 1, ng); + MultiFab::Copy(*cc, *Bfield_aux[lev][1], 0, dcomp+1, 1, ng); +#endif + dcomp += 3; + + // then the current density + PackPlotDataPtrs(srcmf, current_fp[lev]); + amrex::average_edge_to_cellcenter(*cc, dcomp, srcmf); +#if (BL_SPACEDIM == 2) + MultiFab::Copy(*cc, *cc, dcomp+1, dcomp+2, 1, ng); + amrex::average_node_to_cellcenter(*cc, dcomp+1, *current_fp[lev][1], 0, 1); +#endif + dcomp += 3; + + const std::unique_ptr<MultiFab>& charge_density = mypc->GetChargeDensity(lev); + amrex::average_node_to_cellcenter(*cc, dcomp, *charge_density, 0, 1); + + return cc; +} + void WarpX::WritePlotFile () const { |