WarpX
SpectralBaseAlgorithm.H
Go to the documentation of this file.
1 /* Copyright 2019 Remi Lehe, Edoardo Zoni
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef WARPX_SPECTRAL_BASE_ALGORITHM_H_
8 #define WARPX_SPECTRAL_BASE_ALGORITHM_H_
9 
11 #include "Utils/WarpX_Complex.H"
12 
15 
16 #include <AMReX_BaseFab.H>
17 #include <AMReX_Config.H>
18 #include <AMReX_FabArray.H>
19 #include <AMReX_REAL.H>
20 
21 #include <AMReX_BaseFwd.H>
22 
23 #include <array>
24 #include <memory>
25 
26 #if WARPX_USE_PSATD
27 
28 /* \brief Class that updates the field in spectral space
29  * and stores the coefficients of the corresponding update equation.
30  *
31  * `SpectralBaseAlgorithm` is only a base class and cannot be used directly.
32  * Instead use its subclasses, which implement the specific field update
33  * equations for a given spectral algorithm.
34  */
36 {
37  public:
38  // Virtual member function ; meant to be overridden in subclasses
39  virtual void pushSpectralFields(SpectralFieldData& f) const = 0;
40 
41  // The destructor should also be a virtual function, so that
42  // a pointer to subclass of `SpectraBaseAlgorithm` actually
43  // calls the subclass's destructor.
45 
56  virtual void CurrentCorrection (const int lev,
57  SpectralFieldData& field_data,
58  std::array<std::unique_ptr<amrex::MultiFab>,3>& current,
59  const std::unique_ptr<amrex::MultiFab>& rho) = 0;
60 
70  virtual void VayDeposition (const int lev,
71  SpectralFieldData& field_data,
72  std::array<std::unique_ptr<amrex::MultiFab>,3>& current) = 0;
73 
77  void ComputeSpectralDivE ( const int lev,
78  SpectralFieldData& field_data,
79  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
80  amrex::MultiFab& divE );
81 
82  protected: // Meant to be used in the subclasses
83 
84  amrex::IntVect m_fill_guards;
85 
86  using SpectralRealCoefficients = \
87  amrex::FabArray< amrex::BaseFab <amrex::Real> >;
89  amrex::FabArray< amrex::BaseFab <Complex> >;
90 
94  SpectralBaseAlgorithm(const SpectralKSpace& spectral_kspace,
95  const amrex::DistributionMapping& dm,
96  const SpectralFieldIndex& spectral_index,
97  const int norder_x, const int norder_y,
98  const int norder_z, const bool nodal,
99  const amrex::IntVect& fill_guards);
100 
102 
103  // Modified finite-order vectors
105 #if (AMREX_SPACEDIM==3)
107 #endif
109 };
110 
111 #endif // WARPX_USE_PSATD
112 #endif // WARPX_SPECTRAL_BASE_ALGORITHM_H_
Class that represents the spectral space.
Definition: SpectralKSpace.H:47
KVectorComponent modified_ky_vec
Definition: SpectralBaseAlgorithm.H:106
virtual ~SpectralBaseAlgorithm()
Definition: SpectralBaseAlgorithm.H:44
f
Definition: write_atomic_data_cpp.py:83
void ComputeSpectralDivE(const int lev, SpectralFieldData &field_data, const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, amrex::MultiFab &divE)
Compute spectral divergence of E.
Definition: SpectralBaseAlgorithm.cpp:56
amrex::FabArray< amrex::BaseFab< Complex > > SpectralComplexCoefficients
Definition: SpectralBaseAlgorithm.H:89
KVectorComponent modified_kx_vec
Definition: SpectralBaseAlgorithm.H:104
SpectralFieldIndex m_spectral_index
Definition: SpectralBaseAlgorithm.H:101
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:105
KVectorComponent modified_kz_vec
Definition: SpectralBaseAlgorithm.H:108
amrex::FabArray< amrex::BaseFab< amrex::Real > > SpectralRealCoefficients
Definition: SpectralBaseAlgorithm.H:87
virtual void pushSpectralFields(SpectralFieldData &f) const =0
Definition: SpectralFieldData.H:32
SpectralBaseAlgorithm(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const SpectralFieldIndex &spectral_index, const int norder_x, const int norder_y, const int norder_z, const bool nodal, const amrex::IntVect &fill_guards)
Constructor.
Definition: SpectralBaseAlgorithm.cpp:30
virtual void CurrentCorrection(const int lev, SpectralFieldData &field_data, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &current, const std::unique_ptr< amrex::MultiFab > &rho)=0
Virtual function for current correction in Fourier space (Vay et al, 2013). This virtual function is ...
amrex::LayoutData< RealKVector > KVectorComponent
Definition: SpectralKSpace.H:30
amrex::IntVect m_fill_guards
Definition: SpectralBaseAlgorithm.H:84
Definition: SpectralBaseAlgorithm.H:35
virtual void VayDeposition(const int lev, SpectralFieldData &field_data, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &current)=0
Virtual function for Vay current deposition in Fourier space (Vay et al, 2013). This virtual function...