29 #ifdef WARPX_USE_PSATD 39 #ifdef WARPX_USE_OPENPMD 45 #include <AMReX_AmrCore.H> 46 #include <AMReX_BLProfiler.H> 47 #include <AMReX_Print.H> 48 #include <AMReX_RealVect.H> 49 #include <AMReX_iMultiFab.H> 50 #include <AMReX_VisMF.H> 51 #include <AMReX_LayoutData.H> 52 #include <AMReX_Interpolater.H> 53 #include <AMReX_FillPatchUtil.H> 70 :
public amrex::AmrCore
76 static WarpX& GetInstance ();
77 static void ResetInstance ();
82 static std::string Version ();
83 static std::string PicsarVersion ();
90 void Evolve (
int numsteps = -1);
94 static void shiftMF (amrex::MultiFab& mf,
const amrex::Geometry& geom,
95 int num_shift,
int dir, amrex::IntVect ng_extra,
96 amrex::Real external_field=0.0,
bool useparser =
false,
99 static void GotoNextLine (std::istream& is);
140 #ifdef WARPX_USE_PSATD 143 bool current_correction =
false;
146 #ifdef WARPX_USE_PSATD 206 std::array<const amrex::MultiFab* const, 3>
209 Bfield_aux[lev][0].get(),
210 Bfield_aux[lev][1].get(),
211 Bfield_aux[lev][2].get()
214 std::array<const amrex::MultiFab* const, 3>
217 Efield_aux[lev][0].get(),
218 Efield_aux[lev][1].get(),
219 Efield_aux[lev][2].get()
245 const amrex::MultiFab&
getrho_cp (
int lev) {
return *rho_cp[lev];}
250 const amrex::MultiFab&
getrho_fp (
int lev) {
return *rho_fp[lev];}
251 const amrex::MultiFab&
getF_fp (
int lev) {
return *F_fp[lev];}
252 bool DoPML ()
const {
return do_pml;}
255 std::vector<bool> getPMLdirections()
const;
257 static amrex::LayoutData<amrex::Real>*
getCosts (
int lev) {
259 return m_instance->costs[lev].get();
271 amrex::Real time_of_last_gal_shift = 0;
272 amrex::Array<amrex::Real,3> m_v_galilean = {{0}};
273 amrex::Array<amrex::Real,3> m_galilean_shift = {{0}};
283 void applyMirrors(amrex::Real time);
289 void computeMaxStepBoostAccelerator(
const amrex::Geometry& geom);
290 int MoveWindow (
bool move_j);
297 void ShiftGalileanBoundary ();
298 void UpdatePlasmaInjectionPosition (amrex::Real dt);
299 void ResetProbDomain (
const amrex::RealBox& rb);
300 void EvolveE ( amrex::Real dt);
301 void EvolveE (
int lev, amrex::Real dt);
302 void EvolveB ( amrex::Real dt);
303 void EvolveB (
int lev, amrex::Real dt);
304 void EvolveF ( amrex::Real dt,
DtType dt_type);
305 void EvolveF (
int lev, amrex::Real dt,
DtType dt_type);
306 void EvolveB (
int lev,
PatchType patch_type, amrex::Real dt);
307 void EvolveE (
int lev,
PatchType patch_type, amrex::Real dt);
308 void EvolveF (
int lev,
PatchType patch_type, amrex::Real dt,
DtType dt_type);
310 void MacroscopicEvolveE ( amrex::Real dt);
311 void MacroscopicEvolveE (
int lev, amrex::Real dt);
312 void MacroscopicEvolveE (
int lev,
PatchType patch_type, amrex::Real dt);
317 void Hybrid_QED_Push ( amrex::Vector<amrex::Real> dt);
323 void Hybrid_QED_Push (
int lev, amrex::Real dt);
330 void Hybrid_QED_Push (
int lev,
PatchType patch_type, amrex::Real dt);
352 void DampFieldsInGuards (std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
353 std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield);
356 void ApplyInverseVolumeScalingToCurrentDensity(amrex::MultiFab* Jx,
361 void ApplyInverseVolumeScalingToChargeDensity(amrex::MultiFab* Rho,
366 void DampPML (
int lev);
367 void DampPML (
int lev,
PatchType patch_type);
370 void DampJPML (
int lev);
371 void DampJPML (
int lev,
PatchType patch_type);
375 PML* GetPML (
int lev);
378 void doFieldIonization ();
382 void doFieldIonization (
int lev);
390 void doQEDEvents (
int lev);
393 void PushParticlesandDepose (
int lev, amrex::Real cur_time,
DtType a_dt_type=
DtType::Full);
394 void PushParticlesandDepose ( amrex::Real cur_time);
398 void UpdateAuxilaryData ();
399 void UpdateAuxilaryDataStagToNodal ();
400 void UpdateAuxilaryDataSameType ();
403 void FillBoundaryB (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
404 void FillBoundaryE (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
405 void FillBoundaryB_avg (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
406 void FillBoundaryE_avg (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
409 void FillBoundaryAux (amrex::IntVect ng);
410 void FillBoundaryE (
int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
411 void FillBoundaryB (
int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
412 void FillBoundaryE_avg (
int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
413 void FillBoundaryB_avg (
int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
416 void FillBoundaryAux (
int lev, amrex::IntVect ng);
423 amrex::Vector<int>
getistep ()
const {
return istep;}
426 amrex::Vector<amrex::Real>
gett_old ()
const {
return t_old;}
427 amrex::Real
gett_old (
int lev)
const {
return t_old[lev];}
428 amrex::Vector<amrex::Real>
gett_new ()
const {
return t_new;}
429 amrex::Real
gett_new (
int lev)
const {
return t_new[lev];}
430 void sett_new (
int lev, amrex::Real time) {t_new[lev] = time;}
431 amrex::Vector<amrex::Real>
getdt ()
const {
return dt;}
432 amrex::Real
getdt (
int lev)
const {
return dt[lev];}
440 void AverageAndPackFields( amrex::Vector<std::string>& varnames,
441 amrex::Vector<amrex::MultiFab>& mf_avg,
const int ngrow)
const;
443 void prepareFields(
int const step, amrex::Vector<std::string>& varnames,
444 amrex::Vector<amrex::MultiFab>& mf_avg,
445 amrex::Vector<const amrex::MultiFab*>& output_mf,
446 amrex::Vector<amrex::Geometry>& output_geom )
const;
448 static std::array<amrex::Real,3> CellSize (
int lev);
449 static amrex::RealBox getRealBox(
const amrex::Box& bx,
int lev);
450 static std::array<amrex::Real,3> LowerCorner (
const amrex::Box& bx,
451 std::array<amrex::Real,3> galilean_shift,
int lev);
452 static std::array<amrex::Real,3> UpperCorner (
const amrex::Box& bx,
int lev);
457 std::array<amrex::Real,3> LowerCornerWithGalilean (
const amrex::Box& bx,
const amrex::Array<amrex::Real,3>& v_galilean,
int lev);
459 static amrex::IntVect RefRatio (
int lev);
461 static const amrex::iMultiFab* CurrentBufferMasks (
int lev);
462 static const amrex::iMultiFab* GatherBufferMasks (
int lev);
477 static void ComputeDivB (amrex::MultiFab& divB,
int const dcomp,
478 const std::array<const amrex::MultiFab* const, 3>& B,
479 const std::array<amrex::Real,3>&
dx);
481 static void ComputeDivB (amrex::MultiFab& divB,
int const dcomp,
482 const std::array<const amrex::MultiFab* const, 3>& B,
483 const std::array<amrex::Real,3>& dx,
int const ngrow);
485 void ComputeDivE(amrex::MultiFab& divE,
const int lev);
487 const amrex::IntVect
getngE()
const {
return guard_cells.ng_alloc_EB; }
488 const amrex::IntVect
getngF()
const {
return guard_cells.ng_alloc_F; }
489 const amrex::IntVect
getngExtra()
const {
return guard_cells.ng_Extra; }
494 void ComputeSpaceChargeField (
bool const reset_fields);
496 void computePhi (
const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
497 amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
498 std::array<amrex::Real, 3>
const beta = {{0,0,0}},
499 amrex::Real
const required_precision=1.e-11 )
const;
500 void computeE (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& E,
501 const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
502 std::array<amrex::Real, 3>
const beta = {{0,0,0}} )
const;
503 void computeB (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& B,
504 const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
505 std::array<amrex::Real, 3>
const beta = {{0,0,0}} )
const;
524 void InitializeExternalFieldsOnGridUsingParser (
525 amrex::MultiFab *mfx, amrex::MultiFab *mfy, amrex::MultiFab *mfz,
534 void ComputeCostsHeuristic (amrex::Vector<std::unique_ptr<amrex::LayoutData<amrex::Real> > >& costs);
563 void InitLevelData (
int lev, amrex::Real time);
566 virtual void ErrorEst (
int lev, amrex::TagBoxArray& tags, amrex::Real time,
int )
final;
570 virtual void PostProcessBaseGrids (amrex::BoxArray& ba0)
const final;
575 virtual void MakeNewLevelFromScratch (
int lev, amrex::Real time,
const amrex::BoxArray& ba,
576 const amrex::DistributionMapping& dm)
final;
582 const amrex::DistributionMapping& )
final 583 { amrex::Abort(
"MakeNewLevelFromCoarse: To be implemented"); }
588 virtual void RemakeLevel (
int lev, amrex::Real time,
const amrex::BoxArray& ba,
589 const amrex::DistributionMapping& dm)
final;
592 virtual void ClearLevel (
int lev)
final;
602 void EvolveEM(
int numsteps);
608 void FillBoundaryB_avg (
int lev,
PatchType patch_type, amrex::IntVect ng);
609 void FillBoundaryE_avg (
int lev,
PatchType patch_type, amrex::IntVect ng);
611 void OneStep_nosub (amrex::Real t);
612 void OneStep_sub1 (amrex::Real t);
614 void RestrictCurrentFromFineToCoarsePatch (
int lev);
615 void AddCurrentFromFineLevelandSumBoundary (
int lev);
616 void StoreCurrent (
int lev);
617 void RestoreCurrent (
int lev);
618 void ApplyFilterandSumBoundaryJ (
int lev,
PatchType patch_type);
619 void NodalSyncJ (
int lev,
PatchType patch_type);
621 void RestrictRhoFromFineToCoarsePatch (
int lev);
622 void ApplyFilterandSumBoundaryRho (
int lev,
PatchType patch_type,
int icomp,
int ncomp);
623 void AddRhoFromFineLevelandSumBoundary (
int lev,
int icomp,
int ncomp);
624 void NodalSyncRho (
int lev,
PatchType patch_type,
int icomp,
int ncomp);
633 void CurrentCorrection ();
642 void VayDeposition ();
644 void ReadParameters ();
648 void BackwardCompatibility ();
650 void InitFromScratch ();
652 void AllocLevelData (
int lev,
const amrex::BoxArray& new_grids,
653 const amrex::DistributionMapping& new_dmap);
655 void InitFromCheckpoint ();
663 void InitDiagnostics ();
665 void InitNCICorrector ();
667 std::unique_ptr<amrex::MultiFab> GetCellCenteredData();
669 void ExchangeWithPmlB (
int lev);
670 void ExchangeWithPmlE (
int lev);
671 void ExchangeWithPmlF (
int lev);
673 void BuildBufferMasks ();
674 void BuildBufferMasksInBox (
const amrex::Box tbx, amrex::IArrayBox &buffer_mask,
675 const amrex::IArrayBox &guard_mask,
const int ng );
677 return current_buffer_masks[lev].get();
680 return gather_buffer_masks[lev].get();
683 void AllocLevelMFs (
int lev,
const amrex::BoxArray& ba,
const amrex::DistributionMapping& dm,
684 const amrex::IntVect& ngE,
const amrex::IntVect& ngJ,
685 const amrex::IntVect& ngRho,
const amrex::IntVect& ngF,
686 const amrex::IntVect& ngextra,
const bool aux_is_nodal);
693 amrex::Vector<amrex::Real>
dt;
696 std::unique_ptr<MultiParticleContainer>
mypc;
700 std::unique_ptr<BackTransformedDiagnostic>
myBFD;
707 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_aux;
708 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_aux;
709 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_avg_aux;
710 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_avg_aux;
713 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
F_fp;
714 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
rho_fp;
715 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_fp;
716 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_fp;
717 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_fp;
718 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_avg_fp;
719 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_avg_fp;
721 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_store;
724 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
F_cp;
725 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
rho_cp;
726 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_cp;
727 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_cp;
728 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_cp;
729 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_avg_cp;
730 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_avg_cp;
733 amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_cax;
734 amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_cax;
739 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_buf;
746 int pml_has_particles = 0;
747 int do_pml_j_damping = 0;
748 int do_pml_in_domain = 0;
749 amrex::IntVect do_pml_Lo = amrex::IntVect::TheUnitVector();
750 amrex::IntVect do_pml_Hi = amrex::IntVect::TheUnitVector();
751 amrex::Vector<std::unique_ptr<PML> >
pml;
753 amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
754 amrex::Real current_injection_position = 0;
757 int warpx_do_continuous_injection = 0;
758 int num_injected_species = -1;
762 amrex::Real const_dt = 0.5e-11;
774 amrex::Vector<std::unique_ptr<amrex::LayoutData<amrex::Real> > >
costs;
776 int load_balance_with_sfc = 0;
781 amrex::Real load_balance_knapsack_factor = 1.24;
787 amrex::Real load_balance_efficiency_ratio_threshold = 1.1;
793 amrex::Real costs_heuristic_cells_wt = -1;
799 amrex::Real costs_heuristic_particles_wt = -1;
807 bool use_hybrid_QED = 0;
809 int max_step = std::numeric_limits<int>::max();
810 amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
818 bool plot_rho =
false;
820 amrex::VisMF::Header::Version plotfile_headerversion = amrex::VisMF::Header::Version_v1;
821 amrex::VisMF::Header::Version slice_plotfile_headerversion = amrex::VisMF::Header::Version_v1;
823 bool use_single_read =
true;
824 bool use_single_write =
true;
825 int mffile_nstreams = 4;
826 int field_io_nfiles = 1024;
827 int particle_io_nfiles = 1024;
832 bool is_synchronized =
true;
838 int slice_plot_int = -1;
841 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
F_slice;
842 amrex::Vector< std::unique_ptr<amrex::MultiFab> >
rho_slice;
843 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
current_slice;
844 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Efield_slice;
845 amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >
Bfield_slice;
847 bool fft_periodic_single_box =
false;
853 amrex::IntVect numprocs{0};
855 #ifdef WARPX_USE_PSATD 857 void EvolvePSATD (
int numsteps);
859 void PushPSATD (
int lev, amrex::Real dt);
861 int fftw_plan_measure = 1;
static std::string str_Bz_ext_grid_function
Definition: WarpX.H:115
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp
Definition: WarpX.H:715
static bool fft_do_time_averaging
Definition: WarpX.H:468
static int moving_window_dir
Definition: WarpX.H:466
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp
Definition: WarpX.H:717
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition: WarpX.H:269
amrex::Vector< amrex::Real > getdt() const
Definition: WarpX.H:431
amrex::Vector< int > getistep() const
Definition: WarpX.H:423
static bool do_back_transformed_diagnostics
Definition: WarpX.H:174
static int do_subcycling
Definition: WarpX.H:194
DtType
Definition: WarpXDtType.H:10
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition: WarpX.H:865
std::unique_ptr< ParserWrapper< 3 > > Bxfield_parser
Definition: WarpX.H:122
std::unique_ptr< ParserWrapper< 3 > > Ezfield_parser
Definition: WarpX.H:128
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_cp
Definition: WarpX.H:729
static bool refine_plasma
Definition: WarpX.H:189
amrex::RealVect fine_tag_hi
Definition: WarpX.H:830
static long particle_pusher_algo
Definition: WarpX.H:134
static int do_moving_window
Definition: WarpX.H:465
static bool do_back_transformed_particles
Definition: WarpX.H:179
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_fp
Definition: WarpX.H:719
static long load_balance_costs_update_algo
Definition: WarpX.H:136
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 long noy
Definition: WarpX.H:157
const amrex::MultiFab & getrho_fp(int lev)
Definition: WarpX.H:250
std::unique_ptr< ParserWrapper< 3 > > Eyfield_parser
Definition: WarpX.H:127
amrex::Vector< int > injected_plasma_species
Definition: WarpX.H:759
std::unique_ptr< SpectralSolver > spectral_solver_cp
Definition: PML.H:182
static WarpX * m_instance
Definition: WarpX.H:597
static amrex::Vector< int > boost_direction
Definition: WarpX.H:184
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_store
Definition: WarpX.H:721
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_aux
Definition: WarpX.H:710
amrex::Real gett_new(int lev) const
Definition: WarpX.H:429
static int num_slice_snapshots_lab
Definition: WarpX.H:471
int maxStep() const
Definition: WarpX.H:437
void ComputePMLFactors(amrex::Real dt)
Definition: PML.cpp:706
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_cp
Definition: WarpX.H:724
MultiParticleContainer & GetPartContainer()
Definition: WarpX.H:92
void sett_new(int lev, amrex::Real time)
Definition: WarpX.H:430
const amrex::MultiFab & getBfield_cp(int lev, int direction)
Definition: WarpX.H:244
const amrex::MultiFab & getEfield_fp(int lev, int direction)
Definition: WarpX.H:248
std::unique_ptr< MultiDiagnostics > multi_diags
Definition: WarpX.H:697
static int n_field_gather_buffer
Definition: WarpX.H:200
std::unique_ptr< MultiParticleContainer > mypc
Definition: WarpX.H:696
float cfl
Definition: yt3d_mpi.py:38
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_cp
Definition: WarpX.H:730
const amrex::MultiFab & getEfield(int lev, int direction)
Definition: WarpX.H:239
IntervalsParser override_sync_intervals
Definition: WarpX.H:802
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition: WarpX.H:736
int dx
Definition: compute_domain.py:35
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_cp
Definition: WarpX.H:725
amrex::MultiFab * get_pointer_rho_fp(int lev) const
Definition: WarpX.H:229
static amrex::Real moving_window_v
Definition: WarpX.H:467
static amrex::Real dt_slice_snapshots_lab
Definition: WarpX.H:472
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cp
Definition: WarpX.H:728
static amrex::LayoutData< amrex::Real > * getCosts(int lev)
Definition: WarpX.H:257
amrex::MultiFab * get_pointer_Efield_aux(int lev, int direction) const
Definition: WarpX.H:223
void FillBoundaryE()
Definition: PML.cpp:957
static amrex::Real dt_snapshots_lab
Definition: WarpX.H:177
bool getis_synchronized() const
Definition: WarpX.H:434
Definition: MultiReducedDiags.H:21
const amrex::IntVect get_ng_depos_J() const
Definition: WarpX.H:491
static int do_dive_cleaning
Definition: WarpX.H:153
amrex::MultiFab * get_pointer_Efield_cp(int lev, int direction) const
Definition: WarpX.H:232
Definition: MultiParticleContainer.H:53
bool DoPML() const
Definition: WarpX.H:252
static amrex::Real particle_slice_width_lab
Definition: WarpX.H:473
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_buf
Definition: WarpX.H:739
IntervalsParser load_balance_intervals
Definition: WarpX.H:771
amrex::RealBox slice_realbox
Definition: WarpX.H:839
amrex::Vector< std::unique_ptr< amrex::MultiFab > > charge_buf
Definition: WarpX.H:740
static std::string lab_data_directory
Definition: WarpX.H:175
amrex::MultiFab * get_pointer_Bfield_fp(int lev, int direction) const
Definition: WarpX.H:227
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition: WarpX.H:774
const amrex::MultiFab & getF_fp(int lev)
Definition: WarpX.H:251
static int em_solver_medium
Definition: WarpX.H:137
const amrex::MultiFab & getrho_cp(int lev)
Definition: WarpX.H:245
static std::string str_Ez_ext_grid_function
Definition: WarpX.H:119
amrex::Vector< int > istep
Definition: WarpX.H:688
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_aux
Definition: WarpX.H:707
amrex::MultiFab * get_pointer_rho_cp(int lev) const
Definition: WarpX.H:235
static int num_mirrors
Definition: WarpX.H:275
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition: WarpX.H:735
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_fp
Definition: WarpX.H:718
static int do_electrostatic
Definition: WarpX.H:464
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_aux
Definition: WarpX.H:709
static long charge_deposition_algo
Definition: WarpX.H:132
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition: WarpX.H:679
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_fp
Definition: WarpX.H:713
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_slice
Definition: WarpX.H:845
amrex::Vector< int > mirror_z_npoints
Definition: WarpX.H:278
void FillBoundaryF()
Definition: PML.cpp:1005
amrex::Vector< amrex::Real > gett_old() const
Definition: WarpX.H:426
amrex::Real getdt(int lev) const
Definition: WarpX.H:432
static IntervalsParser sort_intervals
Definition: WarpX.H:191
bool update_with_rho
Definition: WarpX.H:149
direction
Definition: AnyFFT.H:60
BilinearFilter bilinear_filter
Definition: WarpX.H:267
static int n_current_deposition_buffer
in number of cells from the edge (identical for each dimension)
Definition: WarpX.H:201
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_cp
Definition: WarpX.H:726
static bool use_fdtd_nci_corr
Definition: WarpX.H:164
static amrex::Real gamma_boost
Definition: WarpX.H:182
amrex::Vector< amrex::Real > t_new
Definition: WarpX.H:691
std::unique_ptr< ParserWrapper< 3 > > Byfield_parser
Definition: WarpX.H:123
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_slice
Definition: WarpX.H:844
int getnsubsteps(int lev) const
Definition: WarpX.H:422
static amrex::Vector< amrex::Real > E_external_grid
Definition: WarpX.H:105
const amrex::IntVect getngExtra() const
Definition: WarpX.H:489
static long ncomps
Definition: WarpX.H:162
std::array< const amrex::MultiFab *const, 3 > get_array_Efield_aux(const int lev) const
Definition: WarpX.H:215
static amrex::Real beta_boost
Definition: WarpX.H:183
amrex::Vector< amrex::Real > dt
Definition: WarpX.H:693
std::array< const amrex::MultiFab *const, 3 > get_array_Bfield_aux(const int lev) const
Definition: WarpX.H:207
amrex::Real stopTime() const
Definition: WarpX.H:438
static bool use_damp_fields_in_z_guard
Definition: WarpX.H:170
static bool do_back_transformed_fields
Definition: WarpX.H:178
static std::string E_ext_grid_s
Definition: WarpX.H:110
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition: WarpX.H:864
const amrex::IntVect get_ng_depos_rho() const
Definition: WarpX.H:492
static bool use_filter
Definition: WarpX.H:167
ii
Definition: check_interp_points_and_weights.py:145
Definition: BilinearFilter.H:14
amrex::Vector< std::unique_ptr< PML > > pml
Definition: WarpX.H:751
static amrex::Real zmax_plasma_to_compute_max_step
Definition: WarpX.H:185
const amrex::MultiFab & getBfield_fp(int lev, int direction)
Definition: WarpX.H:249
amrex::MultiFab * get_pointer_Bfield_cp(int lev, int direction) const
Definition: WarpX.H:233
amrex::MultiFab * get_pointer_current_fp(int lev, int direction) const
Definition: WarpX.H:228
const amrex::MultiFab & getcurrent(int lev, int direction)
Definition: WarpX.H:238
const amrex::MultiFab & getBfield(int lev, int direction)
Definition: WarpX.H:240
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition: WarpX.H:765
static amrex::Real quantum_xi_c2
Definition: WarpX.H:332
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cp
Definition: WarpX.H:727
const amrex::IntVect getngUpdateAux() const
Definition: WarpX.H:490
amrex::RealVect fine_tag_lo
Definition: WarpX.H:829
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cax
Definition: WarpX.H:733
static long nox
Definition: WarpX.H:156
void FillBoundaryB()
Definition: PML.cpp:981
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_slice
Definition: WarpX.H:843
const amrex::IntVect getngF() const
Definition: WarpX.H:488
static std::string str_Bx_ext_grid_function
Definition: WarpX.H:113
amrex::RealBox getSliceRealBox() const
Definition: WarpX.H:474
void setplot_rho(bool a_plot_rho)
Definition: WarpX.H:435
int getistep(int lev) const
Definition: WarpX.H:424
static bool use_kspace_filter
Definition: WarpX.H:168
static bool use_filter_compensation
Definition: WarpX.H:169
static long current_deposition_algo
Definition: WarpX.H:131
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition: WarpX.H:268
static bool do_device_synchronize_before_profile
Definition: WarpX.H:196
static int num_snapshots_lab
Definition: WarpX.H:176
amrex::Vector< int > getnsubsteps() const
Definition: WarpX.H:421
amrex::MultiFab * get_pointer_current_cp(int lev, int direction) const
Definition: WarpX.H:234
amrex::MultiFab * get_pointer_Efield_fp(int lev, int direction) const
Definition: WarpX.H:226
static int maxwell_solver_id
Definition: WarpX.H:135
std::unique_ptr< SpectralSolver > spectral_solver_fp
Definition: PML.H:181
static std::string str_Ex_ext_grid_function
Definition: WarpX.H:117
static bool serialize_ics
Definition: WarpX.H:171
amrex::Vector< amrex::Real > t_old
Definition: WarpX.H:692
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cax
Definition: WarpX.H:734
const amrex::IntVect getngE() const
Definition: WarpX.H:487
amrex::Vector< int > nsubsteps
Definition: WarpX.H:689
static long field_gathering_algo
Definition: WarpX.H:133
static long n_rz_azimuthal_modes
Definition: WarpX.H:161
static amrex::IntVect filter_npass_each_dir
Definition: WarpX.H:266
static bool galerkin_interpolation
Definition: WarpX.H:165
static std::string str_Ey_ext_grid_function
Definition: WarpX.H:118
amrex::IntVect slice_cr_ratio
Definition: WarpX.H:840
amrex::MultiFab * get_pointer_Bfield_aux(int lev, int direction) const
Definition: WarpX.H:224
static amrex::Vector< amrex::Real > B_external_grid
Definition: WarpX.H:106
amrex::Real getmoving_window_x() const
Definition: WarpX.H:433
static std::string B_ext_grid_s
Definition: WarpX.H:109
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition: WarpX.H:871
static std::string str_By_ext_grid_function
Definition: WarpX.H:114
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_aux
Definition: WarpX.H:708
IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition: WarpX.H:343
PatchType
Definition: WarpX.H:63
std::unique_ptr< ParserWrapper< 3 > > Bzfield_parser
Definition: WarpX.H:124
std::string restart_chkfile
Definition: WarpX.H:816
int slice_max_grid_size
Definition: WarpX.H:837
amrex::Vector< amrex::Real > mirror_z
Definition: WarpX.H:276
int Verbose() const
Definition: WarpX.H:85
static bool do_dynamic_scheduling
Definition: WarpX.H:188
static int macroscopic_solver_algo
Definition: WarpX.H:138
void PushPSATD()
Definition: PML.cpp:1076
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_slice
Definition: WarpX.H:841
static std::string authors
Author of an input file / simulation setup.
Definition: WarpX.H:102
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp
Definition: WarpX.H:716
virtual void MakeNewLevelFromCoarse(int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final
Definition: WarpX.H:581
static int do_nodal
in number of cells from the edge (identical for each dimension)
Definition: WarpX.H:204
static long noz
Definition: WarpX.H:158
static bool safe_guard_cells
Definition: WarpX.H:197
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_slice
Definition: WarpX.H:842
const amrex::MultiFab & getcurrent_fp(int lev, int direction)
Definition: WarpX.H:247
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition: WarpX.H:872
guardCellManager guard_cells
Definition: WarpX.H:834
amrex::MultiFab * get_pointer_F_cp(int lev) const
Definition: WarpX.H:236
amrex::Real gett_old(int lev) const
Definition: WarpX.H:427
amrex::Vector< amrex::Real > mirror_z_width
Definition: WarpX.H:277
std::unique_ptr< ParserWrapper< 3 > > Exfield_parser
Definition: WarpX.H:126
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:428
const amrex::MultiFab & getcurrent_cp(int lev, int direction)
Definition: WarpX.H:242
const amrex::MultiFab & getEfield_cp(int lev, int direction)
Definition: WarpX.H:243
void setistep(int lev, int ii)
Definition: WarpX.H:425
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition: WarpX.H:676
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_fp
Definition: WarpX.H:714
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition: GuardCellManager.H:16
Definition: WarpXParticleContainer.H:131
static amrex::IntVect sort_bin_size
Definition: WarpX.H:192
static int do_compute_max_step_from_zmax
Definition: WarpX.H:186
MultiReducedDiags * reduced_diags
object with all reduced diagnotics, similar to MultiParticleContainer for species.
Definition: WarpX.H:281
amrex::MultiFab * get_pointer_F_fp(int lev) const
Definition: WarpX.H:230
std::unique_ptr< BackTransformedDiagnostic > myBFD
Definition: WarpX.H:700
The HostDeviceParser struct is non-owning and is suitable for being value captured by device lamba...
Definition: WarpXParserWrapper.H:24