WarpX
Loading...
Searching...
No Matches
SpectralSolver.H
Go to the documentation of this file.
1/* Copyright 2019-2020 Maxence Thevenet, Remi Lehe, Edoardo Zoni
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7#ifndef WARPX_SPECTRAL_SOLVER_H_
8#define WARPX_SPECTRAL_SOLVER_H_
9
10#include "SpectralSolver_fwd.H"
11
13#include "SpectralFieldData.H"
15
17#include <ablastr/utils/Enums.H>
18
19#include <AMReX_Array.H>
20#include <AMReX_REAL.H>
21#include <AMReX_RealVect.H>
22
23#include <AMReX_BaseFwd.H>
24
25#include <array>
26#include <memory>
27
28#ifdef WARPX_USE_FFT
37{
38 public:
39
75 SpectralSolver (const amrex::BoxArray& realspace_ba,
77 int norder_x,
78 int norder_y,
79 int norder_z,
81 const amrex::Vector<amrex::Real>& v_galilean,
82 const amrex::Vector<amrex::Real>& v_comoving,
84 amrex::Real dt,
85 bool pml,
86 bool periodic_single_box,
87 bool update_with_rho,
88 bool fft_do_time_averaging,
89 PSATDSolutionType psatd_solution_type,
90 TimeDependencyJ time_dependency_J,
91 TimeDependencyRho time_dependency_rho,
92 bool dive_cleaning,
93 bool divb_cleaning);
94
104 void ForwardTransform (int lev,
105 const amrex::MultiFab& mf,
106 int field_index,
107 int i_comp = 0);
108
113 void BackwardTransform( int lev,
114 amrex::MultiFab& mf,
115 int field_index,
116 const amrex::IntVect& fill_guards,
117 int i_comp=0 );
118
122 void pushSpectralFields();
123
129 int lev,
130 ablastr::fields::VectorField const & Efield,
131 amrex::MultiFab& divE);
132
139 void CurrentCorrection ();
140
147 void VayDeposition ();
148
156 void CopySpectralDataComp (int src_comp, int dest_comp);
157
163 void ZeroOutDataComp (int icomp);
164
172 void ScaleDataComp (int icomp, amrex::Real scale_factor);
173
175
176 // Solve time step size
177 amrex::Real m_dt;
178
179 protected:
180
182
183 private:
184
186
187 // Store field in spectral space and perform the Fourier transforms
189
190 // Defines field update equation in spectral space and the associated coefficients.
191 // SpectralBaseAlgorithm is a base class; this pointer is meant to point
192 // to an instance of a sub-class defining a specific algorithm
193 std::unique_ptr<SpectralBaseAlgorithm> algorithm;
194};
195#endif // WARPX_USE_FFT
196#endif // WARPX_SPECTRAL_SOLVER_H_
TimeDependencyJ
Definition WarpXAlgorithmSelection.H:106
PSATDSolutionType
Definition WarpXAlgorithmSelection.H:100
TimeDependencyRho
Definition WarpXAlgorithmSelection.H:112
Class that stores the fields in spectral space, and performs the Fourier transforms between real spac...
Definition SpectralFieldData.H:144
Definition SpectralFieldData.H:35
void ReadParameters()
void ForwardTransform(int lev, const amrex::MultiFab &mf, int field_index, int i_comp=0)
Transform the component i_comp of the MultiFab mf to Fourier space, and store the result internally (...
Definition SpectralSolver.cpp:117
SpectralFieldIndex m_spectral_index
Definition SpectralSolver.H:174
void VayDeposition()
Public interface to call the virtual function VayDeposition, declared in the base class SpectralBaseA...
Definition SpectralSolver.cpp:159
void ScaleDataComp(int icomp, amrex::Real scale_factor)
Scale the data on component icomp of field_data.fields by a given scale factor.
Definition SpectralSolver.cpp:177
void pushSpectralFields()
Update the fields in spectral space, over one timestep.
Definition SpectralSolver.cpp:138
void ZeroOutDataComp(int icomp)
Set to zero the data on component icomp of field_data.fields.
Definition SpectralSolver.cpp:171
void ComputeSpectralDivE(int lev, ablastr::fields::VectorField const &Efield, amrex::MultiFab &divE)
Public interface to call the member function ComputeSpectralDivE of the base class SpectralBaseAlgori...
Definition SpectralSolver.cpp:146
void CurrentCorrection()
Public interface to call the virtual function CurrentCorrection, defined in the base class SpectralBa...
Definition SpectralSolver.cpp:154
amrex::Real m_dt
Definition SpectralSolver.H:177
SpectralSolver(const amrex::BoxArray &realspace_ba, const amrex::DistributionMapping &dm, int norder_x, int norder_y, int norder_z, ablastr::utils::enums::GridType grid_type, const amrex::Vector< amrex::Real > &v_galilean, const amrex::Vector< amrex::Real > &v_comoving, amrex::RealVect dx, amrex::Real dt, bool pml, bool periodic_single_box, bool update_with_rho, bool fft_do_time_averaging, PSATDSolutionType psatd_solution_type, TimeDependencyJ time_dependency_J, TimeDependencyRho time_dependency_rho, bool dive_cleaning, bool divb_cleaning)
Constructor of the class SpectralSolver.
Definition SpectralSolver.cpp:26
SpectralFieldData field_data
Definition SpectralSolver.H:188
amrex::IntVect m_fill_guards
Definition SpectralSolver.H:181
void BackwardTransform(int lev, amrex::MultiFab &mf, int field_index, const amrex::IntVect &fill_guards, int i_comp=0)
Transform spectral field specified by field_index back to real space, and store it in the component i...
Definition SpectralSolver.cpp:127
void CopySpectralDataComp(int src_comp, int dest_comp)
Copy spectral data from component src_comp to component dest_comp of field_data.fields.
Definition SpectralSolver.cpp:164
std::unique_ptr< SpectralBaseAlgorithm > algorithm
Definition SpectralSolver.H:193
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:191
GridType
Definition Enums.H:23
IntVectND< 3 > IntVect
RealVectND< 3 > RealVect