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 "SpectralFieldData_fwd.H"
12 
13 #include "SpectralKSpace.H"
14 #include "Utils/WarpX_Complex.H"
15 
17 
18 #include <AMReX_BaseFab.H>
19 #include <AMReX_Config.H>
20 #include <AMReX_Extension.H>
21 #include <AMReX_FabArray.H>
22 #include <AMReX_IndexType.H>
23 #include <AMReX_MultiFab.H>
24 #include <AMReX_Vector.H>
25 
26 #include <AMReX_BaseFwd.H>
27 
28 #include <vector>
29 
30 // Declare type for spectral fields
32 
34 {
35  public:
36 
60  SpectralFieldIndex (bool update_with_rho,
61  bool time_averaging,
62  int J_in_time,
63  int rho_in_time,
64  bool dive_cleaning,
65  bool divb_cleaning,
66  bool pml,
67  bool pml_rz = false);
68 
72  SpectralFieldIndex () = default;
73 
77  ~SpectralFieldIndex () = default;
78 
82  SpectralFieldIndex ( SpectralFieldIndex const &) = default;
83 
88 
93 
98 
99  // Total number of fields that are actually allocated
100  int n_fields;
101 
102  // Indices overwritten in the constructor, for the fields that are actually allocated
103  // (index -1 will never be used, unless there is some bug in the code implementation,
104  // which would result in a runtime crash due to out-of-bound accesses that can be detected
105  // by running the code in DEBUG mode)
106 
107  // Always
108  int Ex = -1, Ey = -1, Ez = -1;
109  int Bx = -1, By = -1, Bz = -1;
110  int divE = -1;
111 
112  // Time averaging
113  int Ex_avg = -1, Ey_avg = -1, Ez_avg = -1;
114  int Bx_avg = -1, By_avg = -1, Bz_avg = -1;
115 
116  // J
117  int Jx_old = -1, Jy_old = -1, Jz_old = -1;
118  int Jx_mid = -1, Jy_mid = -1, Jz_mid = -1;
119  int Jx_new = -1, Jy_new = -1, Jz_new = -1;
120 
121  // rho
122  int rho_old = -1, rho_mid = -1, rho_new = -1;
123 
124  // div(E) and div(B) cleaning
125  int F = -1, G = -1;
126 
127  // PML
128  int Exy = -1, Exz = -1, Eyx = -1, Eyz = -1, Ezx = -1, Ezy = -1;
129  int Bxy = -1, Bxz = -1, Byx = -1, Byz = -1, Bzx = -1, Bzy = -1;
130 
131  // PML with div(E) and/or div(B) cleaning
132  int Exx = -1, Eyy = -1, Ezz = -1, Bxx = -1, Byy = -1, Bzz = -1;
133  int Fx = -1, Fy = -1, Fz = -1, Gx = -1, Gy = -1, Gz = -1;
134 
135  // PML RZ
136  int Er_pml = -1, Et_pml = -1, Br_pml = -1, Bt_pml = -1;
137 };
138 
143 {
144 
145  public:
146  SpectralFieldData( int lev,
147  const amrex::BoxArray& realspace_ba,
148  const SpectralKSpace& k_space,
149  const amrex::DistributionMapping& dm,
150  int n_field_required,
151  bool periodic_single_box);
152  SpectralFieldData() = default; // Default constructor
154 
155  // default move and copy operations
160 
161  void ForwardTransform (int lev,
162  const amrex::MultiFab& mf, int field_index,
163  int i_comp);
164 
165  void BackwardTransform (int lev, amrex::MultiFab& mf, int field_index,
166  const amrex::IntVect& fill_guards, int i_comp);
167 
168  // `fields` stores fields in spectral space, as multicomponent FabArray
170 
171  private:
172  // tmpRealField and tmpSpectralField store fields
173  // right before/after the Fourier transform
174  SpectralField tmpSpectralField; // contains Complexs
175  amrex::MultiFab tmpRealField; // contains Reals
176  ablastr::math::anyfft::FFTplans forward_plan, backward_plan;
177  // Correcting "shift" factors when performing FFT from/to
178  // a cell-centered grid in real space, instead of a nodal grid
181 #if defined(WARPX_DIM_3D)
182  SpectralShiftFactor yshift_FFTfromCell, yshift_FFTtoCell;
183 #endif
184 
186 };
187 
188 #endif // WARPX_SPECTRAL_FIELD_DATA_H_
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:143
void ForwardTransform(int lev, const amrex::MultiFab &mf, int field_index, int i_comp)
Definition: SpectralFieldData.cpp:216
SpectralField fields
Definition: SpectralFieldData.H:169
SpectralShiftFactor zshift_FFTfromCell
Definition: SpectralFieldData.H:180
SpectralField tmpSpectralField
Definition: SpectralFieldData.H:174
SpectralShiftFactor xshift_FFTtoCell
Definition: SpectralFieldData.H:179
void BackwardTransform(int lev, amrex::MultiFab &mf, int field_index, const amrex::IntVect &fill_guards, int i_comp)
Definition: SpectralFieldData.cpp:321
SpectralFieldData(const SpectralFieldData &)=delete
~SpectralFieldData()
Definition: SpectralFieldData.cpp:202
amrex::MultiFab tmpRealField
Definition: SpectralFieldData.H:175
SpectralShiftFactor xshift_FFTfromCell
Definition: SpectralFieldData.H:179
SpectralFieldData()=default
SpectralFieldData(SpectralFieldData &&)=default
ablastr::math::anyfft::FFTplans backward_plan
Definition: SpectralFieldData.H:176
ablastr::math::anyfft::FFTplans forward_plan
Definition: SpectralFieldData.H:176
SpectralFieldData & operator=(SpectralFieldData &&field_data)=default
bool m_periodic_single_box
Definition: SpectralFieldData.H:185
SpectralFieldData & operator=(const SpectralFieldData &)=delete
SpectralShiftFactor zshift_FFTtoCell
Definition: SpectralFieldData.H:180
Definition: SpectralFieldData.H:34
SpectralFieldIndex(SpectralFieldIndex &&)=default
Default Move constructor.
int Bzz
Definition: SpectralFieldData.H:132
int Eyz
Definition: SpectralFieldData.H:128
int F
Definition: SpectralFieldData.H:125
int By
Definition: SpectralFieldData.H:109
int rho_mid
Definition: SpectralFieldData.H:122
int Eyy
Definition: SpectralFieldData.H:132
int Ex_avg
Definition: SpectralFieldData.H:113
int Jz_mid
Definition: SpectralFieldData.H:118
int Jz_new
Definition: SpectralFieldData.H:119
int Gz
Definition: SpectralFieldData.H:133
int Fy
Definition: SpectralFieldData.H:133
int Byy
Definition: SpectralFieldData.H:132
SpectralFieldIndex & operator=(SpectralFieldIndex const &)=default
Default Copy operator.
int Bxx
Definition: SpectralFieldData.H:132
int Ey_avg
Definition: SpectralFieldData.H:113
int G
Definition: SpectralFieldData.H:125
int Bxy
Definition: SpectralFieldData.H:129
int Gx
Definition: SpectralFieldData.H:133
int Bx_avg
Definition: SpectralFieldData.H:114
int Ex
Definition: SpectralFieldData.H:108
int Bz
Definition: SpectralFieldData.H:109
int rho_new
Definition: SpectralFieldData.H:122
int Ezz
Definition: SpectralFieldData.H:132
int Exx
Definition: SpectralFieldData.H:132
int n_fields
Definition: SpectralFieldData.H:100
int Jz_old
Definition: SpectralFieldData.H:117
int Bz_avg
Definition: SpectralFieldData.H:114
int Et_pml
Definition: SpectralFieldData.H:136
int Bxz
Definition: SpectralFieldData.H:129
int Jy_new
Definition: SpectralFieldData.H:119
int Bx
Definition: SpectralFieldData.H:109
int Jx_old
Definition: SpectralFieldData.H:117
int Er_pml
Definition: SpectralFieldData.H:136
int Gy
Definition: SpectralFieldData.H:133
int rho_old
Definition: SpectralFieldData.H:122
int Ey
Definition: SpectralFieldData.H:108
int Bzy
Definition: SpectralFieldData.H:129
SpectralFieldIndex(SpectralFieldIndex const &)=default
Default Copy constructor.
int Byz
Definition: SpectralFieldData.H:129
int Ezy
Definition: SpectralFieldData.H:128
int Exy
Definition: SpectralFieldData.H:128
int divE
Definition: SpectralFieldData.H:110
int Jx_mid
Definition: SpectralFieldData.H:118
int Jx_new
Definition: SpectralFieldData.H:119
SpectralFieldIndex()=default
Default constructor.
int Eyx
Definition: SpectralFieldData.H:128
int Ez_avg
Definition: SpectralFieldData.H:113
int Ez
Definition: SpectralFieldData.H:108
~SpectralFieldIndex()=default
Default destructor.
int Ezx
Definition: SpectralFieldData.H:128
int Br_pml
Definition: SpectralFieldData.H:136
int Bzx
Definition: SpectralFieldData.H:129
int By_avg
Definition: SpectralFieldData.H:114
int Fz
Definition: SpectralFieldData.H:133
int Bt_pml
Definition: SpectralFieldData.H:136
int Exz
Definition: SpectralFieldData.H:128
int Byx
Definition: SpectralFieldData.H:129
int Jy_mid
Definition: SpectralFieldData.H:118
int Jy_old
Definition: SpectralFieldData.H:117
int Fx
Definition: SpectralFieldData.H:133
Class that represents the spectral space.
Definition: SpectralKSpace.H:48