WarpX
PsatdAlgorithm.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_H_
8 #define WARPX_PSATD_ALGORITHM_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,
50  const amrex::DistributionMapping& dm,
51  const SpectralFieldIndex& spectral_index,
52  const int norder_x,
53  const int norder_y,
54  const int norder_z,
55  const bool nodal,
56  const amrex::IntVect& fill_guards,
57  const amrex::Array<amrex::Real,3>& v_galilean,
58  const amrex::Real dt,
59  const bool update_with_rho,
60  const bool time_averaging,
61  const bool J_linear_in_time,
62  const bool dive_cleaning,
63  const bool divb_cleaning);
64 
70  virtual void pushSpectralFields (SpectralFieldData& f) const override final;
71 
80  const SpectralKSpace& spectral_kspace,
81  const amrex::DistributionMapping& dm,
82  const amrex::Real dt);
83 
93  const SpectralKSpace& spectral_kspace,
94  const amrex::DistributionMapping& dm,
95  const amrex::Real dt);
96 
106  const SpectralKSpace& spectral_kspace,
107  const amrex::DistributionMapping& dm,
108  const amrex::Real dt);
109 
122  virtual void CurrentCorrection (
123  const int lev,
124  SpectralFieldData& field_data,
125  std::array<std::unique_ptr<amrex::MultiFab>,3>& current,
126  const std::unique_ptr<amrex::MultiFab>& rho) override final;
127 
139  virtual void VayDeposition (
140  const int lev,
141  SpectralFieldData& field_data,
142  std::array<std::unique_ptr<amrex::MultiFab>,3>& current) override final;
143 
144  private:
145 
146  // These real and complex coefficients are always allocated
149 
151 
152  // These real and complex coefficients are allocated only with averaged Galilean PSATD
154 
156 
157  // Centered modified finite-order k vectors
159 #if (AMREX_SPACEDIM==3)
161 #endif
163 
164  // Other member variables
165  amrex::Array<amrex::Real,3> m_v_galilean;
166  amrex::Real m_dt;
173 };
174 #endif // WARPX_USE_PSATD
175 #endif // WARPX_PSATD_ALGORITHM_H_
amrex::Array< amrex::Real, 3 > m_v_galilean
Definition: PsatdAlgorithm.H:165
amrex::Real m_dt
Definition: PsatdAlgorithm.H:166
Class that represents the spectral space.
Definition: SpectralKSpace.H:47
SpectralComplexCoefficients Y4_coef
Definition: PsatdAlgorithm.H:153
KVectorComponent modified_kz_vec_centered
Definition: PsatdAlgorithm.H:162
bool m_dive_cleaning
Definition: PsatdAlgorithm.H:170
SpectralComplexCoefficients X5_coef
Definition: PsatdAlgorithm.H:150
KVectorComponent modified_ky_vec_centered
Definition: PsatdAlgorithm.H:160
SpectralComplexCoefficients Y2_coef
Definition: PsatdAlgorithm.H:153
void InitializeSpectralCoefficientsAvgLin(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const amrex::Real dt)
Initialize additional coefficients used in pushSpectralFields to update E,B, required only when using...
Definition: PsatdAlgorithm.cpp:815
void InitializeSpectralCoefficients(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const amrex::Real dt)
Initializes the coefficients used in pushSpectralFields to update the E and B fields.
Definition: PsatdAlgorithm.cpp:422
f
Definition: write_atomic_data_cpp.py:83
SpectralRealCoefficients S_ck_coef
Definition: PsatdAlgorithm.H:147
amrex::FabArray< amrex::BaseFab< Complex > > SpectralComplexCoefficients
Definition: SpectralBaseAlgorithm.H:89
SpectralComplexCoefficients X1_coef
Definition: PsatdAlgorithm.H:148
SpectralComplexCoefficients X3_coef
Definition: PsatdAlgorithm.H:148
SpectralComplexCoefficients X4_coef
Definition: PsatdAlgorithm.H:148
SpectralRealCoefficients C_coef
Definition: PsatdAlgorithm.H:147
bool m_time_averaging
Definition: PsatdAlgorithm.H:168
SpectralFieldIndex m_spectral_index
Definition: PsatdAlgorithm.H:155
bool m_divb_cleaning
Definition: PsatdAlgorithm.H:171
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition: SpectralFieldData.H:105
Definition: PsatdAlgorithm.H:27
SpectralComplexCoefficients Psi2_coef
Definition: PsatdAlgorithm.H:153
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) override final
Virtual function for current correction in Fourier space (Vay et al, 2013). This function overrides t...
Definition: PsatdAlgorithm.cpp:886
amrex::FabArray< amrex::BaseFab< amrex::Real > > SpectralRealCoefficients
Definition: SpectralBaseAlgorithm.H:87
Definition: SpectralFieldData.H:32
KVectorComponent modified_kx_vec_centered
Definition: PsatdAlgorithm.H:158
SpectralComplexCoefficients Psi1_coef
Definition: PsatdAlgorithm.H:153
virtual void VayDeposition(const int lev, SpectralFieldData &field_data, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &current) override final
Virtual function for Vay current deposition in Fourier space (Vay et al, 2013). This function overrid...
Definition: PsatdAlgorithm.cpp:1004
SpectralComplexCoefficients Y1_coef
Definition: PsatdAlgorithm.H:153
bool m_update_with_rho
Definition: PsatdAlgorithm.H:167
SpectralComplexCoefficients T2_coef
Definition: PsatdAlgorithm.H:148
amrex::LayoutData< RealKVector > KVectorComponent
Definition: SpectralKSpace.H:30
bool m_is_galilean
Definition: PsatdAlgorithm.H:172
virtual void pushSpectralFields(SpectralFieldData &f) const override final
Updates the E and B fields in spectral space, according to the relevant PSATD equations.
Definition: PsatdAlgorithm.cpp:118
PsatdAlgorithm(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, const amrex::Array< amrex::Real, 3 > &v_galilean, const amrex::Real dt, const bool update_with_rho, const bool time_averaging, const bool J_linear_in_time, const bool dive_cleaning, const bool divb_cleaning)
Constructor of the class PsatdAlgorithm.
Definition: PsatdAlgorithm.cpp:29
bool m_J_linear_in_time
Definition: PsatdAlgorithm.H:169
SpectralComplexCoefficients X2_coef
Definition: PsatdAlgorithm.H:148
void InitializeSpectralCoefficientsAveraging(const SpectralKSpace &spectral_kspace, const amrex::DistributionMapping &dm, const amrex::Real dt)
Initializes additional coefficients used in pushSpectralFields to update the E and B fields...
Definition: PsatdAlgorithm.cpp:624
Definition: SpectralBaseAlgorithm.H:35
SpectralComplexCoefficients X6_coef
Definition: PsatdAlgorithm.H:150
SpectralComplexCoefficients Y3_coef
Definition: PsatdAlgorithm.H:153