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);
86 void ZeroParallelFieldInConductor (std::array<amrex::MultiFab*, 3> field,
87 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_lo,
88 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_hi,
89 amrex::IntVect const & ng_fieldgather, amrex::Geometry const & geom,
90 int lev, PatchType patch_type, amrex::Vector<amrex::IntVect> const & ref_ratios);
91
106 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_lo,
107 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_hi,
108 amrex::Geometry const & geom, int lev, PatchType patch_type,
109 amrex::Vector<amrex::IntVect> const & ref_ratios);
110
139 void
140 ApplyPEC_InsulatortoField (std::array<amrex::MultiFab*, 3> field,
141 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_lo,
142 amrex::Array<FieldBoundaryType,AMREX_SPACEDIM> const & field_boundary_hi,
143 amrex::IntVect const & ng_fieldgather,
144 amrex::Geometry const & geom,
145 int lev,
146 PatchType patch_type,
147 amrex::Vector<amrex::IntVect> const & ref_ratios,
148 amrex::Real time,
149 bool split_pml_field,
150 bool E_like,
151 bool only_zero_parallel_field,
152 amrex::Vector<int> const & set_Fx_lo,
153 amrex::Vector<int> const & set_Fy_lo,
154 amrex::Vector<int> const & set_Fz_lo,
155 amrex::Vector<int> const & set_Fx_hi,
156 amrex::Vector<int> const & set_Fy_hi,
157 amrex::Vector<int> const & set_Fz_hi,
158 amrex::Vector<amrex::ParserExecutor<3>> const & Fx_parsers_lo,
159 amrex::Vector<amrex::ParserExecutor<3>> const & Fy_parsers_lo,
160 amrex::Vector<amrex::ParserExecutor<3>> const & Fz_parsers_lo,
161 amrex::Vector<amrex::ParserExecutor<3>> const & Fx_parsers_hi,
162 amrex::Vector<amrex::ParserExecutor<3>> const & Fy_parsers_hi,
163 amrex::Vector<amrex::ParserExecutor<3>> const & Fz_parsers_hi);
164
165 /* \brief Returns whether any E field is set on a boundary
166 * \param[in] idim dimension to check
167 * \param[in] iside side to check, 0 is lower, 1 is upper
168 * \return whether the E field is set on the boundary
169 */
170 int IsESet(int idim, int iside) const { return ( iside == 1 ? m_set_E_hi[idim] : m_set_E_lo[idim] ); }
171
172 /* \brief Returns whether any B field is set on a boundary
173 * \param[in] idim dimension to check
174 * \param[in] iside side to check, 0 is lower, 1 is upper
175 * \return whether the B field is set on the boundary
176 */
177 int IsBSet(int idim, int iside) const { return ( iside == 1 ? m_set_B_hi[idim] : m_set_B_lo[idim] ); }
178
179 /* \brief Returns whether the E field is set on a boundary
180 * \param[in] idim dimension to check
181 * \param[in] iside side to check, 0 is lower, 1 is upper
182 * \param[in] ifield which field to check, 0, 1, or 2
183 * \return whether the E field is set on the boundary
184 */
185 int IsESet(int idim, int iside, int ifield) const;
186
187 /* \brief Returns whether the B field is set on a boundary
188 * \param[in] idim dimension to check
189 * \param[in] iside side to check, 0 is lower, 1 is upper
190 * \param[in] ifield which field to check, 0, 1, or 2
191 * \return whether the B field is set on the boundary
192 */
193 int IsBSet(int idim, int iside, int ifield) const;
194
195private:
196
197
198 // Parsers specifying the region of each boundary that is insulator
201
204
205 // Flags whether any B fields are specified on each boundary
208
209 // Parsers for the two B fields tangential to each boundary
214
215 // Flags whether any E fields are specified on each boundary
218
219 // Parsers for the two B fields tangential to each boundary
224
225 // For each B field, the flags specifying whether it is set on each boundary
232
233 // For each B field, the parsers for the field value on each boundary
240
241 // For each E field, the flags specifying whether it is set on each boundary
248
249 // For each E field, the parsers for the field value on each boundary
256
257};
258#endif // PEC_INSULATOR_H_
amrex::Vector< int > m_set_Ey_hi
Definition PEC_Insulator.H:246
amrex::Vector< amrex::ParserExecutor< 3 > > m_Bz_parsers_hi
Definition PEC_Insulator.H:239
amrex::Vector< amrex::ParserExecutor< 3 > > m_Bz_parsers_lo
Definition PEC_Insulator.H:236
amrex::Vector< std::unique_ptr< amrex::Parser > > m_insulator_area_lo
Definition PEC_Insulator.H:199
amrex::Vector< int > m_set_Bz_lo
Definition PEC_Insulator.H:228
int IsBSet(int idim, int iside) const
Definition PEC_Insulator.H:177
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:507
int IsESet(int idim, int iside) const
Definition PEC_Insulator.H:170
amrex::Vector< amrex::ParserExecutor< 3 > > m_Ex_parsers_hi
Definition PEC_Insulator.H:253
amrex::Vector< int > m_set_E_lo
Definition PEC_Insulator.H:216
amrex::Vector< int > m_set_Bz_hi
Definition PEC_Insulator.H:231
amrex::Vector< int > m_set_Bx_lo
Definition PEC_Insulator.H:226
amrex::Vector< amrex::ParserExecutor< 3 > > m_Bx_parsers_hi
Definition PEC_Insulator.H:237
amrex::Vector< amrex::ParserExecutor< 3 > > m_By_parsers_lo
Definition PEC_Insulator.H:235
amrex::Vector< amrex::ParserExecutor< 3 > > m_By_parsers_hi
Definition PEC_Insulator.H:238
amrex::Vector< int > m_set_Ez_hi
Definition PEC_Insulator.H:247
amrex::Vector< int > m_set_Ez_lo
Definition PEC_Insulator.H:244
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_E1_lo
Definition PEC_Insulator.H:220
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:486
amrex::Vector< std::unique_ptr< amrex::Parser > > m_insulator_area_hi
Definition PEC_Insulator.H:200
amrex::Vector< int > m_set_Ex_lo
Definition PEC_Insulator.H:242
PEC_Insulator()
Definition PEC_Insulator.cpp:357
amrex::Vector< int > m_set_By_hi
Definition PEC_Insulator.H:230
amrex::Vector< amrex::ParserExecutor< 3 > > m_Ey_parsers_lo
Definition PEC_Insulator.H:251
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_E1_hi
Definition PEC_Insulator.H:222
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_B2_lo
Definition PEC_Insulator.H:211
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_B1_lo
Definition PEC_Insulator.H:210
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 only_zero_parallel_field, amrex::Vector< int > const &set_Fx_lo, amrex::Vector< int > const &set_Fy_lo, amrex::Vector< int > const &set_Fz_lo, amrex::Vector< int > const &set_Fx_hi, amrex::Vector< int > const &set_Fy_hi, amrex::Vector< int > const &set_Fz_hi, amrex::Vector< amrex::ParserExecutor< 3 > > const &Fx_parsers_lo, amrex::Vector< amrex::ParserExecutor< 3 > > const &Fy_parsers_lo, amrex::Vector< amrex::ParserExecutor< 3 > > const &Fz_parsers_lo, amrex::Vector< amrex::ParserExecutor< 3 > > const &Fx_parsers_hi, amrex::Vector< amrex::ParserExecutor< 3 > > const &Fy_parsers_hi, amrex::Vector< amrex::ParserExecutor< 3 > > const &Fz_parsers_hi)
The work routine applying the boundary condition.
Definition PEC_Insulator.cpp:553
amrex::Vector< amrex::ParserExecutor< 2 > > m_area_parsers_hi
Definition PEC_Insulator.H:203
amrex::Vector< amrex::ParserExecutor< 3 > > m_Ex_parsers_lo
Definition PEC_Insulator.H:250
amrex::Vector< int > m_set_B_lo
Definition PEC_Insulator.H:206
amrex::Vector< int > m_set_Ex_hi
Definition PEC_Insulator.H:245
amrex::Vector< int > m_set_E_hi
Definition PEC_Insulator.H:217
amrex::Vector< amrex::ParserExecutor< 3 > > m_Ez_parsers_hi
Definition PEC_Insulator.H:255
amrex::Vector< amrex::ParserExecutor< 3 > > m_Ey_parsers_hi
Definition PEC_Insulator.H:254
amrex::Vector< int > m_set_Ey_lo
Definition PEC_Insulator.H:243
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_E2_hi
Definition PEC_Insulator.H:223
void ZeroParallelScalarInConductor(amrex::MultiFab *scalar, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_lo, amrex::Array< FieldBoundaryType, 3 > const &field_boundary_hi, amrex::Geometry const &geom, int lev, PatchType patch_type, amrex::Vector< amrex::IntVect > const &ref_ratios)
Zeros the scalar on the boundary When the E field is being set, the scalar is zeroed everywhere,...
Definition PEC_Insulator.cpp:749
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_B2_hi
Definition PEC_Insulator.H:213
amrex::Vector< amrex::ParserExecutor< 2 > > m_area_parsers_lo
Definition PEC_Insulator.H:202
amrex::Vector< int > m_set_Bx_hi
Definition PEC_Insulator.H:229
amrex::Vector< amrex::ParserExecutor< 3 > > m_Bx_parsers_lo
Definition PEC_Insulator.H:234
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_E2_lo
Definition PEC_Insulator.H:221
amrex::Vector< int > m_set_B_hi
Definition PEC_Insulator.H:207
amrex::Vector< int > m_set_By_lo
Definition PEC_Insulator.H:227
void ZeroParallelFieldInConductor(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)
Zeros the parallel fields on the boundary When the E field is being set, the field is zeroed everywhe...
Definition PEC_Insulator.cpp:528
amrex::Vector< std::unique_ptr< amrex::Parser > > m_parsers_B1_hi
Definition PEC_Insulator.H:212
amrex::Vector< amrex::ParserExecutor< 3 > > m_Ez_parsers_lo
Definition PEC_Insulator.H:252
amrex_real Real
std::array< T, N > Array
PatchType
Definition Enums.H:30
IntVectND< 3 > IntVect