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