WarpX
Loading...
Searching...
No Matches
PEC_Insulator.H
Go to the documentation of this file.
1#ifndef PEC_INSULATOR_H_
2#define PEC_INSULATOR_H_
3
5
6#include <AMReX_Array.H>
7#include <AMReX_Geometry.H>
8#include <AMReX_Vector.H>
9
10#include <AMReX_BaseFwd.H>
11
12#include <array>
13#include <memory>
14
16{
17public:
18
20
41 void ApplyPEC_InsulatortoEfield (std::array<amrex::MultiFab*, 3> Efield,
42 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_lo,
43 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_hi,
44 amrex::IntVect const & ng_fieldgather, amrex::Geometry const & geom,
45 int lev, PatchType patch_type, amrex::Vector<amrex::IntVect> const & ref_ratios,
46 amrex::Real time,
47 bool split_pml_field = false);
66 void ApplyPEC_InsulatortoBfield (std::array<amrex::MultiFab*, 3> Bfield,
67 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_lo,
68 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_hi,
69 amrex::IntVect const & ng_fieldgather, amrex::Geometry const & geom,
70 int lev, PatchType patch_type, amrex::Vector<amrex::IntVect> const & ref_ratios,
71 amrex::Real time);
72
101 void
102 ApplyPEC_InsulatortoField (std::array<amrex::MultiFab*, 3> field,
103 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_lo,
104 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_hi,
105 amrex::IntVect const & ng_fieldgather, amrex::Geometry const & geom,
106 int lev, PatchType patch_type, amrex::Vector<amrex::IntVect> const & ref_ratios,
107 amrex::Real time,
108 bool split_pml_field,
109 bool E_like
110#ifndef WARPX_DIM_1D_Z
111 , bool set_F_x_lo, bool set_F_x_hi,
112 std::unique_ptr<amrex::Parser> const & a_Fy_x_lo, std::unique_ptr<amrex::Parser> const & a_Fz_x_lo,
113 std::unique_ptr<amrex::Parser> const & a_Fy_x_hi, std::unique_ptr<amrex::Parser> const & a_Fz_x_hi
114#endif
115#if defined(WARPX_DIM_3D)
116 , bool set_F_y_lo, bool set_F_y_hi,
117 std::unique_ptr<amrex::Parser> const & a_Fx_y_lo, std::unique_ptr<amrex::Parser> const & a_Fz_y_lo,
118 std::unique_ptr<amrex::Parser> const & a_Fx_y_hi, std::unique_ptr<amrex::Parser> const & a_Fz_y_hi
119#endif
120#if defined(WARPX_ZINDEX)
121 , bool set_F_z_lo, bool set_F_z_hi,
122 std::unique_ptr<amrex::Parser> const & a_Fx_z_lo, std::unique_ptr<amrex::Parser> const & a_Fy_z_lo,
123 std::unique_ptr<amrex::Parser> const & a_Fx_z_hi, std::unique_ptr<amrex::Parser> const & a_Fy_z_hi
124#endif
125 );
126
127private:
128
129 /* \brief Reads in the parsers for the tangential fields, returning whether
130 * the input parameter was specified.
131 * \param[in] pp_insulator ParmParse instance
132 * \param[out] parser the parser generated from the input
133 * \param[in] input_name the name of the input parameter
134 * \param[in] coord1 the first coordinate in the plane
135 * \param[in] coord2 the second coordinate in the plane
136 */
137 bool ReadTangentialFieldParser (amrex::ParmParse const & pp_insulator,
138 std::unique_ptr<amrex::Parser> & parser,
139 std::string const & input_name,
140 std::string const & coord1,
141 std::string const & coord2);
142
143 std::vector<std::unique_ptr<amrex::Parser>> m_insulator_area_lo;
144 std::vector<std::unique_ptr<amrex::Parser>> m_insulator_area_hi;
145
146#ifndef WARPX_DIM_1D_Z
147 bool m_set_B_x_lo = false, m_set_B_x_hi = false;
148 std::unique_ptr<amrex::Parser> m_By_x_lo, m_Bz_x_lo;
149 std::unique_ptr<amrex::Parser> m_By_x_hi, m_Bz_x_hi;
150#endif
151#if defined(WARPX_DIM_3D)
152 bool m_set_B_y_lo = false, m_set_B_y_hi = false;
153 std::unique_ptr<amrex::Parser> m_Bx_y_lo, m_Bz_y_lo;
154 std::unique_ptr<amrex::Parser> m_Bx_y_hi, m_Bz_y_hi;
155#endif
156 bool m_set_B_z_lo = false, m_set_B_z_hi = false;
157 std::unique_ptr<amrex::Parser> m_Bx_z_lo, m_By_z_lo;
158 std::unique_ptr<amrex::Parser> m_Bx_z_hi, m_By_z_hi;
159
160
161#ifndef WARPX_DIM_1D_Z
162 bool m_set_E_x_lo = false, m_set_E_x_hi = false;
163 std::unique_ptr<amrex::Parser> m_Ey_x_lo, m_Ez_x_lo;
164 std::unique_ptr<amrex::Parser> m_Ey_x_hi, m_Ez_x_hi;
165#endif
166#if defined(WARPX_DIM_3D)
167 bool m_set_E_y_lo = false, m_set_E_y_hi = false;
168 std::unique_ptr<amrex::Parser> m_Ex_y_lo, m_Ez_y_lo;
169 std::unique_ptr<amrex::Parser> m_Ex_y_hi, m_Ez_y_hi;
170#endif
171 bool m_set_E_z_lo = false, m_set_E_z_hi = false;
172 std::unique_ptr<amrex::Parser> m_Ex_z_lo, m_Ey_z_lo;
173 std::unique_ptr<amrex::Parser> m_Ex_z_hi, m_Ey_z_hi;
174
175
176};
177#endif // PEC_INSULATOR_H_
std::unique_ptr< amrex::Parser > m_Bz_x_hi
Definition PEC_Insulator.H:149
std::unique_ptr< amrex::Parser > m_Ey_z_lo
Definition PEC_Insulator.H:172
bool m_set_B_x_hi
Definition PEC_Insulator.H:147
void ApplyPEC_InsulatortoBfield(std::array< amrex::MultiFab *, 3 > Bfield, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_lo, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_hi, amrex::IntVect const &ng_fieldgather, amrex::Geometry const &geom, int lev, PatchType patch_type, amrex::Vector< amrex::IntVect > const &ref_ratios, amrex::Real time)
Apply either the PEC or insulator boundary condition on the boundary and in the guard cells....
Definition PEC_Insulator.cpp:276
bool m_set_B_z_lo
Definition PEC_Insulator.H:156
std::unique_ptr< amrex::Parser > m_By_z_hi
Definition PEC_Insulator.H:158
std::unique_ptr< amrex::Parser > m_Bz_x_lo
Definition PEC_Insulator.H:148
bool m_set_E_x_lo
Definition PEC_Insulator.H:162
std::unique_ptr< amrex::Parser > m_Ex_z_hi
Definition PEC_Insulator.H:173
bool m_set_B_z_hi
Definition PEC_Insulator.H:156
bool ReadTangentialFieldParser(amrex::ParmParse const &pp_insulator, std::unique_ptr< amrex::Parser > &parser, std::string const &input_name, std::string const &coord1, std::string const &coord2)
Definition PEC_Insulator.cpp:166
std::unique_ptr< amrex::Parser > m_Bx_z_hi
Definition PEC_Insulator.H:158
void ApplyPEC_InsulatortoEfield(std::array< amrex::MultiFab *, 3 > Efield, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_lo, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_hi, amrex::IntVect const &ng_fieldgather, amrex::Geometry const &geom, int lev, PatchType patch_type, amrex::Vector< amrex::IntVect > const &ref_ratios, amrex::Real time, bool split_pml_field=false)
Apply either the PEC or insulator boundary condition on the boundary and in the guard cells....
Definition PEC_Insulator.cpp:246
std::unique_ptr< amrex::Parser > m_Ey_z_hi
Definition PEC_Insulator.H:173
std::unique_ptr< amrex::Parser > m_Ex_z_lo
Definition PEC_Insulator.H:172
std::vector< std::unique_ptr< amrex::Parser > > m_insulator_area_hi
Definition PEC_Insulator.H:144
PEC_Insulator()
Definition PEC_Insulator.cpp:178
void ApplyPEC_InsulatortoField(std::array< amrex::MultiFab *, 3 > field, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_lo, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_hi, amrex::IntVect const &ng_fieldgather, amrex::Geometry const &geom, int lev, PatchType patch_type, amrex::Vector< amrex::IntVect > const &ref_ratios, amrex::Real time, bool split_pml_field, bool E_like, bool set_F_x_lo, bool set_F_x_hi, std::unique_ptr< amrex::Parser > const &a_Fy_x_lo, std::unique_ptr< amrex::Parser > const &a_Fz_x_lo, std::unique_ptr< amrex::Parser > const &a_Fy_x_hi, std::unique_ptr< amrex::Parser > const &a_Fz_x_hi)
The work routine applying the boundary condition.
Definition PEC_Insulator.cpp:306
std::unique_ptr< amrex::Parser > m_By_x_hi
Definition PEC_Insulator.H:149
std::unique_ptr< amrex::Parser > m_Ey_x_lo
Definition PEC_Insulator.H:163
std::vector< std::unique_ptr< amrex::Parser > > m_insulator_area_lo
Definition PEC_Insulator.H:143
bool m_set_B_x_lo
Definition PEC_Insulator.H:147
std::unique_ptr< amrex::Parser > m_By_x_lo
Definition PEC_Insulator.H:148
std::unique_ptr< amrex::Parser > m_Ez_x_hi
Definition PEC_Insulator.H:164
std::unique_ptr< amrex::Parser > m_Bx_z_lo
Definition PEC_Insulator.H:157
bool m_set_E_x_hi
Definition PEC_Insulator.H:162
std::unique_ptr< amrex::Parser > m_Ey_x_hi
Definition PEC_Insulator.H:164
bool m_set_E_z_lo
Definition PEC_Insulator.H:171
std::unique_ptr< amrex::Parser > m_Ez_x_lo
Definition PEC_Insulator.H:163
std::unique_ptr< amrex::Parser > m_By_z_lo
Definition PEC_Insulator.H:157
bool m_set_E_z_hi
Definition PEC_Insulator.H:171
PatchType
Definition Enums.H:30
IntVectND< 3 > IntVect
std::array< T, N > Array