23#include <AMReX_Config.H>
41 [[nodiscard]]
int lo()
const {
return m_lo; }
42 [[nodiscard]]
int hi()
const {
return m_hi; }
85 const amrex::Box& regular_domain,
const amrex::Real v_sigma_sb)
97 const
amrex::FabInfo& ,
int ) const final
129 const amrex::Box& regular_domain, amrex::Real v_sigma_sb);
144 amrex::Real dt,
int nox_fft,
int noy_fft,
int noz_fft,
146 int do_moving_window,
int pml_has_particles,
int do_pml_in_domain,
149 bool do_pml_dive_cleaning,
bool do_pml_divb_cleaning,
153 int max_guard_EB, amrex::Real v_sigma_sb,
179 int do_pml_in_domain);
183 int do_pml_in_domain);
194 [[nodiscard]]
bool ok ()
const {
return m_ok; }
235 int do_pml_in_domain,
248 int do_pml_in_domain,
void PushPMLPSATDSinglePatch(int lev, SpectralSolver &solver, ablastr::fields::VectorField &pml_E, ablastr::fields::VectorField &pml_B, ablastr::fields::ScalarField pml_F, ablastr::fields::ScalarField pml_G, const amrex::IntVect &fill_guards)
Definition PML.cpp:1321
TimeDependencyJ
Definition WarpXAlgorithmSelection.H:106
@ PML
Definition WarpXAlgorithmSelection.H:138
PSATDSolutionType
Definition WarpXAlgorithmSelection.H:100
TimeDependencyRho
Definition WarpXAlgorithmSelection.H:112
amrex::Real dt_E
Definition PML.H:134
MultiSigmaBox(const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, const amrex::BoxArray *grid_ba, const amrex::Real *dx, const amrex::IntVect &ncell, const amrex::IntVect &delta, const amrex::Box ®ular_domain, amrex::Real v_sigma_sb)
Definition PML.cpp:511
void ComputePMLFactorsE(const amrex::Real *dx, amrex::Real dt)
Definition PML.cpp:536
void ComputePMLFactorsB(const amrex::Real *dx, amrex::Real dt)
Definition PML.cpp:520
amrex::Real dt_B
Definition PML.H:133
static amrex::BoxArray MakeBoxArray(bool single_box_domain, const amrex::Box ®ular_domain, const amrex::Geometry &geom, const amrex::BoxArray &grid_ba, const amrex::IntVect &ncell, int do_pml_in_domain, const amrex::IntVect &do_pml_Lo, const amrex::IntVect &do_pml_Hi)
Definition PML.cpp:917
const amrex::Geometry * m_geom
Definition PML.H:210
void ComputePMLFactors(amrex::Real dt)
Definition PML.cpp:1047
std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > pml_field_factory
Definition PML.H:222
const MultiSigmaBox & GetMultiSigmaBox_cp() const
Definition PML.H:165
static void CopyToPML(amrex::MultiFab &pml, amrex::MultiFab ®, const amrex::Geometry &geom)
Definition PML.cpp:1202
std::unique_ptr< MultiSigmaBox > sigba_fp
Definition PML.H:213
const MultiSigmaBox & GetMultiSigmaBox_fp() const
Definition PML.H:160
void CopyJtoPMLs(ablastr::fields::MultiFabRegister &fields, int lev)
Definition PML.cpp:1092
const amrex::Geometry * m_cgeom
Definition PML.H:211
bool ok() const
Definition PML.H:194
void PushPSATD(ablastr::fields::MultiFabRegister &fields, int lev)
Definition PML.cpp:1302
void Exchange(ablastr::fields::VectorField mf_pml, ablastr::fields::VectorField mf, const PatchType &patch_type, int do_pml_in_domain)
Definition PML.cpp:1101
bool m_divb_cleaning
Definition PML.H:205
bool m_ok
Definition PML.H:202
bool m_dive_cleaning
Definition PML.H:204
static amrex::BoxArray MakeBoxArray_single(const amrex::Box ®ular_domain, const amrex::BoxArray &grid_ba, const amrex::IntVect &ncell, const amrex::IntVect &do_pml_Lo, const amrex::IntVect &do_pml_Hi)
Definition PML.cpp:930
amrex::IntVect m_fill_guards_fields
Definition PML.H:207
void CheckPoint(ablastr::fields::MultiFabRegister &fields, const std::string &dir) const
Definition PML.cpp:1235
std::unique_ptr< MultiSigmaBox > sigba_cp
Definition PML.H:214
PML(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, bool do_similar_dm_pml, const amrex::Geometry *geom, const amrex::Geometry *cgeom, int ncell, int delta, amrex::IntVect ref_ratio, amrex::Real dt, int nox_fft, int noy_fft, int noz_fft, ablastr::utils::enums::GridType grid_type, int do_moving_window, int pml_has_particles, int do_pml_in_domain, PSATDSolutionType psatd_solution_type, TimeDependencyJ time_dependency_J, TimeDependencyRho time_dependency_rho, bool do_pml_dive_cleaning, bool do_pml_divb_cleaning, const amrex::IntVect &fill_guards_fields, const amrex::IntVect &fill_guards_current, bool eb_enabled, int max_guard_EB, amrex::Real v_sigma_sb, ablastr::fields::MultiFabRegister &fields, amrex::IntVect do_pml_Lo=amrex::IntVect::TheUnitVector(), amrex::IntVect do_pml_Hi=amrex::IntVect::TheUnitVector())
Definition PML.cpp:551
void Restart(ablastr::fields::MultiFabRegister &fields, const std::string &dir)
Definition PML.cpp:1268
static amrex::BoxArray MakeBoxArray_multiple(const amrex::Geometry &geom, const amrex::BoxArray &grid_ba, const amrex::IntVect &ncell, int do_pml_in_domain, const amrex::IntVect &do_pml_Lo, const amrex::IntVect &do_pml_Hi)
Definition PML.cpp:971
void FillBoundary(ablastr::fields::VectorField mf_pml, PatchType patch_type, std::optional< bool > nodal_sync=std::nullopt)
Definition PML.cpp:1212
amrex::IntVect m_fill_guards_current
Definition PML.H:208
std::unique_ptr< SpectralSolver > spectral_solver_cp
Definition PML.H:218
std::unique_ptr< SpectralSolver > spectral_solver_fp
Definition PML.H:217
const amrex::BoxArray * m_grids
Definition PML.H:114
SigmaBox * create(const amrex::Box &box, int, const amrex::FabInfo &, int) const final
Definition PML.H:96
amrex::IntVect m_delta
Definition PML.H:117
SigmaBoxFactory(SigmaBoxFactory &&) noexcept=default
amrex::IntVect m_ncell
Definition PML.H:116
amrex::Box m_regdomain
Definition PML.H:118
SigmaBoxFactory(const SigmaBoxFactory &)=default
SigmaBoxFactory * clone() const final
Definition PML.H:108
SigmaBoxFactory(const amrex::BoxArray *grid_ba, const amrex::Real *dx, const amrex::IntVect &ncell, const amrex::IntVect &delta, const amrex::Box ®ular_domain, const amrex::Real v_sigma_sb)
Definition PML.H:83
amrex::Real m_v_sigma_sb
Definition PML.H:119
void destroy(SigmaBox *fab) const final
Definition PML.H:102
~SigmaBoxFactory() override=default
const amrex::Real * m_dx
Definition PML.H:115
Top-level class for the electromagnetic spectral solver.
Definition SpectralSolver.H:37
__host__ static __device__ constexpr IntVectND< dim > TheUnitVector() noexcept
Definition EffectivePotentialPoissonSolver.H:63
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:191
amrex::MultiFab * ScalarField
Definition MultiFabRegister.H:180
GridType
Definition Enums.H:23
PatchType
Definition Enums.H:30
PODVector< T, ArenaAllocator< T > > DeviceVector
SigmaVect sigma_star_cumsum_fac
Definition PML.H:74
void define_multiple(const amrex::Box &box, const amrex::BoxArray &grids, const amrex::IntVect &ncell, const amrex::Array< amrex::Real, 3 > &fac, amrex::Real v_sigma)
Definition PML.cpp:244
void define_single(const amrex::Box ®domain, const amrex::IntVect &ncell, const amrex::Array< amrex::Real, 3 > &fac, amrex::Real v_sigma)
Definition PML.cpp:201
SigmaVect sigma_star
Definition PML.H:69
SigmaVect sigma_star_fac
Definition PML.H:73
std::array< Sigma, 3 > SigmaVect
Definition PML.H:63
SigmaVect sigma_cumsum
Definition PML.H:68
SigmaVect sigma_star_cumsum
Definition PML.H:70
void ComputePMLFactorsB(const amrex::Real *dx, amrex::Real dt)
Definition PML.cpp:444
void value_type
Definition PML.H:65
SigmaVect sigma_cumsum_fac
Definition PML.H:72
SigmaVect sigma_fac
Definition PML.H:71
SigmaBox(const amrex::Box &box, const amrex::BoxArray &grids, const amrex::Real *dx, const amrex::IntVect &ncell, const amrex::IntVect &delta, const amrex::Box ®domain, amrex::Real v_sigma)
Definition PML.cpp:151
void ComputePMLFactorsE(const amrex::Real *dx, amrex::Real dt)
Definition PML.cpp:478
SigmaVect sigma
Definition PML.H:67
amrex::Real v_sigma
Definition PML.H:75
int m_lo
Definition PML.H:43
int lo() const
Definition PML.H:41
int hi() const
Definition PML.H:42
int m_hi
Definition PML.H:43
Definition MultiFabRegister.H:262