aboutsummaryrefslogtreecommitdiff
path: root/Source/BoundaryConditions/PML.cpp
diff options
context:
space:
mode:
authorGravatar amadou38 <38141786+amadou38@users.noreply.github.com> 2022-05-03 14:12:31 -0700
committerGravatar GitHub <noreply@github.com> 2022-05-03 14:12:31 -0700
commit5cddb8cc12d73d57689dd7c2e2d1b1425df0122f (patch)
tree42c9240a08992697fe3e4f3eb743dea7a1df9a71 /Source/BoundaryConditions/PML.cpp
parenta7cf8a4959df0e5cd5c5a97fce0bcafbeeee5655 (diff)
downloadWarpX-5cddb8cc12d73d57689dd7c2e2d1b1425df0122f.tar.gz
WarpX-5cddb8cc12d73d57689dd7c2e2d1b1425df0122f.tar.zst
WarpX-5cddb8cc12d73d57689dd7c2e2d1b1425df0122f.zip
Add velocity in pml as an input in function alpha (#3070)
* add velocity in pml as an input in function alpha * some changes on the variables * some changes on the variables * some changes on the variables * some changes on the variables, resquested changes, message error for v_particle_pml * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Diffstat (limited to 'Source/BoundaryConditions/PML.cpp')
-rw-r--r--Source/BoundaryConditions/PML.cpp51
1 files changed, 27 insertions, 24 deletions
diff --git a/Source/BoundaryConditions/PML.cpp b/Source/BoundaryConditions/PML.cpp
index 9529f1f11..67eef327b 100644
--- a/Source/BoundaryConditions/PML.cpp
+++ b/Source/BoundaryConditions/PML.cpp
@@ -58,7 +58,8 @@ namespace
{
static void FillLo (Sigma& sigma, Sigma& sigma_cumsum,
Sigma& sigma_star, Sigma& sigma_star_cumsum,
- const int olo, const int ohi, const int glo, Real fac)
+ const int olo, const int ohi, const int glo, Real fac,
+ const amrex::Real v_sigma)
{
const int slo = sigma.m_lo;
const int sslo = sigma_star.m_lo;
@@ -74,19 +75,20 @@ namespace
Real offset = static_cast<Real>(glo-i);
p_sigma[i-slo] = fac*(offset*offset);
// sigma_cumsum is the analytical integral of sigma function at same points than sigma
- p_sigma_cumsum[i-slo] = (fac*(offset*offset*offset)/3._rt)/PhysConst::c;
+ p_sigma_cumsum[i-slo] = (fac*(offset*offset*offset)/3._rt)/v_sigma;
if (i <= ohi+1) {
offset = static_cast<Real>(glo-i) - 0.5_rt;
p_sigma_star[i-sslo] = fac*(offset*offset);
// sigma_star_cumsum is the analytical integral of sigma function at same points than sigma_star
- p_sigma_star_cumsum[i-sslo] = (fac*(offset*offset*offset)/3._rt)/PhysConst::c;
+ p_sigma_star_cumsum[i-sslo] = (fac*(offset*offset*offset)/3._rt)/v_sigma;
}
});
}
static void FillHi (Sigma& sigma, Sigma& sigma_cumsum,
Sigma& sigma_star, Sigma& sigma_star_cumsum,
- const int olo, const int ohi, const int ghi, Real fac)
+ const int olo, const int ohi, const int ghi, Real fac,
+ const amrex::Real v_sigma)
{
const int slo = sigma.m_lo;
const int sslo = sigma_star.m_lo;
@@ -101,11 +103,11 @@ namespace
i += olo;
Real offset = static_cast<Real>(i-ghi-1);
p_sigma[i-slo] = fac*(offset*offset);
- p_sigma_cumsum[i-slo] = (fac*(offset*offset*offset)/3._rt)/PhysConst::c;
+ p_sigma_cumsum[i-slo] = (fac*(offset*offset*offset)/3._rt)/v_sigma;
if (i <= ohi+1) {
offset = static_cast<Real>(i-ghi) - 0.5_rt;
p_sigma_star[i-sslo] = fac*(offset*offset);
- p_sigma_star_cumsum[i-sslo] = (fac*(offset*offset*offset)/3._rt)/PhysConst::c;
+ p_sigma_star_cumsum[i-sslo] = (fac*(offset*offset*offset)/3._rt)/v_sigma;
}
});
}
@@ -139,7 +141,7 @@ namespace
SigmaBox::SigmaBox (const Box& box, const BoxArray& grids, const Real* dx, const IntVect& ncell,
- const IntVect& delta, const amrex::Box& regdomain)
+ const IntVect& delta, const amrex::Box& regdomain, const amrex::Real v_sigma_sb)
{
BL_ASSERT(box.cellCentered());
@@ -182,14 +184,15 @@ SigmaBox::SigmaBox (const Box& box, const BoxArray& grids, const Real* dx, const
}
if (regdomain.ok()) { // The union of the regular grids is a single box
- define_single(regdomain, ncell, fac);
+ define_single(regdomain, ncell, fac, v_sigma_sb);
} else {
- define_multiple(box, grids, ncell, fac);
+ define_multiple(box, grids, ncell, fac, v_sigma_sb);
}
}
void SigmaBox::define_single (const Box& regdomain, const IntVect& ncell,
- const Array<Real,AMREX_SPACEDIM>& fac)
+ const Array<Real,AMREX_SPACEDIM>& fac,
+ const amrex::Real v_sigma_sb)
{
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
const int slo = sigma[idim].lo();
@@ -203,7 +206,7 @@ void SigmaBox::define_single (const Box& regdomain, const IntVect& ncell,
if (ohi >= olo) {
FillLo(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
- olo, ohi, dlo, fac[idim]);
+ olo, ohi, dlo, fac[idim], v_sigma_sb);
}
#if (AMREX_SPACEDIM != 1)
@@ -223,7 +226,7 @@ void SigmaBox::define_single (const Box& regdomain, const IntVect& ncell,
if (ohi >= olo) {
FillHi(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
- olo, ohi, dhi, fac[idim]);
+ olo, ohi, dhi, fac[idim], v_sigma_sb);
}
}
@@ -231,7 +234,7 @@ void SigmaBox::define_single (const Box& regdomain, const IntVect& ncell,
}
void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const IntVect& ncell,
- const Array<Real,AMREX_SPACEDIM>& fac)
+ const Array<Real,AMREX_SPACEDIM>& fac, const amrex::Real v_sigma_sb)
{
const std::vector<std::pair<int,Box> >& isects = grids.intersections(box, false, ncell);
@@ -301,7 +304,7 @@ void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const Int
FillLo(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
looverlap.smallEnd(idim), looverlap.bigEnd(idim),
- grid_box.smallEnd(idim), fac[idim]);
+ grid_box.smallEnd(idim), fac[idim], v_sigma_sb);
}
Box hibox = amrex::adjCellHi(grid_box, idim, ncell[idim]);
@@ -314,7 +317,7 @@ void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const Int
FillHi(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
hioverlap.smallEnd(idim), hioverlap.bigEnd(idim),
- grid_box.bigEnd(idim), fac[idim]);
+ grid_box.bigEnd(idim), fac[idim], v_sigma_sb);
}
if (!looverlap.ok() && !hioverlap.ok()) {
@@ -348,7 +351,7 @@ void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const Int
FillLo(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
looverlap.smallEnd(idim), looverlap.bigEnd(idim),
- grid_box.smallEnd(idim), fac[idim]);
+ grid_box.smallEnd(idim), fac[idim], v_sigma_sb);
}
Box hibox = amrex::adjCellHi(grid_box, idim, ncell[idim]);
@@ -357,7 +360,7 @@ void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const Int
FillHi(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
hioverlap.smallEnd(idim), hioverlap.bigEnd(idim),
- grid_box.bigEnd(idim), fac[idim]);
+ grid_box.bigEnd(idim), fac[idim], v_sigma_sb);
}
if (!looverlap.ok() && !hioverlap.ok()) {
@@ -395,7 +398,7 @@ void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const Int
FillLo(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
looverlap.smallEnd(idim), looverlap.bigEnd(idim),
- grid_box.smallEnd(idim), fac[idim]);
+ grid_box.smallEnd(idim), fac[idim], v_sigma_sb);
}
const Box& hibox = amrex::adjCellHi(grid_box, idim, ncell[idim]);
@@ -404,7 +407,7 @@ void SigmaBox::define_multiple (const Box& box, const BoxArray& grids, const Int
FillHi(sigma[idim], sigma_cumsum[idim],
sigma_star[idim], sigma_star_cumsum[idim],
hioverlap.smallEnd(idim), hioverlap.bigEnd(idim),
- grid_box.bigEnd(idim), fac[idim]);
+ grid_box.bigEnd(idim), fac[idim], v_sigma_sb);
}
if (!looverlap.ok() && !hioverlap.ok()) {
@@ -492,9 +495,9 @@ SigmaBox::ComputePMLFactorsE (const Real* a_dx, Real dt)
MultiSigmaBox::MultiSigmaBox (const BoxArray& ba, const DistributionMapping& dm,
const BoxArray& grid_ba, const Real* dx,
const IntVect& ncell, const IntVect& delta,
- const amrex::Box& regular_domain)
+ const amrex::Box& regular_domain, const amrex::Real v_sigma_sb)
: FabArray<SigmaBox>(ba,dm,1,0,MFInfo(),
- SigmaBoxFactory(grid_ba,dx,ncell,delta, regular_domain))
+ SigmaBoxFactory(grid_ba,dx,ncell,delta, regular_domain, v_sigma_sb))
{}
void
@@ -536,7 +539,7 @@ PML::PML (const int lev, const BoxArray& grid_ba, const DistributionMapping& gri
int do_moving_window, int /*pml_has_particles*/, int do_pml_in_domain,
const bool do_multi_J,
const bool do_pml_dive_cleaning, const bool do_pml_divb_cleaning,
- int max_guard_EB,
+ int max_guard_EB, const amrex::Real v_sigma_sb,
const amrex::IntVect do_pml_Lo, const amrex::IntVect do_pml_Hi)
: m_dive_cleaning(do_pml_dive_cleaning),
m_divb_cleaning(do_pml_divb_cleaning),
@@ -716,7 +719,7 @@ PML::PML (const int lev, const BoxArray& grid_ba, const DistributionMapping& gri
Box single_domain_box = is_single_box_domain ? domain0 : Box();
// Empty box (i.e., Box()) means it's not a single box domain.
sigba_fp = std::make_unique<MultiSigmaBox>(ba, dm, grid_ba_reduced, geom->CellSize(),
- IntVect(ncell), IntVect(delta), single_domain_box);
+ IntVect(ncell), IntVect(delta), single_domain_box, v_sigma_sb);
if (WarpX::maxwell_solver_id == MaxwellSolverAlgo::PSATD) {
#ifndef WARPX_USE_PSATD
@@ -839,7 +842,7 @@ PML::PML (const int lev, const BoxArray& grid_ba, const DistributionMapping& gri
single_domain_box = is_single_box_domain ? cdomain : Box();
sigba_cp = std::make_unique<MultiSigmaBox>(cba, cdm, grid_cba_reduced, cgeom->CellSize(),
- cncells, cdelta, single_domain_box);
+ cncells, cdelta, single_domain_box, v_sigma_sb);
if (WarpX::maxwell_solver_id == MaxwellSolverAlgo::PSATD) {
#ifndef WARPX_USE_PSATD