aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/BoundaryConditions/PML.H4
-rw-r--r--Source/BoundaryConditions/PML.cpp18
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolver.cpp1
-rw-r--r--Source/Initialization/WarpXInitData.cpp21
4 files changed, 33 insertions, 11 deletions
diff --git a/Source/BoundaryConditions/PML.H b/Source/BoundaryConditions/PML.H
index 39dfa5a25..15c70c10b 100644
--- a/Source/BoundaryConditions/PML.H
+++ b/Source/BoundaryConditions/PML.H
@@ -104,7 +104,9 @@ class PML
public:
PML (const amrex::BoxArray& ba, const amrex::DistributionMapping& dm,
const amrex::Geometry* geom, const amrex::Geometry* cgeom,
- int ncell, int delta, int ref_ratio, int do_dive_cleaning, int do_moving_window);
+ int ncell, int delta, int ref_ratio, amrex::Real dt,
+ int nox_fft, int noy_fft, int noz_fft, bool do_nodal,
+ int do_dive_cleaning, int do_moving_window);
void ComputePMLFactors (amrex::Real dt);
diff --git a/Source/BoundaryConditions/PML.cpp b/Source/BoundaryConditions/PML.cpp
index cac43faa5..831339a2f 100644
--- a/Source/BoundaryConditions/PML.cpp
+++ b/Source/BoundaryConditions/PML.cpp
@@ -329,7 +329,9 @@ MultiSigmaBox::ComputePMLFactorsE (const Real* dx, Real dt)
PML::PML (const BoxArray& grid_ba, const DistributionMapping& grid_dm,
const Geometry* geom, const Geometry* cgeom,
- int ncell, int delta, int ref_ratio, int do_dive_cleaning, int do_moving_window)
+ int ncell, int delta, int ref_ratio, Real dt,
+ int nox_fft, int noy_fft, int noz_fft, bool do_nodal,
+ int do_dive_cleaning, int do_moving_window)
: m_geom(geom),
m_cgeom(cgeom)
{
@@ -390,6 +392,13 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& grid_dm,
sigba_fp.reset(new MultiSigmaBox(ba, dm, grid_ba, geom->CellSize(), ncell, delta));
+#ifdef WARPX_USE_PSATD
+ const bool in_pml = true; // Tells spectral solver to use split-PML equations
+ const RealVect dx{AMREX_D_DECL(geom->CellSize(0), geom->CellSize(1), geom->CellSize(2))};
+ spectral_solver_fp.reset( new SpectralSolver( ba, dm,
+ nox_fft, noy_fft, noz_fft, do_nodal, dx, dt, in_pml ) );
+#endif
+
if (cgeom)
{
#ifndef WARPX_USE_PSATD
@@ -424,6 +433,13 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& grid_dm,
}
sigba_cp.reset(new MultiSigmaBox(cba, cdm, grid_cba, cgeom->CellSize(), ncell, delta));
+
+ #ifdef WARPX_USE_PSATD
+ const bool in_pml = true; // Tells spectral solver to use split-PML equations
+ const RealVect cdx{AMREX_D_DECL(cgeom->CellSize(0), cgeom->CellSize(1), cgeom->CellSize(2))};
+ spectral_solver_fp.reset( new SpectralSolver( cba, cdm,
+ nox_fft, noy_fft, noz_fft, do_nodal, cdx, dt, in_pml ) );
+ #endif
}
}
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp
index 80555a7b3..4b9def013 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp
@@ -1,6 +1,7 @@
#include <SpectralKSpace.H>
#include <SpectralSolver.H>
#include <PsatdAlgorithm.H>
+#include <PMLPsatdAlgorithm.H>
/* \brief Initialize the spectral Maxwell solver
*
diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp
index 23637ec97..f59f5d81f 100644
--- a/Source/Initialization/WarpXInitData.cpp
+++ b/Source/Initialization/WarpXInitData.cpp
@@ -87,7 +87,7 @@ WarpX::InitDiagnostics () {
const Real* current_lo = geom[0].ProbLo();
const Real* current_hi = geom[0].ProbHi();
Real dt_boost = dt[0];
-
+
// Find the positions of the lab-frame box that corresponds to the boosted-frame box at t=0
Real zmin_lab = current_lo[moving_window_dir]/( (1.+beta_boost)*gamma_boost );
Real zmax_lab = current_hi[moving_window_dir]/( (1.+beta_boost)*gamma_boost );
@@ -96,7 +96,7 @@ WarpX::InitDiagnostics () {
zmax_lab,
moving_window_v, dt_snapshots_lab,
num_snapshots_lab, gamma_boost,
- t_new[0], dt_boost,
+ t_new[0], dt_boost,
moving_window_dir, geom[0]));
}
}
@@ -117,10 +117,10 @@ WarpX::InitFromScratch ()
InitPML();
-#ifdef WARPX_DO_ELECTROSTATIC
+#ifdef WARPX_DO_ELECTROSTATIC
if (do_electrostatic) {
getLevelMasks(masks);
-
+
// the plus one is to convert from num_cells to num_nodes
getLevelMasks(gather_masks, n_buffer + 1);
}
@@ -133,13 +133,16 @@ WarpX::InitPML ()
if (do_pml)
{
pml[0].reset(new PML(boxArray(0), DistributionMap(0), &Geom(0), nullptr,
- pml_ncell, pml_delta, 0, do_dive_cleaning, do_moving_window));
+ pml_ncell, pml_delta, 0, dt[0],
+ nox_fft, noy_fft, noz_fft, do_nodal,
+ do_dive_cleaning, do_moving_window));
for (int lev = 1; lev <= finest_level; ++lev)
{
pml[lev].reset(new PML(boxArray(lev), DistributionMap(lev),
&Geom(lev), &Geom(lev-1),
- pml_ncell, pml_delta, refRatio(lev-1)[0], do_dive_cleaning,
- do_moving_window));
+ pml_ncell, pml_delta, refRatio(lev-1)[0], dt[lev],
+ nox_fft, noy_fft, noz_fft, do_nodal,
+ do_dive_cleaning, do_moving_window));
}
}
}
@@ -222,7 +225,7 @@ WarpX::InitOpenbc ()
Vector<int> alllohi(6*nprocs,100000);
MPI_Allgather(lohi, 6, MPI_INT, alllohi.data(), 6, MPI_INT, ParallelDescriptor::Communicator());
-
+
BoxList bl{IndexType::TheNodeType()};
for (int i = 0; i < nprocs; ++i)
{
@@ -248,7 +251,7 @@ WarpX::InitOpenbc ()
rho_openbc.copy(*rho, 0, 0, 1, rho->nGrow(), 0, gm.periodicity(), FabArrayBase::ADD);
const Real* dx = gm.CellSize();
-
+
warpx_openbc_potential(rho_openbc[myproc].dataPtr(), phi_openbc[myproc].dataPtr(), dx);
BoxArray nba = boxArray(lev);