WarpX
PsatdAlgorithmJConstantInTime.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_CONSTANT_IN_TIME_H_
8 #define WARPX_PSATD_ALGORITHM_J_CONSTANT_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 /* \brief Class that updates the field in spectral space
25  * and stores the coefficients of the corresponding update equation.
26  */
28 {
29  public:
30 
49  const SpectralKSpace& spectral_kspace,
51  const SpectralFieldIndex& spectral_index,
52  int norder_x,
53  int norder_y,
54  int norder_z,
55  short grid_type,
56  const amrex::Vector<amrex::Real>& v_galilean,
57  amrex::Real dt,
58  bool update_with_rho,
59  bool time_averaging,
60  bool dive_cleaning,
61  bool divb_cleaning);
62 
68  void pushSpectralFields (SpectralFieldData& f) const final;
69 
78  const SpectralKSpace& spectral_kspace,
80  amrex::Real dt);
81 
91  const SpectralKSpace& spectral_kspace,
93  amrex::Real dt);
94 
104  void CurrentCorrection (SpectralFieldData& field_data) final;
105 
115  void VayDeposition (SpectralFieldData& field_data) final;
116 
117  private:
118 
119  // These real and complex coefficients are always allocated
122 
123  // These real and complex coefficients are allocated only with averaged Galilean PSATD
125 
126  // Centered modified finite-order k vectors
128 #if defined(WARPX_DIM_3D)
129  KVectorComponent modified_ky_vec_centered;
130 #endif
132 
133  // Other member variables
135  amrex::Real m_dt;
141 };
142 #endif // WARPX_USE_PSATD
143 #endif // WARPX_PSATD_ALGORITHM_J_CONSTANT_IN_TIME_H_
Definition: PsatdAlgorithmJConstantInTime.H:28
SpectralComplexCoefficients X2_coef
Definition: PsatdAlgorithmJConstantInTime.H:121
bool m_divb_cleaning
Definition: PsatdAlgorithmJConstantInTime.H:139
amrex::Real m_dt
Definition: PsatdAlgorithmJConstantInTime.H:135
SpectralComplexCoefficients Y4_coef
Definition: PsatdAlgorithmJConstantInTime.H:124
SpectralComplexCoefficients Y2_coef
Definition: PsatdAlgorithmJConstantInTime.H:124
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: PsatdAlgorithmJConstantInTime.cpp:357
SpectralComplexCoefficients X1_coef
Definition: PsatdAlgorithmJConstantInTime.H:121
void CurrentCorrection(SpectralFieldData &field_data) final
Virtual function for current correction in Fourier space (Vay et al, 2013). This function overrides t...
Definition: PsatdAlgorithmJConstantInTime.cpp:703
void VayDeposition(SpectralFieldData &field_data) final
Virtual function for Vay current deposition in Fourier space (Vay et al, 2013). This function overrid...
Definition: PsatdAlgorithmJConstantInTime.cpp:803
SpectralRealCoefficients C_coef
Definition: PsatdAlgorithmJConstantInTime.H:120
void InitializeSpectralCoefficientsAveraging(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, amrex::Real dt)
Initializes additional coefficients used in pushSpectralFields to update the E and B fields,...
Definition: PsatdAlgorithmJConstantInTime.cpp:520
SpectralComplexCoefficients T2_coef
Definition: PsatdAlgorithmJConstantInTime.H:121
SpectralComplexCoefficients X4_coef
Definition: PsatdAlgorithmJConstantInTime.H:121
KVectorComponent modified_kx_vec_centered
Definition: PsatdAlgorithmJConstantInTime.H:127
bool m_time_averaging
Definition: PsatdAlgorithmJConstantInTime.H:137
void pushSpectralFields(SpectralFieldData &f) const final
Updates the E and B fields in spectral space, according to the relevant PSATD equations.
Definition: PsatdAlgorithmJConstantInTime.cpp:114
amrex::Vector< amrex::Real > m_v_galilean
Definition: PsatdAlgorithmJConstantInTime.H:134
bool m_update_with_rho
Definition: PsatdAlgorithmJConstantInTime.H:136
SpectralComplexCoefficients Y3_coef
Definition: PsatdAlgorithmJConstantInTime.H:124
bool m_dive_cleaning
Definition: PsatdAlgorithmJConstantInTime.H:138
SpectralComplexCoefficients X3_coef
Definition: PsatdAlgorithmJConstantInTime.H:121
bool m_is_galilean
Definition: PsatdAlgorithmJConstantInTime.H:140
SpectralComplexCoefficients Psi1_coef
Definition: PsatdAlgorithmJConstantInTime.H:124
SpectralComplexCoefficients Psi2_coef
Definition: PsatdAlgorithmJConstantInTime.H:124
SpectralComplexCoefficients Y1_coef
Definition: PsatdAlgorithmJConstantInTime.H:124
SpectralRealCoefficients S_ck_coef
Definition: PsatdAlgorithmJConstantInTime.H:120
PsatdAlgorithmJConstantInTime(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const SpectralFieldIndex &spectral_index, int norder_x, int norder_y, int norder_z, short grid_type, const amrex::Vector< amrex::Real > &v_galilean, amrex::Real dt, bool update_with_rho, bool time_averaging, bool dive_cleaning, bool divb_cleaning)
Constructor of the class PsatdAlgorithmJConstantInTime.
Definition: PsatdAlgorithmJConstantInTime.cpp:32
KVectorComponent modified_kz_vec_centered
Definition: PsatdAlgorithmJConstantInTime.H:131
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