|
WarpX
|
#include <WarpX.H>
Public Member Functions | |
| ~WarpX () override | |
| WarpX (WarpX const &)=delete | |
| WarpX & | operator= (WarpX const &)=delete |
| WarpX (WarpX &&)=delete | |
| WarpX & | operator= (WarpX &&)=delete |
| int | Verbose () const |
| const amrex::Array< FieldBoundaryType, 3 > & | GetFieldBoundaryLo () const |
| const amrex::Array< FieldBoundaryType, 3 > & | GetFieldBoundaryHi () const |
| void | InitData () |
| void | Evolve (int numsteps=-1) |
| void | SynchronizeVelocityWithPosition () |
| void | SyncMassMatricesPC () |
| void | SaveParticlesAtImplicitStepStart () |
| void | FinishImplicitParticleUpdate () |
| void | SetElectricFieldAndApplyBCs (const WarpXSolverVec &a_E, amrex::Real a_time) |
| void | UpdateMagneticFieldAndApplyBCs (ablastr::fields::MultiLevelVectorField const &a_Bn, amrex::Real a_thetadt, amrex::Real start_time) |
| void | SpectralSourceFreeFieldAdvance (amrex::Real start_time) |
| void | FinishMagneticFieldAndApplyBCs (ablastr::fields::MultiLevelVectorField const &a_Bn, amrex::Real a_theta, amrex::Real a_time) |
| void | FinishImplicitField (const ablastr::fields::MultiLevelVectorField &Field_fp, const ablastr::fields::MultiLevelVectorField &Field_n, amrex::Real theta) |
| void | ImplicitComputeRHSE (amrex::Real dt, WarpXSolverVec &a_Erhs_vec) |
| void | ImplicitComputeRHSE (int lev, amrex::Real dt, WarpXSolverVec &a_Erhs_vec) |
| void | ImplicitComputeRHSE (int lev, PatchType patch_type, amrex::Real dt, WarpXSolverVec &a_Erhs_vec) |
| MultiParticleContainer & | GetPartContainer () |
| MultiFluidContainer & | GetFluidContainer () |
| ElectrostaticSolver & | GetElectrostaticSolver () |
| HybridPICModel * | get_pointer_HybridPICModel () const |
| MultiDiagnostics & | GetMultiDiags () |
| ParticleBoundaryBuffer & | GetParticleBoundaryBuffer () |
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | GetEBUpdateEFlag () |
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | GetEBUpdateBFlag () |
| amrex::Vector< std::unique_ptr< amrex::iMultiFab > > const & | GetEBReduceParticleShapeFlag () const |
| std::string | GetAuthors () const |
| If an authors' string is specified in the inputfile, this method returns that string. Otherwise, it returns an empty string. | |
| 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 MultiFabs (used to ease the access to MultiFabs from the Python interface. | |
| 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. | |
| bool | DoPML () const |
| bool | DoFluidSpecies () const |
| std::vector< bool > | getPMLdirections () const |
| void | setLoadBalanceEfficiency (int lev, amrex::Real efficiency) |
| amrex::Real | getLoadBalanceEfficiency (int lev) |
| void | applyMirrors (amrex::Real time) |
| void | ComputeDt () |
| void | UpdateDtFromParticleSpeeds () |
| void | PrintMainPICparameters () |
| void | ComputeMaxStep () |
| Compute the last time step of the simulation Calls computeMaxStepBoostAccelerator() if required. | |
| void | computeMaxStepBoostAccelerator () |
| int | MoveWindow (int step, bool move_j) |
| Move the moving window. | |
| void | ShiftGalileanBoundary () |
| This function shifts the boundary of the grid by 'm_v_galilean*dt'. In doding so, only positions attributes are changed while fields remain unchanged. | |
| void | ResetProbDomain (const amrex::RealBox &rb) |
| void | EvolveE (amrex::Real dt, amrex::Real start_time) |
| void | EvolveE (int lev, amrex::Real dt, amrex::Real start_time) |
| void | EvolveB (amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time) |
| void | EvolveB (int lev, amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time) |
| void | EvolveF (amrex::Real dt, int const rho_comp) |
| void | EvolveF (int lev, amrex::Real dt, int const rho_comp) |
| void | EvolveG (amrex::Real dt) |
| void | EvolveG (int lev, amrex::Real dt) |
| void | EvolveB (int lev, PatchType patch_type, amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time) |
| void | EvolveE (int lev, PatchType patch_type, amrex::Real dt, amrex::Real start_time) |
| void | EvolveF (int lev, PatchType patch_type, amrex::Real dt, int const rho_comp) |
| void | EvolveG (int lev, PatchType patch_type, amrex::Real dt) |
| void | MacroscopicEvolveE (amrex::Real dt, amrex::Real start_time) |
| void | MacroscopicEvolveE (int lev, amrex::Real dt, amrex::Real start_time) |
| void | MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real dt, amrex::Real start_time) |
| void | HybridPICEvolveFields () |
| Hybrid-PIC field evolve function. This function contains the logic involved in evolving the electric and magnetic fields in the hybrid PIC algorithm. | |
| void | HybridPICInitializeRhoJandB () |
Hybrid-PIC initial deposition function. The hybrid-PIC algorithm uses the charge and current density from both the current and previous step when updating the fields. This function deposits the initial ion charge and current (before the first particle push), to be used in the HybridPICEvolveFields() function. | |
| void | HybridPICDepositRhoAndJ () |
Hybrid-PIC deposition function. Helper function to contain all the needed logic to deposit charge and current densities for use in the Ohm's law solver. The deposition is done into the rho_fp and current_fp multifabs. | |
| void | Hybrid_QED_Push (amrex::Vector< amrex::Real > dt) |
| void | Hybrid_QED_Push (int lev, amrex::Real dt) |
| void | Hybrid_QED_Push (int lev, PatchType patch_type, amrex::Real dt) |
| void | CheckLoadBalance (int step) |
| void | LoadBalance () |
perform load balance; compute and communicate new amrex::DistributionMapping | |
| void | ResetCosts () |
| resets costs to zero | |
| void | RescaleCosts (int step) |
| utils::parser::IntervalsParser | get_load_balance_intervals () const |
| returns the load balance interval | |
| void | DampFieldsInGuards (int lev, const ablastr::fields::VectorField &Efield, const ablastr::fields::VectorField &Bfield) |
| Private function for spectral solver Applies a damping factor in the guards cells that extend beyond the extent of the domain, reducing fluctuations that can appear in parallel simulations. This will be called when FieldBoundaryType is set to damped. Vector version. | |
| void | DampFieldsInGuards (int lev, amrex::MultiFab *mf) |
| Private function for spectral solver Applies a damping factor in the guards cells that extend beyond the extent of the domain, reducing fluctuations that can appear in parallel simulations. This will be called when FieldBoundaryType is set to damped. Scalar version. | |
| void | ApplyInverseVolumeScalingToCurrentDensity (amrex::MultiFab *Jx, amrex::MultiFab *Jy, amrex::MultiFab *Jz, int lev) const |
| void | ApplyInverseVolumeScalingToChargeDensity (amrex::MultiFab *Rho, int lev) const |
| void | ApplyRhofieldBoundary (int lev, amrex::MultiFab *Rho, PatchType patch_type) |
| If a PEC boundary conditions is used the charge density deposited in the guard cells have to be reflected back into the simulation domain. This function performs that logic. | |
| void | ApplyJfieldBoundary (int lev, amrex::MultiFab *Jx, amrex::MultiFab *Jy, amrex::MultiFab *Jz, PatchType patch_type) |
| If a PEC boundary conditions is used the current density deposited in the guard cells have to be reflected back into the simulation domain. This function performs that logic. | |
| void | ApplyEfieldBoundary (int lev, PatchType patch_type, amrex::Real cur_time) |
| void | ApplyBfieldBoundary (int lev, PatchType patch_type, SubcyclingHalf subcycling_half, amrex::Real cur_time) |
| void | ApplyFieldBoundaryOnAxis (amrex::MultiFab *Er, amrex::MultiFab *Et, amrex::MultiFab *Ez, int lev) const |
| void | ApplyElectronPressureBoundary (int lev, PatchType patch_type) |
| When the Ohm's law solver is used, the electron pressure values on PEC boundaries are set to enforce a zero derivative Neumann condition, otherwise the E_perp values have large spikes (that grows as 1/dx). This has to be done since the E-field is algebraically calculated instead of evolved which means the 1/dx growth is not avoided by multiplication with dt as happens in the B-field evolve. | |
| void | DampPML () |
| void | DampPML (int lev) |
| void | DampPML (int lev, PatchType patch_type) |
| void | DampPML_Cartesian (int lev, PatchType patch_type) |
| void | DampJPML () |
| void | DampJPML (int lev) |
| void | DampJPML (int lev, PatchType patch_type) |
| void | CopyJPML () |
| Copy the current J from the regular grid to the PML. | |
| PML * | GetPML (int lev) |
| PML_RZ * | GetPML_RZ (int lev) |
| void | doFieldIonization () |
| void | doQEDEvents () |
| void | PushParticlesandDeposit (int lev, amrex::Real cur_time, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full, ImplicitOptions const *implicit_options=nullptr) |
| void | PushParticlesandDeposit (amrex::Real cur_time, bool skip_deposition=false, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full, ImplicitOptions const *implicit_options=nullptr) |
| void | UpdateAuxilaryData () |
| void | UpdateAuxilaryDataStagToNodal () |
| void | UpdateAuxilaryDataSameType () |
| void | FillBoundaryB (amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryE (amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryB_avg (amrex::IntVect ng) |
| void | FillBoundaryE_avg (amrex::IntVect ng) |
| void | FillBoundaryF (amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryG (amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryAux (amrex::IntVect ng) |
| void | FillBoundaryE (int lev, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryB (int lev, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryE_avg (int lev, amrex::IntVect ng) |
| void | FillBoundaryB_avg (int lev, amrex::IntVect ng) |
| void | FillBoundaryF (int lev, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryG (int lev, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryAux (int lev, amrex::IntVect ng) |
| void | SyncCurrentAndRho () |
| Synchronize J and rho: filter (if used), exchange guard cells, interpolate across MR levels and apply boundary conditions. Contains separate calls to WarpX::SyncCurrent and WarpX::SyncRho. | |
| void | SyncCurrent (const std::string ¤t_fp_string) |
| Apply filter and sum guard cells across MR levels. If current centering is used, center the current from a nodal grid to a staggered grid. For each MR level beyond level 0, interpolate the fine-patch current onto the coarse-patch current at the same level. Then, for each MR level, including level 0, apply filter and sum guard cells across levels. | |
| void | SyncRho () |
| void | SyncRho (const ablastr::fields::MultiLevelScalarField &charge_fp, const ablastr::fields::MultiLevelScalarField &charge_cp, ablastr::fields::MultiLevelScalarField const &charge_buffer) |
| amrex::Vector< int > | getnsubsteps () const |
| int | getnsubsteps (int lev) const |
| amrex::Vector< int > | getistep () const |
| int | getistep (int lev) const |
| void | setistep (int lev, int ii) |
| amrex::Vector< amrex::Real > | gett_old () const |
| amrex::Real | gett_old (int lev) const |
| amrex::Vector< amrex::Real > | gett_new () const |
| amrex::Real | gett_new (int lev) const |
| void | sett_new (int lev, amrex::Real time) |
| amrex::Vector< amrex::Real > | getdt () const |
| amrex::Real | getdt (int lev) const |
| int | getdo_moving_window () const |
| amrex::Real | getmoving_window_x () const |
| bool | getis_synchronized () const |
| int | maxStep () const |
| void | updateMaxStep (const int new_max_step) |
| amrex::Real | stopTime () const |
| void | updateStopTime (const amrex::Real new_stop_time) |
| void | ComputeDivE (amrex::MultiFab &divE, int lev) |
| void | ProjectionCleanDivB () |
| void | CalculateExternalCurlA () |
| amrex::IntVect | getngEB () const |
| amrex::IntVect | getngF () const |
| amrex::IntVect | getngUpdateAux () const |
| amrex::IntVect | get_ng_depos_J () const |
| amrex::IntVect | get_ng_depos_rho () const |
| amrex::IntVect | get_ng_fieldgather () const |
| amrex::IntVect | get_numprocs () const |
| void | ComputeSpaceChargeField (bool reset_fields) |
| void | ComputeMagnetostaticField () |
| void | AddMagnetostaticFieldLabFrame () |
| 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) |
| void | setVectorPotentialBC (ablastr::fields::MultiLevelVectorField const &A) const |
| 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 function for the external fields. The subroutine will parse the x_/y_z_external_grid_function and then, the field multifab is initialized based on the (x,y,z) position on the staggered yee-grid or cell-centered grid, in the interior cells and guard cells. | |
| void | LoadExternalFields (int lev) |
| Load field values from a user-specified openPMD file, for the fields Ex, Ey, Ez, Bx, By, Bz. | |
| void | ReadExternalFieldFromFile (const std::string &read_fields_from_path, amrex::MultiFab *mf, const std::string &F_name, const std::string &F_component) |
Load field values from a user-specified openPMD file for a specific field (specified by F_name) | |
| void | InitializeEBGridData (int lev) |
| This function initializes and calculates grid quantities used along with EBs such as edge lengths, face areas, distance to EB, etc. It also appropriately communicates EB data to guard cells. | |
| 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, and records in costs | |
| void | ApplyFilterandSumBoundaryRho (int lev, int glev, amrex::MultiFab &rho, int icomp, int ncomp) |
| void | ApplyFilterMF (const ablastr::fields::MultiLevelVectorField &mfvec, int lev, int idim) |
| void | ApplyFilterMF (const ablastr::fields::MultiLevelVectorField &mfvec, int lev) |
| void | ErrorEst (int lev, amrex::TagBoxArray &tags, amrex::Real time, int) final |
| Tagging cells for refinement. | |
| const AcceleratorLattice & | get_accelerator_lattice (int lev) |
| void | BuildBufferMasksInBox (amrex::Box tbx, amrex::IArrayBox &buffer_mask, const amrex::IArrayBox &guard_mask, int ng) |
| Build buffer mask within given FArrayBox. | |
| void | InitEB () |
| void | ComputeDistanceToEB () |
| Compute the level set function used for particle-boundary interaction. | |
| void | ComputeFaceExtensions () |
| Main function computing the cell extension. Where possible it computes one-way extensions and, when this is not possible, it does eight-ways extensions. | |
| void | ComputeOneWayExtensions () |
| Do the one-way extension. | |
| void | ComputeEightWaysExtensions () |
| Do the eight-ways extension. | |
| auto & | get_spectral_solver_fp (int lev) |
| FiniteDifferenceSolver * | get_pointer_fdtd_solver_fp (int lev) |
| ablastr::fields::MultiFabRegister & | GetMultiFabRegister () |
| void | PostProcessBaseGrids (amrex::BoxArray &ba0) const final |
Public Member Functions inherited from amrex::AmrCore | |
| AmrCore () | |
| AmrCore (const RealBox *rb, int max_level_in, const Vector< int > &n_cell_in, int coord=-1, Vector< IntVect > ref_ratios=Vector< IntVect >(), const int *is_per=nullptr) | |
| AmrCore (const RealBox &rb, int max_level_in, const Vector< int > &n_cell_in, int coord, Vector< IntVect > const &ref_ratios, Array< int, 3 > const &is_per) | |
| AmrCore (Geometry const &level_0_geom, AmrInfo const &amr_info) | |
| AmrCore (AmrCore &&rhs) noexcept | |
| AmrCore & | operator= (AmrCore &&rhs) noexcept |
| AmrCore (const AmrCore &rhs)=delete | |
| AmrCore & | operator= (const AmrCore &rhs)=delete |
| ~AmrCore () override | |
| AmrParGDB * | GetParGDB () const noexcept |
| void | InitFromScratch (Real time) |
| virtual void | regrid (int lbase, Real time, bool initial=false) |
| void | printGridSummary (std::ostream &os, int min_lev, int max_lev) const noexcept |
Public Member Functions inherited from amrex::AmrMesh | |
| AmrMesh () | |
| AmrMesh (const RealBox *rb, int max_level_in, const Vector< int > &n_cell_in, int coord=-1, Vector< IntVect > refrat=Vector< IntVect >(), const int *is_per=nullptr) | |
| AmrMesh (const RealBox &rb, int max_level_in, const Vector< int > &n_cell_in, int coord, Vector< IntVect > const &a_refrat, Array< int, 3 > const &is_per) | |
| AmrMesh (Geometry const &level_0_geom, AmrInfo const &amr_info) | |
| AmrMesh (const AmrMesh &rhs)=delete | |
| AmrMesh & | operator= (const AmrMesh &rhs)=delete |
| AmrMesh (AmrMesh &&rhs)=default | |
| AmrMesh & | operator= (AmrMesh &&rhs)=default |
| virtual | ~AmrMesh ()=default |
| int | Verbose () const noexcept |
| int | maxLevel () const noexcept |
| int | finestLevel () const noexcept |
| IntVect | refRatio (int lev) const noexcept |
| int | MaxRefRatio (int lev) const noexcept |
| const Vector< IntVect > & | refRatio () const noexcept |
| const Vector< Geometry > & | Geom () const noexcept |
| const Vector< DistributionMapping > & | DistributionMap () const noexcept |
| const Vector< BoxArray > & | boxArray () const noexcept |
| const Geometry & | Geom (int lev) const noexcept |
| const DistributionMapping & | DistributionMap (int lev) const noexcept |
| const BoxArray & | boxArray (int lev) const noexcept |
| Vector< Geometry > | Geom (int a_coarsest_lev, int a_finest_lev) const noexcept |
| Vector< BoxArray > | boxArray (int a_coarsest_lev, int a_finest_lev) const noexcept |
| Vector< DistributionMapping > | DistributionMap (int a_coarsest_lev, int a_finest_lev) const noexcept |
| Vector< Geometry > & | Geom () noexcept |
| Geometry & | Geom (int lev) noexcept |
| void | SetMaxGridSize (int new_mgs) noexcept |
| void | SetMaxGridSize (const IntVect &new_mgs) noexcept |
| void | SetMaxGridSize (const Vector< int > &new_mgs) noexcept |
| void | SetMaxGridSize (const Vector< IntVect > &new_mgs) noexcept |
| void | SetBlockingFactor (int new_bf) noexcept |
| void | SetBlockingFactor (const IntVect &new_bf) noexcept |
| void | SetBlockingFactor (const Vector< int > &new_bf) noexcept |
| void | SetBlockingFactor (const Vector< IntVect > &new_bf) noexcept |
| void | SetGridEff (Real eff) noexcept |
| void | SetNProper (int n) noexcept |
| void | SetFinestLevel (int new_finest_level) noexcept |
| void | SetDistributionMap (int lev, const DistributionMapping &dmap_in) noexcept |
| void | SetBoxArray (int lev, const BoxArray &ba_in) noexcept |
| void | SetGeometry (int lev, const Geometry &geom_in) noexcept |
| int | GetLevel (Box const &domain) const noexcept |
| void | ClearDistributionMap (int lev) noexcept |
| void | ClearBoxArray (int lev) noexcept |
| int | nErrorBuf (int lev, int direction=0) const noexcept |
| const IntVect & | nErrorBufVect (int lev) const noexcept |
| Real | gridEff () const noexcept |
| int | nProper () const noexcept |
| const IntVect & | blockingFactor (int lev) const noexcept |
| const IntVect & | maxGridSize (int lev) const noexcept |
| bool | LevelDefined (int lev) const noexcept |
| bool | useFixedCoarseGrids () const noexcept |
| int | useFixedUpToLevel () const noexcept |
| void | ChopGrids (int lev, BoxArray &ba, int target_size) const |
| BoxArray | MakeBaseGrids () const |
| void | MakeNewGrids (int lbase, Real time, int &new_finest, Vector< BoxArray > &new_grids) |
| void | MakeNewGrids (Real time=0.0) |
| virtual void | ManualTagsPlacement (int, TagBoxArray &, const Vector< IntVect > &) |
| virtual BoxArray | GetAreaNotToTag (int) |
| Long | CountCells (int lev) const noexcept |
Static Public Member Functions | |
| static WarpX & | GetInstance () |
| static void | ResetInstance () |
| static void | Finalize () |
| This method has to be called at the end of the simulation. It deletes the WarpX instance. | |
| static std::string | Version () |
| Version of WarpX executable. | |
| static std::string | PicsarVersion () |
| Version of PICSAR dependency. | |
| static amrex::LayoutData< amrex::Real > * | getCosts (int lev) |
| static bool | isAnyParticleBoundaryThermal () |
| static std::array< amrex::Real, 3 > | CellSize (int lev) |
| static amrex::XDim3 | InvCellSize (int lev) |
| static amrex::RealBox | getRealBox (const amrex::Box &bx, int lev) |
| static amrex::XDim3 | LowerCorner (const amrex::Box &bx, int lev, amrex::Real time_shift_delta) |
| Return the lower corner of the box in real units. | |
| static amrex::XDim3 | UpperCorner (const amrex::Box &bx, int lev, amrex::Real time_shift_delta) |
| Return the upper corner of the box in real units. | |
| static amrex::IntVect | RefRatio (int lev) |
| static const amrex::iMultiFab * | CurrentBufferMasks (int lev) |
| static const amrex::iMultiFab * | GatherBufferMasks (int lev) |
| static int | moving_window_active (int const step) |
| static void | ComputeDivB (amrex::MultiFab &divB, int dcomp, ablastr::fields::VectorField const &B, const std::array< amrex::Real, 3 > &dx) |
| static void | ComputeDivB (amrex::MultiFab &divB, int dcomp, ablastr::fields::VectorField const &B, const std::array< amrex::Real, 3 > &dx, amrex::IntVect ngrow) |
Static Public Attributes | |
| static auto | current_deposition_algo = CurrentDepositionAlgo::Default |
| Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay, Villasenor) | |
| static auto | charge_deposition_algo = ChargeDepositionAlgo::Default |
| Integer that corresponds to the charge deposition algorithm (only standard deposition) | |
| static auto | field_gathering_algo = GatheringAlgo::Default |
| Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving) | |
| static auto | particle_pusher_algo = ParticlePusherAlgo::Default |
| Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary) | |
| static auto | electromagnetic_solver_id = ElectromagneticSolverAlgo::Default |
| Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT) | |
| static auto | load_balance_costs_update_algo = LoadBalanceCostsUpdateAlgo::Default |
| static amrex::Array< FieldBoundaryType, 3 > | field_boundary_lo |
| static amrex::Array< FieldBoundaryType, 3 > | field_boundary_hi |
| static amrex::Array< ParticleBoundaryType, 3 > | particle_boundary_lo |
| static amrex::Array< ParticleBoundaryType, 3 > | particle_boundary_hi |
| static auto | time_dependency_J = TimeDependencyJ::Default |
| static auto | time_dependency_rho = TimeDependencyRho::Default |
| static bool | do_single_precision_comms = false |
| perform field communications in single precision | |
| static bool | do_shared_mem_charge_deposition = false |
| used shared memory algorithm for charge deposition | |
| static bool | do_shared_mem_current_deposition = false |
| use shared memory algorithm for current deposition | |
| static int | shared_mem_current_tpb = 128 |
| number of threads to use per block in shared deposition | |
| static amrex::IntVect | shared_tilesize |
| tileSize to use for shared current deposition operations | |
| static amrex::IntVect | m_fill_guards_fields = amrex::IntVect(0) |
| Whether to fill guard cells when computing inverse FFTs of fields. | |
| static amrex::IntVect | m_fill_guards_current = amrex::IntVect(0) |
| Whether to fill guard cells when computing inverse FFTs of currents. | |
| static bool | do_dive_cleaning = false |
| static bool | do_divb_cleaning = false |
| Solve additional Maxwell equation for G in order to control errors in magnetic Gauss' law. | |
| static int | nox = 0 |
| Order of the particle shape factors (splines) along x. | |
| static int | noy = 0 |
| Order of the particle shape factors (splines) along y. | |
| static int | noz = 0 |
| Order of the particle shape factors (splines) along z. | |
| static int | particle_max_grid_crossings = 1 |
| Maximum number of allowed grid crossings for particles. | |
| static int | field_centering_nox = 2 |
| Order of finite centering of fields (from staggered grid to nodal grid), along x. | |
| static int | field_centering_noy = 2 |
| Order of finite centering of fields (from staggered grid to nodal grid), along y. | |
| static int | field_centering_noz = 2 |
| Order of finite centering of fields (from staggered grid to nodal grid), along z. | |
| static int | n_rz_azimuthal_modes = 1 |
| Number of modes for the RZ multi-mode version. | |
| static int | ncomps = 1 |
| static bool | use_fdtd_nci_corr = false |
| static bool | galerkin_interpolation = true |
| static bool | use_filter = true |
| If true, a bilinear filter is used to smooth charge and currents. | |
| static bool | use_kspace_filter = true |
| If true, the bilinear filtering of charge and currents is done in Fourier space. | |
| static bool | use_filter_compensation = false |
| If true, a compensation step is added to the bilinear filtering of charge and currents. | |
| static bool | serialize_initial_conditions = false |
| If true, the initial conditions from random number generators are serialized (useful for reproducible testing with OpenMP) | |
| static amrex::Real | gamma_boost = 1._rt |
| Lorentz factor of the boosted frame in which a boosted-frame simulation is run. | |
| static amrex::Real | beta_boost = 0._rt |
| Beta value corresponding to the Lorentz factor of the boosted frame of the simulation. | |
| static amrex::Vector< int > | boost_direction = {0,0,0} |
| Direction of the Lorentz transform that defines the boosted frame of the simulation. | |
| static amrex::Real | zmin_domain_boost_step_0 = 0._rt |
| static bool | compute_max_step_from_btd = false |
| If true, the code will compute max_step from the back transformed diagnostics. | |
| static bool | do_dynamic_scheduling = true |
| static bool | refine_plasma = false |
| static utils::parser::IntervalsParser | sort_intervals |
| static amrex::IntVect | sort_bin_size |
| static bool | sort_particles_for_deposition |
| If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition. | |
| static amrex::IntVect | sort_idx_type |
| Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed. | |
| static int | n_field_gather_buffer = -1 |
| static int | n_current_deposition_buffer = -1 |
| static auto | grid_type = ablastr::utils::enums::GridType::Default |
| static amrex::IntVect | filter_npass_each_dir |
| static auto | electrostatic_solver_id = ElectrostaticSolverAlgo::Default |
| static auto | poisson_solver_id = PoissonSolverAlgo::Default |
| static int | do_moving_window = 0 |
| static int | start_moving_window_step = 0 |
| static int | end_moving_window_step = -1 |
| static int | moving_window_dir = -1 |
| static amrex::Real | moving_window_v = std::numeric_limits<amrex::Real>::max() |
| static bool | fft_do_time_averaging = false |
Protected Member Functions | |
| 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 initialized with 0. The E and B fields are initialized using user-defined inputs. The initialization type is set using "B_ext_grid_init_style" and "E_ext_grid_init_style". The initialization style is set to "default" if not explicitly defined by the user, and the E and B fields are initialized with E_external_grid and B_external_grid, respectively, each with a default value of 0. If the initialization type for the E and B field is "constant", then, the E and B fields at all the levels are initialized with user-defined values for E_external_grid and B_external_grid. If the initialization type for B-field is set to "parse_ext_grid_function", then, the parser is used to read Bx_external_grid_function(x,y,z), By_external_grid_function(x,y,z), and Bz_external_grid_function(x,y,z). Similarly, if the E-field initialization type is set to "parse_ext_grid_function", then, the parser is used to read Ex_external_grid_function(x,y,z), Ey_external_grid_function(x,y,z), and Ex_external_grid_function(x,y,z). The parser for the E and B initialization assumes that the function has three independent variables, at max, namely, x, y, z. However, any number of constants can be used in the function used to define the E and B fields on the grid. | |
| amrex::DistributionMapping | MakeDistributionMap (int lev, amrex::BoxArray const &ba) final |
| Use this function to override how DistributionMapping is made. | |
| void | MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray &new_grids, const amrex::DistributionMapping &new_dmap) final |
| void | MakeNewLevelFromCoarse (int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final |
| void | RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) final |
| void | ClearLevel (int lev) final |
| Delete level data. Called by AmrCore::regrid. | |
Protected Member Functions inherited from amrex::AmrCore | |
| void | ErrorEst (int lev, TagBoxArray &tags, Real time, int ngrow) override=0 |
| void | MakeNewLevelFromScratch (int lev, Real time, const BoxArray &ba, const DistributionMapping &dm) override=0 |
| virtual void | MakeNewLevelFromCoarse (int lev, Real time, const BoxArray &ba, const DistributionMapping &dm)=0 |
| virtual void | RemakeLevel (int lev, Real time, const BoxArray &ba, const DistributionMapping &dm)=0 |
Protected Member Functions inherited from amrex::AmrMesh | |
| void | checkInput () |
| void | SetIterateToFalse () noexcept |
| void | SetUseNewChop () noexcept |
Private Member Functions | |
| WarpX () | |
| WarpX constructor. This method should not be called directly, but rather through the static member function MakeWarpX(). MakeWarpX() is called by GetInstance () if an instance of the WarpX class does not currently exist. | |
| void | HandleSignals () |
| Complete the asynchronous broadcast of signal flags, and initiate a checkpoint if requested. | |
| void | FillBoundaryB (int lev, PatchType patch_type, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryE (int lev, PatchType patch_type, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryF (int lev, PatchType patch_type, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryG (int lev, PatchType patch_type, amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt) |
| void | FillBoundaryB_avg (int lev, PatchType patch_type, amrex::IntVect ng) |
| void | FillBoundaryE_avg (int lev, PatchType patch_type, amrex::IntVect ng) |
| void | AddExternalFields (int lev) |
| 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. | |
| void | OneStep_nosub (amrex::Real cur_time) |
| Perform one PIC iteration, without subcycling i.e. all levels/patches use the same timestep (that of the finest level) for the field advance and particle pusher. | |
| void | OneStep_sub1 (amrex::Real cur_time) |
| Perform one PIC iteration, with subcycling i.e. The fine patch uses a smaller timestep (and steps more often) than the coarse patch, for the field advance and particle pusher. | |
| void | OneStep_JRhom (amrex::Real cur_time) |
| Perform one PIC iteration, with the multiple J deposition per time step. | |
| 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 fine patch (on the same level). | |
| 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 patches at lev+1 | |
| void | SumBoundaryJ (const ablastr::fields::MultiLevelVectorField ¤t, int lev, int idim, const amrex::Periodicity &period) |
| void | SumBoundaryJ (const ablastr::fields::MultiLevelVectorField ¤t, int lev, const amrex::Periodicity &period) |
| void | RestrictRhoFromFineToCoarsePatch (int lev) |
| void | ApplyFilterandSumBoundaryRho (const ablastr::fields::MultiLevelScalarField &charge_fp, const ablastr::fields::MultiLevelScalarField &charge_cp, int lev, PatchType patch_type, int icomp, int ncomp) |
| 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 refinement patches at lev+1 | |
| void | ReadParameters () |
| void | BackwardCompatibility () |
| void | InitFromScratch () |
| void | AllocLevelData (int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) |
| amrex::DistributionMapping | GetRestartDMap (const std::string &chkfile, const amrex::BoxArray &ba, int lev) const |
| void | InitFromCheckpoint () |
| void | PostRestart () |
| void | InitPML () |
| void | ComputePMLFactors () |
| void | InitFilter () |
| void | InitDiagnostics () |
| void | InitNCICorrector () |
| void | CheckGuardCells () |
| Check that the number of guard cells is smaller than the number of valid cells, for all available MultiFabs, and abort otherwise. | |
| void | BuildBufferMasks () |
| const amrex::iMultiFab * | getCurrentBufferMasks (int lev) const |
| const amrex::iMultiFab * | getGatherBufferMasks (int lev) const |
| void | AllocLevelMFs (int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, const amrex::IntVect &ngEB, amrex::IntVect &ngJ, const amrex::IntVect &ngRho, const amrex::IntVect &ngF, const amrex::IntVect &ngG, bool aux_is_nodal) |
| void | AllocLevelSpectralSolverRZ (amrex::Vector< std::unique_ptr< SpectralSolverRZ > > &spectral_solver, int lev, const amrex::BoxArray &realspace_ba, const amrex::DistributionMapping &dm, const std::array< amrex::Real, 3 > &dx) |
| bool | checkStopSimulation (amrex::Real cur_time) |
| void | HandleParticlesAtBoundaries (int step, amrex::Real cur_time, int num_moved) |
| void | ExplicitFillBoundaryEBUpdateAux () |
| void | PushPSATD (amrex::Real start_time) |
| void | PSATDForwardTransformEB () |
| Forward FFT of E,B on all mesh refinement levels. | |
| void | PSATDBackwardTransformEB () |
| Backward FFT of E,B on all mesh refinement levels, with field damping in the guard cells (if needed) | |
| 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. | |
| 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) | |
| void | PSATDBackwardTransformJ (std::string const &J_fp_string, std::string const &J_cp_string) |
| Backward FFT of J on all mesh refinement levels. | |
| 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) | |
| void | PSATDMoveRhoNewToRhoOld () |
| Copy rho_new to rho_old in spectral space (when rho is linear in time) | |
| void | PSATDMoveJNewToJOld () |
| Copy J_new to J_old in spectral space (when J is linear in time) | |
| void | PSATDMoveRhoNewToRhoMid () |
| Copy rho_new to rho_mid in spectral space (when rho is quadratic in time) | |
| void | PSATDMoveJNewToJMid () |
| Copy J_new to J_mid in spectral space (when J is quadratic in time) | |
| void | PSATDForwardTransformF () |
| Forward FFT of F on all mesh refinement levels. | |
| void | PSATDBackwardTransformF () |
| Backward FFT of F on all mesh refinement levels. | |
| void | PSATDForwardTransformG () |
| Forward FFT of G on all mesh refinement levels. | |
| void | PSATDBackwardTransformG () |
| Backward FFT of G on all mesh refinement levels. | |
| void | PSATDPushSpectralFields () |
| Update all necessary fields in spectral space. | |
| void | PSATDScaleAverageFields (amrex::Real scale_factor) |
| Scale averaged E,B fields to account for time integration. | |
| void | PSATDEraseAverageFields () |
| Set averaged E,B fields to zero before new iteration. | |
Static Private Member Functions | |
| static void | MakeWarpX () |
| This method creates a new instance of the WarpX class. | |
Static Private Attributes | |
| static WarpX * | m_instance = nullptr |
| static constexpr bool | sync_nodal_points = true |
Additional Inherited Members | |
Protected Attributes inherited from amrex::AmrCore | |
| std::unique_ptr< AmrParGDB > | m_gdb |
Protected Attributes inherited from amrex::AmrMesh | |
| int | finest_level |
| Vector< Geometry > | geom |
| Vector< DistributionMapping > | dmap |
| Vector< BoxArray > | grids |
| unsigned int | num_setdm |
| unsigned int | num_setba |
Protected Attributes inherited from amrex::AmrInfo | |
| int | verbose |
| int | max_level |
| Vector< IntVect > | ref_ratio |
| Vector< IntVect > | blocking_factor |
| Vector< IntVect > | max_grid_size |
| Vector< IntVect > | n_error_buf |
| Real | grid_eff |
| int | n_proper |
| int | use_fixed_upto_level |
| bool | use_fixed_coarse_grids |
| bool | refine_grid_layout |
| IntVect | refine_grid_layout_dims |
| bool | check_input |
| bool | use_new_chop |
| bool | iterate_on_new_grids |
|
override |
Destructor
|
delete |
Copy constructor
|
delete |
Move constructor
|
private |
WarpX constructor. This method should not be called directly, but rather through the static member function MakeWarpX(). MakeWarpX() is called by GetInstance () if an instance of the WarpX class does not currently exist.
|
private |
Update the currents of lev by adding the currents from particles that are in the mesh refinement patches at lev+1
More precisely, apply filter and sum boundaries for the current of:
levlev+1 (same resolution)lev+1 (i.e. for particules that are within the mesh refinement patch, but do not deposit on the mesh refinement patch because they are too close to the boundary)Then update the fine patch of lev by adding the currents for the coarse patch (and buffer region) of lev+1
|
private |
| void WarpX::AddMagnetostaticFieldLabFrame | ( | ) |
|
private |
Update the charge density of lev by adding the charge density from particles that are in the mesh refinement patches at lev+1
More precisely, apply filter and sum boundaries for the charge density of:
levlev+1 (same resolution)lev+1 (i.e. for particules that are within the mesh refinement patch, but do not deposit on the mesh refinement patch because they are too close to the boundary)Then update the fine patch of lev by adding the charge density for the coarse patch (and buffer region) of lev+1
| void WarpX::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 MultiFabs (used to ease the access to MultiFabs from the Python interface.
| [out] | mf | The iMultiFab unique pointer to be allocated |
| [in] | ba | The BoxArray describing the iMultiFab |
| [in] | dm | The DistributionMapping describing the iMultiFab |
| [in] | ncomp | The number of components in the iMultiFab |
| [in] | ngrow | The number of guard cells in the iMultiFab |
| [in] | level | The refinement level |
| [in] | name | The name of the iMultiFab to use in the map |
| [in] | initial_value | The optional initial value |
|
private |
|
private |
EB: Lengths of the mesh edges
EB: Areas of the mesh faces
EB: area_mod contains the modified areas of the mesh faces, i.e. if a face is enlarged it contains the area of the enlarged face This is only used for the ECT solver.
Venl contains the electromotive force for every mesh face, i.e. every entry is the corresponding entry in ECTRhofield multiplied by the total area (possibly with enlargement) This is only used for the ECT solver.
ECTRhofield is needed only by the ect solver and it contains the electromotive force density for every mesh face. The name ECTRhofield has been used to comply with the notation of the paper https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4463918 (page 9, equation 4 and below). Although it's called rho it has nothing to do with the charge density! This is only used for the ECT solver.
|
private |
| void WarpX::ApplyBfieldBoundary | ( | int | lev, |
| PatchType | patch_type, | ||
| SubcyclingHalf | subcycling_half, | ||
| amrex::Real | cur_time ) |
| void WarpX::ApplyEfieldBoundary | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | cur_time ) |
| void WarpX::ApplyElectronPressureBoundary | ( | int | lev, |
| PatchType | patch_type ) |
When the Ohm's law solver is used, the electron pressure values on PEC boundaries are set to enforce a zero derivative Neumann condition, otherwise the E_perp values have large spikes (that grows as 1/dx). This has to be done since the E-field is algebraically calculated instead of evolved which means the 1/dx growth is not avoided by multiplication with dt as happens in the B-field evolve.
| void WarpX::ApplyFieldBoundaryOnAxis | ( | amrex::MultiFab * | Er, |
| amrex::MultiFab * | Et, | ||
| amrex::MultiFab * | Ez, | ||
| int | lev ) const |
|
private |
| void WarpX::ApplyFilterandSumBoundaryRho | ( | int | lev, |
| int | glev, | ||
| amrex::MultiFab & | rho, | ||
| int | icomp, | ||
| int | ncomp ) |
| void WarpX::ApplyFilterMF | ( | const ablastr::fields::MultiLevelVectorField & | mfvec, |
| int | lev ) |
| void WarpX::ApplyFilterMF | ( | const ablastr::fields::MultiLevelVectorField & | mfvec, |
| int | lev, | ||
| int | idim ) |
| void WarpX::ApplyInverseVolumeScalingToChargeDensity | ( | amrex::MultiFab * | Rho, |
| int | lev ) const |
| void WarpX::ApplyInverseVolumeScalingToCurrentDensity | ( | amrex::MultiFab * | Jx, |
| amrex::MultiFab * | Jy, | ||
| amrex::MultiFab * | Jz, | ||
| int | lev ) const |
| void WarpX::ApplyJfieldBoundary | ( | int | lev, |
| amrex::MultiFab * | Jx, | ||
| amrex::MultiFab * | Jy, | ||
| amrex::MultiFab * | Jz, | ||
| PatchType | patch_type ) |
If a PEC boundary conditions is used the current density deposited in the guard cells have to be reflected back into the simulation domain. This function performs that logic.
| void WarpX::applyMirrors | ( | amrex::Real | time | ) |
| void WarpX::ApplyRhofieldBoundary | ( | int | lev, |
| amrex::MultiFab * | Rho, | ||
| PatchType | patch_type ) |
If a PEC boundary conditions is used the charge density deposited in the guard cells have to be reflected back into the simulation domain. This function performs that logic.
|
private |
This function queries deprecated input parameters and abort the run if one of them is specified.
|
private |
| void WarpX::BuildBufferMasksInBox | ( | amrex::Box | tbx, |
| amrex::IArrayBox & | buffer_mask, | ||
| const amrex::IArrayBox & | guard_mask, | ||
| int | ng ) |
| void WarpX::CalculateExternalCurlA | ( | ) |
|
static |
|
private |
Check that the number of guard cells is smaller than the number of valid cells, for all available MultiFabs, and abort otherwise.
| void WarpX::CheckLoadBalance | ( | int | step | ) |
Check and potentially compute load balancing
|
nodiscardprivate |
Stop the simulation at the end of the current step?
|
finalprotectedvirtual |
Delete level data. Called by AmrCore::regrid.
Implements amrex::AmrCore.
| void WarpX::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, and records in costs
| [in] | costs | vector of (unique_ptr to) vectors; expected to be initialized to correct number of boxes and boxes per level |
| void WarpX::ComputeDistanceToEB | ( | ) |
Compute the level set function used for particle-boundary interaction.
|
static |
|
static |
| void WarpX::ComputeDivE | ( | amrex::MultiFab & | divE, |
| int | lev ) |
| void WarpX::ComputeDt | ( | ) |
Determine the timestep of the simulation.
| void WarpX::ComputeEightWaysExtensions | ( | ) |
Do the eight-ways extension.
| void WarpX::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 function for the external fields. The subroutine will parse the x_/y_z_external_grid_function and then, the field multifab is initialized based on the (x,y,z) position on the staggered yee-grid or cell-centered grid, in the interior cells and guard cells.
| [in] | field | FieldType or string containing field name to grab from register to write into |
| [in] | fx_parser | parser function to initialize x-field |
| [in] | fy_parser | parser function to initialize y-field |
| [in] | fz_parser | parser function to initialize z-field |
| [in] | lev | level of the Multifabs that is initialized |
| [in] | patch_type | PatchType on which the field is initialized (fine or coarse) |
| [in] | eb_update_field | flag indicating which gridpoints should be modified by this functions |
| [in] | use_eb_flags | (default:true) flag indicating if eb points should be excluded or not |
| void WarpX::ComputeFaceExtensions | ( | ) |
Main function computing the cell extension. Where possible it computes one-way extensions and, when this is not possible, it does eight-ways extensions.
| void WarpX::ComputeMagnetostaticField | ( | ) |
| void WarpX::ComputeMaxStep | ( | ) |
Compute the last time step of the simulation Calls computeMaxStepBoostAccelerator() if required.
| void WarpX::computeMaxStepBoostAccelerator | ( | ) |
| void WarpX::ComputeOneWayExtensions | ( | ) |
Do the one-way extension.
|
private |
| void WarpX::ComputeSpaceChargeField | ( | bool | reset_fields | ) |
Electrostatic solve call
| void WarpX::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 ) |
| void WarpX::CopyJPML | ( | ) |
Copy the current J from the regular grid to the PML.
|
static |
| void WarpX::DampFieldsInGuards | ( | int | lev, |
| amrex::MultiFab * | mf ) |
Private function for spectral solver Applies a damping factor in the guards cells that extend beyond the extent of the domain, reducing fluctuations that can appear in parallel simulations. This will be called when FieldBoundaryType is set to damped. Scalar version.
| void WarpX::DampFieldsInGuards | ( | int | lev, |
| const ablastr::fields::VectorField & | Efield, | ||
| const ablastr::fields::VectorField & | Bfield ) |
Private function for spectral solver Applies a damping factor in the guards cells that extend beyond the extent of the domain, reducing fluctuations that can appear in parallel simulations. This will be called when FieldBoundaryType is set to damped. Vector version.
| void WarpX::DampJPML | ( | ) |
| void WarpX::DampJPML | ( | int | lev | ) |
| void WarpX::DampJPML | ( | int | lev, |
| PatchType | patch_type ) |
| void WarpX::DampPML | ( | ) |
| void WarpX::DampPML | ( | int | lev | ) |
| void WarpX::DampPML | ( | int | lev, |
| PatchType | patch_type ) |
| void WarpX::DampPML_Cartesian | ( | int | lev, |
| PatchType | patch_type ) |
| void WarpX::doFieldIonization | ( | ) |
Run the ionization module on all species
|
inlinenodiscard |
|
inlinenodiscard |
| void WarpX::doQEDEvents | ( | ) |
Run the QED module on all species
|
final |
Tagging cells for refinement.
| void WarpX::Evolve | ( | int | numsteps = -1 | ) |
reduced diags
| void WarpX::EvolveB | ( | amrex::Real | dt, |
| SubcyclingHalf | subcycling_half, | ||
| amrex::Real | start_time ) |
| void WarpX::EvolveB | ( | int | lev, |
| amrex::Real | dt, | ||
| SubcyclingHalf | subcycling_half, | ||
| amrex::Real | start_time ) |
| void WarpX::EvolveB | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt, | ||
| SubcyclingHalf | subcycling_half, | ||
| amrex::Real | start_time ) |
| void WarpX::EvolveE | ( | amrex::Real | dt, |
| amrex::Real | start_time ) |
| void WarpX::EvolveE | ( | int | lev, |
| amrex::Real | dt, | ||
| amrex::Real | start_time ) |
| void WarpX::EvolveE | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt, | ||
| amrex::Real | start_time ) |
| void WarpX::EvolveF | ( | amrex::Real | dt, |
| int const | rho_comp ) |
| void WarpX::EvolveF | ( | int | lev, |
| amrex::Real | dt, | ||
| int const | rho_comp ) |
| void WarpX::EvolveF | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt, | ||
| int const | rho_comp ) |
| void WarpX::EvolveG | ( | amrex::Real | dt | ) |
| void WarpX::EvolveG | ( | int | lev, |
| amrex::Real | dt ) |
| void WarpX::EvolveG | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt ) |
|
private |
Update the E and B fields in the explicit em PIC scheme.
At the beginning, we have B^{n} and E^{n}. Particles have p^{n} and x^{n}.
| void WarpX::FillBoundaryAux | ( | amrex::IntVect | ng | ) |
| void WarpX::FillBoundaryAux | ( | int | lev, |
| amrex::IntVect | ng ) |
| void WarpX::FillBoundaryB | ( | amrex::IntVect | ng, |
| std::optional< bool > | nodal_sync = std::nullopt ) |
| void WarpX::FillBoundaryB | ( | int | lev, |
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync = std::nullopt ) |
|
private |
| void WarpX::FillBoundaryB_avg | ( | amrex::IntVect | ng | ) |
| void WarpX::FillBoundaryB_avg | ( | int | lev, |
| amrex::IntVect | ng ) |
|
private |
| void WarpX::FillBoundaryE | ( | amrex::IntVect | ng, |
| std::optional< bool > | nodal_sync = std::nullopt ) |
| void WarpX::FillBoundaryE | ( | int | lev, |
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync = std::nullopt ) |
|
private |
| void WarpX::FillBoundaryE_avg | ( | amrex::IntVect | ng | ) |
| void WarpX::FillBoundaryE_avg | ( | int | lev, |
| amrex::IntVect | ng ) |
|
private |
| void WarpX::FillBoundaryF | ( | amrex::IntVect | ng, |
| std::optional< bool > | nodal_sync = std::nullopt ) |
| void WarpX::FillBoundaryF | ( | int | lev, |
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync = std::nullopt ) |
|
private |
| void WarpX::FillBoundaryG | ( | amrex::IntVect | ng, |
| std::optional< bool > | nodal_sync = std::nullopt ) |
| void WarpX::FillBoundaryG | ( | int | lev, |
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync = std::nullopt ) |
|
private |
|
static |
This method has to be called at the end of the simulation. It deletes the WarpX instance.
| void WarpX::FinishImplicitField | ( | const ablastr::fields::MultiLevelVectorField & | Field_fp, |
| const ablastr::fields::MultiLevelVectorField & | Field_n, | ||
| amrex::Real | theta ) |
| void WarpX::FinishImplicitParticleUpdate | ( | ) |
| void WarpX::FinishMagneticFieldAndApplyBCs | ( | ablastr::fields::MultiLevelVectorField const & | a_Bn, |
| amrex::Real | a_theta, | ||
| amrex::Real | a_time ) |
|
static |
|
inline |
|
inlinenodiscard |
returns the load balance interval
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
Coarsest-level Domain Decomposition
If specified, the domain will be chopped into the exact number of pieces in each dimension as specified by this parameter.
|
inline |
|
inlinenodiscard |
|
inline |
|
inlinenodiscard |
If an authors' string is specified in the inputfile, this method returns that string. Otherwise, it returns an empty string.
|
static |
|
inlinenodiscardprivate |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinenodiscard |
|
inlinenodiscard |
|
nodiscard |
Get pointer to the amrex::MultiFab containing the dotMask for the specified field.
|
inline |
|
inlinenodiscardprivate |
|
static |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
| amrex::Real WarpX::getLoadBalanceEfficiency | ( | int | lev | ) |
|
inlinenodiscard |
|
inline |
|
inline |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
inline |
|
inline |
| PML * WarpX::GetPML | ( | int | lev | ) |
| PML_RZ * WarpX::GetPML_RZ | ( | int | lev | ) |
|
nodiscard |
get low-high-low-high-... vector for each direction indicating if mother grid PMLs are enabled
|
static |
|
nodiscardprivate |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
inlinenodiscard |
|
private |
Perform essential particle house keeping at boundaries
Inject, communicate, scrape and sort particles.
| step | current step |
| cur_time | current time |
| num_moved | number of cells the moving window moved |
|
private |
Complete the asynchronous broadcast of signal flags, and initiate a checkpoint if requested.
| void WarpX::Hybrid_QED_Push | ( | amrex::Vector< amrex::Real > | dt | ) |
apply QED correction on electric field
| dt | vector of time steps (for all levels) |
| void WarpX::Hybrid_QED_Push | ( | int | lev, |
| amrex::Real | dt ) |
apply QED correction on electric field for level lev
| lev | mesh refinement level |
| dt | time step |
| void WarpX::Hybrid_QED_Push | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt ) |
apply QED correction on electric field for level lev and patch type patch_type
| lev | mesh refinement level |
| patch_type | which MR patch: PatchType::fine or PatchType::coarse |
| dt | time step |
| void WarpX::HybridPICDepositRhoAndJ | ( | ) |
Hybrid-PIC deposition function. Helper function to contain all the needed logic to deposit charge and current densities for use in the Ohm's law solver. The deposition is done into the rho_fp and current_fp multifabs.
| void WarpX::HybridPICEvolveFields | ( | ) |
Hybrid-PIC field evolve function. This function contains the logic involved in evolving the electric and magnetic fields in the hybrid PIC algorithm.
| void WarpX::HybridPICInitializeRhoJandB | ( | ) |
Hybrid-PIC initial deposition function. The hybrid-PIC algorithm uses the charge and current density from both the current and previous step when updating the fields. This function deposits the initial ion charge and current (before the first particle push), to be used in the HybridPICEvolveFields() function.
| void WarpX::ImplicitComputeRHSE | ( | amrex::Real | dt, |
| WarpXSolverVec & | a_Erhs_vec ) |
| void WarpX::ImplicitComputeRHSE | ( | int | lev, |
| amrex::Real | dt, | ||
| WarpXSolverVec & | a_Erhs_vec ) |
| void WarpX::ImplicitComputeRHSE | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt, | ||
| WarpXSolverVec & | a_Erhs_vec ) |
| void WarpX::InitData | ( | ) |
|
private |
| void WarpX::InitEB | ( | ) |
|
private |
|
private |
|
private |
| void WarpX::InitializeEBGridData | ( | int | lev | ) |
|
protected |
This function initializes E, B, rho, and F, at all the levels of the multifab. rho and F are initialized with 0. The E and B fields are initialized using user-defined inputs. The initialization type is set using "B_ext_grid_init_style" and "E_ext_grid_init_style". The initialization style is set to "default" if not explicitly defined by the user, and the E and B fields are initialized with E_external_grid and B_external_grid, respectively, each with a default value of 0. If the initialization type for the E and B field is "constant", then, the E and B fields at all the levels are initialized with user-defined values for E_external_grid and B_external_grid. If the initialization type for B-field is set to "parse_ext_grid_function", then, the parser is used to read Bx_external_grid_function(x,y,z), By_external_grid_function(x,y,z), and Bz_external_grid_function(x,y,z). Similarly, if the E-field initialization type is set to "parse_ext_grid_function", then, the parser is used to read Ex_external_grid_function(x,y,z), Ey_external_grid_function(x,y,z), and Ex_external_grid_function(x,y,z). The parser for the E and B initialization assumes that the function has three independent variables, at max, namely, x, y, z. However, any number of constants can be used in the function used to define the E and B fields on the grid.
|
private |
|
private |
|
static |
|
static |
True if any of the particle boundary condition type is Thermal
| void WarpX::LoadBalance | ( | ) |
perform load balance; compute and communicate new amrex::DistributionMapping
| void WarpX::LoadExternalFields | ( | int | lev | ) |
Load field values from a user-specified openPMD file, for the fields Ex, Ey, Ez, Bx, By, Bz.
|
static |
Return the lower corner of the box in real units.
| bx | The box |
| lev | The refinement level of the box |
| time_shift_delta | The time relative to the current time at which to calculate the position (when v_galilean is not zero) |
| void WarpX::MacroscopicEvolveE | ( | amrex::Real | dt, |
| amrex::Real | start_time ) |
| void WarpX::MacroscopicEvolveE | ( | int | lev, |
| amrex::Real | dt, | ||
| amrex::Real | start_time ) |
| void WarpX::MacroscopicEvolveE | ( | int | lev, |
| PatchType | patch_type, | ||
| amrex::Real | dt, | ||
| amrex::Real | start_time ) |
|
nodiscardfinalprotectedvirtual |
Use this function to override how DistributionMapping is made.
Reimplemented from amrex::AmrMesh.
|
finalprotected |
Make a new level using provided BoxArray and DistributionMapping and fill with interpolated coarse level data. Called by AmrCore::regrid.
|
finalprotected |
Make a new level from scratch using provided BoxArray and DistributionMapping. Only used during initialization. Called by AmrCoreInitFromScratch.
|
staticprivate |
This method creates a new instance of the WarpX class.
|
inlinenodiscard |
| int WarpX::MoveWindow | ( | int | step, |
| bool | move_j ) |
Move the moving window.
| step | Time step |
| move_j | whether the current (and the charge, if allocated) is shifted or not |
|
inlinestatic |
Returns true if the moving window is active for the provided step
| step | time step |
|
private |
Perform collisions, particle injection, and advance fields and particles by one time step.
|
private |
Perform one PIC iteration, with the multiple J deposition per time step.
|
private |
Perform one PIC iteration, without subcycling i.e. all levels/patches use the same timestep (that of the finest level) for the field advance and particle pusher.
|
private |
Perform one PIC iteration, with subcycling i.e. The fine patch uses a smaller timestep (and steps more often) than the coarse patch, for the field advance and particle pusher.
This version of subcycling only works for 2 levels and with a refinement ratio of 2. The particles and fields of the fine patch are pushed twice (with dt[coarse]/2) in this routine. The particles of the coarse patch and mother grid are pushed only once (with dt[coarse]). The fields on the coarse patch and mother grid are pushed in a way which is equivalent to pushing once only, with a current which is the average of the coarse + fine current at the 2 steps of the fine grid.
|
static |
Version of PICSAR dependency.
|
finalvirtual |
Use this function to override the Level 0 grids made by AMReX. This function is called in amrex::AmrCore::InitFromScratch.
create object for reduced diagnostics
Reimplemented from amrex::AmrMesh.
|
private |
| void WarpX::PrintMainPICparameters | ( | ) |
Print main PIC parameters to stdout
| void WarpX::ProjectionCleanDivB | ( | ) |
|
private |
Backward FFT of E,B on all mesh refinement levels, with field damping in the guard cells (if needed)
|
private |
Backward FFT of averaged E,B on all mesh refinement levels.
| E_avg_fp | Vector of three-dimensional arrays (for each level) storing the fine patch averaged electric field to be transformed |
| B_avg_fp | Vector of three-dimensional arrays (for each level) storing the fine patch averaged magnetic field to be transformed |
| E_avg_cp | Vector of three-dimensional arrays (for each level) storing the coarse patch averaged electric field to be transformed |
| B_avg_cp | Vector of three-dimensional arrays (for each level) storing the coarse patch averaged magnetic field to be transformed |
|
private |
Backward FFT of F on all mesh refinement levels.
|
private |
Backward FFT of G on all mesh refinement levels.
|
private |
Backward FFT of J on all mesh refinement levels.
| J_fp_string | String representing the fine patch current to be transformed |
| J_cp_string | String representing the coarse patch current to be transformed |
|
private |
Set averaged E,B fields to zero before new iteration.
|
private |
Forward FFT of E,B on all mesh refinement levels.
|
private |
Forward FFT of F on all mesh refinement levels.
|
private |
Forward FFT of G on all mesh refinement levels.
|
private |
Forward FFT of J on all mesh refinement levels, with k-space filtering (if needed)
| J_fp_string | String representing the fine patch current to be transformed | |
| J_cp_string | String representing the coarse patch current to be transformed | |
| [in] | apply_kspace_filter | Control whether to apply filtering (only used in RZ geometry to avoid double filtering) |
|
private |
Forward FFT of rho on all mesh refinement levels, with k-space filtering (if needed)
| charge_fp_string | String representing the fine patch charge to be transformed | |
| charge_cp_string | String representing the coarse patch charge to be transformed | |
| [in] | icomp | index of fourth component (0 for rho_old, 1 for rho_new) |
| [in] | dcomp | index of spectral component (0 for rho_old, 1 for rho_new) |
| [in] | apply_kspace_filter | Control whether to apply filtering (only used in RZ geometry to avoid double filtering) |
|
private |
Copy J_new to J_mid in spectral space (when J is quadratic in time)
|
private |
Copy J_new to J_old in spectral space (when J is linear in time)
|
private |
Copy rho_new to rho_mid in spectral space (when rho is quadratic in time)
|
private |
Copy rho_new to rho_old in spectral space (when rho is linear in time)
|
private |
Update all necessary fields in spectral space.
|
private |
Scale averaged E,B fields to account for time integration.
| [in] | scale_factor | scalar to multiply each field component by |
| void WarpX::PushParticlesandDeposit | ( | amrex::Real | cur_time, |
| bool | skip_deposition = false, | ||
| PositionPushType | position_push_type = PositionPushType::Full, | ||
| MomentumPushType | momentum_push_type = MomentumPushType::Full, | ||
| ImplicitOptions const * | implicit_options = nullptr ) |
| void WarpX::PushParticlesandDeposit | ( | int | lev, |
| amrex::Real | cur_time, | ||
| SubcyclingHalf | subcycling_half = SubcyclingHalf::None, | ||
| bool | skip_deposition = false, | ||
| PositionPushType | position_push_type = PositionPushType::Full, | ||
| MomentumPushType | momentum_push_type = MomentumPushType::Full, | ||
| ImplicitOptions const * | implicit_options = nullptr ) |
|
private |
| void WarpX::ReadExternalFieldFromFile | ( | const std::string & | read_fields_from_path, |
| amrex::MultiFab * | mf, | ||
| const std::string & | F_name, | ||
| const std::string & | F_component ) |
Load field values from a user-specified openPMD file for a specific field (specified by F_name)
|
private |
|
static |
|
finalprotected |
Remake an existing level using provided BoxArray and DistributionMapping and fill with existing fine and coarse data. Called by AmrCore::regrid.
| void WarpX::RescaleCosts | ( | int | step | ) |
Perform running average of the LB costs
Only needed for timers cost update, heuristic load balance considers the instantaneous costs. This gives more importance to most recent costs.
| void WarpX::ResetCosts | ( | ) |
resets costs to zero
|
static |
| void WarpX::ResetProbDomain | ( | const amrex::RealBox & | rb | ) |
|
private |
Fills the values of the current on the coarse patch by averaging the values of the current of the fine patch (on the same level).
|
private |
| void WarpX::SaveParticlesAtImplicitStepStart | ( | ) |
| void WarpX::SetElectricFieldAndApplyBCs | ( | const WarpXSolverVec & | a_E, |
| amrex::Real | a_time ) |
|
inline |
| void WarpX::setLoadBalanceEfficiency | ( | int | lev, |
| amrex::Real | efficiency ) |
|
inline |
| void WarpX::setVectorPotentialBC | ( | ablastr::fields::MultiLevelVectorField const & | A | ) | const |
| void WarpX::ShiftGalileanBoundary | ( | ) |
This function shifts the boundary of the grid by 'm_v_galilean*dt'. In doding so, only positions attributes are changed while fields remain unchanged.
| void WarpX::SpectralSourceFreeFieldAdvance | ( | amrex::Real | start_time | ) |
|
inlinenodiscard |
|
private |
|
private |
| void WarpX::SyncCurrent | ( | const std::string & | current_fp_string | ) |
Apply filter and sum guard cells across MR levels. If current centering is used, center the current from a nodal grid to a staggered grid. For each MR level beyond level 0, interpolate the fine-patch current onto the coarse-patch current at the same level. Then, for each MR level, including level 0, apply filter and sum guard cells across levels.
| [in] | current_fp_string | the coarse of fine patch to use for current |
| void WarpX::SyncCurrentAndRho | ( | ) |
Synchronize J and rho: filter (if used), exchange guard cells, interpolate across MR levels and apply boundary conditions. Contains separate calls to WarpX::SyncCurrent and WarpX::SyncRho.
| void WarpX::SynchronizeVelocityWithPosition | ( | ) |
Push momentum one half step forward to synchronize with position. Also sets m_is_synchronized to true.
| void WarpX::SyncMassMatricesPC | ( | ) |
| void WarpX::SyncRho | ( | ) |
| void WarpX::SyncRho | ( | const ablastr::fields::MultiLevelScalarField & | charge_fp, |
| const ablastr::fields::MultiLevelScalarField & | charge_cp, | ||
| ablastr::fields::MultiLevelScalarField const & | charge_buffer ) |
| void WarpX::UpdateAuxilaryData | ( | ) |
| void WarpX::UpdateAuxilaryDataSameType | ( | ) |
| void WarpX::UpdateAuxilaryDataStagToNodal | ( | ) |
| void WarpX::UpdateDtFromParticleSpeeds | ( | ) |
Determine the simulation timestep from the maximum speed of all particles Sets timestep so that a particle can only cross cfl*dx cells per timestep.
| void WarpX::UpdateMagneticFieldAndApplyBCs | ( | ablastr::fields::MultiLevelVectorField const & | a_Bn, |
| amrex::Real | a_thetadt, | ||
| amrex::Real | start_time ) |
|
inline |
|
inline |
|
static |
Return the upper corner of the box in real units.
| bx | The box |
| lev | The refinement level of the box |
| time_shift_delta | The time relative to the current time at which to calculate the position (when v_galilean is not zero) |
|
inlinenodiscard |
|
static |
Version of WarpX executable.
|
mutableprivate |
|
static |
Beta value corresponding to the Lorentz factor of the boosted frame of the simulation.
|
mutableprivate |
| BilinearFilter WarpX::bilinear_filter |
|
static |
Direction of the Lorentz transform that defines the boosted frame of the simulation.
|
private |
|
inlinestatic |
Integer that corresponds to the charge deposition algorithm (only standard deposition)
|
static |
If true, the code will compute max_step from the back transformed diagnostics.
|
private |
Collection of LayoutData to keep track of weights used in load balancing routines. Contains timer-based or heuristic-based costs depending on input option
|
private |
Weight factor for cells in Heuristic costs update. Default values on GPU are determined from single-GPU tests on Summit. The problem setup for these tests is an empty (i.e. no particles) domain of size 256 by 256 by 256 cells, from which the average time per iteration per cell is computed.
|
private |
Weight factor for particles in Heuristic costs update. Default values on GPU are determined from single-GPU tests on Summit. The problem setup for these tests is a high-ppc (27 particles per cell) uniform plasma on a domain of size 128 by 128 by 128, from which the approximate time per iteration per particle is computed.
|
private |
| bool WarpX::current_correction = true |
If true, a correction is applied to the current in Fourier space,.
|
inlinestatic |
Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay, Villasenor)
| amrex::Gpu::DeviceVector<amrex::Real> WarpX::device_current_centering_stencil_coeffs_x |
| amrex::Gpu::DeviceVector<amrex::Real> WarpX::device_current_centering_stencil_coeffs_y |
| amrex::Gpu::DeviceVector<amrex::Real> WarpX::device_current_centering_stencil_coeffs_z |
| amrex::Gpu::DeviceVector<amrex::Real> WarpX::device_field_centering_stencil_coeffs_x |
| amrex::Gpu::DeviceVector<amrex::Real> WarpX::device_field_centering_stencil_coeffs_y |
| amrex::Gpu::DeviceVector<amrex::Real> WarpX::device_field_centering_stencil_coeffs_z |
| bool WarpX::do_current_centering = false |
If true, the current is deposited on a nodal grid and then centered onto a staggered grid using finite centering of order given by current_centering_nox, current_centering_noy, and current_centering_noz
|
static |
Solve additional Maxwell equation for G in order to control errors in magnetic Gauss' law.
|
static |
Solve additional Maxwell equation for F in order to control errors in Gauss' law (useful when using current deposition algorithms that are not charge-conserving)
|
static |
|
private |
|
static |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
static |
used shared memory algorithm for charge deposition
|
static |
use shared memory algorithm for current deposition
|
private |
|
private |
|
static |
perform field communications in single precision
|
private |
|
mutableprivate |
|
inlinestatic |
Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT)
|
inlinestatic |
|
static |
| EvolveScheme WarpX::evolve_scheme = EvolveScheme::Default |
Integer that corresponds to the evolve scheme (explicit, semi_implicit_em, theta_implicit_em)
|
static |
|
private |
|
inlinestatic |
|
inlinestatic |
|
static |
Order of finite centering of fields (from staggered grid to nodal grid), along x.
|
static |
Order of finite centering of fields (from staggered grid to nodal grid), along y.
|
static |
Order of finite centering of fields (from staggered grid to nodal grid), along z.
|
inlinestatic |
Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving)
|
private |
|
static |
|
private |
|
private |
|
static |
If true (Galerkin method): The fields are interpolated directly from the staggered grid to the particle positions (with reduced interpolation order in the parallel direction). This scheme is energy conserving in the limit of infinitely small time steps. Otherwise, "momentum conserving" (in the same limit): The fields are first interpolated from the staggered grid points to the corners of each cell, and then from the cell corners to the particle position (with the same order of interpolation in all directions). This scheme is momentum conserving in the limit of infinitely small time steps.
|
static |
Lorentz factor of the boosted frame in which a boosted-frame simulation is run.
|
private |
|
inlinestatic |
Integer that corresponds to the type of grid used in the simulation (collocated, staggered, hybrid)
|
private |
| std::map<std::string, amrex::iMultiFab *> WarpX::imultifab_map |
|
private |
|
private |
|
inlinestatic |
Records a number corresponding to the load balance cost update strategy being used (0 or 1 corresponding to timers or heuristic).
|
private |
Current load balance efficiency for each level.
|
private |
Threshold value that controls whether to adopt the proposed distribution mapping during load balancing. The new distribution mapping is adopted if the ratio of proposed distribution mapping efficiency to current distribution mapping efficiency is larger than the threshold; 'efficiency' here means the average cost per MPI rank.
|
private |
Load balancing intervals that reads the "load_balance_intervals" string int the input file for getting steps at which load balancing is performed
|
private |
Controls the maximum number of boxes that can be assigned to a rank during load balance via the 'knapsack' strategy; e.g., if there are 4 boxes per rank, load_balance_knapsack_factor=2 limits the maximum number of boxes that can be assigned to a rank to 8.
|
private |
Load balance with 'space filling curve' strategy.
|
private |
|
private |
Author of an input file / simulation setup.
|
private |
EB: m_borrowing contains the info about the enlarged cells, i.e. for every enlarged cell it contains the info of which neighbors are being intruded (and the amount of borrowed area). This is only used for the ECT solver.
|
private |
WarpX class attribute that controls whether collisions are placed in the middle of the position push and after the momentum push, or before both the position and momentum push. The default value is set in WarpX::ReadParameters().
|
private |
|
private |
Order of finite centering of currents (from nodal grid to staggered grid), along x.
|
private |
Order of finite centering of currents (from nodal grid to staggered grid), along y.
|
private |
Order of finite centering of currents (from nodal grid to staggered grid), along z.
|
private |
Solve Poisson equation when loading an external magnetic field to clean divergence This is useful to remove errors that could lead to non-zero B field divergence
|
private |
|
private |
|
private |
EB: Mask that indicates whether a particle should use its regular shape factor (mask set to 0) or a reduced, order-1 shape factor instead (mask set to 1) in a given cell, when depositing charge/current. The flag is typically set to 1 in cells that are close to the embedded boundary, in order to avoid errors in charge conservation when a particle is too close to the embedded boundary.
|
private |
|
private |
EB: Flag to indicate whether a gridpoint is inside the embedded boundary and therefore whether the E or B should not be updated. (One array per level and per direction, due to staggering)
|
private |
|
private |
Integer that corresponds to electromagnetic Maxwell solver (vacuum - 0, macroscopic - 1)
|
private |
Stop the simulation at the end of the current step due to a received Unix signal?
|
private |
|
private |
|
private |
| ablastr::fields::MultiFabRegister WarpX::m_fields |
|
static |
Whether to fill guard cells when computing inverse FFTs of currents.
|
static |
Whether to fill guard cells when computing inverse FFTs of fields.
|
private |
EB: for every mesh face face flag_ext_face contains a:
|
private |
EB: for every mesh face flag_info_face contains a:
| amrex::Array<amrex::Real,3> WarpX::m_galilean_shift = {{0}} |
|
private |
|
private |
|
staticprivate |
|
private |
|
private |
PSATD JRhom algorithm.
|
private |
|
private |
|
private |
|
private |
Integer that correspond to macroscopic Maxwell solver algorithm (BackwardEuler - 0, Lax-Wendroff - 1)
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
particle buffer for scraped particles on the boundaries
|
private |
Integer that corresponds to the order of the PSATD solution (whether the PSATD equations are derived from first-order or second-order solution)
| amrex::Real WarpX::m_quantum_xi_c2 |
| amrex::IntVect WarpX::m_rho_nodal_flag |
|
private |
|
private |
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
|
private |
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
| amrex::Vector<amrex::Real> WarpX::m_v_comoving = amrex::Vector<amrex::Real>(3, amrex::Real(0.)) |
| amrex::Vector<amrex::Real> WarpX::m_v_galilean = amrex::Vector<amrex::Real>(3, amrex::Real(0.)) |
| MagnetostaticSolver::VectorPoissonBoundaryHandler WarpX::m_vector_poisson_boundary_handler |
|
private |
Flag whether the Verboncoeur correction is applied to the current and charge density on the axis when using RZ.
|
private |
If specified, the maximum number of iterations is computed automatically so that the lower end of the simulation domain along z reaches zmax_plasma_to_compute_max_step in the boosted frame
| int WarpX::magnetostatic_solver_max_iters = 200 |
| int WarpX::magnetostatic_solver_verbosity = 2 |
|
private |
| int WarpX::maxlevel_extEMfield_init |
Maximum level up to which the externally defined electric and magnetic fields are initialized. The default value is set to the max levels in the simulation. if lev > maxlevel_extEMfield_init, the fields on those levels will have a default value of 0
|
private |
|
static |
|
static |
|
private |
|
private |
|
private |
|
private |
|
static |
With mesh refinement, particles located inside a refinement patch, but within n_current_deposition_buffer cells of the edge of the patch, will deposit their charge and current onto the lower refinement level instead of the refinement patch itself
|
static |
With mesh refinement, particles located inside a refinement patch, but within n_field_gather_buffer cells of the edge of the patch, will gather the fields from the lower refinement level instead of the refinement patch itself
|
static |
Number of modes for the RZ multi-mode version.
| amrex::Vector< std::unique_ptr<NCIGodfreyFilter> > WarpX::nci_godfrey_filter_bxbyez |
| amrex::Vector< std::unique_ptr<NCIGodfreyFilter> > WarpX::nci_godfrey_filter_exeybz |
|
static |
Number of MultiFab components (with the RZ multi-mode version, each mode has a real and imaginary component, except mode 0 which is purely real: component 0 is mode 0, odd components are the real parts, even components are the imaginary parts)
|
static |
Order of the particle shape factors (splines) along x.
|
private |
|
static |
Order of the particle shape factors (splines) along y.
|
private |
|
static |
Order of the particle shape factors (splines) along z.
|
private |
|
private |
|
private |
|
private |
Domain decomposition on Level 0.
|
private |
|
inlinestatic |
Integers that correspond to boundary condition applied to particles at the upper domain boundaries (0 to 4 correspond to Absorbing, Open, Reflecting, Periodic, Thermal)
|
inlinestatic |
Integers that correspond to boundary condition applied to particles at the lower domain boundaries (0 to 4 correspond to Absorbing, Open, Reflecting, Periodic, Thermal)
|
private |
|
static |
Maximum number of allowed grid crossings for particles.
|
inlinestatic |
Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary)
|
private |
|
mutableprivate |
|
private |
|
private |
|
private |
|
private |
|
private |
|
inlinestatic |
| std::unique_ptr<MultiReducedDiags> WarpX::reduced_diags |
object with all reduced diagnostics, similar to MultiParticleContainer for species.
|
private |
User-defined parser to define refinement patches.
|
static |
|
private |
|
private |
|
static |
If true, the initial conditions from random number generators are serialized (useful for reproducible testing with OpenMP)
|
static |
number of threads to use per block in shared deposition
|
static |
tileSize to use for shared current deposition operations
|
private |
|
private |
|
private |
|
private |
|
static |
|
static |
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
|
static |
|
static |
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
|
private |
|
private |
|
static |
|
private |
|
staticconstexprprivate |
|
private |
|
private |
|
private |
|
inlinestatic |
Integers that correspond to the time dependency of J (constant, linear) and rho (linear, quadratic) for the PSATD algorithm
|
inlinestatic |
| amrex::Real WarpX::time_of_last_gal_shift = 0 |
| bool WarpX::update_with_rho = false |
If true, the PSATD update equation for E contains both J and rho (default is false for standard PSATD and true for Galilean PSATD)
|
static |
If true, a Numerical Cherenkov Instability (NCI) corrector is applied (for simulations using the FDTD Maxwell solver)
|
static |
If true, a bilinear filter is used to smooth charge and currents.
|
static |
If true, a compensation step is added to the bilinear filtering of charge and currents.
|
private |
|
static |
If true, the bilinear filtering of charge and currents is done in Fourier space.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
When true, write the diagnostics after restart at the time of the restart.
|
static |
store initial value of zmin_domain_boost because WarpX::computeMaxStepBoostAccelerator needs the initial value of zmin_domain_boost, even if restarting from a checkpoint file