50#include "Utils/export.H"
58#include <AMReX_Config.H>
126 [[nodiscard]]
int GetPECInsulator_IsESet (
int bdry_dir,
127 int bdry_side )
const;
131 void Evolve (
int numsteps = -1);
371 std::unique_ptr<amrex::iMultiFab>& mf,
377 const std::string& name,
378 std::optional<const int> initial_value = {});
396 [[nodiscard]] std::vector<bool> getPMLdirections()
const;
400 void setLoadBalanceEfficiency (
int lev,
amrex::Real efficiency);
553 void DampFieldsInGuards (
int lev,
566#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
596#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
609 void ApplyElectronPressureBoundary (
int lev,
PatchType patch_type);
612 void DampPML (
int lev);
613 void DampPML (
int lev,
PatchType patch_type);
614 void DampPML_Cartesian (
int lev,
PatchType patch_type);
617 void DampJPML (
int lev);
618 void DampJPML (
int lev,
PatchType patch_type);
623 static bool isAnyParticleBoundaryThermal();
625 PML* GetPML (
int lev);
626#if (defined WARPX_DIM_RZ) && (defined WARPX_USE_FFT)
627 PML_RZ* GetPML_RZ (
int lev);
631 void doFieldIonization ();
643 void PushParticlesandDeposit (
amrex::Real cur_time,
bool skip_deposition=
false,
650 void UpdateAuxilaryData ();
651 void UpdateAuxilaryDataStagToNodal ();
652 void UpdateAuxilaryDataSameType ();
655 void FillBoundaryB (
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
656 void FillBoundaryE (
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
660 void FillBoundaryF (
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
661 void FillBoundaryG (
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
663 void FillBoundaryE (
int lev,
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
664 void FillBoundaryB (
int lev,
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
668 void FillBoundaryF (
int lev,
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
669 void FillBoundaryG (
int lev,
amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
678 void SyncCurrentAndRho ();
690 void SyncCurrent (
const std::string& current_fp_string);
720 static std::array<amrex::Real,3> CellSize (
int lev);
771 const std::array<amrex::Real,3>& dx);
799 void ComputeSpaceChargeField (
bool reset_fields);
837 const std::variant<warpx::fields::FieldType, std::string>& field,
842 amrex::Vector<std::array< std::unique_ptr<amrex::iMultiFab>,3 > >
const& eb_update_field,
843 bool use_eb_flags =
true);
857 const std::string& F_name,
const std::string& F_component,
int dest_comp = 0);
918 void ComputeDistanceToEB ();
923 void ComputeFaceExtensions();
927 void ComputeOneWayExtensions();
931 void ComputeEightWaysExtensions();
1141 void AllocLevelSpectralSolverRZ (
amrex::Vector<std::unique_ptr<SpectralSolverRZ>>& spectral_solver,
1145 const std::array<amrex::Real,3>& dx);
1147 void AllocLevelSpectralSolver (
amrex::Vector<std::unique_ptr<SpectralSolver>>& spectral_solver,
1151 const std::array<amrex::Real,3>& dx,
1152 bool pml_flag=
false);
1170 std::unique_ptr<MultiParticleContainer>
mypc;
1185 std::unique_ptr<MultiFluidContainer>
myfl;
1257#if (defined WARPX_DIM_RZ) && (defined WARPX_USE_FFT)
1396#if defined(AMREX_USE_CUDA)
1499 std::string
const & J_fp_string,
1500 std::string
const & J_cp_string,
1501 bool apply_kspace_filter=
true);
1510 std::string
const & J_fp_string,
1511 std::string
const & J_cp_string);
1525 std::string
const & charge_fp_string,
1526 std::string
const & charge_cp_string,
1527 int icomp,
int dcomp,
bool apply_kspace_filter=
true);
#define AMREX_D_DECL(a, b, c)
@ WarpX
Definition FilterFunctors.H:25
EvolveScheme
struct to select the overall evolve scheme
Definition WarpXAlgorithmSelection.H:37
@ Default
Definition WarpXAlgorithmSelection.H:37
@ Default
Definition WarpXAlgorithmSelection.H:120
@ Default
Definition WarpXAlgorithmSelection.H:106
@ Default
Definition WarpXAlgorithmSelection.H:58
@ Default
Definition WarpXAlgorithmSelection.H:66
@ Default
Definition WarpXAlgorithmSelection.H:90
@ Default
Definition WarpXAlgorithmSelection.H:86
@ Default
Definition WarpXAlgorithmSelection.H:79
MacroscopicSolverAlgo
struct to select algorithm for macroscopic Maxwell solver LaxWendroff (semi-implicit) represents sigm...
Definition WarpXAlgorithmSelection.H:48
@ Default
Definition WarpXAlgorithmSelection.H:48
MediumForEM
struct to determine the computational medium, i.e., vacuum or material/macroscopic default is vacuum.
Definition WarpXAlgorithmSelection.H:27
@ Default
Definition WarpXAlgorithmSelection.H:27
@ Default
Definition WarpXAlgorithmSelection.H:72
PositionPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:180
@ Full
Definition WarpXAlgorithmSelection.H:180
PSATDSolutionType
Definition WarpXAlgorithmSelection.H:100
@ Default
Definition WarpXAlgorithmSelection.H:100
@ Default
Definition WarpXAlgorithmSelection.H:95
MomentumPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:189
@ Full
Definition WarpXAlgorithmSelection.H:189
@ Default
Definition WarpXAlgorithmSelection.H:112
SubcyclingHalf
Subcycling half selector.
Definition WarpXAlgorithmSelection.H:166
@ None
Definition WarpXAlgorithmSelection.H:166
Definition AcceleratorLattice.H:21
Definition BilinearFilter.H:17
Base class for Electrostatic Solver.
Definition ElectrostaticSolver.H:25
Top-level class for the electromagnetic finite-difference solver.
Definition FiniteDifferenceSolver.H:40
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid...
Definition HybridPICModel.H:41
Definition MagnetostaticSolver.H:23
This class contains a vector of all diagnostics in the simulation.
Definition MultiDiagnostics.H:19
Definition MultiFluidContainer.H:36
Definition MultiParticleContainer.H:69
Definition ParticleBoundaryBuffer.H:23
Definition ParticleThermalizer.H:18
std::unique_ptr< ParticleBoundaryBuffer > m_particle_boundary_buffer
particle buffer for scraped particles on the boundaries
Definition WarpX.H:1413
void PSATDMoveRhoNewToRhoOld()
Copy rho_new to rho_old in spectral space (when rho is linear in time)
Definition WarpXPushFieldsEM.cpp:646
static auto field_gathering_algo
Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving)
Definition WarpX.H:187
static int field_centering_nox
Order of finite centering of fields (from staggered grid to nodal grid), along x.
Definition WarpX.H:276
static auto particle_pusher_algo
Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary)
Definition WarpX.H:189
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > m_eb_reduce_particle_shape
Definition WarpX.H:1217
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition WarpX.H:1307
void LoadExternalFields(int lev)
Load field values from a user-specified openPMD file, for the fields Ex, Ey, Ez, Bx,...
int maxlevel_extEMfield_init
Definition WarpX.H:179
std::unique_ptr< PEC_Insulator > pec_insulator_boundary
Definition WarpX.H:1263
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_y
Definition WarpX.H:889
static int moving_window_dir
Definition WarpX.H:764
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_x
Definition WarpX.H:893
amrex::Real m_quantum_xi_c2
Definition WarpX.H:517
void BuildBufferMasks()
Definition WarpX.cpp:3451
void PSATDMoveJNewToJMid()
Copy J_new to J_mid in spectral space (when J is quadratic in time)
Definition WarpXPushFieldsEM.cpp:698
void SaveParticlesAtImplicitStepStart()
Definition WarpXImplicitOps.cpp:131
HybridPICModel * get_pointer_HybridPICModel() const
Definition WarpX.H:161
static auto poisson_solver_id
Definition WarpX.H:749
void PushPSATD(amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:771
bool use_hybrid_QED
Definition WarpX.H:1343
static bool do_dive_cleaning
Definition WarpX.H:261
bool DoFluidSpecies() const
Definition WarpX.H:393
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition WarpX.H:1293
bool DoPML() const
Definition WarpX.H:392
void ProjectionCleanDivB()
Definition ProjectionDivCleaner.cpp:397
static constexpr bool sync_nodal_points
Definition WarpX.H:1378
int pml_delta
Definition WarpX.H:1247
amrex::Real magnetostatic_solver_required_precision
Definition WarpX.H:803
amrex::Vector< std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > > m_field_factory
Definition WarpX.H:1423
bool getis_synchronized() const
Definition WarpX.H:713
void PSATDBackwardTransformJ(std::string const &J_fp_string, std::string const &J_cp_string)
Backward FFT of J on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:545
int do_pml_j_damping
Definition WarpX.H:1249
EvolveScheme evolve_scheme
Integer that corresponds to the evolve scheme (explicit, semi_implicit_em, theta_implicit_em)
Definition WarpX.H:193
int noy_fft
Definition WarpX.H:1390
amrex::Vector< amrex::Real > m_v_galilean
Definition WarpX.H:410
void ResetProbDomain(const amrex::RealBox &rb)
Definition WarpXMovingWindow.cpp:760
static amrex::Array< ParticleBoundaryType, 3 > particle_boundary_hi
Definition WarpX.H:218
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition WarpX.H:1241
void updateStopTime(const amrex::Real new_stop_time)
Definition WarpX.H:718
void RestrictCurrentFromFineToCoarsePatch(const ablastr::fields::MultiLevelVectorField &J_fp, const ablastr::fields::MultiLevelVectorField &J_cp, int lev)
Fills the values of the current on the coarse patch by averaging the values of the current of the fin...
Definition WarpXComm.cpp:1457
static amrex::Real zmin_domain_boost_step_0
Definition WarpX.H:323
ParticleBoundaryBuffer & GetParticleBoundaryBuffer()
Definition WarpX.H:163
void PSATDBackwardTransformEBavg(ablastr::fields::MultiLevelVectorField const &E_avg_fp, ablastr::fields::MultiLevelVectorField const &B_avg_fp, ablastr::fields::MultiLevelVectorField const &E_avg_cp, ablastr::fields::MultiLevelVectorField const &B_avg_cp)
Backward FFT of averaged E,B on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:349
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & GetEBUpdateEFlag()
Definition WarpX.H:164
static bool sort_particles_for_deposition
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
Definition WarpX.H:335
void SyncMassMatricesPC()
Definition WarpXComm.cpp:1347
static int n_field_gather_buffer
Definition WarpX.H:342
amrex::Vector< amrex::Real > t_new
Definition WarpX.H:1162
static bool do_single_precision_comms
perform field communications in single precision
Definition WarpX.H:239
amrex::IntVect slice_cr_ratio
Definition WarpX.H:1386
int field_io_nfiles
Definition WarpX.H:1367
amrex::Vector< int > getnsubsteps() const
Definition WarpX.H:699
guardCellManager guard_cells
Definition WarpX.H:1380
int magnetostatic_solver_verbosity
Definition WarpX.H:806
static void ComputeDivB(amrex::MultiFab &divB, int dcomp, ablastr::fields::VectorField const &B, const std::array< amrex::Real, 3 > &dx)
Definition WarpX.cpp:3264
void UpdateDtFromParticleSpeeds()
Definition WarpXComputeDt.cpp:115
static bool do_shared_mem_charge_deposition
used shared memory algorithm for charge deposition
Definition WarpX.H:242
void ComputeMagnetostaticField()
Definition MagnetostaticSolver.cpp:62
amrex::Real stop_time
Definition WarpX.H:1346
void EvolveG(amrex::Real dt)
Definition WarpXPushFieldsEM.cpp:1141
static amrex::Vector< int > boost_direction
Direction of the Lorentz transform that defines the boosted frame of the simulation.
Definition WarpX.H:119
void ComputeDt()
Definition WarpXComputeDt.cpp:45
bool m_exit_loop_due_to_interrupt_signal
Definition WarpX.H:1427
static bool use_fdtd_nci_corr
Definition WarpX.H:292
FiniteDifferenceSolver * get_pointer_fdtd_solver_fp(int lev)
Definition WarpX.H:937
amrex::IntVect m_sort_idx_type
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
Definition WarpX.H:1403
static amrex::Real moving_window_v
Definition WarpX.H:765
static bool do_shared_mem_current_deposition
use shared memory algorithm for current deposition
Definition WarpX.H:245
const AcceleratorLattice & get_accelerator_lattice(int lev)
Definition WarpX.H:902
amrex::Vector< amrex::IntVect > do_pml_Hi
Definition WarpX.H:1255
std::string GetAuthors() const
If an authors' string is specified in the inputfile, this method returns that string....
Definition WarpX.H:173
void setistep(int lev, int ii)
Definition WarpX.H:703
void CheckLoadBalance(int step)
Definition WarpXRegrid.cpp:58
static auto load_balance_costs_update_algo
Definition WarpX.H:197
static bool fft_do_time_averaging
Definition WarpX.H:766
void PSATDForwardTransformEB()
Forward FFT of E,B on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:267
amrex::Vector< std::unique_ptr< PML > > pml
Definition WarpX.H:1256
void OneStep_JRhom(amrex::Real cur_time)
Perform one PIC iteration, with the multiple J deposition per time step.
Definition WarpXEvolve.cpp:840
void FillBoundaryE_avg(amrex::IntVect ng)
Definition WarpXComm.cpp:748
static amrex::Array< ParticleBoundaryType, 3 > particle_boundary_lo
Definition WarpX.H:212
amrex::RealVect fine_tag_lo
Definition WarpX.H:1370
void SumBoundaryJ(const ablastr::fields::MultiLevelVectorField ¤t, int lev, int idim, const amrex::Periodicity &period)
Definition WarpXComm.cpp:1508
std::string restart_chkfile
Definition WarpX.H:1357
static WarpX * m_instance
Definition WarpX.H:1018
void HybridPICInitializeRhoJandB()
Hybrid-PIC initial deposition function. The hybrid-PIC algorithm uses the charge and current density ...
Definition WarpXPushFieldsHybridPIC.cpp:287
void ReadExternalFieldFromFile(const std::string &read_fields_from_path, amrex::MultiFab *mf, const std::string &F_name, const std::string &F_component, int dest_comp=0)
Load field values from a user-specified openPMD file for a specific field (specified by F_name)
int m_current_centering_noz
Order of finite centering of currents (from nodal grid to staggered grid), along z.
Definition WarpX.H:1181
static bool do_dynamic_scheduling
Definition WarpX.H:328
void computeVectorPotential(ablastr::fields::MultiLevelVectorField const &curr, ablastr::fields::MultiLevelVectorField const &A, amrex::Real required_precision=amrex::Real(1.e-11), amrex::Real absolute_tolerance=amrex::Real(0.0), int max_iters=200, int verbosity=2)
Definition MagnetostaticSolver.cpp:154
void InitFromCheckpoint()
Definition WarpXIO.cpp:95
std::unique_ptr< amrex::Parser > ref_patch_parser
User-defined parser to define refinement patches.
Definition WarpX.H:1373
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_z
Definition WarpX.H:890
amrex::Real stopTime() const
Definition WarpX.H:717
amrex::Vector< std::unique_ptr< PML_RZ > > pml_rz
Definition WarpX.H:1258
void FillBoundaryE(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:712
amrex::Vector< amrex::Real > m_v_comoving
Definition WarpX.H:413
std::unique_ptr< MultiFluidContainer > myfl
Definition WarpX.H:1185
void PSATDBackwardTransformG()
Backward FFT of G on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:445
amrex::Array< amrex::Real, 3 > m_galilean_shift
Definition WarpX.H:411
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_x
Definition WarpX.H:888
std::unique_ptr< HybridPICModel > m_hybrid_pic_model
Definition WarpX.H:1299
amrex::Vector< amrex::Real > getdt() const
Definition WarpX.H:709
bool m_safe_guard_cells
Definition WarpX.H:1167
static int noz
Order of the particle shape factors (splines) along z.
Definition WarpX.H:270
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_z
Definition WarpX.H:895
int mffile_nstreams
Definition WarpX.H:1366
void AddMagnetostaticFieldLabFrame()
Definition MagnetostaticSolver.cpp:75
void SpectralSourceFreeFieldAdvance(amrex::Real start_time)
Definition WarpXImplicitOps.cpp:93
bool m_JRhom
PSATD JRhom algorithm.
Definition WarpX.H:1603
bool do_pml_divb_cleaning
Definition WarpX.H:1253
int magnetostatic_solver_max_iters
Definition WarpX.H:805
static auto time_dependency_J
Definition WarpX.H:222
static amrex::Array< FieldBoundaryType, 3 > field_boundary_lo
Definition WarpX.H:201
void ReadParameters()
Definition WarpX.cpp:547
amrex::Vector< amrex::Real > gett_old() const
Definition WarpX.H:704
void setVectorPotentialBC(ablastr::fields::MultiLevelVectorField const &A) const
Definition MagnetostaticSolver.cpp:230
static void ResetInstance()
Definition WarpX.cpp:308
int verbose
Definition WarpX.H:1340
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_y
Definition WarpX.H:894
void InitLevelData(int lev, amrex::Real time)
This function initializes E, B, rho, and F, at all the levels of the multifab. rho and F are initiali...
static auto electromagnetic_solver_id
Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT)
Definition WarpX.H:191
amrex::Real load_balance_knapsack_factor
Definition WarpX.H:1314
int MoveWindow(int step, bool move_j)
Move the moving window.
Definition WarpXMovingWindow.cpp:357
amrex::Vector< amrex::Real > load_balance_efficiency
Definition WarpX.H:1322
static amrex::IntVect sort_bin_size
Definition WarpX.H:332
amrex::IntVect m_rho_nodal_flag
Definition WarpX.H:353
void PSATDMoveRhoNewToRhoMid()
Copy rho_new to rho_mid in spectral space (when rho is quadratic in time)
Definition WarpXPushFieldsEM.cpp:662
utils::parser::IntervalsParser load_balance_intervals
Definition WarpX.H:1304
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_ext_face
Definition WarpX.H:1232
amrex::IntVect getngEB() const
Definition WarpX.H:782
utils::parser::IntervalsParser override_sync_intervals
Definition WarpX.H:1337
static auto charge_deposition_algo
Integer that corresponds to the charge deposition algorithm (only standard deposition)
Definition WarpX.H:185
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > Efield_dotMask
Definition WarpX.H:1201
utils::parser::IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition WarpX.H:541
void ComputeCostsHeuristic(amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > &costs)
adds particle and cell contributions in cells to compute heuristic cost in each box on each level,...
Definition WarpXRegrid.cpp:337
amrex::Real gett_old(int lev) const
Definition WarpX.H:705
static int do_moving_window
Definition WarpX.H:751
amrex::Real moving_window_x
Definition WarpX.H:1268
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & GetEBUpdateBFlag()
Definition WarpX.H:165
int maxStep() const
Definition WarpX.H:715
static int nox
Order of the particle shape factors (splines) along x.
Definition WarpX.H:266
int getnsubsteps(int lev) const
Definition WarpX.H:700
WarpX(WarpX const &)=delete
amrex::Vector< int > getistep() const
Definition WarpX.H:701
bool synchronize_velocity_for_diagnostics
Definition WarpX.H:1362
void DepositMassMatrices()
Definition WarpXImplicitOps.cpp:337
PSATDSolutionType m_psatd_solution_type
Definition WarpX.H:1454
amrex::Vector< int > m_mirror_z_npoints
Definition WarpX.H:1274
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_info_face
Definition WarpX.H:1225
void updateMaxStep(const int new_max_step)
Definition WarpX.H:716
void UpdateMagneticFieldAndApplyBCs(ablastr::fields::MultiLevelVectorField const &a_Bn, amrex::Real a_thetadt, amrex::Real start_time)
Definition WarpXImplicitOps.cpp:65
void PSATDMoveJNewToJOld()
Copy J_new to J_old in spectral space (when J is linear in time)
Definition WarpXPushFieldsEM.cpp:678
static bool serialize_initial_conditions
If true, the initial conditions from random number generators are serialized (useful for reproducible...
Definition WarpX.H:312
std::optional< amrex::Real > m_zmax_plasma_to_compute_max_step
Definition WarpX.H:1351
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition WarpX.H:1587
static amrex::IntVect m_fill_guards_fields
Whether to fill guard cells when computing inverse FFTs of fields.
Definition WarpX.H:254
MacroscopicSolverAlgo m_macroscopic_solver_algo
Definition WarpX.H:1193
void SynchronizeVelocityWithPosition()
Definition WarpXEvolve.cpp:113
ablastr::fields::MultiFabRegister & GetMultiFabRegister()
Definition WarpX.H:941
void EvolveB(amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:946
static bool use_filter_compensation
If true, a compensation step is added to the bilinear filtering of charge and currents.
Definition WarpX.H:309
amrex::Vector< std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > > m_borrowing
Definition WarpX.H:1237
void HybridPICDepositRhoAndJ()
Hybrid-PIC deposition function. Helper function to contain all the needed logic to deposit charge and...
Definition WarpXPushFieldsHybridPIC.cpp:234
void PSATDPushSpectralFields()
Update all necessary fields in spectral space.
Definition WarpXPushFieldsEM.cpp:632
amrex::Real cfl
Definition WarpX.H:1355
bool m_sort_particles_for_deposition
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
Definition WarpX.H:1399
amrex::Real gett_new(int lev) const
Definition WarpX.H:707
amrex::Vector< amrex::Real > dt
Definition WarpX.H:1164
MultiFluidContainer & GetFluidContainer()
Definition WarpX.H:159
void HybridPICEvolveFields()
Hybrid-PIC field evolve function. This function contains the logic involved in evolving the electric ...
Definition WarpXPushFieldsHybridPIC.cpp:25
int nox_fft
Definition WarpX.H:1389
int particle_io_nfiles
Definition WarpX.H:1368
void AllocInitMultiFab(std::unique_ptr< amrex::iMultiFab > &mf, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, int ncomp, const amrex::IntVect &ngrow, int level, const std::string &name, std::optional< const int > initial_value={})
Allocate and optionally initialize the iMultiFab. This also adds the iMultiFab to the map of MultiFab...
Definition WarpX.cpp:3537
static WarpX & GetInstance()
Definition WarpX.cpp:299
static auto grid_type
Definition WarpX.H:350
void AddCurrentFromFineLevelandSumBoundary(const ablastr::fields::MultiLevelVectorField &J_fp, const ablastr::fields::MultiLevelVectorField &J_cp, const ablastr::fields::MultiLevelVectorField &J_buffer, int lev)
Update the currents of lev by adding the currents from particles that are in the mesh refinement patc...
Definition WarpXComm.cpp:1575
amrex::RealVect fine_tag_hi
Definition WarpX.H:1371
amrex::IntVect get_ng_fieldgather() const
Definition WarpX.H:787
amrex::IntVect get_ng_depos_rho() const
Definition WarpX.H:786
const amrex::iMultiFab * getFieldDotMaskPointer(warpx::fields::FieldType field_type, int lev, ablastr::fields::Direction dir) const
Get pointer to the amrex::MultiFab containing the dotMask for the specified field.
Definition WarpX.cpp:3595
static int start_moving_window_step
Definition WarpX.H:752
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > Afield_dotMask
Definition WarpX.H:1203
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition WarpX.H:1125
void OneStep_sub1(amrex::Real cur_time)
Perform one PIC iteration, with subcycling i.e. The fine patch uses a smaller timestep (and steps mor...
Definition WarpXEvolve.cpp:1060
void PSATDForwardTransformF()
Forward FFT of F on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:375
int do_silver_mueller
Definition WarpX.H:1245
void RescaleCosts(int step)
Definition WarpXRegrid.cpp:387
amrex::Vector< int > istep
Definition WarpX.H:1159
bool m_do_initial_div_cleaning
Definition WarpX.H:1407
void PrintMainPICparameters()
const amrex::Array< FieldBoundaryType, 3 > & GetFieldBoundaryHi() const
Definition WarpX.H:121
void FillBoundaryB(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:703
void HandleSignals()
Complete the asynchronous broadcast of signal flags, and initiate a checkpoint if requested.
Definition WarpXEvolve.cpp:1484
static int n_current_deposition_buffer
Definition WarpX.H:346
void HandleParticlesAtBoundaries(int step, amrex::Real cur_time, int num_moved)
Definition WarpXEvolve.cpp:713
int Verbose() const
Definition WarpX.H:114
bool m_verboncoeur_axis_correction
Definition WarpX.H:1290
void PSATDScaleAverageFields(amrex::Real scale_factor)
Scale averaged E,B fields to account for time integration.
Definition WarpXPushFieldsEM.cpp:744
amrex::DistributionMapping GetRestartDMap(const std::string &chkfile, const amrex::BoxArray &ba, int lev) const
Definition WarpXIO.cpp:62
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > Bfield_dotMask
Definition WarpX.H:1202
void ShiftGalileanBoundary()
This function shifts the boundary of the grid by 'm_v_galilean*dt'. In doding so, only positions attr...
Definition WarpXMovingWindow.cpp:703
amrex::Real magnetostatic_solver_absolute_tolerance
Definition WarpX.H:804
amrex::Vector< int > injected_plasma_species
Definition WarpX.H:1279
void ApplyFilterMF(const ablastr::fields::MultiLevelVectorField &mfvec, int lev, int idim)
Definition WarpXComm.cpp:1479
bool m_is_synchronized
Definition WarpX.H:1375
void Evolve(int numsteps=-1)
Definition WarpXEvolve.cpp:147
static bool use_kspace_filter
If true, the bilinear filtering of charge and currents is done in Fourier space.
Definition WarpX.H:307
void FinishImplicitField(const ablastr::fields::MultiLevelVectorField &Field_fp, const ablastr::fields::MultiLevelVectorField &Field_n, amrex::Real theta)
Definition WarpXImplicitOps.cpp:286
int getistep(int lev) const
Definition WarpX.H:702
std::unique_ptr< MultiDiagnostics > multi_diags
Definition WarpX.H:1171
static int noy
Order of the particle shape factors (splines) along y.
Definition WarpX.H:268
amrex::Vector< int > nsubsteps
Definition WarpX.H:1160
amrex::Vector< amrex::Real > gett_new() const
Definition WarpX.H:706
void ComputeMaxStep()
Compute the last time step of the simulation Calls computeMaxStepBoostAccelerator() if required.
int noz_fft
Definition WarpX.H:1391
static int field_centering_noz
Order of finite centering of fields (from staggered grid to nodal grid), along z.
Definition WarpX.H:280
void sett_new(int lev, amrex::Real time)
Definition WarpX.H:708
amrex::Real load_balance_efficiency_ratio_threshold
Definition WarpX.H:1320
ElectrostaticSolver & GetElectrostaticSolver()
Definition WarpX.H:160
amrex::IntVect getngF() const
Definition WarpX.H:783
static std::string PicsarVersion()
Version of PICSAR dependency.
Definition WarpXVersion.cpp:28
static amrex::Real beta_boost
Beta value corresponding to the Lorentz factor of the boosted frame of the simulation.
Definition WarpX.H:317
void FillBoundaryB_avg(amrex::IntVect ng)
Definition WarpXComm.cpp:739
bool do_fluid_species
Definition WarpX.H:1184
MultiParticleContainer & GetPartContainer()
Definition WarpX.H:158
std::unique_ptr< ImplicitSolver > m_implicit_solver
Definition WarpX.H:1600
void FinishMagneticFieldAndApplyBCs(ablastr::fields::MultiLevelVectorField const &a_Bn, amrex::Real a_theta, amrex::Real a_time)
Definition WarpXImplicitOps.cpp:82
void InitializeEBGridData(int lev)
This function initializes and calculates grid quantities used along with EBs such as edge lengths,...
void CheckGuardCells()
Check that the number of guard cells is smaller than the number of valid cells, for all available Mul...
static auto current_deposition_algo
Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay,...
Definition WarpX.H:183
static bool do_divb_cleaning
Solve additional Maxwell equation for G in order to control errors in magnetic Gauss' law.
Definition WarpX.H:263
static auto electrostatic_solver_id
Definition WarpX.H:748
int load_balance_with_sfc
Definition WarpX.H:1309
void RestrictRhoFromFineToCoarsePatch(int lev)
Definition WarpXComm.cpp:1653
std::unique_ptr< MultiParticleContainer > mypc
Definition WarpX.H:1170
int m_current_centering_noy
Order of finite centering of currents (from nodal grid to staggered grid), along y.
Definition WarpX.H:1179
static bool use_filter
If true, a bilinear filter is used to smooth charge and currents.
Definition WarpX.H:305
void AddExternalFields(int lev)
void MacroscopicEvolveE(amrex::Real dt, amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:1193
static amrex::IntVect m_fill_guards_current
Whether to fill guard cells when computing inverse FFTs of currents.
Definition WarpX.H:257
void ComputeExternalFieldOnGridUsingParser(const std::variant< warpx::fields::FieldType, std::string > &field, amrex::ParserExecutor< 4 > const &fx_parser, amrex::ParserExecutor< 4 > const &fy_parser, amrex::ParserExecutor< 4 > const &fz_parser, int lev, PatchType patch_type, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > const &eb_update_field, bool use_eb_flags=true)
This function computes the E, B, and J fields on each level using the parser and the user-defined fun...
void CalculateExternalCurlA()
Definition WarpXPushFieldsHybridPIC.cpp:350
MagnetostaticSolver::VectorPoissonBoundaryHandler m_vector_poisson_boundary_handler
Definition WarpX.H:802
bool m_collisions_split_momentum_push
WarpX class attribute that controls whether collisions are placed in the middle of the position push ...
Definition WarpX.H:1612
static amrex::IntVect shared_tilesize
tileSize to use for shared current deposition operations
Definition WarpX.H:251
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition WarpX.H:1596
std::unique_ptr< ElectrostaticSolver > m_electrostatic_solver
Definition WarpX.H:1296
void ExplicitFillBoundaryEBUpdateAux()
Definition WarpXEvolve.cpp:652
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition WarpX.H:1129
int m_current_centering_nox
Order of finite centering of currents (from nodal grid to staggered grid), along x.
Definition WarpX.H:1177
amrex::IntVect getngUpdateAux() const
Definition WarpX.H:784
static void MakeWarpX()
This method creates a new instance of the WarpX class.
Definition WarpX.cpp:274
amrex::Vector< amrex::Real > m_mirror_z_width
Definition WarpX.H:1273
int slice_plot_int
Definition WarpX.H:1384
void BackwardCompatibility()
Definition WarpX.cpp:1946
void EvolveE(amrex::Real dt, amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:1000
int num_injected_species
Definition WarpX.H:1278
MediumForEM m_em_solver_medium
Integer that corresponds to electromagnetic Maxwell solver (vacuum - 0, macroscopic - 1)
Definition WarpX.H:1188
amrex::Vector< amrex::Real > t_old
Definition WarpX.H:1163
static amrex::IntVect sort_idx_type
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
Definition WarpX.H:337
int regrid_int
Definition WarpX.H:1353
bool use_single_write
Definition WarpX.H:1365
static bool refine_plasma
Definition WarpX.H:329
void PSATDForwardTransformRho(std::string const &charge_fp_string, std::string const &charge_cp_string, int icomp, int dcomp, bool apply_kspace_filter=true)
Forward FFT of rho on all mesh refinement levels, with k-space filtering (if needed)
Definition WarpXPushFieldsEM.cpp:589
static amrex::Array< FieldBoundaryType, 3 > field_boundary_hi
Definition WarpX.H:206
void PSATDForwardTransformJ(std::string const &J_fp_string, std::string const &J_cp_string, bool apply_kspace_filter=true)
Forward FFT of J on all mesh refinement levels, with k-space filtering (if needed)
Definition WarpXPushFieldsEM.cpp:476
bool use_single_read
Definition WarpX.H:1364
amrex::IntVect numprocs
Domain decomposition on Level 0.
Definition WarpX.H:1410
static int ncomps
Definition WarpX.H:288
std::map< std::string, amrex::iMultiFab * > imultifab_map
Definition WarpX.H:383
static int moving_window_active(int const step)
Definition WarpX.H:759
void PSATDForwardTransformG()
Forward FFT of G on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:425
const amrex::Array< FieldBoundaryType, 3 > & GetFieldBoundaryLo() const
Definition WarpX.H:116
bool m_limit_verbose_step
Definition WarpX.H:1341
int warpx_do_continuous_injection
Definition WarpX.H:1277
void OneStep(amrex::Real a_cur_time, amrex::Real a_dt, int a_step)
Perform collisions, particle injection, and advance fields and particles by one time step.
Definition WarpXEvolve.cpp:389
void FinishImplicitParticleUpdate()
Definition WarpXImplicitOps.cpp:210
static bool galerkin_interpolation
Definition WarpX.H:302
int do_pml_in_domain
Definition WarpX.H:1250
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_eb_update_E
Definition WarpX.H:1209
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition WarpX.H:407
static amrex::IntVect filter_npass_each_dir
Definition WarpX.H:404
void ComputeDivE(amrex::MultiFab &divE, int lev)
Definition WarpX.cpp:3308
amrex::IntVect get_numprocs() const
Definition WarpX.H:796
void AllocLevelData(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm)
Definition WarpX.cpp:2271
ablastr::fields::MultiFabRegister m_fields
Definition WarpX.H:940
amrex::Real v_particle_pml
Definition WarpX.H:1260
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_eb_update_B
Definition WarpX.H:1210
amrex::IntVect get_ng_depos_J() const
Definition WarpX.H:785
BilinearFilter bilinear_filter
Definition WarpX.H:405
static int particle_max_grid_crossings
Maximum number of allowed grid crossings for particles.
Definition WarpX.H:273
void FillBoundaryF(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:721
bool fft_periodic_single_box
Definition WarpX.H:1388
void PSATDBackwardTransformEB()
Backward FFT of E,B on all mesh refinement levels, with field damping in the guard cells (if needed)
Definition WarpXPushFieldsEM.cpp:301
void AddRhoFromFineLevelandSumBoundary(const ablastr::fields::MultiLevelScalarField &charge_fp, const ablastr::fields::MultiLevelScalarField &charge_cp, ablastr::fields::MultiLevelScalarField const &charge_buffer, int lev, int icomp, int ncomp)
Update the charge density of lev by adding the charge density from particles that are in the mesh ref...
Definition WarpXComm.cpp:1709
static int field_centering_noy
Order of finite centering of fields (from staggered grid to nodal grid), along y.
Definition WarpX.H:278
int do_pml
Definition WarpX.H:1244
amrex::Real getdt(int lev) const
Definition WarpX.H:710
int max_step
Definition WarpX.H:1345
bool m_do_subcycling
Definition WarpX.H:1286
ParticleThermalizer m_particle_thermalizer
Definition WarpX.H:1174
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > const & GetEBReduceParticleShapeFlag() const
Definition WarpX.H:166
amrex::Real costs_heuristic_particles_wt
Definition WarpX.H:1334
int pml_has_particles
Definition WarpX.H:1248
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition WarpX.H:406
bool do_current_centering
Definition WarpX.H:228
int getdo_moving_window() const
Definition WarpX.H:711
auto & get_spectral_solver_fp(int lev)
Definition WarpX.H:934
int pml_ncell
Definition WarpX.H:1246
static int n_rz_azimuthal_modes
Number of modes for the RZ multi-mode version.
Definition WarpX.H:283
void PSATDBackwardTransformF()
Backward FFT of F on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:395
std::unique_ptr< ExternalFieldParams > m_p_ext_field_params
Definition WarpX.H:1266
static amrex::Real gamma_boost
Lorentz factor of the boosted frame in which a boosted-frame simulation is run.
Definition WarpX.H:315
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > phi_dotMask
Definition WarpX.H:1204
static int shared_mem_current_tpb
number of threads to use per block in shared deposition
Definition WarpX.H:248
bool write_diagnostics_on_restart
Definition WarpX.H:1360
int m_num_mirrors
Definition WarpX.H:1271
utils::parser::IntervalsParser m_dt_update_interval
Definition WarpX.H:1165
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition WarpX.H:1597
void ResetCosts()
resets costs to zero
Definition WarpXRegrid.cpp:370
void computeMaxStepBoostAccelerator()
bool checkStopSimulation(amrex::Real cur_time)
Definition WarpXEvolve.cpp:645
std::unique_ptr< MultiReducedDiags > reduced_diags
object with all reduced diagnostics, similar to MultiParticleContainer for species.
Definition WarpX.H:416
amrex::Vector< amrex::Real > m_mirror_z
Definition WarpX.H:1272
std::optional< amrex::Real > m_max_dt
Definition WarpX.H:1283
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition WarpX.H:1240
std::string m_authors
Author of an input file / simulation setup.
Definition WarpX.H:1157
int m_JRhom_subintervals
Definition WarpX.H:1604
int slice_max_grid_size
Definition WarpX.H:1383
void PSATDEraseAverageFields()
Set averaged E,B fields to zero before new iteration.
Definition WarpXPushFieldsEM.cpp:718
void ImplicitComputeRHSE(amrex::Real dt, WarpXSolverVec &a_Erhs_vec)
Definition WarpXImplicitOps.cpp:353
void FillBoundaryG(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:730
void ApplyFilterandSumBoundaryRho(int lev, int glev, amrex::MultiFab &rho, int icomp, int ncomp)
Definition WarpXComm.cpp:1677
void OneStep_nosub(amrex::Real a_cur_time, amrex::Real a_dt, int a_step)
Perform one PIC iteration, without subcycling i.e. all levels/patches use the same timestep (that of ...
Definition WarpXEvolve.cpp:504
amrex::Vector< std::unique_ptr< AcceleratorLattice > > m_accelerator_lattice
Definition WarpX.H:1416
static auto time_dependency_rho
Definition WarpX.H:223
std::optional< amrex::Real > m_const_dt
Definition WarpX.H:1282
void Hybrid_QED_Push(amrex::Vector< amrex::Real > dt)
Definition WarpX_QED_Field_Pushers.cpp:47
amrex::RealBox slice_realbox
Definition WarpX.H:1385
amrex::Vector< amrex::IntVect > do_pml_Lo
Definition WarpX.H:1254
void applyMirrors(amrex::Real time)
Definition WarpXEvolve.cpp:1423
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition WarpX.H:1588
amrex::Real getmoving_window_x() const
Definition WarpX.H:712
amrex::Real costs_heuristic_cells_wt
Definition WarpX.H:1328
bool do_pml_dive_cleaning
Definition WarpX.H:1252
bool do_similar_dm_pml
Definition WarpX.H:1251
void EvolveF(amrex::Real dt, int rho_comp)
Definition WarpXPushFieldsEM.cpp:1087
void SetElectricFieldAndApplyBCs(const WarpXSolverVec &a_E, amrex::Real a_time)
Definition WarpXImplicitOps.cpp:47
static bool compute_max_step_from_btd
If true, the code will compute max_step from the back transformed diagnostics.
Definition WarpX.H:326
bool current_correction
If true, a correction is applied to the current in Fourier space,.
Definition WarpX.H:232
static int end_moving_window_step
Definition WarpX.H:753
static utils::parser::IntervalsParser sort_intervals
Definition WarpX.H:331
bool update_with_rho
Definition WarpX.H:236
void LoadBalance()
perform load balance; compute and communicate new amrex::DistributionMapping
Definition WarpXRegrid.cpp:74
amrex::Real time_of_last_gal_shift
Definition WarpX.H:409
MultiDiagnostics & GetMultiDiags()
Definition WarpX.H:162
This is a wrapper class around a Vector of pointers to MultiFabs that contains basic math operators a...
Definition WarpXSolverVec.H:56
Definition MultiFabRegister.H:71
void MakeNewLevelFromScratch(int lev, Real time, const BoxArray &ba, const DistributionMapping &dm) override=0
virtual void ClearLevel(int lev)=0
AmrCore & operator=(AmrCore &&rhs) noexcept
void ErrorEst(int lev, TagBoxArray &tags, Real time, int ngrow) override=0
virtual void RemakeLevel(int lev, Real time, const BoxArray &ba, const DistributionMapping &dm)=0
virtual void MakeNewLevelFromCoarse(int lev, Real time, const BoxArray &ba, const DistributionMapping &dm)=0
virtual DistributionMapping MakeDistributionMap(int lev, BoxArray const &ba)
virtual void PostProcessBaseGrids(BoxArray &box_array) const
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition GuardCellManager.H:23
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:103
PODVector< T, ArenaAllocator< T > > DeviceVector
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:201
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:210
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
@ Default
Definition Enums.H:23
PatchType
Definition Enums.H:30
FieldType
Definition Fields.H:97
Definition ImplicitOptions.H:7
Definition MultiFabRegister.H:272