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