WarpX
SpectralBaseAlgorithmRZ.H
Go to the documentation of this file.
1 /* Copyright 2019 David Grote
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef WARPX_SPECTRAL_BASE_ALGORITHM_RZ_H_
8 #define WARPX_SPECTRAL_BASE_ALGORITHM_RZ_H_
9 
12 
13 /* \brief Class that updates the field in spectral space
14  * and stores the coefficients of the corresponding update equation.
15  *
16  * `SpectralBaseAlgorithmRZ` is only a base class and cannot be used directly.
17  * Instead use its subclasses, which implement the specific field update
18  * equations for a given spectral algorithm.
19  */
21 {
22  public:
23  // Virtual member function ; meant to be overridden in subclasses
24  virtual void pushSpectralFields(SpectralFieldDataRZ & f) = 0;
25 
26  // The destructor should also be a virtual function, so that
27  // a pointer to subclass of `SpectraBaseAlgorithm` actually
28  // calls the subclass's destructor.
29  virtual ~SpectralBaseAlgorithmRZ() = default;
30 
35 
40 
41 
46 
51 
59  virtual void CurrentCorrection (SpectralFieldDataRZ& field_data) = 0;
60 
64  void ComputeSpectralDivE ( int lev,
65  SpectralFieldDataRZ& field_data,
66  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
67  amrex::MultiFab& divE );
68 
76  virtual void VayDeposition (SpectralFieldDataRZ& field_data) = 0;
77 
78  protected: // Meant to be used in the subclasses
79 
82 
83  // Constructor
84  SpectralBaseAlgorithmRZ(SpectralKSpaceRZ const & spectral_kspace,
85  amrex::DistributionMapping const & dm,
86  const SpectralFieldIndex& spectral_index,
87  int const norder_z, short const grid_type)
88  // Compute and assign the modified k vectors
89  : m_spectral_index(spectral_index),
90  modified_kz_vec(spectral_kspace.getModifiedKComponent(dm, 1, norder_z, grid_type))
91  {}
92 
94 
95  // Modified finite-order vectors
97 };
98 
99 #endif // WARPX_SPECTRAL_BASE_ALGORITHM_RZ_H_
Definition: SpectralBaseAlgorithmRZ.H:21
void ComputeSpectralDivE(int lev, SpectralFieldDataRZ &field_data, const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, amrex::MultiFab &divE)
Compute spectral divergence of E.
Definition: SpectralBaseAlgorithmRZ.cpp:18
SpectralBaseAlgorithmRZ & operator=(SpectralBaseAlgorithmRZ const &)=default
Default Copy operator.
SpectralBaseAlgorithmRZ(SpectralBaseAlgorithmRZ const &)=default
Default Copy constructor.
SpectralBaseAlgorithmRZ(SpectralKSpaceRZ const &spectral_kspace, amrex::DistributionMapping const &dm, const SpectralFieldIndex &spectral_index, int const norder_z, short const grid_type)
Definition: SpectralBaseAlgorithmRZ.H:84
virtual ~SpectralBaseAlgorithmRZ()=default
SpectralBaseAlgorithmRZ(SpectralBaseAlgorithmRZ &&)=default
Default Move constructor.
SpectralFieldIndex m_spectral_index
Definition: SpectralBaseAlgorithmRZ.H:93
KVectorComponent modified_kz_vec
Definition: SpectralBaseAlgorithmRZ.H:96
virtual void CurrentCorrection(SpectralFieldDataRZ &field_data)=0
Virtual function for current correction in Fourier space (Vay et al, 2013). This virtual function is ...
virtual void pushSpectralFields(SpectralFieldDataRZ &f)=0
virtual void VayDeposition(SpectralFieldDataRZ &field_data)=0
Virtual function for Vay current deposition in Fourier space (Vay et al, 2013). This virtual function...
Definition: SpectralFieldDataRZ.H:23
Definition: SpectralFieldData.H:34
Definition: SpectralKSpaceRZ.H:21