WarpX
FiniteDifferenceSolver.H
Go to the documentation of this file.
1 /* Copyright 2020 Remi Lehe
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 
8 #ifndef WARPX_FINITE_DIFFERENCE_SOLVER_H_
9 #define WARPX_FINITE_DIFFERENCE_SOLVER_H_
10 
13 
15 #include "Evolve/WarpXDtType.H"
18 
19 #include <AMReX_GpuContainers.H>
20 #include <AMReX_REAL.H>
21 
22 #include <AMReX_BaseFwd.H>
23 
24 #include <array>
25 #include <memory>
26 
34 {
35  public:
36 
37  // Constructor
47  int fdtd_algo,
48  std::array<amrex::Real,3> cell_size,
49  short grid_type );
50 
51  void EvolveB ( std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Bfield,
52  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
53  std::unique_ptr<amrex::MultiFab> const& Gfield,
54  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
55  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& area_mod,
56  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& ECTRhofield,
57  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Venl,
58  std::array< std::unique_ptr<amrex::iMultiFab>, 3 >& flag_info_cell,
59  std::array< std::unique_ptr<amrex::LayoutData<FaceInfoBox> >, 3 >& borrowing,
60  int lev, amrex::Real dt );
61 
62  void EvolveE ( std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Efield,
63  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Bfield,
64  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jfield,
65  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
66  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
67  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& ECTRhofield,
68  std::unique_ptr<amrex::MultiFab> const& Ffield,
69  int lev, amrex::Real dt );
70 
71  void EvolveF ( std::unique_ptr<amrex::MultiFab>& Ffield,
72  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
73  std::unique_ptr<amrex::MultiFab> const& rhofield,
74  int rhocomp,
75  amrex::Real dt );
76 
77  void EvolveG (std::unique_ptr<amrex::MultiFab>& Gfield,
78  std::array<std::unique_ptr<amrex::MultiFab>,3> const& Bfield,
79  amrex::Real dt);
80 
81  void EvolveECTRho ( std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
82  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
83  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
84  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& ECTRhofield,
85  int lev );
86 
88  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Efield,
89  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Bfield,
90  amrex::Box domain_box,
91  amrex::Real dt,
92  amrex::Vector<int> field_boundary_lo,
93  amrex::Vector<int> field_boundary_hi);
94 
95  void ComputeDivE ( const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
96  amrex::MultiFab& divE );
97 
110  void MacroscopicEvolveE ( std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
111  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
112  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jfield,
113  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
114  amrex::Real dt,
115  std::unique_ptr<MacroscopicProperties> const& macroscopic_properties);
116 
117  void EvolveBPML ( std::array< amrex::MultiFab*, 3 > Bfield,
118  std::array< amrex::MultiFab*, 3 > Efield,
119  amrex::Real dt,
120  bool dive_cleaning);
121 
122  void EvolveEPML ( std::array< amrex::MultiFab*, 3 > Efield,
123  std::array< amrex::MultiFab*, 3 > Bfield,
124  std::array< amrex::MultiFab*, 3 > Jfield,
125  std::array< amrex::MultiFab*, 3 > edge_lengths,
126  amrex::MultiFab* Ffield,
127  MultiSigmaBox const& sigba,
128  amrex::Real dt, bool pml_has_particles );
129 
130  void EvolveFPML ( amrex::MultiFab* Ffield,
131  std::array< amrex::MultiFab*, 3 > Efield,
132  amrex::Real dt );
133 
151  void HybridPICSolveE ( std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
152  std::array< std::unique_ptr<amrex::MultiFab>, 3>& Jfield,
153  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jifield,
154  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jextfield,
155  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
156  std::unique_ptr<amrex::MultiFab> const& rhofield,
157  std::unique_ptr<amrex::MultiFab> const& Pefield,
158  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
159  int lev, HybridPICModel const* hybrid_model,
160  bool include_resistivity_term );
161 
172  std::array< std::unique_ptr<amrex::MultiFab>, 3>& Jfield,
173  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
174  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
175  int lev );
176 
177  private:
178 
180  short m_grid_type;
181 
182 #ifdef WARPX_DIM_RZ
183  amrex::Real m_dr, m_rmin;
184  int m_nmodes;
185  // host-only
187  // device copy after init
190 #else
191  // host-only
192  amrex::Vector<amrex::Real> m_h_stencil_coefs_x, m_h_stencil_coefs_y, m_h_stencil_coefs_z;
193  // device copy after init
194  amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_x;
195  amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_y;
197 #endif
198 
199  public:
200  // The member functions below contain extended __device__ lambda.
201  // In order to compile with nvcc, they need to be public.
202 
203 #ifdef WARPX_DIM_RZ
204  template< typename T_Algo >
205  void EvolveBCylindrical (
206  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Bfield,
207  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
208  int lev,
209  amrex::Real dt );
210 
211  template< typename T_Algo >
212  void EvolveECylindrical (
213  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Efield,
214  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Bfield,
215  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jfield,
216  std::unique_ptr<amrex::MultiFab> const& Ffield,
217  int lev,
218  amrex::Real dt );
219 
220  template< typename T_Algo >
221  void EvolveFCylindrical (
222  std::unique_ptr<amrex::MultiFab>& Ffield,
223  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
224  std::unique_ptr<amrex::MultiFab> const& rhofield,
225  int rhocomp,
226  amrex::Real dt );
227 
228  template< typename T_Algo >
230  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
231  amrex::MultiFab& divE );
232 
233  template<typename T_Algo>
235  std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
236  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Jfield,
237  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Jifield,
238  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jextfield,
239  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
240  std::unique_ptr<amrex::MultiFab> const& rhofield,
241  std::unique_ptr<amrex::MultiFab> const& Pefield,
242  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
243  int lev, HybridPICModel const* hybrid_model,
244  bool include_resistivity_term );
245 
246  template<typename T_Algo>
248  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Jfield,
249  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Bfield,
250  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
251  int lev
252  );
253 
254 #else
255  template< typename T_Algo >
256  void EvolveBCartesian (
257  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Bfield,
258  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
259  std::unique_ptr<amrex::MultiFab> const& Gfield,
260  int lev, amrex::Real dt );
261 
262  template< typename T_Algo >
263  void EvolveECartesian (
264  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Efield,
265  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Bfield,
266  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jfield,
267  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
268  std::unique_ptr<amrex::MultiFab> const& Ffield,
269  int lev, amrex::Real dt );
270 
271  template< typename T_Algo >
272  void EvolveFCartesian (
273  std::unique_ptr<amrex::MultiFab>& Ffield,
274  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
275  std::unique_ptr<amrex::MultiFab> const& rhofield,
276  int rhocomp,
277  amrex::Real dt );
278 
279  template< typename T_Algo >
280  void EvolveGCartesian (
281  std::unique_ptr<amrex::MultiFab>& Gfield,
282  std::array<std::unique_ptr<amrex::MultiFab>,3> const& Bfield,
283  amrex::Real dt);
284 
285  void EvolveRhoCartesianECT (
286  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
287  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
288  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
289  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& ECTRhofield, int lev);
290 
291  void EvolveBCartesianECT (
292  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Bfield,
293  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
294  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& area_mod,
295  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& ECTRhofield,
296  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Venl,
297  std::array< std::unique_ptr<amrex::iMultiFab>, 3 >& flag_info_cell,
298  std::array< std::unique_ptr<amrex::LayoutData<FaceInfoBox> >, 3 >& borrowing,
299  int lev, amrex::Real dt
300  );
301 
302  template< typename T_Algo >
303  void ComputeDivECartesian (
304  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
305  amrex::MultiFab& divE );
306 
307  template< typename T_Algo, typename T_MacroAlgo >
308  void MacroscopicEvolveECartesian (
309  std::array< std::unique_ptr< amrex::MultiFab>, 3>& Efield,
310  std::array< std::unique_ptr< amrex::MultiFab>, 3> const& Bfield,
311  std::array< std::unique_ptr< amrex::MultiFab>, 3> const& Jfield,
312  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
313  amrex::Real dt,
314  std::unique_ptr<MacroscopicProperties> const& macroscopic_properties);
315 
316  template< typename T_Algo >
317  void EvolveBPMLCartesian (
318  std::array< amrex::MultiFab*, 3 > Bfield,
319  std::array< amrex::MultiFab*, 3 > Efield,
320  amrex::Real dt,
321  bool dive_cleaning);
322 
323  template< typename T_Algo >
324  void EvolveEPMLCartesian (
325  std::array< amrex::MultiFab*, 3 > Efield,
326  std::array< amrex::MultiFab*, 3 > Bfield,
327  std::array< amrex::MultiFab*, 3 > Jfield,
328  std::array< amrex::MultiFab*, 3 > edge_lengths,
329  amrex::MultiFab* Ffield,
330  MultiSigmaBox const& sigba,
331  amrex::Real dt, bool pml_has_particles );
332 
333  template< typename T_Algo >
334  void EvolveFPMLCartesian ( amrex::MultiFab* Ffield,
335  std::array< amrex::MultiFab*, 3 > Efield,
336  amrex::Real dt );
337 
338  template<typename T_Algo>
339  void HybridPICSolveECartesian (
340  std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
341  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Jfield,
342  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Jifield,
343  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Jextfield,
344  std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
345  std::unique_ptr<amrex::MultiFab> const& rhofield,
346  std::unique_ptr<amrex::MultiFab> const& Pefield,
347  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
348  int lev, HybridPICModel const* hybrid_model,
349  bool include_resistivity_term );
350 
351  template<typename T_Algo>
352  void CalculateCurrentAmpereCartesian (
353  std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Jfield,
354  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Bfield,
355  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
356  int lev
357  );
358 #endif
359 
360 };
361 
362 #endif // WARPX_FINITE_DIFFERENCE_SOLVER_H_
Top-level class for the electromagnetic finite-difference solver.
Definition: FiniteDifferenceSolver.H:34
int m_nmodes
Definition: FiniteDifferenceSolver.H:184
void HybridPICSolveECylindrical(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jifield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jextfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::unique_ptr< amrex::MultiFab > const &rhofield, std::unique_ptr< amrex::MultiFab > const &Pefield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, int lev, HybridPICModel const *hybrid_model, bool include_resistivity_term)
Definition: HybridPICSolveE.cpp:406
void MacroscopicEvolveE(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, amrex::Real dt, std::unique_ptr< MacroscopicProperties > const &macroscopic_properties)
Macroscopic E-update for non-vacuum medium using the user-selected finite-difference algorithm and ma...
Definition: MacroscopicEvolveE.cpp:37
void CalculateCurrentAmpere(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Jfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, int lev)
Calculation of total current using Ampere's law (without displacement current): J = (curl x B) / mu0.
Definition: HybridPICSolveE.cpp:25
void EvolveG(std::unique_ptr< amrex::MultiFab > &Gfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, amrex::Real dt)
Definition: EvolveG.cpp:40
void EvolveBPML(std::array< amrex::MultiFab *, 3 > Bfield, std::array< amrex::MultiFab *, 3 > Efield, amrex::Real dt, bool dive_cleaning)
Update the B field, over one timestep.
Definition: EvolveBPML.cpp:43
void EvolveFCylindrical(std::unique_ptr< amrex::MultiFab > &Ffield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Efield, std::unique_ptr< amrex::MultiFab > const &rhofield, int rhocomp, amrex::Real dt)
Definition: EvolveF.cpp:137
void HybridPICSolveE(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Jfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jifield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jextfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::unique_ptr< amrex::MultiFab > const &rhofield, std::unique_ptr< amrex::MultiFab > const &Pefield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, int lev, HybridPICModel const *hybrid_model, bool include_resistivity_term)
E-update in the hybrid PIC algorithm as described in Winske et al. (2003) Eq. 10. https://link....
Definition: HybridPICSolveE.cpp:368
void EvolveF(std::unique_ptr< amrex::MultiFab > &Ffield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Efield, std::unique_ptr< amrex::MultiFab > const &rhofield, int rhocomp, amrex::Real dt)
Update the F field, over one timestep.
Definition: EvolveF.cpp:46
void ComputeDivECylindrical(const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, amrex::MultiFab &divE)
Definition: ComputeDivE.cpp:125
amrex::Gpu::DeviceVector< amrex::Real > m_stencil_coefs_z
Definition: FiniteDifferenceSolver.H:189
void ApplySilverMuellerBoundary(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Bfield, amrex::Box domain_box, amrex::Real dt, amrex::Vector< int > field_boundary_lo, amrex::Vector< int > field_boundary_hi)
Update the B field at the boundary, using the Silver-Mueller condition.
Definition: ApplySilverMuellerBoundary.cpp:37
int m_fdtd_algo
Definition: FiniteDifferenceSolver.H:179
void EvolveE(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &face_areas, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &ECTRhofield, std::unique_ptr< amrex::MultiFab > const &Ffield, int lev, amrex::Real dt)
Update the E field, over one timestep.
Definition: EvolveE.cpp:48
void ComputeDivE(const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, amrex::MultiFab &divE)
Update the F field, over one timestep.
Definition: ComputeDivE.cpp:42
void EvolveECTRho(std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &face_areas, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &ECTRhofield, int lev)
Update the B field, over one timestep.
Definition: EvolveECTRho.cpp:49
void EvolveFPML(amrex::MultiFab *Ffield, std::array< amrex::MultiFab *, 3 > Efield, amrex::Real dt)
Update the E field, over one timestep.
Definition: EvolveFPML.cpp:42
void EvolveECylindrical(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Jfield, std::unique_ptr< amrex::MultiFab > const &Ffield, int lev, amrex::Real dt)
Definition: EvolveE.cpp:234
void EvolveEPML(std::array< amrex::MultiFab *, 3 > Efield, std::array< amrex::MultiFab *, 3 > Bfield, std::array< amrex::MultiFab *, 3 > Jfield, std::array< amrex::MultiFab *, 3 > edge_lengths, amrex::MultiFab *Ffield, MultiSigmaBox const &sigba, amrex::Real dt, bool pml_has_particles)
Update the E field, over one timestep.
Definition: EvolveEPML.cpp:46
amrex::Vector< amrex::Real > m_h_stencil_coefs_z
Definition: FiniteDifferenceSolver.H:186
short m_grid_type
Definition: FiniteDifferenceSolver.H:180
amrex::Gpu::DeviceVector< amrex::Real > m_stencil_coefs_r
Definition: FiniteDifferenceSolver.H:188
amrex::Real m_dr
Definition: FiniteDifferenceSolver.H:183
void EvolveB(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Efield, std::unique_ptr< amrex::MultiFab > const &Gfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &face_areas, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &area_mod, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &ECTRhofield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Venl, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > &flag_info_cell, std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > &borrowing, int lev, amrex::Real dt)
Update the B field, over one timestep.
Definition: EvolveB.cpp:50
amrex::Vector< amrex::Real > m_h_stencil_coefs_r
Definition: FiniteDifferenceSolver.H:186
void CalculateCurrentAmpereCylindrical(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Jfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, int lev)
Definition: HybridPICSolveE.cpp:60
FiniteDifferenceSolver(int fdtd_algo, std::array< amrex::Real, 3 > cell_size, short grid_type)
Initialize the finite-difference Maxwell solver (for a given refinement level)
Definition: FiniteDifferenceSolver.cpp:30
amrex::Real m_rmin
Definition: FiniteDifferenceSolver.H:183
void EvolveBCylindrical(std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Bfield, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &Efield, int lev, amrex::Real dt)
Definition: EvolveB.cpp:372
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid...
Definition: HybridPICModel.H:30
Definition: PML.H:121
cell_size
Definition: compute_domain.py:37
float dt
Definition: stencil.py:442