WarpX
SpectralFieldData.H
Go to the documentation of this file.
1 /* Copyright 2019 David Grote, Maxence Thevenet, Remi Lehe
2  * Revathi Jambunathan
3  *
4  * This file is part of WarpX.
5  *
6  * License: BSD-3-Clause-LBNL
7  */
8 #ifndef WARPX_SPECTRAL_FIELD_DATA_H_
9 #define WARPX_SPECTRAL_FIELD_DATA_H_
10 
11 #include "Utils/WarpX_Complex.H"
12 #include "SpectralKSpace.H"
13 #include "AnyFFT.H"
14 
15 #include <AMReX_MultiFab.H>
16 
17 #include <string>
18 
19 // Declare type for spectral fields
20 using SpectralField = amrex::FabArray< amrex::BaseFab <Complex> >;
21 
27  enum { Ex=0, Ey, Ez, Bx, By, Bz, Jx, Jy, Jz, rho_old, rho_new, n_fields, divE=3 };
28 };
29 
30 /* Index for the regular fields + averaged fields, when stored in spectral space */
32  enum { Ex=0, Ey, Ez, Bx, By, Bz, Jx, Jy, Jz, rho_old, rho_new, Ex_avg, Ey_avg, Ez_avg, Bx_avg, By_avg, Bz_avg,n_fields };
33  // n_fields is automatically the total number of fields
34 };
35 
36 /* Index for the PML fields, when stored in spectral space */
38  enum { Exy=0, Exz, Eyx, Eyz, Ezx, Ezy,
39  Bxy, Bxz, Byx, Byz, Bzx, Bzy, n_fields };
40  // n_fields is automatically the total number of fields
41 };
42 
47 {
48 
49  public:
50  SpectralFieldData( const amrex::BoxArray& realspace_ba,
51  const SpectralKSpace& k_space,
52  const amrex::DistributionMapping& dm,
53  const int n_field_required,
54  const bool periodic_single_box );
55  SpectralFieldData() = default; // Default constructor
56  SpectralFieldData& operator=(SpectralFieldData&& field_data) = default;
58 
59  void ForwardTransform (const amrex::MultiFab& mf, const int field_index,
60  const int i_comp, const amrex::IntVect& stag);
61  AMREX_FORCE_INLINE
62  void ForwardTransform (const amrex::MultiFab& mf, const int field_index, const int i_comp)
63  {
64  ForwardTransform(mf, field_index, i_comp, mf.ixType().toIntVect());
65  }
66 
67  void BackwardTransform (amrex::MultiFab& mf, const int field_index, const int i_comp);
68 
69  // `fields` stores fields in spectral space, as multicomponent FabArray
71 
72  private:
73  // tmpRealField and tmpSpectralField store fields
74  // right before/after the Fourier transform
75  SpectralField tmpSpectralField; // contains Complexs
76  amrex::MultiFab tmpRealField; // contains Reals
78  // Correcting "shift" factors when performing FFT from/to
79  // a cell-centered grid in real space, instead of a nodal grid
80  SpectralShiftFactor xshift_FFTfromCell, xshift_FFTtoCell,
81  zshift_FFTfromCell, zshift_FFTtoCell;
82 #if (AMREX_SPACEDIM==3)
84 #endif
85 
86 #ifdef AMREX_USE_GPU
87 
93  std::string cufftErrorToString (const cufftResult& err);
94 #endif
95 
97 };
98 
99 #endif // WARPX_SPECTRAL_FIELD_DATA_H_
bool m_periodic_single_box
Definition: SpectralFieldData.H:96
Definition: SpectralFieldData.H:27
Class that represents the spectral space.
Definition: SpectralKSpace.H:38
AnyFFT::FFTplans forward_plan
Definition: SpectralFieldData.H:77
Definition: SpectralFieldData.H:27
std::string cufftErrorToString(const cufftResult &err)
This method converts a cufftResult into the corresponding string.
Definition: WrapCuFFT.cpp:103
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:37
SpectralShiftFactor zshift_FFTtoCell
Definition: SpectralFieldData.H:80
AMREX_FORCE_INLINE void ForwardTransform(const amrex::MultiFab &mf, const int field_index, const int i_comp)
Definition: SpectralFieldData.H:62
Definition: SpectralFieldData.H:32
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:31
SpectralField tmpSpectralField
Definition: SpectralFieldData.H:75
Definition: SpectralFieldData.H:27
Definition: SpectralFieldData.H:27
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:46
Definition: SpectralFieldData.H:27
amrex::FabArray< amrex::BaseFab< Complex > > SpectralField
Definition: SpectralFieldData.H:20
amrex::LayoutData< FFTplan > FFTplans
Definition: AnyFFT.H:74
Definition: SpectralFieldData.H:38
amrex::LayoutData< amrex::Gpu::DeviceVector< Complex > > SpectralShiftFactor
Definition: SpectralKSpace.H:23
SpectralField fields
Definition: SpectralFieldData.H:70
Definition: SpectralFieldData.H:26
Definition: SpectralFieldData.H:27
amrex::MultiFab tmpRealField
Definition: SpectralFieldData.H:76
SpectralShiftFactor yshift_FFTtoCell
Definition: SpectralFieldData.H:83