25 #ifdef WARPX_USE_PSATD 41 #include <AMReX_AmrCore.H> 42 #include <AMReX_Array.H> 43 #include <AMReX_Config.H> 45 # include "AMReX_EBFabFactory.H" 47 #include <AMReX_GpuContainers.H> 48 #include <AMReX_IntVect.H> 49 #include <AMReX_LayoutData.H> 50 #include <AMReX_Parser.H> 51 #include <AMReX_REAL.H> 52 #include <AMReX_RealBox.H> 53 #include <AMReX_RealVect.H> 54 #include <AMReX_Vector.H> 55 #include <AMReX_VisMF.H> 57 #include <AMReX_BaseFwd.H> 58 #include <AMReX_AmrCoreFwd.H> 67 #if defined(AMREX_USE_EB) && defined(WARPX_DIM_RZ) 68 static_assert(
false,
"Embedded boundaries are not supported in RZ mode.");
78 :
public amrex::AmrCore
84 static WarpX& GetInstance ();
85 static void ResetInstance ();
90 static std::string Version ();
91 static std::string PicsarVersion ();
98 void Evolve (
int numsteps = -1);
104 static void shiftMF (amrex::MultiFab& mf,
const amrex::Geometry& geom,
105 int num_shift,
int dir, amrex::Real external_field=0.0,
106 bool useparser =
false, amrex::ParserExecutor<3>
const& field_parser={});
108 static void GotoNextLine (std::istream& is);
159 bool current_correction =
false;
163 bool update_with_rho =
false;
235 std::array<const amrex::MultiFab* const, 3>
238 Bfield_aux[lev][0].get(),
239 Bfield_aux[lev][1].get(),
240 Bfield_aux[lev][2].get()
243 std::array<const amrex::MultiFab* const, 3>
246 Efield_aux[lev][0].get(),
247 Efield_aux[lev][1].get(),
248 Efield_aux[lev][2].get()
277 const amrex::MultiFab&
getrho_cp (
int lev) {
return *rho_cp[lev];}
282 const amrex::MultiFab&
getrho_fp (
int lev) {
return *rho_fp[lev];}
283 const amrex::MultiFab&
getphi_fp (
int lev) {
return *phi_fp[lev];}
284 const amrex::MultiFab&
getF_fp (
int lev) {
return *F_fp[lev];}
285 const amrex::MultiFab&
getG_fp (
int lev) {
return *G_fp[lev];}
292 bool DoPML ()
const {
return do_pml;}
295 std::vector<bool> getPMLdirections()
const;
297 static amrex::LayoutData<amrex::Real>* getCosts (
int lev);
303 m_instance->load_balance_efficiency[lev] = efficiency;
314 return m_instance->load_balance_efficiency[lev];
326 amrex::Real time_of_last_gal_shift = 0;
327 amrex::Array<amrex::Real,3> m_v_galilean = {{0}};
328 amrex::Array<amrex::Real,3> m_galilean_shift = {{0}};
330 amrex::Array<amrex::Real,3> m_v_comoving = {{0.}};
340 void applyMirrors(amrex::Real time);
346 void PrintDtDxDyDz ();
353 void ComputeMaxStep ();
355 void computeMaxStepBoostAccelerator(
const amrex::Geometry& geom);
361 int MoveWindow (
const int step,
bool move_j);
368 void ShiftGalileanBoundary ();
369 void UpdatePlasmaInjectionPosition (amrex::Real dt);
370 void ResetProbDomain (
const amrex::RealBox& rb);
371 void EvolveE ( amrex::Real dt);
372 void EvolveE (
int lev, amrex::Real dt);
373 void EvolveB ( amrex::Real dt,
DtType dt_type);
374 void EvolveB (
int lev, amrex::Real dt,
DtType dt_type);
375 void EvolveF ( amrex::Real dt,
DtType dt_type);
376 void EvolveF (
int lev, amrex::Real dt,
DtType dt_type);
377 void EvolveG ( amrex::Real dt,
DtType dt_type);
378 void EvolveG (
int lev, amrex::Real dt,
DtType dt_type);
379 void EvolveB (
int lev,
PatchType patch_type, amrex::Real dt,
DtType dt_type);
380 void EvolveE (
int lev,
PatchType patch_type, amrex::Real dt);
381 void EvolveF (
int lev,
PatchType patch_type, amrex::Real dt,
DtType dt_type);
382 void EvolveG (
int lev,
PatchType patch_type, amrex::Real dt,
DtType dt_type);
384 void MacroscopicEvolveE ( amrex::Real dt);
385 void MacroscopicEvolveE (
int lev, amrex::Real dt);
386 void MacroscopicEvolveE (
int lev,
PatchType patch_type, amrex::Real dt);
391 void Hybrid_QED_Push ( amrex::Vector<amrex::Real> dt);
397 void Hybrid_QED_Push (
int lev, amrex::Real dt);
404 void Hybrid_QED_Push (
int lev,
PatchType patch_type, amrex::Real dt);
426 void DampFieldsInGuards (std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
427 std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield);
430 void ApplyInverseVolumeScalingToCurrentDensity(amrex::MultiFab* Jx,
435 void ApplyInverseVolumeScalingToChargeDensity(amrex::MultiFab* Rho,
439 void ApplyEfieldBoundary (
const int lev,
PatchType patch_type);
440 void ApplyBfieldBoundary (
const int lev,
PatchType patch_type,
DtType dt_type);
443 void DampPML (
int lev);
444 void DampPML (
int lev,
PatchType patch_type);
447 void DampJPML (
int lev);
448 void DampJPML (
int lev,
PatchType patch_type);
451 bool isAnyBoundaryPML();
456 void NodalSyncPML ();
461 void NodalSyncPML (
int lev);
466 void NodalSyncPML (
int lev,
PatchType patch_type);
468 PML* GetPML (
int lev);
471 void doFieldIonization ();
475 void doFieldIonization (
int lev);
483 void doQEDEvents (
int lev);
486 void PushParticlesandDepose (
int lev, amrex::Real cur_time,
DtType a_dt_type=
DtType::Full,
bool skip_current=
false);
487 void PushParticlesandDepose ( amrex::Real cur_time,
bool skip_current=
false);
491 void UpdateAuxilaryData ();
492 void UpdateAuxilaryDataStagToNodal ();
493 void UpdateAuxilaryDataSameType ();
503 void UpdateCurrentNodalToStag (amrex::MultiFab& dst, amrex::MultiFab
const& src);
508 void FillBoundaryB_avg (amrex::IntVect ng);
509 void FillBoundaryE_avg (amrex::IntVect ng);
513 void FillBoundaryAux (amrex::IntVect ng);
516 void FillBoundaryE_avg (
int lev, amrex::IntVect ng);
517 void FillBoundaryB_avg (
int lev, amrex::IntVect ng);
521 void FillBoundaryAux (
int lev, amrex::IntVect ng);
528 amrex::Vector<int>
getistep ()
const {
return istep;}
531 amrex::Vector<amrex::Real>
gett_old ()
const {
return t_old;}
532 amrex::Real
gett_old (
int lev)
const {
return t_old[lev];}
533 amrex::Vector<amrex::Real>
gett_new ()
const {
return t_new;}
534 amrex::Real
gett_new (
int lev)
const {
return t_new[lev];}
535 void sett_new (
int lev, amrex::Real time) {t_new[lev] = time;}
536 amrex::Vector<amrex::Real>
getdt ()
const {
return dt;}
537 amrex::Real
getdt (
int lev)
const {
return dt[lev];}
546 void AverageAndPackFields( amrex::Vector<std::string>& varnames,
547 amrex::Vector<amrex::MultiFab>& mf_avg,
const amrex::IntVect ngrow)
const;
549 void prepareFields(
int const step, amrex::Vector<std::string>& varnames,
550 amrex::Vector<amrex::MultiFab>& mf_avg,
551 amrex::Vector<const amrex::MultiFab*>& output_mf,
552 amrex::Vector<amrex::Geometry>& output_geom )
const;
554 static std::array<amrex::Real,3> CellSize (
int lev);
555 static amrex::RealBox getRealBox(
const amrex::Box& bx,
int lev);
556 static std::array<amrex::Real,3> LowerCorner (
const amrex::Box& bx,
557 std::array<amrex::Real,3> galilean_shift,
int lev);
558 static std::array<amrex::Real,3> UpperCorner (
const amrex::Box& bx,
int lev);
563 std::array<amrex::Real,3> LowerCornerWithGalilean (
const amrex::Box& bx,
const amrex::Array<amrex::Real,3>& v_galilean,
int lev);
565 static amrex::IntVect RefRatio (
int lev);
567 static const amrex::iMultiFab* CurrentBufferMasks (
int lev);
568 static const amrex::iMultiFab* GatherBufferMasks (
int lev);
586 bool const step_before_end = (step < end_moving_window_step) || (end_moving_window_step < 0);
587 bool const step_after_start = (step >= start_moving_window_step);
588 return do_moving_window && step_before_end && step_after_start;
601 static void ComputeDivB (amrex::MultiFab& divB,
int const dcomp,
602 const std::array<const amrex::MultiFab* const, 3>& B,
603 const std::array<amrex::Real,3>&
dx);
605 static void ComputeDivB (amrex::MultiFab& divB,
int const dcomp,
606 const std::array<const amrex::MultiFab* const, 3>& B,
607 const std::array<amrex::Real,3>& dx, amrex::IntVect
const ngrow);
609 void ComputeDivE(amrex::MultiFab& divE,
const int lev);
611 const amrex::IntVect
getngE()
const {
return guard_cells.ng_alloc_EB; }
612 const amrex::IntVect
getngF()
const {
return guard_cells.ng_alloc_F; }
627 void ComputeSpaceChargeField (
bool const reset_fields);
629 void AddSpaceChargeFieldLabFrame ();
630 void computePhi (
const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
631 amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
632 std::array<amrex::Real, 3>
const beta = {{0,0,0}},
633 amrex::Real
const required_precision=amrex::Real(1.e-11),
634 const int max_iters=200,
635 const int verbosity=2)
const;
636 void computePhiRZ (
const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
637 amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
638 std::array<amrex::Real, 3>
const beta,
639 amrex::Real
const required_precision,
641 int const verbosity)
const;
642 void computePhiCartesian (
const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
643 amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
644 std::array<amrex::Real, 3>
const beta,
645 amrex::Real
const required_precision,
647 int const verbosity)
const;
649 void setPhiBC (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
650 std::array<bool,AMREX_SPACEDIM> dirichlet_flag,
651 amrex::Array<amrex::Real,AMREX_SPACEDIM> phi_bc_values_lo,
652 amrex::Array<amrex::Real,AMREX_SPACEDIM> phi_bc_values_hi
654 void getPhiBC (
const int idim, amrex::Real &pot_lo,
655 amrex::Real &pot_hi)
const;
657 void computeE (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& E,
658 const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
659 std::array<amrex::Real, 3>
const beta = {{0,0,0}} )
const;
660 void computeB (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& B,
661 const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
662 std::array<amrex::Real, 3>
const beta = {{0,0,0}} )
const;
682 void InitializeExternalFieldsOnGridUsingParser (
683 amrex::MultiFab *mfx, amrex::MultiFab *mfy, amrex::MultiFab *mfz,
684 amrex::ParserExecutor<3>
const& xfield_parser,
685 amrex::ParserExecutor<3>
const& yfield_parser,
686 amrex::ParserExecutor<3>
const& zfield_parser,
687 std::array< std::unique_ptr<amrex::MultiFab>, 3 >
const& geom_data,
const int lev);
694 void ComputeCostsHeuristic (amrex::Vector<std::unique_ptr<amrex::LayoutData<amrex::Real> > >& costs);
696 void ApplyFilterandSumBoundaryRho (
int lev,
int glev, amrex::MultiFab& rho,
int icomp,
int ncomp);
698 #ifdef WARPX_USE_PSATD 736 void InitLevelData (
int lev, amrex::Real time);
739 virtual void ErrorEst (
int lev, amrex::TagBoxArray& tags, amrex::Real time,
int )
final;
743 virtual void PostProcessBaseGrids (amrex::BoxArray& ba0)
const final;
748 virtual void MakeNewLevelFromScratch (
int lev, amrex::Real time,
const amrex::BoxArray& ba,
749 const amrex::DistributionMapping& dm)
final;
755 const amrex::DistributionMapping& )
final 756 { amrex::Abort(
"MakeNewLevelFromCoarse: To be implemented"); }
761 virtual void RemakeLevel (
int lev, amrex::Real time,
const amrex::BoxArray& ba,
762 const amrex::DistributionMapping& dm)
final;
765 virtual void ClearLevel (
int lev)
final;
775 void EvolveEM(
int numsteps);
782 void FillBoundaryB_avg (
int lev,
PatchType patch_type, amrex::IntVect ng);
783 void FillBoundaryE_avg (
int lev,
PatchType patch_type, amrex::IntVect ng);
793 void NodalSyncE (
int lev);
798 void NodalSyncE (
int lev,
PatchType patch_type);
808 void NodalSyncB (
int lev);
813 void NodalSyncB (
int lev,
PatchType patch_type);
815 void OneStep_nosub (amrex::Real t);
816 void OneStep_sub1 (amrex::Real t);
821 void OneStep_multiJ (
const amrex::Real t);
823 void RestrictCurrentFromFineToCoarsePatch (
int lev);
824 void AddCurrentFromFineLevelandSumBoundary (
int lev);
825 void StoreCurrent (
int lev);
826 void RestoreCurrent (
int lev);
827 void ApplyFilterandSumBoundaryJ (
int lev,
PatchType patch_type);
828 void NodalSyncJ (
int lev,
PatchType patch_type);
830 void RestrictRhoFromFineToCoarsePatch (
int lev);
831 void ApplyFilterandSumBoundaryRho (
int lev,
PatchType patch_type,
int icomp,
int ncomp);
832 void AddRhoFromFineLevelandSumBoundary (
int lev,
int icomp,
int ncomp);
833 void NodalSyncRho (
int lev,
PatchType patch_type,
int icomp,
int ncomp);
842 void CurrentCorrection ();
851 void VayDeposition ();
853 void ReadParameters ();
857 void BackwardCompatibility ();
859 void InitFromScratch ();
861 void AllocLevelData (
int lev,
const amrex::BoxArray& new_grids,
862 const amrex::DistributionMapping& new_dmap);
864 amrex::DistributionMapping
865 GetRestartDMap (
const std::string& chkfile,
const amrex::BoxArray& ba,
int lev)
const;
867 void InitFromCheckpoint ();
875 void InitDiagnostics ();
877 void InitNCICorrector ();
883 void CheckGuardCells();
889 void CheckGuardCells(amrex::MultiFab
const& mf);
892 void PerformanceHints ();
894 std::unique_ptr<amrex::MultiFab> GetCellCenteredData();
896 void BuildBufferMasks ();
897 void BuildBufferMasksInBox (
const amrex::Box tbx, amrex::IArrayBox &buffer_mask,
898 const amrex::IArrayBox &guard_mask,
const int ng );
900 return current_buffer_masks[lev].get();
903 return gather_buffer_masks[lev].get();
906 #ifdef WARPX_USE_PSATD 916 void ReorderFornbergCoefficients (amrex::Vector<amrex::Real>& ordered_coeffs,
917 amrex::Vector<amrex::Real>& unordered_coeffs,
930 void AllocateCenteringCoefficients (amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_x,
931 amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_y,
932 amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_z,
933 const int centering_nox,
934 const int centering_noy,
935 const int centering_noz);
938 void AllocLevelMFs (
int lev,
const amrex::BoxArray& ba,
const amrex::DistributionMapping& dm,
939 const amrex::IntVect& ngE,
const amrex::IntVect& ngJ,
940 const amrex::IntVect& ngRho,
const amrex::IntVect& ngF,
941 const amrex::IntVect& ngG,
const bool aux_is_nodal);
942 #ifdef WARPX_USE_PSATD 944 void AllocLevelSpectralSolverRZ (amrex::Vector<std::unique_ptr<SpectralSolverRZ>>& spectral_solver,
946 const amrex::BoxArray& realspace_ba,
947 const amrex::DistributionMapping& dm,
948 const std::array<amrex::Real,3>& dx);
950 void AllocLevelSpectralSolver (amrex::Vector<std::unique_ptr<SpectralSolver>>& spectral_solver,
952 const amrex::BoxArray& realspace_ba,
953 const amrex::DistributionMapping& dm,
954 const std::array<amrex::Real,3>& dx,
955 const bool pml_flag=
false);
964 amrex::Vector<amrex::Real>
dt;
967 std::unique_ptr<MultiParticleContainer>
mypc;
971 std::unique_ptr<BackTransformedDiagnostic>
myBFD;
978 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_aux;
979 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_aux;
982 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
F_fp;
983 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
G_fp;
984 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
rho_fp;
985 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
phi_fp;
986 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_fp;
987 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_fp;
988 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_fp;
989 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_avg_fp;
990 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_avg_fp;
993 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Venl;
994 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
m_edge_lengths;
995 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
m_face_areas;
998 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
m_area_mod;
999 amrex::Vector<std::array< std::unique_ptr<amrex::LayoutData<FaceInfoBox> >, 3 > >
m_borrowing;
1002 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
ECTRhofield;
1008 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_store;
1014 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
F_cp;
1015 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
G_cp;
1016 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
rho_cp;
1017 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_cp;
1018 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_cp;
1019 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_cp;
1020 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_avg_cp;
1021 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_avg_cp;
1024 amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_cax;
1025 amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_cax;
1030 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_buf;
1035 int do_silver_mueller = 0;
1038 int pml_has_particles = 0;
1039 int do_pml_j_damping = 0;
1040 int do_pml_in_domain = 0;
1043 amrex::IntVect do_pml_Lo = amrex::IntVect::TheZeroVector();
1044 amrex::IntVect do_pml_Hi = amrex::IntVect::TheZeroVector();
1045 amrex::Vector<std::unique_ptr<PML> >
pml;
1047 amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
1048 amrex::Real current_injection_position = 0;
1051 int warpx_do_continuous_injection = 0;
1052 int num_injected_species = -1;
1055 amrex::Real const_dt = amrex::Real(0.5e-11);
1067 amrex::Vector<std::unique_ptr<amrex::LayoutData<amrex::Real> > >
costs;
1069 int load_balance_with_sfc = 0;
1074 amrex::Real load_balance_knapsack_factor = amrex::Real(1.24);
1080 amrex::Real load_balance_efficiency_ratio_threshold = amrex::Real(1.1);
1088 amrex::Real costs_heuristic_cells_wt = amrex::Real(-1);
1094 amrex::Real costs_heuristic_particles_wt = amrex::Real(-1);
1102 bool use_hybrid_QED = 0;
1104 int max_step = std::numeric_limits<int>::max();
1105 amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
1107 int regrid_int = -1;
1109 amrex::Real
cfl = amrex::Real(0.7);
1113 amrex::VisMF::Header::Version plotfile_headerversion = amrex::VisMF::Header::Version_v1;
1114 amrex::VisMF::Header::Version slice_plotfile_headerversion = amrex::VisMF::Header::Version_v1;
1116 bool use_single_read =
true;
1117 bool use_single_write =
true;
1118 int mffile_nstreams = 4;
1119 int field_io_nfiles = 1024;
1120 int particle_io_nfiles = 1024;
1125 bool is_synchronized =
true;
1131 int slice_plot_int = -1;
1134 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
F_slice;
1135 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
G_slice;
1136 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
rho_slice;
1137 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_slice;
1138 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_slice;
1139 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_slice;
1141 bool fft_periodic_single_box =
false;
1147 amrex::IntVect numprocs{0};
1159 amrex::FabFactory<amrex::FArrayBox>
const&
fieldFactory (
int lev)
const noexcept {
1160 return *m_field_factory[lev];
1163 amrex::EBFArrayBoxFactory
const& fieldEBFactory (
int lev)
const noexcept {
1164 return static_cast<amrex::EBFArrayBoxFactory const&
>(*m_field_factory[lev]);
1176 void ComputeEdgeLengths ();
1181 void ComputeFaceAreas ();
1202 void ComputeDistanceToEB ();
1206 amrex::Array1D<int, 0, 2> CountExtFaces();
1211 void ComputeFaceExtensions();
1215 void InitBorrowing();
1219 void ShrinkBorrowing();
1223 void ComputeOneWayExtensions();
1227 void ComputeEightWaysExtensions();
1231 void ScrapeParticles ();
1235 #ifdef WARPX_USE_PSATD 1240 void PSATDForwardTransformEB ();
1246 void PSATDBackwardTransformEB ();
1251 void PSATDBackwardTransformEBavg ();
1257 void PSATDForwardTransformJ ();
1266 void PSATDForwardTransformRho (
const int icomp,
const int dcomp);
1271 void PSATDMoveRhoNewToRhoOld ();
1276 void PSATDMoveJNewToJOld ();
1281 void PSATDForwardTransformF ();
1286 void PSATDBackwardTransformF ();
1291 void PSATDForwardTransformG ();
1296 void PSATDBackwardTransformG ();
1301 void PSATDPushSpectralFields ();
1308 void PSATDScaleAverageFields (
const amrex::Real scale_factor);
1313 void PSATDEraseAverageFields ();
1316 int fftw_plan_measure = 1;
1318 #ifdef WARPX_USE_PSATD 1319 # ifdef WARPX_DIM_RZ 1329 # ifdef WARPX_DIM_RZ
static std::string str_Bz_ext_grid_function
Definition: WarpX.H:124
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_y
Definition: WarpX.H:705
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp
Definition: WarpX.H:986
static bool fft_do_time_averaging
Definition: WarpX.H:592
static int moving_window_dir
Definition: WarpX.H:590
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp
Definition: WarpX.H:988
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition: WarpX.H:324
amrex::Vector< amrex::Real > getdt() const
Definition: WarpX.H:536
amrex::Vector< int > getistep() const
Definition: WarpX.H:528
static bool do_back_transformed_diagnostics
Definition: WarpX.H:200
static int do_subcycling
Definition: WarpX.H:220
amrex::FabFactory< amrex::FArrayBox > const & fieldFactory(int lev) const noexcept
Definition: WarpX.H:1159
DtType
Definition: WarpXDtType.H:10
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition: WarpX.H:1321
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_cp
Definition: WarpX.H:1020
static bool refine_plasma
Definition: WarpX.H:215
amrex::RealVect fine_tag_hi
Definition: WarpX.H:1123
static long particle_pusher_algo
Definition: WarpX.H:143
static int do_moving_window
Definition: WarpX.H:577
bool do_pml_dive_cleaning
Definition: WarpX.H:1041
static bool do_back_transformed_particles
Definition: WarpX.H:205
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_fp
Definition: WarpX.H:990
static long load_balance_costs_update_algo
Definition: WarpX.H:145
This class is a parser for multiple slices of the form x,y,z,... where x, y and z are slices of the f...
Definition: IntervalsParser.H:82
static amrex::Vector< int > field_boundary_lo
Definition: WarpX.H:148
void PushPSATD(const int lev)
Definition: PML.cpp:1201
static amrex::Real self_fields_required_precision
Definition: WarpX.H:573
const amrex::MultiFab & getrho_fp(int lev)
Definition: WarpX.H:282
amrex::Vector< int > injected_plasma_species
Definition: WarpX.H:1053
std::unique_ptr< SpectralSolver > spectral_solver_cp
Definition: PML.H:217
static WarpX * m_instance
Definition: WarpX.H:770
static amrex::Vector< int > boost_direction
Definition: WarpX.H:210
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_store
Definition: WarpX.H:1008
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_info_face
Definition: WarpX.H:996
amrex::Vector< std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > > m_borrowing
Definition: WarpX.H:999
amrex::Real gett_new(int lev) const
Definition: WarpX.H:534
static int num_slice_snapshots_lab
Definition: WarpX.H:595
int maxStep() const
Definition: WarpX.H:543
void ComputePMLFactors(amrex::Real dt)
Definition: PML.cpp:798
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_cp
Definition: WarpX.H:1014
MultiParticleContainer & GetPartContainer()
Definition: WarpX.H:100
void sett_new(int lev, amrex::Real time)
Definition: WarpX.H:535
const amrex::MultiFab & getBfield_cp(int lev, int direction)
Definition: WarpX.H:276
std::unique_ptr< amrex::Parser > Bxfield_parser
Definition: WarpX.H:131
Definition: ParticleBoundaryBuffer.H:18
const amrex::MultiFab & getG_fp(int lev)
Definition: WarpX.H:285
const amrex::MultiFab & getEfield_fp(int lev, int direction)
Definition: WarpX.H:280
std::unique_ptr< MultiDiagnostics > multi_diags
Definition: WarpX.H:968
void setLoadBalanceEfficiency(const int lev, const amrex::Real efficiency)
Definition: WarpX.H:299
static int n_field_gather_buffer
Definition: WarpX.H:229
std::unique_ptr< MultiParticleContainer > mypc
Definition: WarpX.H:967
float cfl
Definition: yt3d_mpi.py:38
static bool do_current_centering
Definition: WarpX.H:155
static int noy
Definition: WarpX.H:174
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_ext_face
Definition: WarpX.H:997
static int do_multi_J
Definition: WarpX.H:221
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_cp
Definition: WarpX.H:1021
const amrex::MultiFab & getEfield(int lev, int direction)
Definition: WarpX.H:271
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_nodal
Definition: WarpX.H:1011
IntervalsParser override_sync_intervals
Definition: WarpX.H:1097
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition: WarpX.H:1027
int dx
Definition: compute_domain.py:35
std::unique_ptr< amrex::Parser > Bzfield_parser
Definition: WarpX.H:133
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_cp
Definition: WarpX.H:1016
amrex::MultiFab * get_pointer_rho_fp(int lev) const
Definition: WarpX.H:258
static amrex::Real moving_window_v
Definition: WarpX.H:591
static amrex::Real dt_slice_snapshots_lab
Definition: WarpX.H:596
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cp
Definition: WarpX.H:1019
amrex::MultiFab * get_pointer_Efield_aux(int lev, int direction) const
Definition: WarpX.H:252
void FillBoundaryE()
Definition: PML.cpp:1060
static amrex::Real dt_snapshots_lab
Definition: WarpX.H:203
bool getis_synchronized() const
Definition: WarpX.H:541
SpectralSolverRZ & get_spectral_solver_fp(int lev)
Definition: WarpX.H:1334
Definition: MultiReducedDiags.H:24
const amrex::IntVect get_ng_depos_J() const
Definition: WarpX.H:614
amrex::MultiFab * get_pointer_Efield_cp(int lev, int direction) const
Definition: WarpX.H:263
Definition: MultiParticleContainer.H:64
bool DoPML() const
Definition: WarpX.H:292
static amrex::Real particle_slice_width_lab
Definition: WarpX.H:597
static int current_centering_nox
Definition: WarpX.H:183
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_buf
Definition: WarpX.H:1030
IntervalsParser load_balance_intervals
Definition: WarpX.H:1064
amrex::RealBox slice_realbox
Definition: WarpX.H:1132
amrex::Vector< std::unique_ptr< amrex::MultiFab > > charge_buf
Definition: WarpX.H:1031
static std::string lab_data_directory
Definition: WarpX.H:201
amrex::MultiFab * get_pointer_Bfield_fp(int lev, int direction) const
Definition: WarpX.H:256
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition: WarpX.H:1067
const amrex::MultiFab & getF_fp(int lev)
Definition: WarpX.H:284
static int em_solver_medium
Definition: WarpX.H:146
const amrex::MultiFab & getrho_cp(int lev)
Definition: WarpX.H:277
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_area_mod
Definition: WarpX.H:998
static std::string str_Ez_ext_grid_function
Definition: WarpX.H:128
amrex::Vector< int > istep
Definition: WarpX.H:959
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_aux
Definition: WarpX.H:978
amrex::MultiFab * get_pointer_rho_cp(int lev) const
Definition: WarpX.H:266
std::unique_ptr< amrex::Parser > Byfield_parser
Definition: WarpX.H:132
static int num_mirrors
Definition: WarpX.H:332
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition: WarpX.H:1026
static amrex::Vector< ParticleBoundaryType > particle_boundary_hi
Definition: WarpX.H:151
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_fp
Definition: WarpX.H:989
static int do_electrostatic
Definition: WarpX.H:570
static long charge_deposition_algo
Definition: WarpX.H:141
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition: WarpX.H:902
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_fp
Definition: WarpX.H:982
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_slice
Definition: WarpX.H:1139
amrex::Vector< int > mirror_z_npoints
Definition: WarpX.H:335
void FillBoundaryF()
Definition: PML.cpp:1108
amrex::Vector< amrex::Real > gett_old() const
Definition: WarpX.H:531
amrex::Real getdt(int lev) const
Definition: WarpX.H:537
static IntervalsParser sort_intervals
Definition: WarpX.H:217
amrex::Real getLoadBalanceEfficiency(const int lev)
Definition: WarpX.H:310
static int do_multi_J_n_depositions
Definition: WarpX.H:222
direction
Definition: AnyFFT.H:74
BilinearFilter bilinear_filter
Definition: WarpX.H:322
static int n_current_deposition_buffer
in number of cells from the edge (identical for each dimension)
Definition: WarpX.H:230
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_cp
Definition: WarpX.H:1017
amrex::Vector< std::unique_ptr< amrex::MultiFab > > m_distance_to_eb
Definition: WarpX.H:1005
static bool use_fdtd_nci_corr
Definition: WarpX.H:191
static int start_moving_window_step
Definition: WarpX.H:578
static int moving_window_active(int const step)
Definition: WarpX.H:585
static amrex::Real gamma_boost
Definition: WarpX.H:208
amrex::Vector< amrex::Real > t_new
Definition: WarpX.H:962
amrex::MultiFab * get_pointer_phi_fp(int lev) const
Definition: WarpX.H:261
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_slice
Definition: WarpX.H:1135
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_slice
Definition: WarpX.H:1138
int getnsubsteps(int lev) const
Definition: WarpX.H:527
static amrex::Vector< amrex::Real > E_external_grid
Definition: WarpX.H:114
void FillBoundaryG()
Definition: PML.cpp:1130
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_cp
Definition: WarpX.H:1015
std::array< const amrex::MultiFab *const, 3 > get_array_Efield_aux(const int lev) const
Definition: WarpX.H:244
static amrex::Real beta_boost
Definition: WarpX.H:209
static bool do_dive_cleaning
Definition: WarpX.H:169
amrex::Vector< amrex::Real > dt
Definition: WarpX.H:964
std::unique_ptr< amrex::Parser > Exfield_parser
Definition: WarpX.H:135
std::array< const amrex::MultiFab *const, 3 > get_array_Bfield_aux(const int lev) const
Definition: WarpX.H:236
amrex::MultiFab * get_pointer_G_fp(int lev) const
Definition: WarpX.H:260
static int field_centering_noz
Definition: WarpX.H:180
amrex::Real stopTime() const
Definition: WarpX.H:544
static bool do_back_transformed_fields
Definition: WarpX.H:204
const amrex::MultiFab & getBfield_avg_cp(int lev, int direction)
Definition: WarpX.H:290
static std::string E_ext_grid_s
Definition: WarpX.H:119
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition: WarpX.H:1320
const amrex::IntVect get_ng_depos_rho() const
Definition: WarpX.H:615
static bool use_filter
Definition: WarpX.H:194
int getdo_moving_window() const
Definition: WarpX.H:538
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_y
Definition: WarpX.H:701
amrex::Vector< amrex::Real > load_balance_efficiency
Definition: WarpX.H:1082
ii
Definition: check_interp_points_and_weights.py:145
Definition: BilinearFilter.H:16
amrex::Vector< std::unique_ptr< PML > > pml
Definition: WarpX.H:1045
static amrex::Real zmax_plasma_to_compute_max_step
Definition: WarpX.H:211
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_x
Definition: WarpX.H:700
amrex::Vector< std::unique_ptr< amrex::MultiFab > > phi_fp
Definition: WarpX.H:985
const amrex::MultiFab & getBfield_fp(int lev, int direction)
Definition: WarpX.H:281
amrex::MultiFab * get_pointer_Bfield_cp(int lev, int direction) const
Definition: WarpX.H:264
amrex::MultiFab * get_pointer_G_cp(int lev) const
Definition: WarpX.H:268
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_edge_lengths
Definition: WarpX.H:994
amrex::MultiFab * get_pointer_current_fp(int lev, int direction) const
Definition: WarpX.H:257
const amrex::MultiFab & getcurrent(int lev, int direction)
Definition: WarpX.H:270
const amrex::MultiFab & getEfield_avg_cp(int lev, int direction)
Definition: WarpX.H:289
static int self_fields_verbosity
Definition: WarpX.H:575
static int field_centering_noy
Definition: WarpX.H:179
const amrex::MultiFab & getBfield(int lev, int direction)
Definition: WarpX.H:272
const amrex::IntVect get_numprocs() const
Definition: WarpX.H:624
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition: WarpX.H:1058
static amrex::Real quantum_xi_c2
Definition: WarpX.H:406
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cp
Definition: WarpX.H:1018
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_face_areas
Definition: WarpX.H:995
const amrex::IntVect getngUpdateAux() const
Definition: WarpX.H:613
amrex::RealVect fine_tag_lo
Definition: WarpX.H:1122
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cax
Definition: WarpX.H:1024
static int n_rz_azimuthal_modes
Definition: WarpX.H:188
void FillBoundaryB()
Definition: PML.cpp:1084
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_slice
Definition: WarpX.H:1137
ParticleBoundaryBuffer & GetParticleBoundaryBuffer()
Definition: WarpX.H:102
const amrex::IntVect getngF() const
Definition: WarpX.H:612
static std::string str_Bx_ext_grid_function
Definition: WarpX.H:122
amrex::RealBox getSliceRealBox() const
Definition: WarpX.H:598
std::unique_ptr< ParticleBoundaryBuffer > m_particle_boundary_buffer
particle buffer for scraped particles on the boundaries
Definition: WarpX.H:1150
const amrex::MultiFab & getEfield_avg_fp(int lev, int direction)
Definition: WarpX.H:287
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_z
Definition: WarpX.H:706
static int ncomps
Definition: WarpX.H:189
int getistep(int lev) const
Definition: WarpX.H:529
bool do_pml_divb_cleaning
Definition: WarpX.H:1042
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_x
Definition: WarpX.H:704
std::unique_ptr< amrex::Parser > Eyfield_parser
Definition: WarpX.H:136
static bool use_kspace_filter
Definition: WarpX.H:195
static bool use_filter_compensation
Definition: WarpX.H:196
static bool do_divb_cleaning
Definition: WarpX.H:170
static long current_deposition_algo
Definition: WarpX.H:140
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition: WarpX.H:323
static bool do_device_synchronize_before_profile
Definition: WarpX.H:225
static int num_snapshots_lab
Definition: WarpX.H:202
amrex::Vector< int > getnsubsteps() const
Definition: WarpX.H:526
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_z
Definition: WarpX.H:702
static amrex::IntVect fill_guards
Definition: WarpX.H:166
amrex::MultiFab * get_pointer_current_cp(int lev, int direction) const
Definition: WarpX.H:265
amrex::MultiFab * get_pointer_Efield_fp(int lev, int direction) const
Definition: WarpX.H:255
const amrex::MultiFab & getBfield_avg_fp(int lev, int direction)
Definition: WarpX.H:288
static int maxwell_solver_id
Definition: WarpX.H:144
std::unique_ptr< SpectralSolver > spectral_solver_fp
Definition: PML.H:216
static std::string str_Ex_ext_grid_function
Definition: WarpX.H:126
static bool serialize_ics
Definition: WarpX.H:197
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > ECTRhofield
Definition: WarpX.H:1002
amrex::Vector< amrex::Real > t_old
Definition: WarpX.H:963
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cax
Definition: WarpX.H:1025
const amrex::IntVect getngE() const
Definition: WarpX.H:611
ElectrostaticSolver::BoundaryValueHandler field_boundary_value_handler
Definition: WarpX.H:626
static int current_centering_noy
Definition: WarpX.H:184
amrex::Vector< int > nsubsteps
Definition: WarpX.H:960
static int end_moving_window_step
Definition: WarpX.H:579
static long field_gathering_algo
Definition: WarpX.H:142
static amrex::IntVect filter_npass_each_dir
Definition: WarpX.H:321
static bool galerkin_interpolation
Definition: WarpX.H:192
static std::string str_Ey_ext_grid_function
Definition: WarpX.H:127
static int field_centering_nox
Definition: WarpX.H:178
amrex::IntVect slice_cr_ratio
Definition: WarpX.H:1133
amrex::Real getcurrent_injection_position() const
Definition: WarpX.H:540
amrex::MultiFab * get_pointer_Bfield_aux(int lev, int direction) const
Definition: WarpX.H:253
static int current_centering_noz
Definition: WarpX.H:185
static int nox
Definition: WarpX.H:173
static amrex::Vector< amrex::Real > B_external_grid
Definition: WarpX.H:115
amrex::Real getmoving_window_x() const
Definition: WarpX.H:539
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Venl
Definition: WarpX.H:993
const amrex::MultiFab & getphi_fp(int lev)
Definition: WarpX.H:283
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_fp
Definition: WarpX.H:983
static std::string B_ext_grid_s
Definition: WarpX.H:118
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition: WarpX.H:1338
static std::string str_By_ext_grid_function
Definition: WarpX.H:123
static amrex::Vector< ParticleBoundaryType > particle_boundary_lo
Definition: WarpX.H:150
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_aux
Definition: WarpX.H:979
IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition: WarpX.H:417
PatchType
Definition: WarpX.H:71
std::string restart_chkfile
Definition: WarpX.H:1111
int slice_max_grid_size
Definition: WarpX.H:1130
amrex::Vector< amrex::Real > mirror_z
Definition: WarpX.H:333
int Verbose() const
Definition: WarpX.H:93
static bool do_dynamic_scheduling
Definition: WarpX.H:214
static int macroscopic_solver_algo
Definition: WarpX.H:147
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_slice
Definition: WarpX.H:1134
static std::string authors
Author of an input file / simulation setup.
Definition: WarpX.H:111
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp
Definition: WarpX.H:987
static amrex::Vector< int > field_boundary_hi
Definition: WarpX.H:149
virtual void MakeNewLevelFromCoarse(int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final
Definition: WarpX.H:754
static int do_nodal
in number of cells from the edge (identical for each dimension)
Definition: WarpX.H:233
static bool safe_guard_cells
Definition: WarpX.H:226
Definition: SpectralSolverRZ.H:21
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_slice
Definition: WarpX.H:1136
const amrex::MultiFab & getcurrent_fp(int lev, int direction)
Definition: WarpX.H:279
static int self_fields_max_iters
Definition: WarpX.H:574
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition: WarpX.H:1339
amrex::Vector< std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > > m_field_factory
Definition: WarpX.H:1157
Definition: ElectrostaticSolver.H:35
guardCellManager guard_cells
Definition: WarpX.H:1127
amrex::MultiFab * get_pointer_F_cp(int lev) const
Definition: WarpX.H:267
amrex::Real gett_old(int lev) const
Definition: WarpX.H:532
amrex::Vector< amrex::Real > mirror_z_width
Definition: WarpX.H:334
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:533
std::unique_ptr< amrex::Parser > Ezfield_parser
Definition: WarpX.H:137
static int noz
Definition: WarpX.H:175
const amrex::MultiFab & getcurrent_cp(int lev, int direction)
Definition: WarpX.H:274
const amrex::MultiFab & getEfield_cp(int lev, int direction)
Definition: WarpX.H:275
void setistep(int lev, int ii)
Definition: WarpX.H:530
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition: WarpX.H:899
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_fp
Definition: WarpX.H:984
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition: GuardCellManager.H:19
Definition: WarpXParticleContainer.H:110
static amrex::IntVect sort_bin_size
Definition: WarpX.H:218
static int J_linear_in_time
Definition: WarpX.H:223
static int do_compute_max_step_from_zmax
Definition: WarpX.H:212
MultiReducedDiags * reduced_diags
object with all reduced diagnotics, similar to MultiParticleContainer for species.
Definition: WarpX.H:338
amrex::MultiFab * get_pointer_F_fp(int lev) const
Definition: WarpX.H:259
std::unique_ptr< BackTransformedDiagnostic > myBFD
Definition: WarpX.H:971
Top-level class for the electromagnetic spectral solver.
Definition: SpectralSolver.H:32