WarpX
ElectrostaticSolver.H
Go to the documentation of this file.
1 /* Copyright 2021 Modern Electron
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef ELECTROSTATICSOLVER_H_
8 #define ELECTROSTATICSOLVER_H_
9 
10 #include <AMReX_Array.H>
11 #include <AMReX_MultiFab.H>
12 #include <AMReX_MLMG.H>
13 #include <AMReX_REAL.H>
14 #include <AMReX_Parser.H>
15 
17 
18  struct PhiCalculatorEB {
19 
20  amrex::Real t;
22 
24  amrex::Real operator()(const amrex::Real x, const amrex::Real z) const noexcept {
25  using namespace amrex::literals;
26  return potential_eb(x, 0.0_rt, z, t);
27  }
28 
30  amrex::Real operator()(const amrex::Real x, const amrex::Real y, const amrex::Real z) const noexcept {
31  return potential_eb(x, y, z, t);
32  }
33  };
34 
36  public:
37 
39  bool bcs_set = false;
40  std::array<bool, AMREX_SPACEDIM * 2> dirichlet_flag;
41  bool has_non_periodic = false;
42  bool phi_EB_only_t = true;
43 
44  void definePhiBCs ();
45 
46  void buildParsers ();
47 
48  PhiCalculatorEB getPhiEB(amrex::Real t) const noexcept {
50  }
51 
52  // set default potentials to zero in order for current tests to pass
53  // but forcing the user to specify a potential might be better
54  std::string potential_xlo_str = "0";
55  std::string potential_xhi_str = "0";
56  std::string potential_ylo_str = "0";
57  std::string potential_yhi_str = "0";
58  std::string potential_zlo_str = "0";
59  std::string potential_zhi_str = "0";
60  std::string potential_eb_str = "0";
61 
70 
71  private:
72 
80  };
81 
87  private:
91 
92  public:
94  : m_e_field(e_field) {}
95 
96  void operator()(amrex::MLMG & mlmg, int const lev) {
97  using namespace amrex::literals;
98 
99  mlmg.getGradSolution({m_e_field[lev]});
100  for (auto &field: m_e_field[lev]) {
101  field->mult(-1._rt);
102  }
103  }
104  };
105 } // namespace ElectrostaticSolver
106 
107 #endif // ELECTROSTATICSOLVER_H_
amrex::Array< amrex::LinOpBCType, AMREX_SPACEDIM > lobc
Definition: ElectrostaticSolver.H:38
amrex::Vector< amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > > m_e_field
Definition: ElectrostaticSolver.H:90
amrex::Parser potential_ylo_parser
Definition: ElectrostaticSolver.H:75
std::array< bool, AMREX_SPACEDIM *2 > dirichlet_flag
Definition: ElectrostaticSolver.H:40
def x
Definition: read_lab_particles.py:26
amrex::ParserExecutor< 4 > potential_eb
Definition: ElectrostaticSolver.H:21
void operator()(amrex::MLMG &mlmg, int const lev)
Definition: ElectrostaticSolver.H:96
amrex::ParserExecutor< 1 > potential_xhi
Definition: ElectrostaticSolver.H:63
void getGradSolution(const Vector< Array< MultiFab *, AMREX_SPACEDIM > > &a_grad_sol, Location a_loc=Location::FaceCenter)
Definition: ElectrostaticSolver.H:35
def z
Definition: read_lab_particles.py:27
amrex::Parser potential_xlo_parser
Definition: ElectrostaticSolver.H:73
#define AMREX_FORCE_INLINE
amrex::ParserExecutor< 1 > potential_zlo
Definition: ElectrostaticSolver.H:66
Definition: ElectrostaticSolver.H:86
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real x, const amrex::Real z) const noexcept
Definition: ElectrostaticSolver.H:24
Definition: ElectrostaticSolver.H:18
amrex::Parser potential_xhi_parser
Definition: ElectrostaticSolver.H:74
#define AMREX_GPU_HOST_DEVICE
amrex::Parser potential_zhi_parser
Definition: ElectrostaticSolver.H:78
amrex::Real t
Definition: ElectrostaticSolver.H:20
amrex::ParserExecutor< 1 > potential_yhi
Definition: ElectrostaticSolver.H:65
amrex::ParserExecutor< 1 > potential_eb_t
Definition: ElectrostaticSolver.H:68
amrex::ParserExecutor< 1 > potential_zhi
Definition: ElectrostaticSolver.H:67
amrex::ParserExecutor< 4 > potential_eb
Definition: ElectrostaticSolver.H:69
amrex::ParserExecutor< 1 > potential_ylo
Definition: ElectrostaticSolver.H:64
amrex::Parser potential_yhi_parser
Definition: ElectrostaticSolver.H:76
EBCalcEfromPhiPerLevel(amrex::Vector< amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > > e_field)
Definition: ElectrostaticSolver.H:93
amrex::ParserExecutor< 1 > potential_xlo
Definition: ElectrostaticSolver.H:62
PhiCalculatorEB getPhiEB(amrex::Real t) const noexcept
Definition: ElectrostaticSolver.H:48
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real x, const amrex::Real y, const amrex::Real z) const noexcept
Definition: ElectrostaticSolver.H:30
amrex::Parser potential_eb_parser
Definition: ElectrostaticSolver.H:79
string field
Definition: video_yt.py:31
Definition: ElectrostaticSolver.H:16
std::array< T, N > Array
amrex::Parser potential_zlo_parser
Definition: ElectrostaticSolver.H:77