WarpX
Loading...
Searching...
No Matches
ElectrostaticSolver.H
Go to the documentation of this file.
1/* Copyright 2024 The WarpX Community
2 *
3 * This file is part of WarpX.
4 *
5 * Authors: Roelof Groenewald, Arianna Formenti, Revathi Jambunathan
6 *
7 * License: BSD-3-Clause-LBNL
8 */
9#ifndef WARPX_ELECTROSTATICSOLVER_H_
10#define WARPX_ELECTROSTATICSOLVER_H_
11
16
17#include <AMReX_Array.H>
18
19
25{
26public:
28 ElectrostaticSolver( int nlevs_max );
29
31
32 // Prohibit Move and Copy operations
37
38 void ReadParameters ();
39
40 virtual void InitData () {}
41
55 int max_level) = 0;
56
65 void setPhiBC (
67 amrex::Real t
68 ) const;
69
89 void computePhi (
92 std::array<amrex::Real, 3> beta,
93 amrex::Real required_precision,
94 amrex::Real absolute_tolerance,
95 int max_iters,
96 int verbosity,
98 std::optional<ablastr::fields::MultiLevelVectorField> efield = std::nullopt // only used for EB
99 ) const;
100
116 void computeE (
119 std::array<amrex::Real, 3> beta
120 ) const;
121
136 void computeB (
139 std::array<amrex::Real, 3> beta
140 ) const;
141
144
146 std::unique_ptr<PoissonBoundaryHandler> m_poisson_boundary_handler;
147
159
161 // 0: full 3D, 1: many 2D z-slices (quasi-3D)
162 bool is_igf_2d_slices = false;
163};
164
165#endif // WARPX_ELECTROSTATICSOLVER_H_
ElectrostaticSolver & operator=(const ElectrostaticSolver &)=delete
void computeE(ablastr::fields::MultiLevelVectorField const &E, ablastr::fields::MultiLevelScalarField const &phi, std::array< amrex::Real, 3 > beta) const
Compute the electric field that corresponds to phi, and add it to the set of MultiFab E....
Definition ElectrostaticSolver.cpp:227
std::unique_ptr< PoissonBoundaryHandler > m_poisson_boundary_handler
Definition ElectrostaticSolver.H:146
ElectrostaticSolver()=default
void computePhi(ablastr::fields::MultiLevelScalarField const &rho, ablastr::fields::MultiLevelScalarField const &phi, std::array< amrex::Real, 3 > beta, amrex::Real required_precision, amrex::Real absolute_tolerance, int max_iters, int verbosity, bool is_igf_2d_slices, std::optional< ablastr::fields::MultiLevelVectorField > efield=std::nullopt) const
Definition ElectrostaticSolver.cpp:125
virtual void InitData()
Definition ElectrostaticSolver.H:40
ElectrostaticSolver(ElectrostaticSolver &&)=delete
amrex::Real self_fields_absolute_tolerance
Definition ElectrostaticSolver.H:150
amrex::Real self_fields_required_precision
Definition ElectrostaticSolver.H:149
ElectrostaticSolver(const ElectrostaticSolver &)=delete
bool is_igf_2d_slices
Definition ElectrostaticSolver.H:162
virtual ~ElectrostaticSolver()
ElectrostaticSolver & operator=(ElectrostaticSolver &&)=delete
void setPhiBC(ablastr::fields::MultiLevelScalarField const &phi, amrex::Real t) const
Set Dirichlet boundary conditions for the electrostatic solver. The given potential's values are fixe...
Definition ElectrostaticSolver.cpp:51
void ReadParameters()
Definition ElectrostaticSolver.cpp:30
int self_fields_verbosity
Definition ElectrostaticSolver.H:158
int self_fields_max_iters
Definition ElectrostaticSolver.H:152
int num_levels
Definition ElectrostaticSolver.H:143
void computeB(ablastr::fields::MultiLevelVectorField const &B, ablastr::fields::MultiLevelScalarField const &phi, std::array< amrex::Real, 3 > beta) const
Compute the magnetic field that corresponds to phi, and add it to the set of MultiFab B....
Definition ElectrostaticSolver.cpp:391
virtual void ComputeSpaceChargeField(ablastr::fields::MultiFabRegister &fields, MultiParticleContainer &mpc, MultiFluidContainer *mfl, int max_level)=0
Computes charge density, rho, and solves Poisson's equation to obtain the associated electrostatic po...
Definition MultiFluidContainer.H:36
Definition MultiParticleContainer.H:68
Definition EffectivePotentialPoissonSolver.H:63
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:200
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:208
Definition MultiFabRegister.H:262