WarpX
Toggle main menu visibility
Loading...
Searching...
No Matches
Source
FieldSolver
SpectralSolver
SpectralAlgorithms
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
10
#include "
FieldSolver/SpectralSolver/SpectralKSpace.H
"
11
#include "
Utils/WarpX_Complex.H
"
12
13
#include "
FieldSolver/SpectralSolver/SpectralFieldData_fwd.H
"
14
#include "
FieldSolver/SpectralSolver/SpectralFieldData.H
"
15
16
#include <
ablastr/fields/MultiFabRegister.H
>
17
#include <
ablastr/utils/Enums.H
>
18
19
#include <
AMReX_BaseFab.H
>
20
#include <AMReX_Config.H>
21
#include <
AMReX_FabArray.H
>
22
#include <
AMReX_REAL.H
>
23
24
#include <
AMReX_BaseFwd.H
>
25
26
#include <array>
27
#include <memory>
28
29
#if WARPX_USE_FFT
30
31
/* \brief Class that updates the field in spectral space
32
* and stores the coefficients of the corresponding update equation.
33
*
34
* `SpectralBaseAlgorithm` is only a base class and cannot be used directly.
35
* Instead use its subclasses, which implement the specific field update
36
* equations for a given spectral algorithm.
37
*/
38
class
SpectralBaseAlgorithm
39
{
40
public
:
41
// Virtual member function ; meant to be overridden in subclasses
42
virtual
void
pushSpectralFields
(
SpectralFieldData
& f)
const
= 0;
43
44
// The destructor should also be a virtual function, so that
45
// a pointer to subclass of `SpectraBaseAlgorithm` actually
46
// calls the subclass's destructor.
47
virtual
~SpectralBaseAlgorithm
() =
default
;
48
49
// Default move and copy operations
50
SpectralBaseAlgorithm
(
const
SpectralBaseAlgorithm
&) =
default
;
51
SpectralBaseAlgorithm
&
operator=
(
const
SpectralBaseAlgorithm
&) =
default
;
52
SpectralBaseAlgorithm
(
SpectralBaseAlgorithm
&&) =
default
;
53
SpectralBaseAlgorithm
&
operator=
(
SpectralBaseAlgorithm
&&) =
default
;
54
62
virtual
void
CurrentCorrection
(
SpectralFieldData
& field_data) = 0;
63
71
virtual
void
VayDeposition
(
SpectralFieldData
& field_data) = 0;
72
76
void
ComputeSpectralDivE
(
int
lev,
77
SpectralFieldData
& field_data,
78
ablastr::fields::VectorField
const
& Efield,
79
amrex::MultiFab
& divE );
80
81
protected
:
// Meant to be used in the subclasses
82
83
using
SpectralRealCoefficients
= \
84
amrex::FabArray< amrex::BaseFab <amrex::Real>
>;
85
using
SpectralComplexCoefficients
= \
86
amrex::FabArray< amrex::BaseFab <Complex>
>;
87
91
SpectralBaseAlgorithm
(
const
SpectralKSpace
& spectral_kspace,
92
const
amrex::DistributionMapping
& dm,
93
const
SpectralFieldIndex
& spectral_index,
94
int
norder_x,
95
int
norder_y,
96
int
norder_z,
97
ablastr::utils::enums::GridType
grid_type);
98
99
SpectralFieldIndex
m_spectral_index
;
100
101
// Modified finite-order vectors
102
KVectorComponent
modified_kx_vec
;
103
#if defined(WARPX_DIM_3D)
104
KVectorComponent
modified_ky_vec;
105
#endif
106
KVectorComponent
modified_kz_vec
;
107
};
108
109
#endif
// WARPX_USE_FFT
110
#endif
// WARPX_SPECTRAL_BASE_ALGORITHM_H_
AMReX_BaseFab.H
AMReX_BaseFwd.H
AMReX_FabArray.H
AMReX_REAL.H
Enums.H
MultiFabRegister.H
SpectralFieldData.H
SpectralFieldData_fwd.H
SpectralKSpace.H
KVectorComponent
amrex::LayoutData< RealKVector > KVectorComponent
Definition
SpectralKSpace.H:33
WarpX_Complex.H
SpectralBaseAlgorithm::modified_kz_vec
KVectorComponent modified_kz_vec
Definition
SpectralBaseAlgorithm.H:106
SpectralBaseAlgorithm::pushSpectralFields
virtual void pushSpectralFields(SpectralFieldData &f) const =0
SpectralBaseAlgorithm::m_spectral_index
SpectralFieldIndex m_spectral_index
Definition
SpectralBaseAlgorithm.H:99
SpectralBaseAlgorithm::operator=
SpectralBaseAlgorithm & operator=(SpectralBaseAlgorithm &&)=default
SpectralBaseAlgorithm::SpectralBaseAlgorithm
SpectralBaseAlgorithm(SpectralBaseAlgorithm &&)=default
SpectralBaseAlgorithm::modified_kx_vec
KVectorComponent modified_kx_vec
Definition
SpectralBaseAlgorithm.H:102
SpectralBaseAlgorithm::VayDeposition
virtual void VayDeposition(SpectralFieldData &field_data)=0
Virtual function for Vay current deposition in Fourier space (Vay et al, 2013). This virtual function...
SpectralBaseAlgorithm::CurrentCorrection
virtual void CurrentCorrection(SpectralFieldData &field_data)=0
Virtual function for current correction in Fourier space (Vay et al, 2013). This virtual function is ...
SpectralBaseAlgorithm::SpectralRealCoefficients
amrex::FabArray< amrex::BaseFab< amrex::Real > > SpectralRealCoefficients
Definition
SpectralBaseAlgorithm.H:83
SpectralBaseAlgorithm::~SpectralBaseAlgorithm
virtual ~SpectralBaseAlgorithm()=default
SpectralBaseAlgorithm::SpectralComplexCoefficients
amrex::FabArray< amrex::BaseFab< Complex > > SpectralComplexCoefficients
Definition
SpectralBaseAlgorithm.H:85
SpectralBaseAlgorithm::ComputeSpectralDivE
void ComputeSpectralDivE(int lev, SpectralFieldData &field_data, ablastr::fields::VectorField const &Efield, amrex::MultiFab &divE)
Compute spectral divergence of E.
Definition
SpectralBaseAlgorithm.cpp:60
SpectralBaseAlgorithm::operator=
SpectralBaseAlgorithm & operator=(const SpectralBaseAlgorithm &)=default
SpectralBaseAlgorithm::SpectralBaseAlgorithm
SpectralBaseAlgorithm(const SpectralBaseAlgorithm &)=default
SpectralFieldData
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition
SpectralFieldData.H:144
SpectralFieldIndex
Definition
SpectralFieldData.H:35
SpectralKSpace
Class that represents the spectral space.
Definition
SpectralKSpace.H:51
amrex::DistributionMapping
amrex::FabArray
amrex::MultiFab
ablastr::fields::VectorField
std::array< amrex::MultiFab *, 3 > VectorField
Definition
MultiFabRegister.H:201
ablastr::utils::enums::GridType
GridType
Definition
Enums.H:23
Generated by
1.17.0