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