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 
56  SpectralFieldIndex (const bool update_with_rho,
57  const bool time_averaging,
58  const int J_in_time,
59  const int rho_in_time,
60  const bool dive_cleaning,
61  const bool divb_cleaning,
62  const bool pml,
63  const bool pml_rz = false);
64 
68  SpectralFieldIndex () = default;
69 
73  ~SpectralFieldIndex () = default;
74 
75  // Total number of fields that are actually allocated
76  int n_fields;
77 
78  // Indices overwritten in the constructor, for the fields that are actually allocated
79  // (index -1 will never be used, unless there is some bug in the code implementation,
80  // which would result in a runtime crash due to out-of-bound accesses that can be detected
81  // by running the code in DEBUG mode)
82 
83  // Always
84  int Ex = -1, Ey = -1, Ez = -1;
85  int Bx = -1, By = -1, Bz = -1;
86  int Jx = -1, Jy = -1, Jz = -1;
87  int rho_old = -1, rho_new = -1, divE = -1;
88 
89  // Time averaging
90  int Ex_avg = -1, Ey_avg = -1, Ez_avg = -1;
91  int Bx_avg = -1, By_avg = -1, Bz_avg = -1;
92 
93  // J linear in time
94  int Jx_new = -1, Jy_new = -1, Jz_new = -1;
95 
96  // rho quadratic in time
97  int rho_mid = -1;
98 
99  // div(E) and div(B) cleaning
100  int F = -1, G = -1;
101 
102  // PML
103  int Exy = -1, Exz = -1, Eyx = -1, Eyz = -1, Ezx = -1, Ezy = -1;
104  int Bxy = -1, Bxz = -1, Byx = -1, Byz = -1, Bzx = -1, Bzy = -1;
105 
106  // PML with div(E) and/or div(B) cleaning
107  int Exx = -1, Eyy = -1, Ezz = -1, Bxx = -1, Byy = -1, Bzz = -1;
108  int Fx = -1, Fy = -1, Fz = -1, Gx = -1, Gy = -1, Gz = -1;
109 
110  // PML RZ
111  int Er_pml = -1, Et_pml = -1, Br_pml = -1, Bt_pml = -1;
112 };
113 
118 {
119 
120  public:
121  SpectralFieldData( const int lev,
122  const amrex::BoxArray& realspace_ba,
123  const SpectralKSpace& k_space,
124  const amrex::DistributionMapping& dm,
125  const int n_field_required,
126  const bool periodic_single_box);
127  SpectralFieldData() = default; // Default constructor
128  SpectralFieldData& operator=(SpectralFieldData&& field_data) = default;
130 
131  void ForwardTransform (const int lev,
132  const amrex::MultiFab& mf, const int field_index,
133  const int i_comp);
134 
135  void BackwardTransform (const int lev, amrex::MultiFab& mf, const int field_index,
136  const amrex::IntVect& fill_guards, const int i_comp);
137 
138  // `fields` stores fields in spectral space, as multicomponent FabArray
140 
141  private:
142  // tmpRealField and tmpSpectralField store fields
143  // right before/after the Fourier transform
144  SpectralField tmpSpectralField; // contains Complexs
145  amrex::MultiFab tmpRealField; // contains Reals
147  // Correcting "shift" factors when performing FFT from/to
148  // a cell-centered grid in real space, instead of a nodal grid
149  SpectralShiftFactor xshift_FFTfromCell, xshift_FFTtoCell,
150  zshift_FFTfromCell, zshift_FFTtoCell;
151 #if defined(WARPX_DIM_3D)
152  SpectralShiftFactor yshift_FFTfromCell, yshift_FFTtoCell;
153 #endif
154 
156 };
157 
158 #endif // WARPX_SPECTRAL_FIELD_DATA_H_
int Eyx
Definition: SpectralFieldData.H:103
bool m_periodic_single_box
Definition: SpectralFieldData.H:155
int By
Definition: SpectralFieldData.H:85
int rho_new
Definition: SpectralFieldData.H:87
int Ex
Definition: SpectralFieldData.H:84
Class that represents the spectral space.
Definition: SpectralKSpace.H:47
AnyFFT::FFTplans forward_plan
Definition: SpectralFieldData.H:146
int Ez_avg
Definition: SpectralFieldData.H:90
int Ezy
Definition: SpectralFieldData.H:103
int Bxz
Definition: SpectralFieldData.H:104
int Ey_avg
Definition: SpectralFieldData.H:90
int Ex_avg
Definition: SpectralFieldData.H:90
int Jx
Definition: SpectralFieldData.H:86
int Ez
Definition: SpectralFieldData.H:84
int Bxy
Definition: SpectralFieldData.H:104
int Gz
Definition: SpectralFieldData.H:108
int Jz_new
Definition: SpectralFieldData.H:94
SpectralShiftFactor zshift_FFTtoCell
Definition: SpectralFieldData.H:149
int F
Definition: SpectralFieldData.H:100
int Bzz
Definition: SpectralFieldData.H:107
int Eyy
Definition: SpectralFieldData.H:107
int Bx
Definition: SpectralFieldData.H:85
int Exx
Definition: SpectralFieldData.H:107
SpectralFieldIndex()=default
Default constructor.
int Ezx
Definition: SpectralFieldData.H:103
int Bx_avg
Definition: SpectralFieldData.H:91
int Ey
Definition: SpectralFieldData.H:84
int Jy
Definition: SpectralFieldData.H:86
int Jz
Definition: SpectralFieldData.H:86
int Et_pml
Definition: SpectralFieldData.H:111
int By_avg
Definition: SpectralFieldData.H:91
int Fx
Definition: SpectralFieldData.H:108
int rho_mid
Definition: SpectralFieldData.H:97
SpectralField tmpSpectralField
Definition: SpectralFieldData.H:144
int Byx
Definition: SpectralFieldData.H:104
int Eyz
Definition: SpectralFieldData.H:103
int Byy
Definition: SpectralFieldData.H:107
int Ezz
Definition: SpectralFieldData.H:107
int Jy_new
Definition: SpectralFieldData.H:94
int Bzx
Definition: SpectralFieldData.H:104
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:117
int Bzy
Definition: SpectralFieldData.H:104
int Exy
Definition: SpectralFieldData.H:103
int n_fields
Definition: SpectralFieldData.H:76
int G
Definition: SpectralFieldData.H:100
int Jx_new
Definition: SpectralFieldData.H:94
Definition: SpectralFieldData.H:32
int Fy
Definition: SpectralFieldData.H:108
int Br_pml
Definition: SpectralFieldData.H:111
int Bz_avg
Definition: SpectralFieldData.H:91
int Bt_pml
Definition: SpectralFieldData.H:111
~SpectralFieldIndex()=default
Default destructor.
int Bxx
Definition: SpectralFieldData.H:107
int divE
Definition: SpectralFieldData.H:87
SpectralField fields
Definition: SpectralFieldData.H:139
int Er_pml
Definition: SpectralFieldData.H:111
int Gy
Definition: SpectralFieldData.H:108
int Fz
Definition: SpectralFieldData.H:108
int rho_old
Definition: SpectralFieldData.H:87
int Exz
Definition: SpectralFieldData.H:103
amrex::MultiFab tmpRealField
Definition: SpectralFieldData.H:145
int Byz
Definition: SpectralFieldData.H:104
int Bz
Definition: SpectralFieldData.H:85
int Gx
Definition: SpectralFieldData.H:108