aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpXIO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WarpXIO.cpp')
-rw-r--r--Source/WarpXIO.cpp46
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
{