aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/SpectralSolver/SpectralFieldData.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/SpectralSolver/SpectralFieldData.H')
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralFieldData.H46
1 files changed, 46 insertions, 0 deletions
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H
new file mode 100644
index 000000000..2f6274e40
--- /dev/null
+++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H
@@ -0,0 +1,46 @@
+#ifndef WARPX_SPECTRAL_FIELD_DATA_H_
+#define WARPX_SPECTRAL_FIELD_DATA_H_
+
+#include <WarpX_Complex.H>
+#include <SpectralKSpace.H>
+#include <AMReX_MultiFab.H>
+
+using namespace amrex;
+
+// Declare type for spectral fields
+using SpectralField = FabArray<BaseFab<Complex>>;
+
+/* Fields that will be stored in spectral space */
+struct SpectralFieldIndex{
+ enum { Ex=0, Ey, Ez, Bx, By, Bz, Jx, Jy, Jz, rho_old, rho_new };
+};
+
+/* \brief Class that stores the fields in spectral space
+ * and performs the spectral transforms to/from real space
+ */
+class SpectralFieldData
+{
+ friend class PsatdAlgorithm;
+
+#ifdef AMREX_USE_GPU
+// Add cuFFT-specific code
+#else
+ using FFTplans = LayoutData<fftw_plan>;
+#endif
+
+ public:
+ SpectralFieldData( const BoxArray& realspace_ba,
+ const SpectralKSpace& k_space,
+ const DistributionMapping& dm );
+ ~SpectralFieldData();
+ void ForwardTransform( const MultiFab& mf, const int field_index );
+ void BackwardTransform( MultiFab& mf, const int field_index );
+
+ private:
+ SpectralField Ex, Ey, Ez, Bx, By, Bz, Jx, Jy, Jz, rho_old, rho_new;
+ SpectralField tmpRealField, tmpSpectralField; // Store fields before/after transform
+ FFTplans forward_plan, backward_plan;
+ SpectralField& getSpectralField( const int field_index );
+};
+
+#endif // WARPX_SPECTRAL_FIELD_DATA_H_