diff options
Diffstat (limited to 'Source/FieldSolver/WarpXPushFieldsEM.cpp')
-rw-r--r-- | Source/FieldSolver/WarpXPushFieldsEM.cpp | 66 |
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); } } } |