aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver')
-rw-r--r--Source/FieldSolver/ElectrostaticSolver.cpp41
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/ApplySilverMuellerBoundary.cpp23
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp31
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp36
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp30
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp38
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp34
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp37
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp29
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp34
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H4
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H4
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H4
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H4
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/FieldAccessorFunctors.H2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H15
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp23
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver_fwd.H8
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp26
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H9
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp16
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties_fwd.H8
-rw-r--r--Source/FieldSolver/SpectralSolver/AnyFFT.H3
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.H11
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.cpp15
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/GalileanPsatdAlgorithmRZ.cpp2
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.H14
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.cpp20
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.H11
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.cpp13
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithmRZ.cpp2
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.H33
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.cpp38
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralBinomialFilter.cpp1
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralFieldData.H16
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp20
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.H5
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralFieldData_fwd.H12
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralHankelTransform/BesselRoots.H2
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralHankelTransform/HankelTransform.cpp5
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.H3
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.cpp3
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralKSpace.H7
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp16
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralKSpace_fwd.H10
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolver.H10
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolver.cpp10
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolverRZ.H2
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp6
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolverRZ_fwd.H8
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolver_fwd.H8
-rw-r--r--Source/FieldSolver/SpectralSolver/WrapFFTW.cpp6
-rw-r--r--Source/FieldSolver/WarpXPushFieldsEM.cpp39
-rw-r--r--Source/FieldSolver/WarpXPushFieldsEM_K.H1
-rw-r--r--Source/FieldSolver/WarpX_QED_Field_Pushers.cpp35
-rw-r--r--Source/FieldSolver/WarpX_QED_K.H3
56 files changed, 686 insertions, 160 deletions
diff --git a/Source/FieldSolver/ElectrostaticSolver.cpp b/Source/FieldSolver/ElectrostaticSolver.cpp
index a65e011c1..3db4ac50e 100644
--- a/Source/FieldSolver/ElectrostaticSolver.cpp
+++ b/Source/FieldSolver/ElectrostaticSolver.cpp
@@ -4,19 +4,48 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include <AMReX_ParallelDescriptor.H>
+#include "WarpX.H"
+
+#include "Parallelization/GuardCellManager.H"
+#include "Parser/WarpXParser.H"
+#include "Particles/MultiParticleContainer.H"
+#include "Particles/WarpXParticleContainer.H"
+#include "Utils/WarpXAlgorithmSelection.H"
+#include "Utils/WarpXConst.H"
+#include "Utils/WarpXUtil.H"
+
+#include <AMReX_Array.H>
+#include <AMReX_Array4.H>
+#include <AMReX_BLassert.H>
+#include <AMReX_Box.H>
+#include <AMReX_BoxArray.H>
+#include <AMReX_Config.H>
+#include <AMReX_DistributionMapping.H>
+#include <AMReX_FArrayBox.H>
+#include <AMReX_FabArray.H>
+#include <AMReX_Geometry.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_IntVect.H>
+#include <AMReX_LO_BCTYPES.H>
+#include <AMReX_MFIter.H>
#include <AMReX_MLMG.H>
#ifdef WARPX_DIM_RZ
-#include <AMReX_MLNodeLaplacian.H>
+ #include <AMReX_MLNodeLaplacian.H>
#else
-#include <AMReX_MLNodeTensorLaplacian.H>
+ #include <AMReX_MLNodeTensorLaplacian.H>
#endif
+#include <AMReX_MultiFab.H>
+#include <AMReX_ParmParse.H>
#include <AMReX_REAL.H>
+#include <AMReX_SPACE.H>
+#include <AMReX_Vector.H>
-#include <WarpX.H>
-
+#include <array>
#include <memory>
+#include <string>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/ApplySilverMuellerBoundary.cpp b/Source/FieldSolver/FiniteDifferenceSolver/ApplySilverMuellerBoundary.cpp
index a7258da09..58a382d19 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/ApplySilverMuellerBoundary.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/ApplySilverMuellerBoundary.cpp
@@ -4,14 +4,29 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FiniteDifferenceSolver.H"
-#include "Utils/WarpXConst.H"
-#include <AMReX_Gpu.H>
+
#ifdef WARPX_DIM_RZ
# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
+#include "Utils/WarpXAlgorithmSelection.H"
+#include "Utils/WarpXConst.H"
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Box.H>
+#include <AMReX_Config.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp
index bcc7c4460..0e511e279 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp
@@ -4,19 +4,34 @@
*
* License: BSD-3-Clause-LBNL
*/
+#include "FiniteDifferenceSolver.H"
#include "Utils/WarpXAlgorithmSelection.H"
-#include "FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
-#else
-# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
+#ifndef WARPX_DIM_RZ
# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
# include "FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
+#else
+# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
-#include "Utils/WarpXConst.H"
-#include "WarpX.H"
-#include <AMReX_Gpu.H>
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
index 3d2dc42d8..eefd5f57c 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
@@ -4,18 +4,40 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "WarpX.H"
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
-#else
+
+#ifndef WARPX_DIM_RZ
# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
# include "FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+#else
+# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
-#include <AMReX_Gpu.H>
+#include "Utils/WarpXAlgorithmSelection.H"
+#include "Utils/WarpXConst.H"
+#include "WarpX.H"
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuAtomic.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuDevice.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_LayoutData.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+#include <AMReX_Utility.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
index 6eb7caacc..299f92f2f 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
@@ -4,19 +4,35 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
-#else
+
+#include "BoundaryConditions/PMLComponent.H"
+
+#ifndef WARPX_DIM_RZ
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+#else
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
-#include "BoundaryConditions/PMLComponent.H"
-#include <AMReX_Gpu.H>
+#include "Utils/WarpXAlgorithmSelection.H"
+
#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp
index 63fc8b38d..83494e3c2 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp
@@ -4,20 +4,40 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "WarpX.H"
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
+
+#ifndef WARPX_DIM_RZ
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
#else
-# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
+#include "Utils/WarpXAlgorithmSelection.H"
#include "Utils/WarpXConst.H"
-#include <AMReX_Gpu.H>
+#include "WarpX.H"
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuAtomic.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuDevice.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_LayoutData.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+#include <AMReX_Utility.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp
index f93f68414..ea5ecb381 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp
@@ -4,22 +4,38 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
-#else
+
+#include "BoundaryConditions/PML.H"
+#include "BoundaryConditions/PMLComponent.H"
+#include "BoundaryConditions/PML_current.H"
+#ifndef WARPX_DIM_RZ
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+#else
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
-#include "BoundaryConditions/PML.H"
-#include "BoundaryConditions/PML_current.H"
-#include "BoundaryConditions/PMLComponent.H"
+#include "Utils/WarpXAlgorithmSelection.H"
#include "Utils/WarpXConst.H"
-#include <AMReX_Gpu.H>
+
#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_FabArray.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp
index 445b62fb6..18401d74e 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp
@@ -4,19 +4,38 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
+
+#ifndef WARPX_DIM_RZ
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
#else
-# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
+#include "Utils/WarpXAlgorithmSelection.H"
#include "Utils/WarpXConst.H"
-#include "WarpX.H"
-#include <AMReX_Gpu.H>
+#ifdef WARPX_DIM_RZ
+# include "WarpX.H"
+#endif
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp
index 1a49316dd..79eed1efb 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp
@@ -4,19 +4,34 @@
*
* License: BSD-3-Clause-LBNL
*/
-
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
-#else
+
+#include "BoundaryConditions/PMLComponent.H"
+#ifndef WARPX_DIM_RZ
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+#else
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
-#include "BoundaryConditions/PMLComponent.H"
-#include <AMReX_Gpu.H>
+#include "Utils/WarpXAlgorithmSelection.H"
+
#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp
index f69fb57c4..b2aa302ad 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp
@@ -5,18 +5,34 @@
* License: BSD-3-Clause-LBNL
*/
-#include "Utils/WarpXAlgorithmSelection.H"
+
#include "FiniteDifferenceSolver.H"
-#ifdef WARPX_DIM_RZ
-# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
+#ifndef WARPX_DIM_RZ
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
#else
-# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
#endif
-#include "Utils/WarpXConst.H"
-#include "WarpX.H"
-#include <AMReX_Gpu.H>
+#include "Utils/WarpXAlgorithmSelection.H"
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H
index da1a8c9a9..216723553 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H
@@ -10,10 +10,10 @@
#include "Utils/WarpXConst.H"
-#include <AMReX_REAL.H>
+#include <AMReX.H>
#include <AMReX_Array4.H>
#include <AMReX_Gpu.H>
-#include <AMReX.H>
+#include <AMReX_REAL.H>
#include <algorithm>
#include <array>
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H
index 68ecdfc60..5c1d68687 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H
@@ -10,10 +10,10 @@
#include "Utils/WarpXConst.H"
-#include <AMReX_REAL.H>
+#include <AMReX.H>
#include <AMReX_Array4.H>
#include <AMReX_Gpu.H>
-#include <AMReX.H>
+#include <AMReX_REAL.H>
#include <array>
#include <cmath>
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H
index 4fd76a699..4fe813754 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H
@@ -8,13 +8,13 @@
#ifndef WARPX_FINITE_DIFFERENCE_ALGORITHM_CARTESIAN_YEE_H_
#define WARPX_FINITE_DIFFERENCE_ALGORITHM_CARTESIAN_YEE_H_
-#include "Utils/WarpXConst.H"
#include "FieldAccessorFunctors.H"
+#include "Utils/WarpXConst.H"
#include <AMReX.H>
-#include <AMReX_REAL.H>
#include <AMReX_Array4.H>
#include <AMReX_Gpu.H>
+#include <AMReX_REAL.H>
#include <array>
#include <cmath>
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H
index 2283df09a..fee0a9dc8 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H
@@ -10,10 +10,10 @@
#include "Utils/WarpXConst.H"
-#include <AMReX_REAL.H>
+#include <AMReX.H>
#include <AMReX_Array4.H>
#include <AMReX_Gpu.H>
-#include <AMReX.H>
+#include <AMReX_REAL.H>
#include <array>
#include <cmath>
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/FieldAccessorFunctors.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/FieldAccessorFunctors.H
index 3ba6de335..0b5245228 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/FieldAccessorFunctors.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/FieldAccessorFunctors.H
@@ -1,6 +1,8 @@
#ifndef WARPX_FIELD_ACCESSOR_FUNCTORS_H
#define WARPX_FIELD_ACCESSOR_FUNCTORS_H
+
#include "WarpX.H"
+
/**
* \brief Functor that returns the division of the source m_field Array4 value
by macroparameter, m_parameter value at the respective (i,j,k,ncomp).
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
index 5346604d4..bd6add3f0 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
@@ -8,9 +8,18 @@
#ifndef WARPX_FINITE_DIFFERENCE_SOLVER_H_
#define WARPX_FINITE_DIFFERENCE_SOLVER_H_
-#include <AMReX_MultiFab.H>
-#include "MacroscopicProperties/MacroscopicProperties.H"
-#include "BoundaryConditions/PML.H"
+#include "FiniteDifferenceSolver_fwd.H"
+
+#include "BoundaryConditions/PML_fwd.H"
+#include "MacroscopicProperties/MacroscopicProperties_fwd.H"
+
+#include <AMReX_GpuContainers.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
/**
* \brief Top-level class for the electromagnetic finite-difference solver
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
index 14decf5c1..aab4a69c5 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
@@ -4,17 +4,26 @@
*
* License: BSD-3-Clause-LBNL
*/
+#include "FiniteDifferenceSolver.H"
+#ifndef WARPX_DIM_RZ
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+#else
+# include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
+#endif
#include "Utils/WarpXAlgorithmSelection.H"
#ifdef WARPX_DIM_RZ
-# include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
-#else
-# include "FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
-# include "FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H"
+# include "WarpX.H"
#endif
-#include "FiniteDifferenceSolver.H"
-#include "WarpX.H"
+
+#include <AMReX.H>
+#include <AMReX_GpuDevice.H>
+#include <AMReX_PODVector.H>
+#include <AMReX_Vector.H>
+
+#include <vector>
/* This function initializes the stencil coefficients for the chosen finite-difference algorithm */
FiniteDifferenceSolver::FiniteDifferenceSolver (
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver_fwd.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver_fwd.H
new file mode 100644
index 000000000..4ecd05116
--- /dev/null
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver_fwd.H
@@ -0,0 +1,8 @@
+/* Copyright 2021 Luca Fedeli
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+
+class FiniteDifferenceSolver;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp
index 448c9b57d..f2a0cc9c7 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp
@@ -1,5 +1,5 @@
-#include "Utils/WarpXAlgorithmSelection.H"
#include "FiniteDifferenceSolver.H"
+
#ifdef WARPX_DIM_RZ
// currently works only for 3D
#else
@@ -7,12 +7,28 @@
# include "FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H"
# include "FiniteDifferenceAlgorithms/FieldAccessorFunctors.H"
#endif
-#include "Utils/WarpXConst.H"
+#include "MacroscopicProperties/MacroscopicProperties.H"
#include "Utils/CoarsenIO.H"
-#include <WarpX.H>
-#include <AMReX.H>
-#include <AMReX_Gpu.H>
+#include "Utils/WarpXAlgorithmSelection.H"
+#include "WarpX.H"
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuContainers.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
index 7dfa2ff62..3597212c4 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
@@ -1,12 +1,19 @@
#ifndef WARPX_MACROSCOPICPROPERTIES_H_
#define WARPX_MACROSCOPICPROPERTIES_H_
+#include "MacroscopicProperties_fwd.H"
#include "Parser/WarpXParserWrapper.H"
#include "Utils/WarpXConst.H"
-#include <AMReX_MultiFab.H>
+#include <AMReX_Array.H>
+#include <AMReX_Extension.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+#include <memory>
+#include <string>
/**
* \brief This class contains the macroscopic properties of the medium needed to
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
index 170ee6d80..579296e14 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
@@ -1,8 +1,22 @@
#include "MacroscopicProperties.H"
-#include "WarpX.H"
+
#include "Utils/WarpXUtil.H"
+#include "WarpX.H"
+#include <AMReX_Array4.H>
+#include <AMReX_BoxArray.H>
+#include <AMReX_Config.H>
+#include <AMReX_DistributionMapping.H>
+#include <AMReX_Geometry.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_IntVect.H>
+#include <AMReX_MFIter.H>
#include <AMReX_ParmParse.H>
+#include <AMReX_Print.H>
+#include <AMReX_RealBox.H>
+
+#include <AMReX_BaseFwd.H>
#include <memory>
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties_fwd.H b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties_fwd.H
new file mode 100644
index 000000000..2ca4662d7
--- /dev/null
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties_fwd.H
@@ -0,0 +1,8 @@
+/* Copyright 2021 Luca Fedeli
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+
+class MacroscopicProperties;
diff --git a/Source/FieldSolver/SpectralSolver/AnyFFT.H b/Source/FieldSolver/SpectralSolver/AnyFFT.H
index 6ba77e13b..23cadd30f 100644
--- a/Source/FieldSolver/SpectralSolver/AnyFFT.H
+++ b/Source/FieldSolver/SpectralSolver/AnyFFT.H
@@ -9,6 +9,7 @@
#define ANYFFT_H_
#include <AMReX_Config.H>
+#include <AMReX_LayoutData.H>
#if defined(AMREX_USE_CUDA)
# include <cufft.h>
@@ -18,8 +19,6 @@
# include <fftw3.h>
#endif
-#include <AMReX_LayoutData.H>
-
/**
* Wrapper around FFT libraries. The header file defines the API and the base types
* (Complex and VendorFFTPlan), and the implementation for different FFT libraries is
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.H b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.H
index 76526024f..ecbc1578b 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.H
@@ -1,8 +1,19 @@
#ifndef WARPX_COMOVING_PSATD_ALGORITHM_H_
#define WARPX_COMOVING_PSATD_ALGORITHM_H_
+#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+#include "FieldSolver/SpectralSolver/SpectralKSpace.H"
#include "SpectralBaseAlgorithm.H"
+#include <AMReX_Array.H>
+#include <AMReX_Config.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
+
#if WARPX_USE_PSATD
/* \brief Class that updates the field in spectral space and stores the coefficients
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.cpp b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.cpp
index eb4f13bb4..64920d325 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/ComovingPsatdAlgorithm.cpp
@@ -1,5 +1,20 @@
#include "ComovingPsatdAlgorithm.H"
+
#include "Utils/WarpXConst.H"
+#include "Utils/WarpX_Complex.H"
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_BLProfiler.H>
+#include <AMReX_BaseFab.H>
+#include <AMReX_BoxArray.H>
+#include <AMReX_GpuComplex.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_PODVector.H>
+
+#include <cmath>
#if WARPX_USE_PSATD
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/GalileanPsatdAlgorithmRZ.cpp b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/GalileanPsatdAlgorithmRZ.cpp
index a76311db3..ce6d5b933 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/GalileanPsatdAlgorithmRZ.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/GalileanPsatdAlgorithmRZ.cpp
@@ -4,10 +4,10 @@
*
* License: BSD-3-Clause-LBNL
*/
-#include "WarpX.H"
#include "GalileanPsatdAlgorithmRZ.H"
#include "Utils/WarpXConst.H"
#include "Utils/WarpXProfilerWrapper.H"
+#include "WarpX.H"
#include <cmath>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.H b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.H
index 1b9755826..7e17eda07 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.H
@@ -9,6 +9,16 @@
#include "SpectralBaseAlgorithm.H"
+#include "FieldSolver/SpectralSolver/SpectralFieldData_fwd.H"
+#include "FieldSolver/SpectralSolver/SpectralKSpace_fwd.H"
+
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
+
#if WARPX_USE_PSATD
/* \brief Class that updates the field in spectral space
@@ -32,9 +42,7 @@ class PMLPsatdAlgorithm : public SpectralBaseAlgorithm
// Redefine functions from base class
virtual void pushSpectralFields(SpectralFieldData& f) const override final;
- virtual int getRequiredNumberOfFields() const override final {
- return SpectralPMLIndex::n_fields;
- }
+ virtual int getRequiredNumberOfFields() const override final;
/**
* \brief Virtual function for current correction in Fourier space
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.cpp b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.cpp
index 3c1526357..d28b5218a 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PMLPsatdAlgorithm.cpp
@@ -5,11 +5,25 @@
* License: BSD-3-Clause-LBNL
*/
#include "PMLPsatdAlgorithm.H"
+
+#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+#include "FieldSolver/SpectralSolver/SpectralKSpace.H"
#include "Utils/WarpXConst.H"
+#include "Utils/WarpX_Complex.H"
+
+#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_BaseFab.H>
+#include <AMReX_BoxArray.H>
+#include <AMReX_Config.H>
+#include <AMReX_GpuComplex.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_PODVector.H>
#include <cmath>
-
#if WARPX_USE_PSATD
using namespace amrex;
@@ -401,4 +415,8 @@ PMLPsatdAlgorithm::VayDeposition (const int /*lev*/,
amrex::Abort("Vay deposition not implemented for PML PSATD");
}
+int PMLPsatdAlgorithm::getRequiredNumberOfFields() const {
+ return SpectralPMLIndex::n_fields;
+}
+
#endif // WARPX_USE_PSATD
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.H b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.H
index 973265cdf..7b917284b 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.H
@@ -7,8 +7,19 @@
#ifndef WARPX_PSATD_ALGORITHM_H_
#define WARPX_PSATD_ALGORITHM_H_
+#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+#include "FieldSolver/SpectralSolver/SpectralKSpace.H"
#include "SpectralBaseAlgorithm.H"
+#include <AMReX_Array.H>
+#include <AMReX_Config.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
+
#if WARPX_USE_PSATD
/* \brief Class that updates the field in spectral space
* and stores the coefficients of the corresponding update equation.
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.cpp b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.cpp
index 01a2cfe94..8a5b791ab 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithm.cpp
@@ -5,7 +5,20 @@
* License: BSD-3-Clause-LBNL
*/
#include "PsatdAlgorithm.H"
+
#include "Utils/WarpXConst.H"
+#include "Utils/WarpX_Complex.H"
+
+#include <AMReX_Array4.H>
+#include <AMReX_BLProfiler.H>
+#include <AMReX_BaseFab.H>
+#include <AMReX_BoxArray.H>
+#include <AMReX_GpuComplex.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IntVect.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_PODVector.H>
#include <cmath>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithmRZ.cpp b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithmRZ.cpp
index 86d9f9696..cb055a27b 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithmRZ.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/PsatdAlgorithmRZ.cpp
@@ -4,10 +4,10 @@
*
* License: BSD-3-Clause-LBNL
*/
-#include "WarpX.H"
#include "PsatdAlgorithmRZ.H"
#include "Utils/WarpXConst.H"
#include "Utils/WarpXProfilerWrapper.H"
+#include "WarpX.H"
#include <cmath>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.H b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.H
index 598046042..624d7870c 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.H
@@ -8,9 +8,19 @@
#define WARPX_SPECTRAL_BASE_ALGORITHM_H_
#include "FieldSolver/SpectralSolver/SpectralKSpace.H"
-#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+#include "Utils/WarpX_Complex.H"
-#include <AMReX.H>
+#include "FieldSolver/SpectralSolver/SpectralFieldData_fwd.H"
+
+#include <AMReX_BaseFab.H>
+#include <AMReX_Config.H>
+#include <AMReX_FabArray.H>
+#include <AMReX_REAL.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
#if WARPX_USE_PSATD
@@ -75,24 +85,13 @@ class SpectralBaseAlgorithm
using SpectralComplexCoefficients = \
amrex::FabArray< amrex::BaseFab <Complex> >;
- // Constructor
+ /**
+ * \brief Constructor
+ */
SpectralBaseAlgorithm(const SpectralKSpace& spectral_kspace,
const amrex::DistributionMapping& dm,
const int norder_x, const int norder_y,
- const int norder_z, const bool nodal)
- // Compute and assign the modified k vectors
- : modified_kx_vec(spectral_kspace.getModifiedKComponent(dm,0,norder_x,nodal)),
-#if (AMREX_SPACEDIM==3)
- modified_ky_vec(spectral_kspace.getModifiedKComponent(dm,1,norder_y,nodal)),
- modified_kz_vec(spectral_kspace.getModifiedKComponent(dm,2,norder_z,nodal))
-#else
- modified_kz_vec(spectral_kspace.getModifiedKComponent(dm,1,norder_z,nodal))
-#endif
- {
-#if (AMREX_SPACEDIM!=3)
- amrex::ignore_unused(norder_y);
-#endif
- }
+ const int norder_z, const bool nodal);
// Modified finite-order vectors
KVectorComponent modified_kx_vec;
diff --git a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.cpp b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.cpp
index 46fe83900..e57302cc4 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.cpp
@@ -5,11 +5,47 @@
* License: BSD-3-Clause-LBNL
*/
#include "SpectralBaseAlgorithm.H"
-#include <cmath>
+
+#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+#include "Utils/WarpX_Complex.H"
+
+#include <AMReX_Array4.H>
+#include <AMReX_BaseFab.H>
+#include <AMReX_Config.H>
+#include <AMReX_GpuComplex.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_PODVector.H>
+#include <AMReX_REAL.H>
+
+#include <array>
+#include <memory>
using namespace amrex;
/**
+ * \brief Constructor
+ */
+SpectralBaseAlgorithm::SpectralBaseAlgorithm(const SpectralKSpace& spectral_kspace,
+ const amrex::DistributionMapping& dm,
+ const int norder_x, const int norder_y,
+ const int norder_z, const bool nodal):
+ // Compute and assign the modified k vectors
+ modified_kx_vec(spectral_kspace.getModifiedKComponent(dm,0,norder_x,nodal)),
+#if (AMREX_SPACEDIM==3)
+ modified_ky_vec(spectral_kspace.getModifiedKComponent(dm,1,norder_y,nodal)),
+ modified_kz_vec(spectral_kspace.getModifiedKComponent(dm,2,norder_z,nodal))
+#else
+ modified_kz_vec(spectral_kspace.getModifiedKComponent(dm,1,norder_z,nodal))
+#endif
+ {
+#if (AMREX_SPACEDIM!=3)
+ amrex::ignore_unused(norder_y);
+#endif
+ }
+
+/**
* \brief Compute spectral divergence of E
*/
void
diff --git a/Source/FieldSolver/SpectralSolver/SpectralBinomialFilter.cpp b/Source/FieldSolver/SpectralSolver/SpectralBinomialFilter.cpp
index e0ac3e886..14246b5be 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralBinomialFilter.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralBinomialFilter.cpp
@@ -6,6 +6,7 @@
*/
#include "SpectralBinomialFilter.H"
+
#include <AMReX_REAL.H>
#include <cmath>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H
index 4fc734853..a1fed5cce 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H
@@ -8,13 +8,23 @@
#ifndef WARPX_SPECTRAL_FIELD_DATA_H_
#define WARPX_SPECTRAL_FIELD_DATA_H_
-#include "Utils/WarpX_Complex.H"
-#include "SpectralKSpace.H"
+#include "SpectralFieldData_fwd.H"
+
#include "AnyFFT.H"
+#include "SpectralKSpace.H"
+#include "Utils/WarpX_Complex.H"
+#include <AMReX_BaseFab.H>
+#include <AMReX_Config.H>
+#include <AMReX_Extension.H>
+#include <AMReX_FabArray.H>
+#include <AMReX_IndexType.H>
#include <AMReX_MultiFab.H>
+#include <AMReX_Vector.H>
+
+#include <AMReX_BaseFwd.H>
-#include <string>
+#include <vector>
// Declare type for spectral fields
using SpectralField = amrex::FabArray< amrex::BaseFab <Complex> >;
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp b/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp
index 138476f88..bdb631063 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp
@@ -6,9 +6,27 @@
* License: BSD-3-Clause-LBNL
*/
#include "SpectralFieldData.H"
+
+#include "Utils/WarpXAlgorithmSelection.H"
#include "WarpX.H"
-#include <map>
+#include <AMReX_Array4.H>
+#include <AMReX_BLassert.H>
+#include <AMReX_Box.H>
+#include <AMReX_BoxArray.H>
+#include <AMReX_Dim3.H>
+#include <AMReX_FArrayBox.H>
+#include <AMReX_GpuAtomic.H>
+#include <AMReX_GpuComplex.H>
+#include <AMReX_GpuDevice.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IntVect.H>
+#include <AMReX_LayoutData.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_PODVector.H>
+#include <AMReX_REAL.H>
+#include <AMReX_Utility.H>
#if WARPX_USE_PSATD
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.H b/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.H
index 8484d7174..85aa41d3b 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.H
@@ -7,10 +7,11 @@
#ifndef WARPX_SPECTRAL_FIELD_DATA_RZ_H_
#define WARPX_SPECTRAL_FIELD_DATA_RZ_H_
-#include "SpectralKSpaceRZ.H"
+#include "SpectralBinomialFilter.H"
#include "SpectralFieldData.H"
#include "SpectralHankelTransform/SpectralHankelTransformer.H"
-#include "SpectralBinomialFilter.H"
+#include "SpectralKSpaceRZ.H"
+
#include <AMReX_MultiFab.H>
/* \brief Class that stores the fields in spectral space, and performs the
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData_fwd.H b/Source/FieldSolver/SpectralSolver/SpectralFieldData_fwd.H
new file mode 100644
index 000000000..631dd3b06
--- /dev/null
+++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData_fwd.H
@@ -0,0 +1,12 @@
+/* Copyright 2021 Luca Fedeli
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+
+struct SpectralFieldIndex;
+struct SpectralAvgFieldIndex;
+struct SpectralPMLIndex;
+
+class SpectralFieldData;
diff --git a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/BesselRoots.H b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/BesselRoots.H
index 6465d119e..64ffc80ac 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/BesselRoots.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/BesselRoots.H
@@ -32,6 +32,8 @@
! (www.jpmoreau.fr)
! ------------------------------------------------------------------------ */
+#include "Utils/WarpXConst.H"
+
#include <AMReX_REAL.H>
#include <cmath>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/HankelTransform.cpp b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/HankelTransform.cpp
index 24e9d7f81..d6a357b7f 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/HankelTransform.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/HankelTransform.cpp
@@ -4,10 +4,11 @@
*
* License: BSD-3-Clause-LBNL
*/
-#include "WarpX.H"
-
#include "HankelTransform.H"
+
#include "BesselRoots.H"
+#include "Utils/WarpXConst.H"
+#include "WarpX.H"
#include <blas.hh>
#include <lapack.hh>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.H b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.H
index 82cf48fe4..e6dddf60e 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.H
@@ -7,9 +7,10 @@
#ifndef WARPX_SPECTRALHANKELTRANSFORMER_H_
#define WARPX_SPECTRALHANKELTRANSFORMER_H_
-#include <AMReX_FArrayBox.H>
#include "HankelTransform.H"
+#include <AMReX_FArrayBox.H>
+
/* \brief Object that allows to transform the fields back and forth between the
* spectral and interpolation grid.
*
diff --git a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.cpp b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.cpp
index 884ee5f45..a40e62f0d 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralHankelTransform/SpectralHankelTransformer.cpp
@@ -4,9 +4,10 @@
*
* License: BSD-3-Clause-LBNL
*/
-#include "Utils/WarpXConst.H"
#include "SpectralHankelTransformer.H"
+#include "Utils/WarpXConst.H"
+
#include <memory>
SpectralHankelTransformer::SpectralHankelTransformer (int const nr,
diff --git a/Source/FieldSolver/SpectralSolver/SpectralKSpace.H b/Source/FieldSolver/SpectralSolver/SpectralKSpace.H
index b009b0ea6..acd58cdb6 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralKSpace.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralKSpace.H
@@ -8,13 +8,20 @@
#ifndef WARPX_SPECTRAL_K_SPACE_H_
#define WARPX_SPECTRAL_K_SPACE_H_
+#include "SpectralKSpace_fwd.H"
+
#include "Utils/WarpX_Complex.H"
+#include <AMReX_Array.H>
#include <AMReX_BoxArray.H>
+#include <AMReX_Config.H>
+#include <AMReX_GpuContainers.H>
#include <AMReX_LayoutData.H>
#include <AMReX_REAL.H>
#include <AMReX_RealVect.H>
+#include <AMReX_Vector.H>
+#include <AMReX_BaseFwd.H>
// `KVectorComponent` and `SpectralShiftFactor` hold one 1D array
// ("DeviceVector") for each box ("LayoutData"). The arrays are
diff --git a/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp b/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp
index d04d238ad..2f11f84ca 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp
@@ -5,10 +5,24 @@
*
* License: BSD-3-Clause-LBNL
*/
-#include "Utils/WarpXConst.H"
#include "SpectralKSpace.H"
+#include "Utils/WarpXConst.H"
+
+#include <AMReX_BLassert.H>
+#include <AMReX_Box.H>
+#include <AMReX_BoxList.H>
+#include <AMReX_GpuComplex.H>
+#include <AMReX_GpuDevice.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_IntVect.H>
+#include <AMReX_MFIter.H>
+
+#include <array>
#include <cmath>
+#include <vector>
using namespace amrex;
diff --git a/Source/FieldSolver/SpectralSolver/SpectralKSpace_fwd.H b/Source/FieldSolver/SpectralSolver/SpectralKSpace_fwd.H
new file mode 100644
index 000000000..32417ff5c
--- /dev/null
+++ b/Source/FieldSolver/SpectralSolver/SpectralKSpace_fwd.H
@@ -0,0 +1,10 @@
+/* Copyright 2021 Luca Fedeli
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+
+struct ShiftType;
+
+class SpectralKSpace;
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.H b/Source/FieldSolver/SpectralSolver/SpectralSolver.H
index d5c7725fe..996053a88 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralSolver.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.H
@@ -7,9 +7,19 @@
#ifndef WARPX_SPECTRAL_SOLVER_H_
#define WARPX_SPECTRAL_SOLVER_H_
+#include "SpectralSolver_fwd.H"
+
#include "SpectralAlgorithms/SpectralBaseAlgorithm.H"
#include "SpectralFieldData.H"
+#include <AMReX_Array.H>
+#include <AMReX_REAL.H>
+#include <AMReX_RealVect.H>
+
+#include <AMReX_BaseFwd.H>
+
+#include <array>
+#include <memory>
#ifdef WARPX_USE_PSATD
/**
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp
index ae631ba6c..d04961c5f 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp
@@ -4,14 +4,14 @@
*
* License: BSD-3-Clause-LBNL
*/
+#include "FieldSolver/SpectralSolver/SpectralAlgorithms/SpectralBaseAlgorithm.H"
+#include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+#include "SpectralAlgorithms/ComovingPsatdAlgorithm.H"
+#include "SpectralAlgorithms/PMLPsatdAlgorithm.H"
+#include "SpectralAlgorithms/PsatdAlgorithm.H"
#include "SpectralKSpace.H"
#include "SpectralSolver.H"
-#include "SpectralAlgorithms/PsatdAlgorithm.H"
-#include "SpectralAlgorithms/PMLPsatdAlgorithm.H"
-#include "SpectralAlgorithms/ComovingPsatdAlgorithm.H"
-#include "WarpX.H"
#include "Utils/WarpXProfilerWrapper.H"
-#include "Utils/WarpXUtil.H"
#include <memory>
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.H b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.H
index 7fe4bd00c..114d199c5 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.H
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.H
@@ -7,6 +7,8 @@
#ifndef WARPX_SPECTRAL_SOLVER_RZ_H_
#define WARPX_SPECTRAL_SOLVER_RZ_H_
+#include "SpectralSolverRZ_fwd.H"
+
#include "SpectralAlgorithms/SpectralBaseAlgorithmRZ.H"
#include "SpectralFieldDataRZ.H"
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp
index f59b99752..ee4e5fd6d 100644
--- a/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp
@@ -4,12 +4,12 @@
*
* License: BSD-3-Clause-LBNL
*/
+#include "SpectralAlgorithms/GalileanPsatdAlgorithmRZ.H"
+#include "SpectralAlgorithms/PsatdAlgorithmRZ.H"
#include "SpectralKSpaceRZ.H"
#include "SpectralSolverRZ.H"
-#include "SpectralAlgorithms/PsatdAlgorithmRZ.H"
-#include "SpectralAlgorithms/GalileanPsatdAlgorithmRZ.H"
-#include "WarpX.H"
#include "Utils/WarpXProfilerWrapper.H"
+#include "WarpX.H"
/* \brief Initialize the spectral Maxwell solver
*
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolverRZ_fwd.H b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ_fwd.H
new file mode 100644
index 000000000..bfe332fe7
--- /dev/null
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ_fwd.H
@@ -0,0 +1,8 @@
+/* Copyright 2021 Luca Fedeli
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+
+class SpectralSolverRZ;
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver_fwd.H b/Source/FieldSolver/SpectralSolver/SpectralSolver_fwd.H
new file mode 100644
index 000000000..fecd3bd8b
--- /dev/null
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolver_fwd.H
@@ -0,0 +1,8 @@
+/* Copyright 2021 Luca Fedeli
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+
+class SpectralSolver;
diff --git a/Source/FieldSolver/SpectralSolver/WrapFFTW.cpp b/Source/FieldSolver/SpectralSolver/WrapFFTW.cpp
index b4999380b..a4dfc8b29 100644
--- a/Source/FieldSolver/SpectralSolver/WrapFFTW.cpp
+++ b/Source/FieldSolver/SpectralSolver/WrapFFTW.cpp
@@ -7,6 +7,12 @@
#include "AnyFFT.H"
+#include <AMReX.H>
+#include <AMReX_IntVect.H>
+#include <AMReX_REAL.H>
+
+#include <fftw3.h>
+
namespace AnyFFT
{
#ifdef AMREX_USE_FLOAT
diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp
index 2329854f2..f2fae02be 100644
--- a/Source/FieldSolver/WarpXPushFieldsEM.cpp
+++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp
@@ -7,20 +7,47 @@
* License: BSD-3-Clause-LBNL
*/
#include "WarpX.H"
+
+#include "BoundaryConditions/PML.H"
+#include "Evolve/WarpXDtType.H"
+#include "FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H"
+#if defined(WARPX_DIM_RZ) || defined(WARPX_USE_PSATD)
+# include "FieldSolver/SpectralSolver/SpectralFieldData.H"
+# ifdef WARPX_DIM_RZ
+# include "FieldSolver/SpectralSolver/SpectralSolverRZ.H"
+# elif defined(WARPX_USE_PSATD)
+# include "FieldSolver/SpectralSolver/SpectralSolver.H"
+# endif
+#endif
+#include "Utils/WarpXAlgorithmSelection.H"
#include "Utils/WarpXConst.H"
-#include "BoundaryConditions/WarpX_PML_kernels.H"
-#include "BoundaryConditions/PML_current.H"
-#include "WarpX_FDTD.H"
+#include "Utils/WarpXProfilerWrapper.H"
#include "WarpXPushFieldsEM_K.H"
+#include "WarpX_FDTD.H"
+#include <AMReX.H>
#ifdef BL_USE_SENSEI_INSITU
# include <AMReX_AmrMeshInSituBridge.H>
#endif
-
-#include <AMReX.H>
+#include <AMReX_Array4.H>
+#include <AMReX_BLassert.H>
+#include <AMReX_Box.H>
+#include <AMReX_Config.H>
+#include <AMReX_FArrayBox.H>
+#include <AMReX_FabArray.H>
+#include <AMReX_Geometry.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_MFIter.H>
#include <AMReX_Math.H>
-#include <limits>
+#include <AMReX_MultiFab.H>
+#include <AMReX_REAL.H>
+#include <AMReX_Vector.H>
+#include <array>
+#include <cmath>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/WarpXPushFieldsEM_K.H b/Source/FieldSolver/WarpXPushFieldsEM_K.H
index 7f6ca5f69..8fe1b781b 100644
--- a/Source/FieldSolver/WarpXPushFieldsEM_K.H
+++ b/Source/FieldSolver/WarpXPushFieldsEM_K.H
@@ -9,6 +9,7 @@
#define WarpXPushFieldsEM_K_h
#include "Utils/WarpXConst.H"
+
#include <AMReX.H>
/*
diff --git a/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp b/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
index 2020532c1..0ea37eb5d 100644
--- a/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
+++ b/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
@@ -5,19 +5,38 @@
* License: BSD-3-Clause-LBNL
*/
#include "WarpX.H"
-#include "Utils/WarpXConst.H"
+
+#include "Utils/WarpXAlgorithmSelection.H"
+#include "Utils/WarpXProfilerWrapper.H"
#include "WarpX_QED_K.H"
-#include "BoundaryConditions/WarpX_PML_kernels.H"
-#include "BoundaryConditions/PML_current.H"
-#include "WarpX_FDTD.H"
#ifdef BL_USE_SENSEI_INSITU
# include <AMReX_AmrMeshInSituBridge.H>
#endif
-
-#include <cmath>
-#include <limits>
-
+#include <AMReX_Array4.H>
+#include <AMReX_Box.H>
+#include <AMReX_Config.H>
+#include <AMReX_FArrayBox.H>
+#include <AMReX_GpuAtomic.H>
+#include <AMReX_GpuControl.H>
+#include <AMReX_GpuDevice.H>
+#include <AMReX_GpuElixir.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuLaunch.H>
+#include <AMReX_GpuQualifiers.H>
+#include <AMReX_IndexType.H>
+#include <AMReX_LayoutData.H>
+#include <AMReX_MFIter.H>
+#include <AMReX_MultiFab.H>
+#include <AMReX_Print.H>
+#include <AMReX_REAL.H>
+#include <AMReX_Utility.H>
+#include <AMReX_Vector.H>
+
+#include <array>
+#include <cstdlib>
+#include <iostream>
+#include <memory>
using namespace amrex;
diff --git a/Source/FieldSolver/WarpX_QED_K.H b/Source/FieldSolver/WarpX_QED_K.H
index 6a1f2b338..6bc5986b1 100644
--- a/Source/FieldSolver/WarpX_QED_K.H
+++ b/Source/FieldSolver/WarpX_QED_K.H
@@ -9,8 +9,9 @@
#define WarpX_QED_K_h
#include "Utils/WarpXConst.H"
-#include <AMReX_FArrayBox.H>
+
#include <AMReX.H>
+#include <AMReX_FArrayBox.H>
#include <cmath>