diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp | 15 | ||||
-rw-r--r-- | Source/WarpX.cpp | 24 |
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); |