aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp15
-rw-r--r--Source/WarpX.cpp24
2 files changed, 32 insertions, 7 deletions
diff --git a/Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp b/Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp
index e8d7828cb..26d99f4a9 100644
--- a/Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp
+++ b/Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp
@@ -4,6 +4,7 @@
#if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
#include "FieldSolver/SpectralSolver/SpectralSolverRZ.H"
+ #include "Utils/WarpXAlgorithmSelection.H"
#endif
#include "Particles/MultiParticleContainer.H"
#include "Particles/WarpXParticleContainer.H"
@@ -54,11 +55,15 @@ RhoFunctor::operator() ( amrex::MultiFab& mf_dst, const int dcomp, const int /*i
#if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
using IdxAvg = SpectralFieldIndexTimeAveraging;
- if (WarpX::use_kspace_filter) {
- auto & solver = warpx.get_spectral_solver_fp(m_lev);
- solver.ForwardTransform(m_lev, *rho, IdxAvg::rho_new);
- solver.ApplyFilter(IdxAvg::rho_new);
- solver.BackwardTransform(m_lev, *rho, IdxAvg::rho_new);
+ // Apply k-space filtering when using the PSATD solver
+ if (WarpX::maxwell_solver_id == MaxwellSolverAlgo::PSATD)
+ {
+ if (WarpX::use_kspace_filter) {
+ auto & solver = warpx.get_spectral_solver_fp(m_lev);
+ solver.ForwardTransform(m_lev, *rho, IdxAvg::rho_new);
+ solver.ApplyFilter(IdxAvg::rho_new);
+ solver.BackwardTransform(m_lev, *rho, IdxAvg::rho_new);
+ }
}
#endif
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp
index 927feb900..21cc5e4db 100644
--- a/Source/WarpX.cpp
+++ b/Source/WarpX.cpp
@@ -142,8 +142,8 @@ int WarpX::current_centering_noz = 2;
bool WarpX::use_fdtd_nci_corr = false;
bool WarpX::galerkin_interpolation = true;
-bool WarpX::use_filter = false;
-bool WarpX::use_kspace_filter = false;
+bool WarpX::use_filter = true;
+bool WarpX::use_kspace_filter = true;
bool WarpX::use_filter_compensation = false;
bool WarpX::serialize_ics = false;
@@ -556,6 +556,12 @@ WarpX::ReadParameters ()
pp_warpx.query("n_buffer", n_buffer);
pp_warpx.query("const_dt", const_dt);
+ // Filter currently not working with FDTD solver in RZ geometry: turn OFF by default
+ // (see https://github.com/ECP-WarpX/WarpX/issues/1943)
+#ifdef WARPX_DIM_RZ
+ if (WarpX::maxwell_solver_id != MaxwellSolverAlgo::PSATD) WarpX::use_filter = false;
+#endif
+
// Read filter and fill IntVect filter_npass_each_dir with
// proper size for AMREX_SPACEDIM
pp_warpx.query("use_filter", use_filter);
@@ -568,12 +574,26 @@ WarpX::ReadParameters ()
filter_npass_each_dir[2] = parse_filter_npass_each_dir[2];
#endif
+ // TODO When k-space filtering will be implemented also for Cartesian geometries,
+ // this code block will have to be applied in all cases (remove #ifdef condition)
#ifdef WARPX_DIM_RZ
if (WarpX::maxwell_solver_id == MaxwellSolverAlgo::PSATD) {
// With RZ spectral, only use k-space filtering
use_kspace_filter = use_filter;
use_filter = false;
}
+ else // FDTD
+ {
+ // Filter currently not working with FDTD solver in RZ geometry
+ // (see https://github.com/ECP-WarpX/WarpX/issues/1943)
+ if (use_filter)
+ {
+ amrex::Print() << "\nWARNING:"
+ << "\nFilter currently not working with FDTD solver in RZ geometry:"
+ << "\nwe recommend setting warpx.use_filter = 0 in the input file.\n"
+ << std::endl;
+ }
+ }
#endif
pp_warpx.query("num_mirrors", num_mirrors);