WarpX
Loading...
Searching...
No Matches
PoissonBoundaryHandler.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 (TAE Technologies)
6 *
7 * License: BSD-3-Clause-LBNL
8 */
9#ifndef WARPX_BOUNDARYHANDLER_H_
10#define WARPX_BOUNDARYHANDLER_H_
11
13
14#include <AMReX_Array.H>
15#include <AMReX_Geometry.H>
16#include <AMReX_MultiFab.H>
17#include <AMReX_MLMG.H>
18#include <AMReX_REAL.H>
19#include <AMReX_Parser.H>
20
21#include <array>
22#include <string>
23#include <utility>
24
25
27{
28public:
29 PoissonBoundaryHandler (); // constructor
30
32 void ReadParameters ();
33
38 void DefinePhiBCs (const amrex::Geometry& geom);
39
44 void BuildParsers ();
45 void BuildParsersEB ();
46
52 void setPotentialEB(const std::string& potential) {
53 potential_eb_str = potential;
55 }
56
58
59 amrex::Real t;
61
63 amrex::Real operator()(const amrex::Real x, const amrex::Real z) const noexcept {
64 using namespace amrex::literals;
65 return potential_eb(x, 0.0_rt, z, t);
66 }
67
69 amrex::Real operator()(const amrex::Real x, const amrex::Real y, const amrex::Real z) const noexcept {
70 return potential_eb(x, y, z, t);
71 }
72 };
73
74 [[nodiscard]] PhiCalculatorEB
75 getPhiEB(amrex::Real t) const noexcept
76 {
78 }
79
81
82 // set default potentials to zero in order for current tests to pass
83 // but forcing the user to specify a potential might be better
84 std::string potential_xlo_str = "0";
85 std::string potential_xhi_str = "0";
86 std::string potential_ylo_str = "0";
87 std::string potential_yhi_str = "0";
88 std::string potential_zlo_str = "0";
89 std::string potential_zhi_str = "0";
90 std::string potential_eb_str = "0";
91
100
102 std::array<bool, AMREX_SPACEDIM * 2> dirichlet_flag;
103 bool has_non_periodic = false;
104 bool phi_EB_only_t = true;
105
106private:
107
115};
116
122 private:
126
127 public:
130
131 void operator()(amrex::MLMG & mlmg, int const lev) {
132 using namespace amrex::literals;
133
134 mlmg.getGradSolution({m_e_field[lev]});
135 for (auto &field: m_e_field[lev]) {
136 field->mult(-1._rt);
137 }
138 }
139};
140
141#endif // WARPX_BOUNDARYHANDLER_H_
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
EBCalcEfromPhiPerLevel(amrex::Vector< amrex::Array< amrex::MultiFab *, 3 > > e_field)
Definition PoissonBoundaryHandler.H:128
void operator()(amrex::MLMG &mlmg, int const lev)
Definition PoissonBoundaryHandler.H:131
amrex::Vector< amrex::Array< amrex::MultiFab *, 3 > > m_e_field
Definition PoissonBoundaryHandler.H:125
amrex::ParserExecutor< 1 > potential_zlo
Definition PoissonBoundaryHandler.H:96
void BuildParsers()
Initialize amrex::Parser objects to get the boundary potential values at specified times.
Definition PoissonBoundaryHandler.cpp:155
amrex::Parser potential_eb_parser
Definition PoissonBoundaryHandler.H:114
amrex::Parser potential_yhi_parser
Definition PoissonBoundaryHandler.H:111
std::string potential_xlo_str
Definition PoissonBoundaryHandler.H:84
amrex::Parser potential_zhi_parser
Definition PoissonBoundaryHandler.H:113
PoissonBoundaryHandler()
Definition PoissonBoundaryHandler.cpp:16
amrex::ParserExecutor< 1 > potential_xhi
Definition PoissonBoundaryHandler.H:93
std::string potential_yhi_str
Definition PoissonBoundaryHandler.H:87
amrex::ParserExecutor< 1 > potential_zhi
Definition PoissonBoundaryHandler.H:97
void ReadParameters()
Definition PoissonBoundaryHandler.cpp:22
amrex::ParserExecutor< 1 > potential_yhi
Definition PoissonBoundaryHandler.H:95
void setPotentialEB(const std::string &potential)
Sets the EB potential string and updates the function parser.
Definition PoissonBoundaryHandler.H:52
std::string potential_zhi_str
Definition PoissonBoundaryHandler.H:89
bool phi_EB_only_t
Definition PoissonBoundaryHandler.H:104
amrex::Array< amrex::LinOpBCType, 3 > hibc
Definition PoissonBoundaryHandler.H:101
std::string potential_eb_str
Definition PoissonBoundaryHandler.H:90
void DefinePhiBCs(const amrex::Geometry &geom)
Read the input settings and set the boundary conditions used on each domain boundary for the Poisson ...
Definition PoissonBoundaryHandler.cpp:55
amrex::ParserExecutor< 4 > potential_eb
Definition PoissonBoundaryHandler.H:99
void BuildParsersEB()
Definition PoissonBoundaryHandler.cpp:174
amrex::Parser potential_ylo_parser
Definition PoissonBoundaryHandler.H:110
std::array< bool, 3 *2 > dirichlet_flag
Definition PoissonBoundaryHandler.H:102
std::string potential_zlo_str
Definition PoissonBoundaryHandler.H:88
amrex::ParserExecutor< 1 > potential_xlo
Definition PoissonBoundaryHandler.H:92
amrex::ParserExecutor< 1 > potential_ylo
Definition PoissonBoundaryHandler.H:94
std::string potential_ylo_str
Definition PoissonBoundaryHandler.H:86
PhiCalculatorEB getPhiEB(amrex::Real t) const noexcept
Definition PoissonBoundaryHandler.H:75
amrex::Array< amrex::LinOpBCType, 3 > lobc
Definition PoissonBoundaryHandler.H:101
amrex::Parser potential_zlo_parser
Definition PoissonBoundaryHandler.H:112
std::string potential_xhi_str
Definition PoissonBoundaryHandler.H:85
amrex::ParserExecutor< 1 > potential_eb_t
Definition PoissonBoundaryHandler.H:98
amrex::Parser potential_xhi_parser
Definition PoissonBoundaryHandler.H:109
bool has_non_periodic
Definition PoissonBoundaryHandler.H:103
amrex::Parser potential_xlo_parser
Definition PoissonBoundaryHandler.H:108
bool m_boundary_potential_specified
Definition PoissonBoundaryHandler.H:80
void getGradSolution(const Vector< Array< AMF *, 3 > > &a_grad_sol, Location a_loc=Location::FaceCenter)
MLMGT< MultiFab > MLMG
std::array< T, N > Array
Definition PoissonBoundaryHandler.H:57
amrex::ParserExecutor< 4 > potential_eb
Definition PoissonBoundaryHandler.H:60
amrex::Real t
Definition PoissonBoundaryHandler.H:59
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 PoissonBoundaryHandler.H:69
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real x, const amrex::Real z) const noexcept
Definition PoissonBoundaryHandler.H:63