WarpX
PsatdAlgorithmJLinearInTime.H
Go to the documentation of this file.
1 /* Copyright 2019
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef WARPX_PSATD_ALGORITHM_J_LINEAR_IN_TIME_H_
8 #define WARPX_PSATD_ALGORITHM_J_LINEAR_IN_TIME_H_
9 
12 #include "SpectralBaseAlgorithm.H"
13 
14 #include <AMReX_Array.H>
15 #include <AMReX_Config.H>
16 #include <AMReX_REAL.H>
17 
18 #include <AMReX_BaseFwd.H>
19 
20 #include <array>
21 #include <memory>
22 
23 #if WARPX_USE_PSATD
24 /*
25  * \brief Class that updates the fields in spectral space according to the multi-J algorithm
26  * and stores the coefficients of the corresponding update equations. J is assumed to be
27  * linear in time and two currents, deposited at the beginning and the end of the time step,
28  * are used for the PSATD update equations, instead of only one current deposited at half time.
29  */
31 {
32  public:
33 
50  const SpectralKSpace& spectral_kspace,
52  const SpectralFieldIndex& spectral_index,
53  int norder_x,
54  int norder_y,
55  int norder_z,
56  short grid_type,
57  amrex::Real dt,
58  bool time_averaging,
59  bool dive_cleaning,
60  bool divb_cleaning);
61 
67  void pushSpectralFields (SpectralFieldData& f) const final;
68 
77  const SpectralKSpace& spectral_kspace,
79  amrex::Real dt);
80 
90  const SpectralKSpace& spectral_kspace,
92  amrex::Real dt);
93 
103  void CurrentCorrection (SpectralFieldData& field_data) final;
104 
114  void VayDeposition (SpectralFieldData& field_data) final;
115 
116  private:
117 
118  // These real and complex coefficients are always allocated
121 
122  // Other member variables
123  amrex::Real m_dt;
127 };
128 #endif // WARPX_USE_PSATD
129 #endif // WARPX_PSATD_ALGORITHM_J_LINEAR_IN_TIME_H_
Definition: PsatdAlgorithmJLinearInTime.H:31
void InitializeSpectralCoefficientsAveraging(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, amrex::Real dt)
Initialize additional coefficients used in pushSpectralFields to update E,B, required only when using...
Definition: PsatdAlgorithmJLinearInTime.cpp:356
SpectralRealCoefficients X5_coef
Definition: PsatdAlgorithmJLinearInTime.H:120
bool m_dive_cleaning
Definition: PsatdAlgorithmJLinearInTime.H:125
PsatdAlgorithmJLinearInTime(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const SpectralFieldIndex &spectral_index, int norder_x, int norder_y, int norder_z, short grid_type, amrex::Real dt, bool time_averaging, bool dive_cleaning, bool divb_cleaning)
Constructor of the class PsatdAlgorithmJLinearInTime.
Definition: PsatdAlgorithmJLinearInTime.cpp:31
SpectralRealCoefficients X1_coef
Definition: PsatdAlgorithmJLinearInTime.H:120
SpectralRealCoefficients S_ck_coef
Definition: PsatdAlgorithmJLinearInTime.H:119
void CurrentCorrection(SpectralFieldData &field_data) final
Virtual function for current correction in Fourier space (Vay et al, 2013). This function overrides t...
Definition: PsatdAlgorithmJLinearInTime.cpp:426
void VayDeposition(SpectralFieldData &field_data) final
Virtual function for Vay current deposition in Fourier space (Vay et al, 2013). This function overrid...
Definition: PsatdAlgorithmJLinearInTime.cpp:437
bool m_time_averaging
Definition: PsatdAlgorithmJLinearInTime.H:124
SpectralRealCoefficients X3_coef
Definition: PsatdAlgorithmJLinearInTime.H:120
bool m_divb_cleaning
Definition: PsatdAlgorithmJLinearInTime.H:126
SpectralRealCoefficients X2_coef
Definition: PsatdAlgorithmJLinearInTime.H:120
SpectralRealCoefficients C_coef
Definition: PsatdAlgorithmJLinearInTime.H:119
void InitializeSpectralCoefficients(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, amrex::Real dt)
Initializes the coefficients used in pushSpectralFields to update the E and B fields.
Definition: PsatdAlgorithmJLinearInTime.cpp:263
amrex::Real m_dt
Definition: PsatdAlgorithmJLinearInTime.H:123
void pushSpectralFields(SpectralFieldData &f) const final
Updates the E and B fields in spectral space, according to the multi-J PSATD equations.
Definition: PsatdAlgorithmJLinearInTime.cpp:71
SpectralRealCoefficients X6_coef
Definition: PsatdAlgorithmJLinearInTime.H:120
Definition: SpectralBaseAlgorithm.H:36
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:143
Definition: SpectralFieldData.H:34
Class that represents the spectral space.
Definition: SpectralKSpace.H:48
float dt
Definition: stencil.py:442