diff options
Diffstat (limited to 'Source/FieldSolver')
-rw-r--r-- | Source/FieldSolver/WarpXPushFieldsEM.cpp | 67 |
1 files changed, 34 insertions, 33 deletions
diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index 95e3e78b3..475f7a1dd 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -18,6 +18,40 @@ using namespace amrex; #ifdef WARPX_USE_PSATD +namespace { + void + PushPSATDSinglePatch ( + SpectralSolver& solver, + std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield, + std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield, + std::array<std::unique_ptr<amrex::MultiFab>,3>& current, + std::unique_ptr<amrex::MultiFab>& rho ) { + + using Idx = SpectralFieldIndex; + + // Perform forward Fourier transform + solver.ForwardTransform(*Efield[0], Idx::Ex); + solver.ForwardTransform(*Efield[1], Idx::Ey); + solver.ForwardTransform(*Efield[2], Idx::Ez); + solver.ForwardTransform(*Bfield[0], Idx::Bx); + solver.ForwardTransform(*Bfield[1], Idx::By); + solver.ForwardTransform(*Bfield[2], Idx::Bz); + solver.ForwardTransform(*current[0], Idx::Jx); + solver.ForwardTransform(*current[1], Idx::Jy); + solver.ForwardTransform(*current[2], Idx::Jz); + solver.ForwardTransform(*rho, Idx::rho_old, 0); + solver.ForwardTransform(*rho, Idx::rho_new, 1); + // Advance fields in spectral space + solver.pushSpectralFields(); + // Perform backward Fourier Transform + solver.BackwardTransform(*Efield[0], Idx::Ex); + solver.BackwardTransform(*Efield[1], Idx::Ey); + solver.BackwardTransform(*Efield[2], Idx::Ez); + solver.BackwardTransform(*Bfield[0], Idx::Bx); + solver.BackwardTransform(*Bfield[1], Idx::By); + solver.BackwardTransform(*Bfield[2], Idx::Bz); + } +} void WarpX::PushPSATD (amrex::Real a_dt) @@ -35,39 +69,6 @@ WarpX::PushPSATD (amrex::Real a_dt) } void -PushPSATDSinglePatch ( - SpectralSolver& solver, - std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield, - std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield, - std::array<std::unique_ptr<amrex::MultiFab>,3>& current, - std::unique_ptr<amrex::MultiFab>& rho ) { - - using Idx = SpectralFieldIndex; - - // Perform forward Fourier transform - solver.ForwardTransform(*Efield[0], Idx::Ex); - solver.ForwardTransform(*Efield[1], Idx::Ey); - solver.ForwardTransform(*Efield[2], Idx::Ez); - solver.ForwardTransform(*Bfield[0], Idx::Bx); - solver.ForwardTransform(*Bfield[1], Idx::By); - solver.ForwardTransform(*Bfield[2], Idx::Bz); - solver.ForwardTransform(*current[0], Idx::Jx); - solver.ForwardTransform(*current[1], Idx::Jy); - solver.ForwardTransform(*current[2], Idx::Jz); - solver.ForwardTransform(*rho, Idx::rho_old, 0); - solver.ForwardTransform(*rho, Idx::rho_new, 1); - // Advance fields in spectral space - solver.pushSpectralFields(); - // Perform backward Fourier Transform - solver.BackwardTransform(*Efield[0], Idx::Ex); - solver.BackwardTransform(*Efield[1], Idx::Ey); - solver.BackwardTransform(*Efield[2], Idx::Ez); - solver.BackwardTransform(*Bfield[0], Idx::Bx); - solver.BackwardTransform(*Bfield[1], Idx::By); - solver.BackwardTransform(*Bfield[2], Idx::Bz); -} - -void WarpX::PushPSATD_localFFT (int lev, amrex::Real /* dt */) { // Update the fields on the fine and coarse patch |