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
76 SpectralSolver (int lev,
77 const amrex::BoxArray& realspace_ba,
79 int norder_x,
80 int norder_y,
81 int norder_z,
83 const amrex::Vector<amrex::Real>& v_galilean,
84 const amrex::Vector<amrex::Real>& v_comoving,
86 amrex::Real dt,
87 bool pml,
88 bool periodic_single_box,
89 bool update_with_rho,
90 bool fft_do_time_averaging,
91 PSATDSolutionType psatd_solution_type,
92 TimeDependencyJ time_dependency_J,
93 TimeDependencyRho time_dependency_rho,
94 bool dive_cleaning,
95 bool divb_cleaning);
96
106 void ForwardTransform (int lev,
107 const amrex::MultiFab& mf,
108 int field_index,
109 int i_comp = 0);
110
115 void BackwardTransform( int lev,
116 amrex::MultiFab& mf,
117 int field_index,
118 const amrex::IntVect& fill_guards,
119 int i_comp=0 );
120
124 void pushSpectralFields();
125
131 int lev,
132 ablastr::fields::VectorField const & Efield,
133 amrex::MultiFab& divE);
134
141 void CurrentCorrection ();
142
149 void VayDeposition ();
150
158 void CopySpectralDataComp (int src_comp, int dest_comp);
159
165 void ZeroOutDataComp (int icomp);
166
174 void ScaleDataComp (int icomp, amrex::Real scale_factor);
175
177
178 // Solve time step size
179 amrex::Real m_dt;
180
181 protected:
182
184
185 private:
186
188
189 // Store field in spectral space and perform the Fourier transforms
191
192 // Defines field update equation in spectral space and the associated coefficients.
193 // SpectralBaseAlgorithm is a base class; this pointer is meant to point
194 // to an instance of a sub-class defining a specific algorithm
195 std::unique_ptr<SpectralBaseAlgorithm> algorithm;
196};
197#endif // WARPX_USE_FFT
198#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:118
SpectralFieldIndex m_spectral_index
Definition SpectralSolver.H:176
SpectralSolver(int lev, 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
void VayDeposition()
Public interface to call the virtual function VayDeposition, declared in the base class SpectralBaseA...
Definition SpectralSolver.cpp:160
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:178
void pushSpectralFields()
Update the fields in spectral space, over one timestep.
Definition SpectralSolver.cpp:139
void ZeroOutDataComp(int icomp)
Set to zero the data on component icomp of field_data.fields.
Definition SpectralSolver.cpp:172
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:147
void CurrentCorrection()
Public interface to call the virtual function CurrentCorrection, defined in the base class SpectralBa...
Definition SpectralSolver.cpp:155
amrex::Real m_dt
Definition SpectralSolver.H:179
SpectralFieldData field_data
Definition SpectralSolver.H:190
amrex::IntVect m_fill_guards
Definition SpectralSolver.H:183
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:128
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:165
std::unique_ptr< SpectralBaseAlgorithm > algorithm
Definition SpectralSolver.H:195
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:191
GridType
Definition Enums.H:23
IntVectND< 3 > IntVect
RealVectND< 3 > RealVect