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 
12 
13 #include <AMReX.H>
14 
15 #if WARPX_USE_PSATD
16 
17 /* \brief Class that updates the field in spectral space
18  * and stores the coefficients of the corresponding update equation.
19  *
20  * `SpectralBaseAlgorithm` is only a base class and cannot be used directly.
21  * Instead use its subclasses, which implement the specific field update
22  * equations for a given spectral algorithm.
23  */
25 {
26  public:
27  // Virtual member function ; meant to be overridden in subclasses
28  virtual void pushSpectralFields(SpectralFieldData& f) const = 0;
29  virtual int getRequiredNumberOfFields() const = 0;
30  // The destructor should also be a virtual function, so that
31  // a pointer to subclass of `SpectraBaseAlgorithm` actually
32  // calls the subclass's destructor.
34 
45  virtual void CurrentCorrection (SpectralFieldData& field_data,
46  std::array<std::unique_ptr<amrex::MultiFab>,3>& current,
47  const std::unique_ptr<amrex::MultiFab>& rho) = 0;
48 
58  virtual void VayDeposition (SpectralFieldData& field_data,
59  std::array<std::unique_ptr<amrex::MultiFab>,3>& current) = 0;
60 
64  void ComputeSpectralDivE ( SpectralFieldData& field_data,
65  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
66  amrex::MultiFab& divE );
67 
68  protected: // Meant to be used in the subclasses
69 
70  using SpectralRealCoefficients = \
71  amrex::FabArray< amrex::BaseFab <amrex::Real> >;
73  amrex::FabArray< amrex::BaseFab <Complex> >;
74 
75  // Constructor
76  SpectralBaseAlgorithm(const SpectralKSpace& spectral_kspace,
77  const amrex::DistributionMapping& dm,
78  const int norder_x, const int norder_y,
79  const int norder_z, const bool nodal)
80  // Compute and assign the modified k vectors
81  : modified_kx_vec(spectral_kspace.getModifiedKComponent(dm,0,norder_x,nodal)),
82 #if (AMREX_SPACEDIM==3)
83  modified_ky_vec(spectral_kspace.getModifiedKComponent(dm,1,norder_y,nodal)),
84  modified_kz_vec(spectral_kspace.getModifiedKComponent(dm,2,norder_z,nodal))
85 #else
86  modified_kz_vec(spectral_kspace.getModifiedKComponent(dm,1,norder_z,nodal))
87 #endif
88  {
89 #if (AMREX_SPACEDIM!=3)
90  amrex::ignore_unused(norder_y);
91 #endif
92  }
93 
94  // Modified finite-order vectors
96 #if (AMREX_SPACEDIM==3)
98 #endif
100 };
101 
102 #endif // WARPX_USE_PSATD
103 #endif // WARPX_SPECTRAL_BASE_ALGORITHM_H_
Class that represents the spectral space.
Definition: SpectralKSpace.H:38
virtual int getRequiredNumberOfFields() const =0
KVectorComponent modified_ky_vec
Definition: SpectralBaseAlgorithm.H:97
void ComputeSpectralDivE(SpectralFieldData &field_data, const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, amrex::MultiFab &divE)
Compute spectral divergence of E.
Definition: SpectralBaseAlgorithm.cpp:16
virtual void VayDeposition(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...
virtual ~SpectralBaseAlgorithm()
Definition: SpectralBaseAlgorithm.H:33
f
Definition: write_atomic_data_cpp.py:79
amrex::FabArray< amrex::BaseFab< Complex > > SpectralComplexCoefficients
Definition: SpectralBaseAlgorithm.H:73
virtual void CurrentCorrection(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 ...
KVectorComponent modified_kx_vec
Definition: SpectralBaseAlgorithm.H:95
SpectralBaseAlgorithm(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const int norder_x, const int norder_y, const int norder_z, const bool nodal)
Definition: SpectralBaseAlgorithm.H:76
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:46
KVectorComponent modified_kz_vec
Definition: SpectralBaseAlgorithm.H:99
amrex::FabArray< amrex::BaseFab< amrex::Real > > SpectralRealCoefficients
Definition: SpectralBaseAlgorithm.H:71
virtual void pushSpectralFields(SpectralFieldData &f) const =0
amrex::LayoutData< RealKVector > KVectorComponent
Definition: SpectralKSpace.H:21
if(!(yy_init))
Definition: wp_parser.lex.cpp:720
Definition: SpectralBaseAlgorithm.H:24