26 #ifdef WARPX_USE_PSATD 44 #include <AMReX_Config.H> 82 static WarpX& GetInstance ();
83 static void ResetInstance ();
89 static std::string PicsarVersion ();
95 void Evolve (
int numsteps = -1);
103 int num_shift,
int dir,
const int lev,
bool update_cost_flag,
104 amrex::Real external_field=0.0,
bool useparser =
false,
107 static void GotoNextLine (std::istream& is);
206 bool update_with_rho =
false;
335 std::array<const amrex::MultiFab* const, 3>
338 Bfield_aux[lev][0].get(),
339 Bfield_aux[lev][1].get(),
340 Bfield_aux[lev][2].get()
343 std::array<const amrex::MultiFab* const, 3>
346 Efield_aux[lev][0].get(),
347 Efield_aux[lev][1].get(),
348 Efield_aux[lev][2].get()
396 bool DoPML ()
const {
return do_pml;}
398 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD) 403 std::vector<bool> getPMLdirections()
const;
411 m_instance->load_balance_efficiency[lev] = efficiency;
422 return m_instance->load_balance_efficiency[lev];
434 amrex::Real time_of_last_gal_shift = 0;
448 void applyMirrors(amrex::Real time);
454 void PrintMainPICparameters ();
457 void WriteUsedInputsFile ()
const;
460 void PrintDtDxDyDz ();
467 void ComputeMaxStep ();
475 int MoveWindow (
const int step,
bool move_j);
482 void ShiftGalileanBoundary ();
483 void UpdatePlasmaInjectionPosition (amrex::Real
dt);
485 void EvolveE ( amrex::Real
dt);
486 void EvolveE (
int lev, amrex::Real
dt);
487 void EvolveB ( amrex::Real
dt,
DtType dt_type);
488 void EvolveB (
int lev, amrex::Real
dt,
DtType dt_type);
489 void EvolveF ( amrex::Real
dt,
DtType dt_type);
490 void EvolveF (
int lev, amrex::Real
dt,
DtType dt_type);
491 void EvolveG ( amrex::Real
dt,
DtType dt_type);
492 void EvolveG (
int lev, amrex::Real
dt,
DtType dt_type);
494 void EvolveE (
int lev,
PatchType patch_type, amrex::Real
dt);
498 void MacroscopicEvolveE ( amrex::Real
dt);
499 void MacroscopicEvolveE (
int lev, amrex::Real
dt);
500 void MacroscopicEvolveE (
int lev,
PatchType patch_type, amrex::Real
dt);
513 void Hybrid_QED_Push (
int lev, amrex::Real
dt);
521 void Hybrid_QED_Push (
int lev,
PatchType patch_type, amrex::Real
dt);
536 return load_balance_intervals;
546 void DampFieldsInGuards (
const int lev,
547 const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
548 const std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield);
557 void DampFieldsInGuards (
const int lev, std::unique_ptr<amrex::MultiFab>& mf);
569 void ApplyEfieldBoundary (
const int lev,
PatchType patch_type);
570 void ApplyBfieldBoundary (
const int lev,
PatchType patch_type,
DtType dt_type);
573 void DampPML (
const int lev);
574 void DampPML (
const int lev,
PatchType patch_type);
575 void DampPML_Cartesian (
const int lev,
PatchType patch_type);
578 void DampJPML (
int lev);
579 void DampJPML (
int lev,
PatchType patch_type);
582 bool isAnyBoundaryPML();
587 void NodalSyncPML ();
592 void NodalSyncPML (
int lev);
597 void NodalSyncPML (
int lev,
PatchType patch_type);
599 PML* GetPML (
int lev);
600 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD) 601 PML_RZ* GetPML_RZ (
int lev);
605 void doFieldIonization ();
609 void doFieldIonization (
int lev);
617 void doQEDEvents (
int lev);
620 void PushParticlesandDepose (
int lev, amrex::Real cur_time,
DtType a_dt_type=
DtType::Full,
bool skip_current=
false);
621 void PushParticlesandDepose ( amrex::Real cur_time,
bool skip_current=
false);
625 void UpdateAuxilaryData ();
626 void UpdateAuxilaryDataStagToNodal ();
627 void UpdateAuxilaryDataSameType ();
662 void SyncCurrentAndRho ();
676 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
677 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp);
687 amrex::Real
gett_old (
int lev)
const {
return t_old[lev];}
689 amrex::Real
gett_new (
int lev)
const {
return t_new[lev];}
690 void sett_new (
int lev, amrex::Real time) {t_new[lev] = time;}
692 amrex::Real
getdt (
int lev)
const {
return dt[lev];}
709 static std::array<amrex::Real,3> CellSize (
int lev);
720 static std::array<amrex::Real,3> LowerCorner (
const amrex::Box& bx,
const int lev,
const amrex::Real time_shift_delta);
729 static std::array<amrex::Real,3> UpperCorner (
const amrex::Box& bx,
const int lev,
const amrex::Real time_shift_delta);
753 bool const step_before_end = (step < end_moving_window_step) || (end_moving_window_step < 0);
754 bool const step_after_start = (step >= start_moving_window_step);
755 return do_moving_window && step_before_end && step_after_start;
769 const std::array<const amrex::MultiFab* const, 3>& B,
770 const std::array<amrex::Real,3>&
dx);
773 const std::array<const amrex::MultiFab* const, 3>& B,
795 void ComputeSpaceChargeField (
bool const reset_fields);
796 void AddBoundaryField ();
798 void AddSpaceChargeFieldLabFrame ();
801 std::array<amrex::Real, 3>
const beta = {{0,0,0}},
802 amrex::Real
const required_precision=amrex::Real(1.e-11),
803 amrex::Real absolute_tolerance=amrex::Real(0.0),
804 const int max_iters=200,
805 const int verbosity=2)
const;
807 void setPhiBC (
amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi )
const;
809 void computeE (
amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& E,
811 std::array<amrex::Real, 3>
const beta = {{0,0,0}} )
const;
812 void computeB (
amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& B,
814 std::array<amrex::Real, 3>
const beta = {{0,0,0}} )
const;
815 void computePhiTriDiagonal (
const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
816 amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi)
const;
838 void InitializeExternalFieldsOnGridUsingParser (
843 std::array< std::unique_ptr<amrex::MultiFab>, 3 >
const& edge_lengths,
844 std::array< std::unique_ptr<amrex::MultiFab>, 3 >
const& face_areas,
856 void InitializeEBGridData(
int lev);
865 void ApplyFilterandSumBoundaryRho (
int lev,
int glev,
amrex::MultiFab& rho,
int icomp,
int ncomp);
890 virtual void ErrorEst (
int lev,
amrex::TagBoxArray& tags, amrex::Real time,
int )
final;
919 void InitLevelData (
int lev, amrex::Real time);
928 virtual void MakeNewLevelFromScratch (
int lev, amrex::Real time,
const amrex::BoxArray& ba,
934 virtual void MakeNewLevelFromCoarse (
int , amrex::Real ,
const amrex::BoxArray& ,
940 virtual void RemakeLevel (
int lev, amrex::Real time,
const amrex::BoxArray& ba,
944 virtual void ClearLevel (
int lev)
final;
952 static void CheckSignals ();
954 void HandleSignals ();
959 void EvolveEM(
int numsteps);
969 void OneStep_nosub (amrex::Real t);
970 void OneStep_sub1 (amrex::Real t);
975 void OneStep_multiJ (
const amrex::Real t);
977 void RestrictCurrentFromFineToCoarsePatch (
978 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
979 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
981 void AddCurrentFromFineLevelandSumBoundary (
982 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
983 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
985 void StoreCurrent (
const int lev);
986 void RestoreCurrent (
const int lev);
988 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
992 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
995 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1000 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1004 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1005 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1009 void RestrictRhoFromFineToCoarsePatch (
1010 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1011 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1013 void ApplyFilterandSumBoundaryRho (
1014 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1015 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1020 void AddRhoFromFineLevelandSumBoundary (
1021 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1022 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1027 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1028 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1034 void ReadParameters ();
1038 void BackwardCompatibility ();
1040 void InitFromScratch ();
1046 GetRestartDMap (
const std::string& chkfile,
const amrex::BoxArray& ba,
int lev)
const;
1048 void InitFromCheckpoint ();
1049 void PostRestart ();
1056 void InitDiagnostics ();
1058 void InitNCICorrector ();
1064 void CheckGuardCells();
1075 void CheckKnownIssues();
1078 void PerformanceHints ();
1080 std::unique_ptr<amrex::MultiFab> GetCellCenteredData();
1082 void BuildBufferMasks ();
1086 return current_buffer_masks[lev].
get();
1089 return gather_buffer_masks[lev].
get();
1118 const int centering_nox,
1119 const int centering_noy,
1120 const int centering_noz);
1126 #ifdef WARPX_USE_PSATD 1127 # ifdef WARPX_DIM_RZ 1128 void AllocLevelSpectralSolverRZ (
amrex::Vector<std::unique_ptr<SpectralSolverRZ>>& spectral_solver,
1132 const std::array<amrex::Real,3>& dx);
1134 void AllocLevelSpectralSolver (
amrex::Vector<std::unique_ptr<SpectralSolver>>& spectral_solver,
1138 const std::array<amrex::Real,3>& dx,
1139 const bool pml_flag=
false);
1151 std::unique_ptr<MultiParticleContainer>
mypc;
1155 std::unique_ptr<BackTransformedDiagnostic>
myBFD;
1249 int do_silver_mueller = 0;
1252 int pml_has_particles = 0;
1253 int do_pml_j_damping = 0;
1254 int do_pml_in_domain = 0;
1261 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD) 1266 amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
1267 amrex::Real current_injection_position = 0;
1270 int warpx_do_continuous_injection = 0;
1271 int num_injected_species = -1;
1274 amrex::Real const_dt = amrex::Real(0.5e-11);
1287 int load_balance_with_sfc = 0;
1292 amrex::Real load_balance_knapsack_factor = amrex::Real(1.24);
1298 amrex::Real load_balance_efficiency_ratio_threshold = amrex::Real(1.1);
1306 amrex::Real costs_heuristic_cells_wt = amrex::Real(0);
1312 amrex::Real costs_heuristic_particles_wt = amrex::Real(0);
1320 bool use_hybrid_QED = 0;
1322 int max_step = std::numeric_limits<int>::max();
1323 amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
1325 int regrid_int = -1;
1327 amrex::Real
cfl = amrex::Real(0.999);
1334 bool use_single_read =
true;
1335 bool use_single_write =
true;
1336 int mffile_nstreams = 4;
1337 int field_io_nfiles = 1024;
1338 int particle_io_nfiles = 1024;
1343 bool is_synchronized =
true;
1346 const bool sync_nodal_points =
true;
1352 int slice_plot_int = -1;
1362 bool fft_periodic_single_box =
false;
1381 return *m_field_factory[lev];
1398 static void ComputeEdgeLengths (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& edge_lengths,
1404 static void ComputeFaceAreas (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& face_areas,
1410 static void ScaleEdges (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& edge_lengths,
1411 const std::array<amrex::Real,3>&
cell_size);
1415 static void ScaleAreas (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& face_areas,
1416 const std::array<amrex::Real,3>& cell_size);
1430 void ComputeDistanceToEB ();
1439 void ComputeFaceExtensions();
1443 void InitBorrowing();
1447 void ShrinkBorrowing();
1451 void ComputeOneWayExtensions();
1455 void ComputeEightWaysExtensions();
1464 void ApplyBCKCorrection(
const int idim);
1470 void PSATDSubtractCurrentPartialSumsAvg ();
1473 void ScrapeParticles ();
1477 #ifdef WARPX_USE_PSATD 1491 void PSATDForwardTransformEB (
1492 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_fp,
1493 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_fp,
1494 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_cp,
1495 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_cp);
1510 void PSATDBackwardTransformEB (
1511 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_fp,
1512 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_fp,
1513 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_cp,
1514 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_cp);
1528 void PSATDBackwardTransformEBavg (
1529 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_avg_fp,
1530 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_avg_fp,
1531 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_avg_cp,
1532 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_avg_cp);
1545 void PSATDForwardTransformJ (
1546 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1547 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1548 const bool apply_kspace_filter=
true);
1558 void PSATDBackwardTransformJ (
1559 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1560 const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp);
1573 void PSATDForwardTransformRho (
1574 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1575 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1576 const int icomp,
const int dcomp,
const bool apply_kspace_filter=
true);
1581 void PSATDMoveRhoNewToRhoOld ();
1586 void PSATDMoveJNewToJOld ();
1591 void PSATDForwardTransformF ();
1596 void PSATDBackwardTransformF ();
1601 void PSATDForwardTransformG ();
1606 void PSATDBackwardTransformG ();
1611 void PSATDCurrentCorrection ();
1616 void PSATDVayDeposition ();
1621 void PSATDPushSpectralFields ();
1628 void PSATDScaleAverageFields (
const amrex::Real scale_factor);
1633 void PSATDEraseAverageFields ();
1635 # ifdef WARPX_DIM_RZ 1645 # ifdef WARPX_DIM_RZ
const amrex::MultiFab & getG_cp(int lev)
Definition: WarpX.H:381
static std::string str_Bz_ext_grid_function
String storing parser function to initialize z-component of the magnetic field on the grid...
Definition: WarpX.H:127
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_y
Definition: WarpX.H:885
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp
Definition: WarpX.H:1170
static bool fft_do_time_averaging
Definition: WarpX.H:759
static int moving_window_dir
Definition: WarpX.H:757
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp
Definition: WarpX.H:1173
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition: WarpX.H:432
amrex::Vector< amrex::Real > getdt() const
Definition: WarpX.H:691
static short rho_in_time
Definition: WarpX.H:193
amrex::Vector< int > getistep() const
Definition: WarpX.H:683
static bool do_back_transformed_diagnostics
Definition: WarpX.H:278
amrex::FabFactory< amrex::FArrayBox > const & fieldFactory(int lev) const noexcept
Definition: WarpX.H:1380
DtType
Definition: WarpXDtType.H:10
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition: WarpX.H:1637
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_cp
Definition: WarpX.H:1234
static bool refine_plasma
Definition: WarpX.H:308
amrex::RealVect fine_tag_hi
Definition: WarpX.H:1341
static int do_moving_window
Definition: WarpX.H:744
bool do_pml_dive_cleaning
Definition: WarpX.H:1256
This class contains the macroscopic properties of the medium needed to evaluate macroscopic Maxwell e...
Definition: MacroscopicProperties.H:30
static bool do_back_transformed_particles
Definition: WarpX.H:290
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_fp
Definition: WarpX.H:1175
amrex::Vector< amrex::IntVect > do_pml_Hi
Definition: WarpX.H:1259
amrex::IntVect m_rho_nodal_flag
Definition: WarpX.H:333
static amrex::Vector< int > field_boundary_lo
Definition: WarpX.H:173
void PushPSATD(const int lev)
Definition: PML.cpp:1408
static amrex::Real self_fields_required_precision
Definition: WarpX.H:739
const amrex::MultiFab & getrho_fp(int lev)
Definition: WarpX.H:386
amrex::Vector< int > injected_plasma_species
Definition: WarpX.H:1272
std::unique_ptr< SpectralSolver > spectral_solver_cp
Definition: PML.H:242
static WarpX * m_instance
Definition: WarpX.H:949
static amrex::Vector< int > boost_direction
Direction of the Lorentz transform that defines the boosted frame of the simulation.
Definition: WarpX.H:297
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_store
Definition: WarpX.H:1222
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_info_face
Definition: WarpX.H:1188
amrex::Vector< std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > > m_borrowing
Definition: WarpX.H:1203
amrex::Real gett_new(int lev) const
Definition: WarpX.H:689
static int num_slice_snapshots_lab
Definition: WarpX.H:762
int maxStep() const
Definition: WarpX.H:698
void ComputePMLFactors(amrex::Real dt)
Definition: PML.cpp:1016
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_cp
Definition: WarpX.H:1228
MultiParticleContainer & GetPartContainer()
Definition: WarpX.H:97
void sett_new(int lev, amrex::Real time)
Definition: WarpX.H:690
const amrex::MultiFab & getBfield_cp(int lev, int direction)
Definition: WarpX.H:378
std::unique_ptr< amrex::Parser > Bxfield_parser
User-defined parser to initialize x-component of the magnetic field on the grid.
Definition: WarpX.H:136
Definition: ParticleBoundaryBuffer.H:19
const amrex::MultiFab & getG_fp(int lev)
Definition: WarpX.H:389
const amrex::MultiFab & getEfield_fp(int lev, int direction)
Definition: WarpX.H:384
std::unique_ptr< MultiDiagnostics > multi_diags
Definition: WarpX.H:1152
void setLoadBalanceEfficiency(const int lev, const amrex::Real efficiency)
Definition: WarpX.H:407
static int n_field_gather_buffer
Definition: WarpX.H:323
std::unique_ptr< MultiParticleContainer > mypc
Definition: WarpX.H:1151
float cfl
Definition: yt3d_mpi.py:41
static bool do_current_centering
Definition: WarpX.H:198
static int noy
Order of the particle shape factors (splines) along y.
Definition: WarpX.H:226
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_ext_face
Definition: WarpX.H:1195
amrex::MultiFab * get_pointer_edge_lengths(int lev, int direction) const
Definition: WarpX.H:370
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_cp
Definition: WarpX.H:1235
const amrex::MultiFab & getEfield(int lev, int direction)
Definition: WarpX.H:373
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_nodal
Definition: WarpX.H:1225
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition: WarpX.H:1241
static short current_deposition_algo
Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay) ...
Definition: WarpX.H:150
int dx
Definition: compute_domain.py:35
utils::parser::IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition: WarpX.H:534
std::unique_ptr< MultiReducedDiags > reduced_diags
object with all reduced diagnotics, similar to MultiParticleContainer for species.
Definition: WarpX.H:446
std::unique_ptr< amrex::Parser > Bzfield_parser
User-defined parser to initialize z-component of the magnetic field on the grid.
Definition: WarpX.H:140
bool current_correction
If true, a correction is applied to the current in Fourier space,.
Definition: WarpX.H:202
static short charge_deposition_algo
Integer that corresponds to the charge deposition algorithm (only standard deposition) ...
Definition: WarpX.H:152
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_cp
Definition: WarpX.H:1230
amrex::MultiFab * get_pointer_rho_fp(int lev) const
Definition: WarpX.H:358
static amrex::Real moving_window_v
Definition: WarpX.H:758
static amrex::Real dt_slice_snapshots_lab
Definition: WarpX.H:763
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cp
Definition: WarpX.H:1233
amrex::MultiFab * get_pointer_Efield_aux(int lev, int direction) const
Definition: WarpX.H:352
void FillBoundaryE()
Definition: PML.cpp:1267
static amrex::Real dt_snapshots_lab
Time interval in lab-frame between the back-transformed snapshots.
Definition: WarpX.H:284
bool getis_synchronized() const
Definition: WarpX.H:696
SpectralSolverRZ & get_spectral_solver_fp(int lev)
Definition: WarpX.H:1650
const amrex::IntVect get_ng_depos_J() const
Definition: WarpX.H:781
amrex::MultiFab * get_pointer_Efield_cp(int lev, int direction) const
Definition: WarpX.H:363
Definition: MultiParticleContainer.H:64
bool DoPML() const
Definition: WarpX.H:396
static amrex::Real particle_slice_width_lab
Definition: WarpX.H:764
static int current_centering_nox
Order of finite centering of currents (from nodal grid to staggered grid), along x.
Definition: WarpX.H:238
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_buf
Definition: WarpX.H:1244
amrex::RealBox slice_realbox
Definition: WarpX.H:1353
amrex::Vector< std::unique_ptr< amrex::MultiFab > > charge_buf
Definition: WarpX.H:1245
static std::string lab_data_directory
Name of the back-transformed diagnostics output directory.
Definition: WarpX.H:280
static bool do_nodal
If true, all fields are evaluated on a nodal grid and all MultiFabs have a nodal index type...
Definition: WarpX.H:330
int dt
Definition: Stencil.py:468
amrex::MultiFab * get_pointer_Bfield_fp(int lev, int direction) const
Definition: WarpX.H:356
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition: WarpX.H:1285
const amrex::MultiFab & getF_fp(int lev)
Definition: WarpX.H:388
static int em_solver_medium
Integer that corresponds to electromagnetic Maxwell solver (vaccum - 0, macroscopic - 1) ...
Definition: WarpX.H:164
const amrex::MultiFab & getrho_cp(int lev)
Definition: WarpX.H:379
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_area_mod
Definition: WarpX.H:1199
static bool do_device_synchronize
Definition: WarpX.H:317
static std::string str_Ez_ext_grid_function
String storing parser function to initialize z-component of the electric field on the grid...
Definition: WarpX.H:133
amrex::Vector< int > istep
Definition: WarpX.H:1143
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_aux
Definition: WarpX.H:1162
amrex::MultiFab * get_pointer_rho_cp(int lev) const
Definition: WarpX.H:366
std::unique_ptr< amrex::Parser > Byfield_parser
User-defined parser to initialize y-component of the magnetic field on the grid.
Definition: WarpX.H:138
static int num_mirrors
Definition: WarpX.H:440
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition: WarpX.H:1240
static amrex::Vector< ParticleBoundaryType > particle_boundary_hi
Definition: WarpX.H:188
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_fp
Definition: WarpX.H:1174
static int do_electrostatic
Definition: WarpX.H:736
Definition: ElectrostaticSolver.H:35
amrex::MultiFab * get_pointer_face_areas(int lev, int direction) const
Definition: WarpX.H:371
static short maxwell_solver_id
Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT)
Definition: WarpX.H:158
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition: WarpX.H:1088
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_fp
Definition: WarpX.H:1166
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_slice
Definition: WarpX.H:1360
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_vay
Definition: WarpX.H:1171
amrex::Vector< int > mirror_z_npoints
Definition: WarpX.H:443
void FillBoundaryF()
Definition: PML.cpp:1315
amrex::Vector< amrex::Real > gett_old() const
Definition: WarpX.H:686
amrex::Real getdt(int lev) const
Definition: WarpX.H:692
amrex::Real getLoadBalanceEfficiency(const int lev)
Definition: WarpX.H:418
static int do_multi_J_n_depositions
Definition: WarpX.H:315
direction
Definition: AnyFFT.H:74
BilinearFilter bilinear_filter
Definition: WarpX.H:430
static int n_current_deposition_buffer
Definition: WarpX.H:327
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_cp
Definition: WarpX.H:1231
amrex::Vector< std::unique_ptr< amrex::MultiFab > > m_distance_to_eb
Definition: WarpX.H:1219
static bool use_fdtd_nci_corr
Definition: WarpX.H:254
static int start_moving_window_step
Definition: WarpX.H:745
const FArrayBox & get(const MFIter &mfi) const noexcept
static int moving_window_active(int const step)
Definition: WarpX.H:752
static amrex::Real gamma_boost
Lorentz factor of the boosted frame in which a boosted-frame simulation is run.
Definition: WarpX.H:293
cell_size
Definition: compute_domain.py:37
amrex::Vector< amrex::Real > t_new
Definition: WarpX.H:1146
void computePhi(amrex::Vector< amrex::MultiFab *> const &rho, amrex::Vector< amrex::MultiFab *> &phi, std::array< amrex::Real, 3 > const beta, amrex::Real const relative_tolerance, amrex::Real absolute_tolerance, int const max_iters, int const verbosity, amrex::Vector< amrex::Geometry > const geom, amrex::Vector< amrex::DistributionMapping > const dmap, amrex::Vector< amrex::BoxArray > const grids, T_BoundaryHandler const boundary_handler, bool const do_single_precision_comms=false, std::optional< amrex::Vector< amrex::IntVect > > rel_ref_ratio=std::nullopt, [[maybe_unused]] T_PostPhiCalculationFunctor post_phi_calculation=std::nullopt, [[maybe_unused]] std::optional< amrex::Real const > current_time=std::nullopt, [[maybe_unused]] std::optional< amrex::Vector< T_FArrayBoxFactory const *> > eb_farray_box_factory=std::nullopt)
Definition: PoissonSolver.H:133
amrex::MultiFab * get_pointer_phi_fp(int lev) const
Definition: WarpX.H:361
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_slice
Definition: WarpX.H:1356
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_slice
Definition: WarpX.H:1359
static utils::parser::IntervalsParser sort_intervals
Definition: WarpX.H:310
int getnsubsteps(int lev) const
Definition: WarpX.H:682
utils::parser::IntervalsParser load_balance_intervals
Definition: WarpX.H:1282
static amrex::Vector< amrex::Real > E_external_grid
Initial electric field on the grid.
Definition: WarpX.H:113
amrex::Vector< amrex::IntVect > do_pml_Lo
Definition: WarpX.H:1258
void FillBoundaryG()
Definition: PML.cpp:1337
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_cp
Definition: WarpX.H:1229
std::array< const amrex::MultiFab *const, 3 > get_array_Efield_aux(const int lev) const
Definition: WarpX.H:344
static amrex::Real beta_boost
Beta value corresponding to the Lorentz factor of the boosted frame of the simulation.
Definition: WarpX.H:295
static bool do_dive_cleaning
Definition: WarpX.H:219
amrex::Vector< amrex::Real > dt
Definition: WarpX.H:1148
std::unique_ptr< amrex::Parser > Exfield_parser
User-defined parser to initialize x-component of the electric field on the grid.
Definition: WarpX.H:142
static bool do_multi_J
Definition: WarpX.H:314
std::array< const amrex::MultiFab *const, 3 > get_array_Bfield_aux(const int lev) const
Definition: WarpX.H:336
amrex::MultiFab * get_pointer_G_fp(int lev) const
Definition: WarpX.H:360
static int field_centering_noz
Order of finite centering of fields (from staggered grid to nodal grid), along z. ...
Definition: WarpX.H:235
amrex::Real stopTime() const
Definition: WarpX.H:699
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:101
static bool do_back_transformed_fields
Definition: WarpX.H:287
const amrex::MultiFab & getBfield_avg_cp(int lev, int direction)
Definition: WarpX.H:394
static std::string E_ext_grid_s
Initialization type for external electric field on the grid.
Definition: WarpX.H:120
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition: WarpX.H:1636
const amrex::IntVect get_ng_depos_rho() const
Definition: WarpX.H:782
static bool use_filter
If true, a bilinear filter is used to smooth charge and currents.
Definition: WarpX.H:267
int getdo_moving_window() const
Definition: WarpX.H:693
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_y
Definition: WarpX.H:880
amrex::Vector< amrex::Real > load_balance_efficiency
Definition: WarpX.H:1300
ii
Definition: check_interp_points_and_weights.py:147
Definition: BilinearFilter.H:16
amrex::Vector< std::unique_ptr< PML > > pml
Definition: WarpX.H:1260
static amrex::Real zmax_plasma_to_compute_max_step
Definition: WarpX.H:301
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_x
Definition: WarpX.H:879
amrex::Vector< std::unique_ptr< amrex::MultiFab > > phi_fp
Definition: WarpX.H:1169
const amrex::MultiFab & getBfield_fp(int lev, int direction)
Definition: WarpX.H:385
amrex::MultiFab * get_pointer_Bfield_cp(int lev, int direction) const
Definition: WarpX.H:364
amrex::MultiFab * get_pointer_G_cp(int lev) const
Definition: WarpX.H:368
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_edge_lengths
EB: Lengths of the mesh edges.
Definition: WarpX.H:1178
amrex::MultiFab * get_pointer_current_fp(int lev, int direction) const
Definition: WarpX.H:357
const amrex::MultiFab & getEfield_avg_cp(int lev, int direction)
Definition: WarpX.H:393
static int self_fields_verbosity
Definition: WarpX.H:742
static int field_centering_noy
Order of finite centering of fields (from staggered grid to nodal grid), along y. ...
Definition: WarpX.H:233
const amrex::MultiFab & getBfield(int lev, int direction)
Definition: WarpX.H:374
const amrex::IntVect get_numprocs() const
Definition: WarpX.H:792
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition: WarpX.H:1277
static amrex::Real quantum_xi_c2
Definition: WarpX.H:523
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cp
Definition: WarpX.H:1232
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_face_areas
EB: Areas of the mesh faces.
Definition: WarpX.H:1180
const amrex::IntVect getngUpdateAux() const
Definition: WarpX.H:780
amrex::RealVect fine_tag_lo
Definition: WarpX.H:1340
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cax
Definition: WarpX.H:1238
static int n_rz_azimuthal_modes
Number of modes for the RZ multi-mode version.
Definition: WarpX.H:245
static short field_gathering_algo
Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving) ...
Definition: WarpX.H:154
void FillBoundaryB()
Definition: PML.cpp:1291
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_slice
Definition: WarpX.H:1358
ParticleBoundaryBuffer & GetParticleBoundaryBuffer()
Definition: WarpX.H:100
const amrex::IntVect getngF() const
Definition: WarpX.H:779
static bool do_compute_max_step_from_zmax
Definition: WarpX.H:305
static std::string str_Bx_ext_grid_function
String storing parser function to initialize x-component of the magnetic field on the grid...
Definition: WarpX.H:123
amrex::RealBox getSliceRealBox() const
Definition: WarpX.H:765
std::unique_ptr< ParticleBoundaryBuffer > m_particle_boundary_buffer
particle buffer for scraped particles on the boundaries
Definition: WarpX.H:1371
const amrex::MultiFab & getEfield_avg_fp(int lev, int direction)
Definition: WarpX.H:391
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_z
Definition: WarpX.H:886
static int ncomps
Definition: WarpX.H:250
int getistep(int lev) const
Definition: WarpX.H:684
bool do_pml_divb_cleaning
Definition: WarpX.H:1257
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_x
Definition: WarpX.H:884
std::unique_ptr< amrex::Parser > Eyfield_parser
User-defined parser to initialize y-component of the electric field on the grid.
Definition: WarpX.H:144
static bool use_kspace_filter
If true, the bilinear filtering of charge and currents is done in Fourier space.
Definition: WarpX.H:269
static bool use_filter_compensation
If true, a compensation step is added to the bilinear filtering of charge and currents.
Definition: WarpX.H:271
static bool do_divb_cleaning
Solve additional Maxwell equation for G in order to control errors in magnetic Gauss' law...
Definition: WarpX.H:221
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition: WarpX.H:431
static int num_snapshots_lab
Number of back-tranformed snapshots in the lab-frame.
Definition: WarpX.H:282
amrex::Vector< int > getnsubsteps() const
Definition: WarpX.H:681
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_z
Definition: WarpX.H:881
const amrex::MultiFab & getF_cp(int lev)
Definition: WarpX.H:380
const amrex::IntVect get_ng_fieldgather() const
Definition: WarpX.H:783
static short load_balance_costs_update_algo
Definition: WarpX.H:162
static bool do_single_precision_comms
perform field communications in single precision
Definition: WarpX.H:209
amrex::MultiFab * get_pointer_current_cp(int lev, int direction) const
Definition: WarpX.H:365
static bool do_subcycling
Definition: WarpX.H:313
amrex::MultiFab * get_pointer_Efield_fp(int lev, int direction) const
Definition: WarpX.H:355
static amrex::IntVect m_fill_guards_fields
Whether to fill guard cells when computing inverse FFTs of fields.
Definition: WarpX.H:212
const amrex::MultiFab & getBfield_avg_fp(int lev, int direction)
Definition: WarpX.H:392
static amrex::Real self_fields_absolute_tolerance
Definition: WarpX.H:740
std::unique_ptr< SpectralSolver > spectral_solver_fp
Definition: PML.H:241
static std::string str_Ex_ext_grid_function
String storing parser function to initialize x-component of the electric field on the grid...
Definition: WarpX.H:129
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > ECTRhofield
Definition: WarpX.H:1212
amrex::Vector< amrex::Real > t_old
Definition: WarpX.H:1147
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cax
Definition: WarpX.H:1239
amrex::Vector< std::unique_ptr< PML_RZ > > pml_rz
Definition: WarpX.H:1262
static int current_centering_noy
Order of finite centering of currents (from nodal grid to staggered grid), along y.
Definition: WarpX.H:240
amrex::Vector< int > nsubsteps
Definition: WarpX.H:1144
static int end_moving_window_step
Definition: WarpX.H:746
static amrex::IntVect filter_npass_each_dir
Definition: WarpX.H:429
static bool galerkin_interpolation
Definition: WarpX.H:264
static std::string str_Ey_ext_grid_function
String storing parser function to initialize y-component of the electric field on the grid...
Definition: WarpX.H:131
static int field_centering_nox
Order of finite centering of fields (from staggered grid to nodal grid), along x. ...
Definition: WarpX.H:231
amrex::IntVect slice_cr_ratio
Definition: WarpX.H:1354
amrex::Real getcurrent_injection_position() const
Definition: WarpX.H:695
amrex::MultiFab * get_pointer_Bfield_aux(int lev, int direction) const
Definition: WarpX.H:353
static int current_centering_noz
Order of finite centering of currents (from nodal grid to staggered grid), along z.
Definition: WarpX.H:242
static int nox
Order of the particle shape factors (splines) along x.
Definition: WarpX.H:224
static amrex::Vector< amrex::Real > B_external_grid
Initial magnetic field on the grid.
Definition: WarpX.H:115
amrex::Real getmoving_window_x() const
Definition: WarpX.H:694
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Venl
Definition: WarpX.H:1216
const amrex::MultiFab & getphi_fp(int lev)
Definition: WarpX.H:387
static bool serialize_initial_conditions
If true, the initial conditions from random number generators are serialized (useful for reproducible...
Definition: WarpX.H:274
MacroscopicProperties & GetMacroscopicProperties()
Definition: WarpX.H:98
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_fp
Definition: WarpX.H:1167
static std::string B_ext_grid_s
Initialization type for external magnetic field on the grid.
Definition: WarpX.H:118
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition: WarpX.H:1654
static std::string str_By_ext_grid_function
String storing parser function to initialize y-component of the magnetic field on the grid...
Definition: WarpX.H:125
static amrex::Vector< ParticleBoundaryType > particle_boundary_lo
Definition: WarpX.H:183
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_aux
Definition: WarpX.H:1163
PatchType
Definition: WarpX.H:69
std::string restart_chkfile
Definition: WarpX.H:1329
int slice_max_grid_size
Definition: WarpX.H:1351
static amrex::IntVect m_fill_guards_current
Whether to fill guard cells when computing inverse FFTs of currents.
Definition: WarpX.H:215
amrex::Vector< amrex::Real > mirror_z
Definition: WarpX.H:441
int Verbose() const
Definition: WarpX.H:91
static bool do_dynamic_scheduling
Definition: WarpX.H:307
static int macroscopic_solver_algo
Definition: WarpX.H:168
utils::parser::IntervalsParser override_sync_intervals
Definition: WarpX.H:1315
ElectrostaticSolver::PoissonBoundaryHandler m_poisson_boundary_handler
Definition: WarpX.H:794
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_slice
Definition: WarpX.H:1355
static std::string authors
Author of an input file / simulation setup.
Definition: WarpX.H:110
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp
Definition: WarpX.H:1172
static amrex::Vector< int > field_boundary_hi
Definition: WarpX.H:178
string field
Definition: video_yt.py:31
static bool safe_guard_cells
Definition: WarpX.H:318
Definition: SpectralSolverRZ.H:21
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_slice
Definition: WarpX.H:1357
const amrex::IntVect getngEB() const
Definition: WarpX.H:778
const PML_RZ * getPMLRZ()
Definition: WarpX.H:399
static short particle_pusher_algo
Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary) ...
Definition: WarpX.H:156
const amrex::MultiFab & getcurrent_fp(int lev, int direction)
Definition: WarpX.H:383
static int self_fields_max_iters
Definition: WarpX.H:741
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition: WarpX.H:1655
amrex::Vector< std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > > m_field_factory
Definition: WarpX.H:1378
amrex::Real v_particle_pml
Definition: WarpX.H:1264
guardCellManager guard_cells
Definition: WarpX.H:1348
amrex::MultiFab * get_pointer_F_cp(int lev) const
Definition: WarpX.H:367
amrex::Real gett_old(int lev) const
Definition: WarpX.H:687
amrex::Vector< amrex::Real > mirror_z_width
Definition: WarpX.H:442
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:688
std::unique_ptr< amrex::Parser > Ezfield_parser
User-defined parser to initialize z-component of the electric field on the grid.
Definition: WarpX.H:146
static int noz
Order of the particle shape factors (splines) along z.
Definition: WarpX.H:228
const amrex::MultiFab & getcurrent_cp(int lev, int direction)
Definition: WarpX.H:376
const amrex::MultiFab & getEfield_cp(int lev, int direction)
Definition: WarpX.H:377
void setistep(int lev, int ii)
Definition: WarpX.H:685
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition: WarpX.H:1085
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_fp
Definition: WarpX.H:1168
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition: GuardCellManager.H:20
Definition: WarpXParticleContainer.H:101
static amrex::IntVect sort_bin_size
Definition: WarpX.H:311
static int do_similar_dm_pml
Definition: WarpX.H:1255
amrex::MultiFab * get_pointer_F_fp(int lev) const
Definition: WarpX.H:359
std::unique_ptr< BackTransformedDiagnostic > myBFD
Definition: WarpX.H:1155
static short J_in_time
Definition: WarpX.H:192
Top-level class for the electromagnetic spectral solver.
Definition: SpectralSolver.H:32