aboutsummaryrefslogtreecommitdiff
path: root/Source/Diagnostics/WarpXIO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Diagnostics/WarpXIO.cpp')
-rw-r--r--Source/Diagnostics/WarpXIO.cpp135
1 files changed, 99 insertions, 36 deletions
diff --git a/Source/Diagnostics/WarpXIO.cpp b/Source/Diagnostics/WarpXIO.cpp
index 186a8d45e..869d3580e 100644
--- a/Source/Diagnostics/WarpXIO.cpp
+++ b/Source/Diagnostics/WarpXIO.cpp
@@ -11,6 +11,8 @@
#include <AMReX_AmrMeshInSituBridge.H>
#endif
+#include "SliceDiagnostic.H"
+
#ifdef AMREX_USE_ASCENT
#include <ascent.hpp>
#include <AMReX_Conduit_Blueprint.H>
@@ -84,11 +86,11 @@ WarpX::WriteWarpXHeader(const std::string& name) const
// Geometry
for (int i = 0; i < AMREX_SPACEDIM; ++i) {
- HeaderFile << Geometry::ProbLo(i) << ' ';
+ HeaderFile << Geom(0).ProbLo(i) << ' ';
}
HeaderFile << '\n';
for (int i = 0; i < AMREX_SPACEDIM; ++i) {
- HeaderFile << Geometry::ProbHi(i) << ' ';
+ HeaderFile << Geom(0).ProbHi(i) << ' ';
}
HeaderFile << '\n';
@@ -283,7 +285,7 @@ WarpX::InitFromCheckpoint ()
}
}
- Geometry::ProbDomain(RealBox(prob_lo,prob_hi));
+ ResetProbDomain(RealBox(prob_lo,prob_hi));
for (int lev = 0; lev < nlevs; ++lev) {
BoxArray ba;
@@ -422,14 +424,14 @@ WarpX::GetCellCenteredData() {
AverageAndPackVectorField( *cc[lev], Efield_aux[lev], dcomp, ng );
dcomp += 3;
// then the magnetic field
- AverageAndPackVectorField( *cc[lev], Efield_aux[lev], dcomp, ng );
+ AverageAndPackVectorField( *cc[lev], Bfield_aux[lev], dcomp, ng );
dcomp += 3;
// then the current density
AverageAndPackVectorField( *cc[lev], current_fp[lev], dcomp, ng );
dcomp += 3;
+ // then the charge density
const std::unique_ptr<MultiFab>& charge_density = mypc->GetChargeDensity(lev);
AverageAndPackScalarField( *cc[lev], *charge_density, dcomp, ng );
-
cc[lev]->FillBoundary(geom[lev].periodicity());
}
@@ -612,37 +614,7 @@ WarpX::WritePlotFile () const
}
}
- Vector<std::string> particle_varnames;
- particle_varnames.push_back("weight");
-
- particle_varnames.push_back("momentum_x");
- particle_varnames.push_back("momentum_y");
- particle_varnames.push_back("momentum_z");
-
- particle_varnames.push_back("Ex");
- particle_varnames.push_back("Ey");
- particle_varnames.push_back("Ez");
-
- particle_varnames.push_back("Bx");
- particle_varnames.push_back("By");
- particle_varnames.push_back("Bz");
-
-#ifdef WARPX_RZ
- particle_varnames.push_back("theta");
-#endif
-
- if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles)
- {
- particle_varnames.push_back("xold");
- particle_varnames.push_back("yold");
- particle_varnames.push_back("zold");
-
- particle_varnames.push_back("uxold");
- particle_varnames.push_back("uyold");
- particle_varnames.push_back("uzold");
- }
-
- mypc->WritePlotFile(plotfilename, particle_plot_flags, particle_varnames);
+ mypc->WritePlotFile(plotfilename);
WriteJobInfo(plotfilename);
@@ -771,3 +743,94 @@ WarpX::WriteJobInfo (const std::string& dir) const
jobInfoFile.close();
}
}
+
+
+/* \brief
+ * The slice is ouput using visMF and can be visualized used amrvis.
+ */
+void
+WarpX::WriteSlicePlotFile () const
+{
+ if (F_fp[0] ) {
+ VisMF::Write( (*F_slice[0]), "vismf_F_slice");
+ }
+
+ if (rho_fp[0]) {
+ VisMF::Write( (*rho_slice[0]), "vismf_rho_slice");
+ }
+
+ VisMF::Write( (*Efield_slice[0][0]), amrex::Concatenate("vismf_Ex_slice_",istep[0]));
+ VisMF::Write( (*Efield_slice[0][1]), amrex::Concatenate("vismf_Ey_slice_",istep[0]));
+ VisMF::Write( (*Efield_slice[0][2]), amrex::Concatenate("vismf_Ez_slice_",istep[0]));
+ VisMF::Write( (*Bfield_slice[0][0]), amrex::Concatenate("vismf_Bx_slice_",istep[0]));
+ VisMF::Write( (*Bfield_slice[0][1]), amrex::Concatenate("vismf_By_slice_",istep[0]));
+ VisMF::Write( (*Bfield_slice[0][2]), amrex::Concatenate("vismf_Bz_slice_",istep[0]));
+ VisMF::Write( (*current_slice[0][0]), amrex::Concatenate("vismf_jx_slice_",istep[0]));
+ VisMF::Write( (*current_slice[0][1]), amrex::Concatenate("vismf_jy_slice_",istep[0]));
+ VisMF::Write( (*current_slice[0][2]), amrex::Concatenate("vismf_jz_slice_",istep[0]));
+
+}
+
+
+void
+WarpX::InitializeSliceMultiFabs ()
+{
+
+ int nlevels = Geom().size();
+
+ F_slice.resize(nlevels);
+ rho_slice.resize(nlevels);
+ current_slice.resize(nlevels);
+ Efield_slice.resize(nlevels);
+ Bfield_slice.resize(nlevels);
+
+}
+
+
+// To generate slice that inherits index type of underlying data //
+void
+WarpX::SliceGenerationForDiagnostics ()
+{
+
+ Vector<Geometry> dom_geom;
+ dom_geom = Geom();
+
+ if (F_fp[0] ) {
+ F_slice[0] = CreateSlice( *F_fp[0].get(), dom_geom, slice_realbox,
+ slice_cr_ratio );
+ }
+ if (rho_fp[0]) {
+ rho_slice[0] = CreateSlice( *rho_fp[0].get(), dom_geom, slice_realbox,
+ slice_cr_ratio );
+ }
+
+ for (int idim = 0; idim < 3; ++idim) {
+ Efield_slice[0][idim] = CreateSlice( *Efield_fp[0][idim].get(),
+ dom_geom, slice_realbox, slice_cr_ratio );
+ Bfield_slice[0][idim] = CreateSlice( *Bfield_fp[0][idim].get(),
+ dom_geom, slice_realbox, slice_cr_ratio );
+ current_slice[0][idim] = CreateSlice( *current_fp[0][idim].get(),
+ dom_geom, slice_realbox, slice_cr_ratio );
+ }
+
+
+}
+
+
+void
+WarpX::ClearSliceMultiFabs ()
+{
+
+ F_slice.clear();
+ rho_slice.clear();
+ current_slice.clear();
+ Efield_slice.clear();
+ Bfield_slice.clear();
+ F_slice.shrink_to_fit();
+ rho_slice.shrink_to_fit();
+ current_slice.shrink_to_fit();
+ Efield_slice.shrink_to_fit();
+ Bfield_slice.shrink_to_fit();
+
+}
+