aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/WarpXPushFieldsEM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/WarpXPushFieldsEM.cpp')
-rw-r--r--Source/FieldSolver/WarpXPushFieldsEM.cpp66
1 files changed, 45 insertions, 21 deletions
diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp
index 3d68e8e52..9df4bb21b 100644
--- a/Source/FieldSolver/WarpXPushFieldsEM.cpp
+++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp
@@ -280,9 +280,9 @@ void WarpX::PSATDForwardTransformJ (
{
Idx = spectral_solver_fp[lev]->m_spectral_index;
- idx_jx = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jx_new) : static_cast<int>(Idx.Jx);
- idx_jy = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jy_new) : static_cast<int>(Idx.Jy);
- idx_jz = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jz_new) : static_cast<int>(Idx.Jz);
+ idx_jx = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jx_new) : static_cast<int>(Idx.Jx_mid);
+ idx_jy = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jy_new) : static_cast<int>(Idx.Jy_mid);
+ idx_jz = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jz_new) : static_cast<int>(Idx.Jz_mid);
ForwardTransformVect(lev, *spectral_solver_fp[lev], J_fp[lev], idx_jx, idx_jy, idx_jz);
@@ -290,9 +290,9 @@ void WarpX::PSATDForwardTransformJ (
{
Idx = spectral_solver_cp[lev]->m_spectral_index;
- idx_jx = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jx_new) : static_cast<int>(Idx.Jx);
- idx_jy = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jy_new) : static_cast<int>(Idx.Jy);
- idx_jz = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jz_new) : static_cast<int>(Idx.Jz);
+ idx_jx = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jx_new) : static_cast<int>(Idx.Jx_mid);
+ idx_jy = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jy_new) : static_cast<int>(Idx.Jy_mid);
+ idx_jz = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jz_new) : static_cast<int>(Idx.Jz_mid);
ForwardTransformVect(lev, *spectral_solver_cp[lev], J_cp[lev], idx_jx, idx_jy, idx_jz);
}
@@ -304,11 +304,23 @@ void WarpX::PSATDForwardTransformJ (
{
for (int lev = 0; lev <= finest_level; ++lev)
{
- spectral_solver_fp[lev]->ApplyFilter(lev, Idx.Jx, Idx.Jy, Idx.Jz);
+ Idx = spectral_solver_fp[lev]->m_spectral_index;
+
+ idx_jx = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jx_new) : static_cast<int>(Idx.Jx_mid);
+ idx_jy = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jy_new) : static_cast<int>(Idx.Jy_mid);
+ idx_jz = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jz_new) : static_cast<int>(Idx.Jz_mid);
+
+ spectral_solver_fp[lev]->ApplyFilter(lev, idx_jx, idx_jy, idx_jz);
if (spectral_solver_cp[lev])
{
- spectral_solver_cp[lev]->ApplyFilter(lev, Idx.Jx, Idx.Jy, Idx.Jz);
+ Idx = spectral_solver_cp[lev]->m_spectral_index;
+
+ idx_jx = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jx_new) : static_cast<int>(Idx.Jx_mid);
+ idx_jy = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jy_new) : static_cast<int>(Idx.Jy_mid);
+ idx_jz = (J_in_time == JInTime::Linear) ? static_cast<int>(Idx.Jz_new) : static_cast<int>(Idx.Jz_mid);
+
+ spectral_solver_cp[lev]->ApplyFilter(lev, idx_jx, idx_jy, idx_jz);
}
}
}
@@ -328,9 +340,11 @@ void WarpX::PSATDBackwardTransformJ (
{
Idx = spectral_solver_fp[lev]->m_spectral_index;
- idx_jx = static_cast<int>(Idx.Jx);
- idx_jy = static_cast<int>(Idx.Jy);
- idx_jz = static_cast<int>(Idx.Jz);
+ // Note that these backward FFTs are currently called only
+ // with algorithms that do not support J linear in time
+ idx_jx = static_cast<int>(Idx.Jx_mid);
+ idx_jy = static_cast<int>(Idx.Jy_mid);
+ idx_jz = static_cast<int>(Idx.Jz_mid);
BackwardTransformVect(lev, *spectral_solver_fp[lev], J_fp[lev],
idx_jx, idx_jy, idx_jz, m_fill_guards_current);
@@ -339,9 +353,11 @@ void WarpX::PSATDBackwardTransformJ (
{
Idx = spectral_solver_cp[lev]->m_spectral_index;
- idx_jx = static_cast<int>(Idx.Jx);
- idx_jy = static_cast<int>(Idx.Jy);
- idx_jz = static_cast<int>(Idx.Jz);
+ // Note that these backward FFTs are currently called only
+ // with algorithms that do not support J linear in time
+ idx_jx = static_cast<int>(Idx.Jx_mid);
+ idx_jy = static_cast<int>(Idx.Jy_mid);
+ idx_jz = static_cast<int>(Idx.Jz_mid);
BackwardTransformVect(lev, *spectral_solver_cp[lev], J_cp[lev],
idx_jx, idx_jy, idx_jz, m_fill_guards_current);
@@ -359,7 +375,15 @@ void WarpX::PSATDForwardTransformRho (
const SpectralFieldIndex& Idx = spectral_solver_fp[0]->m_spectral_index;
// Select index in k space
- const int dst_comp = (dcomp == 0) ? Idx.rho_old : Idx.rho_new;
+ int dst_comp;
+ if (rho_in_time == RhoInTime::Constant)
+ {
+ dst_comp = Idx.rho_mid;
+ }
+ else // rho_in_time == RhoInTime::Linear
+ {
+ dst_comp = (dcomp == 0) ? Idx.rho_old : Idx.rho_new;
+ }
for (int lev = 0; lev <= finest_level; ++lev)
{
@@ -568,15 +592,15 @@ WarpX::PSATDMoveJNewToJOld ()
for (int lev = 0; lev <= finest_level; ++lev)
{
- spectral_solver_fp[lev]->CopySpectralDataComp(Idx.Jx_new, Idx.Jx);
- spectral_solver_fp[lev]->CopySpectralDataComp(Idx.Jy_new, Idx.Jy);
- spectral_solver_fp[lev]->CopySpectralDataComp(Idx.Jz_new, Idx.Jz);
+ spectral_solver_fp[lev]->CopySpectralDataComp(Idx.Jx_new, Idx.Jx_old);
+ spectral_solver_fp[lev]->CopySpectralDataComp(Idx.Jy_new, Idx.Jy_old);
+ spectral_solver_fp[lev]->CopySpectralDataComp(Idx.Jz_new, Idx.Jz_old);
if (spectral_solver_cp[lev])
{
- spectral_solver_cp[lev]->CopySpectralDataComp(Idx.Jx_new, Idx.Jx);
- spectral_solver_cp[lev]->CopySpectralDataComp(Idx.Jy_new, Idx.Jy);
- spectral_solver_cp[lev]->CopySpectralDataComp(Idx.Jz_new, Idx.Jz);
+ spectral_solver_cp[lev]->CopySpectralDataComp(Idx.Jx_new, Idx.Jx_old);
+ spectral_solver_cp[lev]->CopySpectralDataComp(Idx.Jy_new, Idx.Jy_old);
+ spectral_solver_cp[lev]->CopySpectralDataComp(Idx.Jz_new, Idx.Jz_old);
}
}
}