WarpX
Loading...
Searching...
No Matches
FiniteDifferenceSolver.H
Go to the documentation of this file.
1/* Copyright 2020-2024 The WarpX Community
2 *
3 * This file is part of WarpX.
4 *
5 * Authors: Remi Lehe (LBNL)
6 * S. Eric Clark (Helion Energy)
7 *
8 * License: BSD-3-Clause-LBNL
9 */
10
11#ifndef WARPX_FINITE_DIFFERENCE_SOLVER_H_
12#define WARPX_FINITE_DIFFERENCE_SOLVER_H_
13
17
21
22#include <ablastr/utils/Enums.H>
24
25#include <AMReX_GpuContainers.H>
26#include <AMReX_REAL.H>
27
28#include <AMReX_BaseFwd.H>
29
30#include <array>
31#include <memory>
32
40{
41 public:
42
43 // Constructor
54 std::array<amrex::Real,3> cell_size,
56
58 int lev,
59 PatchType patch_type,
60 std::array< std::unique_ptr<amrex::iMultiFab>, 3 >& flag_info_cell,
61 std::array< std::unique_ptr<amrex::LayoutData<FaceInfoBox> >, 3 >& borrowing,
62 amrex::Real dt );
63
65 int lev,
66 PatchType patch_type,
67 ablastr::fields::VectorField const& Efield,
68 std::array< std::unique_ptr<amrex::iMultiFab>,3 > const& eb_update_E,
69 amrex::Real dt );
70
71 void EvolveF ( amrex::MultiFab* Ffield,
72 ablastr::fields::VectorField const& Efield,
73 amrex::MultiFab* rhofield,
74 int rho_comp,
75 amrex::Real dt );
76
77 void EvolveG (amrex::MultiFab* Gfield,
78 ablastr::fields::VectorField const& Bfield,
79 amrex::Real dt);
80
81 void EvolveECTRho ( ablastr::fields::VectorField const& Efield,
82 ablastr::fields::VectorField const& edge_lengths,
83 ablastr::fields::VectorField const& face_areas,
84 ablastr::fields::VectorField const& ECTRhofield,
85 int lev );
86
90 amrex::Box domain_box,
91 amrex::Real dt,
94
95 void ComputeDivE (
96 ablastr::fields::VectorField const & Efield,
97 amrex::MultiFab& divE
98 );
99
113 void MacroscopicEvolveE (
114 MacroscopicSolverAlgo macroscopic_solver_algo,
115 ablastr::fields::VectorField const& Efield,
116 ablastr::fields::VectorField const& Bfield,
117 ablastr::fields::VectorField const& Jfield,
118 std::array< std::unique_ptr<amrex::iMultiFab>,3 > const& eb_update_E,
119 amrex::Real dt,
120 std::unique_ptr<MacroscopicProperties> const& macroscopic_properties);
121
122 void EvolveBPML (
124 PatchType patch_type,
125 int level,
126 amrex::Real dt,
127 bool dive_cleaning
128 );
129
130 void EvolveEPML (
132 PatchType patch_type,
133 int level,
134 MultiSigmaBox const& sigba,
135 amrex::Real dt,
136 bool pml_has_particles
137 );
138
139 void EvolveFPML ( amrex::MultiFab* Ffield,
141 amrex::Real dt );
142
161 ablastr::fields::VectorField const& Jifield,
162 ablastr::fields::VectorField const& Bfield,
163 amrex::MultiFab const& rhofield,
164 amrex::MultiFab const& Pefield,
165 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_E,
166 int lev, HybridPICModel const* hybrid_model,
167 bool solve_for_Faraday );
168
180 ablastr::fields::VectorField const& Bfield,
181 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_E,
182 int lev );
183
193 void ComputeCurlA (
195 ablastr::fields::VectorField const& Afield,
196 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_B,
197 int lev );
198
207 void ComputeGradient (
209 ablastr::fields::ScalarField const& in_field,
210 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
211 int lev );
212
221 void ComputeLaplacian (
223 ablastr::fields::ScalarField const& in_field,
224 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
225 int lev );
226
237 ablastr::fields::VectorField const& in_field,
238 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
239 int lev );
240
241 private:
242
245
246#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER)
249 // host-only
251 // device copy after init
254#elif defined(WARPX_DIM_RSPHERE)
256 // host-only
258 // device copy after init
260#else
261 // host-only
262 amrex::Vector<amrex::Real> m_h_stencil_coefs_x, m_h_stencil_coefs_y, m_h_stencil_coefs_z;
263 // device copy after init
267#endif
268
269 public:
270 // The member functions below contain extended __device__ lambda.
271 // In order to compile with nvcc, they need to be public.
272
273#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER)
274 template< typename T_Algo >
275 void EvolveBCylindrical (
276 ablastr::fields::VectorField const& Bfield,
277 ablastr::fields::VectorField const& Efield,
278 int lev,
279 amrex::Real dt );
280
281 template< typename T_Algo >
282 void EvolveECylindrical (
283 ablastr::fields::VectorField const& Efield,
284 ablastr::fields::VectorField const& Bfield,
285 ablastr::fields::VectorField const& Jfield,
286 std::array< std::unique_ptr<amrex::iMultiFab>,3 > const& eb_update_E,
287 amrex::MultiFab const* Ffield,
288 int lev,
289 amrex::Real dt );
290
291 template< typename T_Algo >
292 void EvolveFCylindrical (
293 amrex::MultiFab* Ffield,
294 ablastr::fields::VectorField const & Efield,
295 amrex::MultiFab* rhofield,
296 int rho_comp,
297 amrex::Real dt );
298
299 template< typename T_Algo >
301 ablastr::fields::VectorField const & Efield,
302 amrex::MultiFab& divE
303 );
304
305 template<typename T_Algo>
307 ablastr::fields::VectorField const& Efield,
308 ablastr::fields::VectorField const& Jfield,
309 ablastr::fields::VectorField const& Jifield,
310 ablastr::fields::VectorField const& Bfield,
311 amrex::MultiFab const& rhofield,
312 amrex::MultiFab const& Pefield,
313 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_E,
314 int lev, HybridPICModel const* hybrid_model,
315 bool solve_for_Faraday );
316
317 template<typename T_Algo>
320 ablastr::fields::VectorField const& Bfield,
321 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_E,
322 int lev
323 );
324
325 template<typename T_Algo>
328 ablastr::fields::VectorField const& Afield,
329 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_B,
330 int lev
331 );
332
333 template<typename T_Algo>
336 ablastr::fields::ScalarField const& in_field,
337 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
338 int lev
339 );
340
341 template<typename T_Algo>
344 ablastr::fields::ScalarField const& in_field,
345 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
346 int lev
347 );
348
349 template<typename T_Algo>
352 ablastr::fields::VectorField const& in_field,
353 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
354 int lev
355 );
356
357#elif defined(WARPX_DIM_RSPHERE)
358 template< typename T_Algo >
359 void EvolveBSpherical (
360 ablastr::fields::VectorField const& Bfield,
361 ablastr::fields::VectorField const& Efield,
362 int lev,
363 amrex::Real dt );
364
365 template< typename T_Algo >
366 void EvolveESpherical (
367 ablastr::fields::VectorField const& Efield,
368 ablastr::fields::VectorField const& Bfield,
369 ablastr::fields::VectorField const& Jfield,
370 amrex::MultiFab const* Ffield,
371 int lev,
372 amrex::Real dt );
373
374 template< typename T_Algo >
375 void EvolveFSpherical (
376 amrex::MultiFab* Ffield,
377 ablastr::fields::VectorField const & Efield,
378 amrex::MultiFab* rhofield,
379 int rho_comp,
380 amrex::Real dt );
381
382 template< typename T_Algo >
383 void ComputeDivESpherical (
384 ablastr::fields::VectorField const & Efield,
385 amrex::MultiFab& divE
386 );
387
388 template<typename T_Algo>
389 void HybridPICSolveESpherical (
390 ablastr::fields::VectorField const& Efield,
391 ablastr::fields::VectorField const& Jfield,
392 ablastr::fields::VectorField const& Jifield,
393 ablastr::fields::VectorField const& Bfield,
394 amrex::MultiFab const& rhofield,
395 amrex::MultiFab const& Pefield,
396 int lev, HybridPICModel const* hybrid_model,
397 bool solve_for_Faraday );
398
399 template<typename T_Algo>
400 void CalculateCurrentAmpereSpherical (
402 ablastr::fields::VectorField const& Bfield,
403 int lev
404 );
405
406 template<typename T_Algo>
407 void ComputeCurlASpherical (
409 ablastr::fields::VectorField const& Afield,
410 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_B,
411 int lev
412 );
413
414 template<typename T_Algo>
415 void ComputeGradientSpherical (
417 ablastr::fields::ScalarField const& in_field,
418 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
419 int lev
420 );
421
422 template<typename T_Algo>
423 void ComputeLaplacianSpherical (
425 ablastr::fields::ScalarField const& in_field,
426 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
427 int lev
428 );
429
430 template<typename T_Algo>
431 void ComputeVectorLaplacianSpherical (
433 ablastr::fields::VectorField const& in_field,
434 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
435 int lev
436 );
437
438#else
439 template< typename T_Algo >
440 void EvolveBCartesian (
441 ablastr::fields::VectorField const& Bfield,
442 ablastr::fields::VectorField const& Efield,
443 amrex::MultiFab const * Gfield,
444 int lev, amrex::Real dt );
445
446 template< typename T_Algo >
447 void EvolveECartesian (
448 ablastr::fields::VectorField const& Efield,
449 ablastr::fields::VectorField const& Bfield,
450 ablastr::fields::VectorField const& Jfield,
451 std::array< std::unique_ptr<amrex::iMultiFab>,3 > const& eb_update_E,
452 amrex::MultiFab const* Ffield,
453 int lev, amrex::Real dt );
454
455 template< typename T_Algo >
456 void EvolveFCartesian (
457 amrex::MultiFab* Ffield,
459 amrex::MultiFab* rhofield,
460 int rho_comp,
461 amrex::Real dt );
462
463 template< typename T_Algo >
464 void EvolveGCartesian (
465 amrex::MultiFab* Gfield,
466 ablastr::fields::VectorField const& Bfield,
467 amrex::Real dt);
468
469 void EvolveRhoCartesianECT (
470 ablastr::fields::VectorField const& Efield,
471 ablastr::fields::VectorField const& edge_lengths,
472 ablastr::fields::VectorField const& face_areas,
473 ablastr::fields::VectorField const& ECTRhofield, int lev);
474
475 void EvolveBCartesianECT (
476 ablastr::fields::VectorField const& Bfield,
477 ablastr::fields::VectorField const& face_areas,
478 ablastr::fields::VectorField const& area_mod,
479 ablastr::fields::VectorField const& ECTRhofield,
481 std::array< std::unique_ptr<amrex::iMultiFab>, 3 >& flag_info_cell,
482 std::array< std::unique_ptr<amrex::LayoutData<FaceInfoBox> >, 3 >& borrowing,
483 int lev, amrex::Real dt
484 );
485
486 template< typename T_Algo >
487 void ComputeDivECartesian (
488 ablastr::fields::VectorField const & Efield,
489 amrex::MultiFab& divE );
490
491 template< typename T_Algo, typename T_MacroAlgo >
492 void MacroscopicEvolveECartesian (
493 ablastr::fields::VectorField const& Efield,
494 ablastr::fields::VectorField const& Bfield,
495 ablastr::fields::VectorField const& Jfield,
496 std::array< std::unique_ptr<amrex::iMultiFab>,3 > const& eb_update_E,
497 amrex::Real dt,
498 std::unique_ptr<MacroscopicProperties> const& macroscopic_properties);
499
500 template< typename T_Algo >
501 void EvolveBPMLCartesian (
502 std::array< amrex::MultiFab*, 3 > Bfield,
504 amrex::Real dt,
505 bool dive_cleaning);
506
507 template< typename T_Algo >
508 void EvolveEPMLCartesian (
510 std::array< amrex::MultiFab*, 3 > Bfield,
511 std::array< amrex::MultiFab*, 3 > Jfield,
512 std::array< amrex::MultiFab*, 3 > edge_lengths,
513 amrex::MultiFab* Ffield,
514 MultiSigmaBox const& sigba,
515 amrex::Real dt, bool pml_has_particles );
516
517 template< typename T_Algo >
518 void EvolveFPMLCartesian ( amrex::MultiFab* Ffield,
520 amrex::Real dt );
521
522 template<typename T_Algo>
523 void HybridPICSolveECartesian (
524 ablastr::fields::VectorField const& Efield,
525 ablastr::fields::VectorField const& Jfield,
526 ablastr::fields::VectorField const& Jifield,
527 ablastr::fields::VectorField const& Bfield,
528 amrex::MultiFab const& rhofield,
529 amrex::MultiFab const& Pefield,
530 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_E,
531 int lev, HybridPICModel const* hybrid_model,
532 bool solve_for_Faraday );
533
534 template<typename T_Algo>
535 void CalculateCurrentAmpereCartesian (
537 ablastr::fields::VectorField const& Bfield,
538 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_E,
539 int lev
540 );
541
542 template<typename T_Algo>
543 void ComputeCurlACartesian (
545 ablastr::fields::VectorField const& Afield,
546 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update_B,
547 int lev
548 );
549
550 template<typename T_Algo>
551 void ComputeGradientCartesian (
553 ablastr::fields::ScalarField const& in_field,
554 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
555 int lev
556 );
557
558 template<typename T_Algo>
559 void ComputeLaplacianCartesian (
561 ablastr::fields::ScalarField const& in_field,
562 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
563 int lev
564 );
565
566 template<typename T_Algo>
567 void ComputeVectorLaplacianCartesian (
569 ablastr::fields::VectorField const& in_field,
570 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update,
571 int lev
572 );
573#endif
574
575};
576
577#endif // WARPX_FINITE_DIFFERENCE_SOLVER_H_
ElectromagneticSolverAlgo
Definition WarpXAlgorithmSelection.H:58
MacroscopicSolverAlgo
struct to select algorithm for macroscopic Maxwell solver LaxWendroff (semi-implicit) represents sigm...
Definition WarpXAlgorithmSelection.H:48
void ComputeDivE(ablastr::fields::VectorField const &Efield, amrex::MultiFab &divE)
Update the F field, over one timestep.
Definition ComputeDivE.cpp:46
int m_nmodes
Definition FiniteDifferenceSolver.H:248
void ComputeCurlA(ablastr::fields::VectorField &Bfield, ablastr::fields::VectorField const &Afield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_B, int lev)
Calculation of B field from the vector potential A B = (curl x A) / mu0.
Definition ComputeCurlA.cpp:27
void ComputeGradient(ablastr::fields::VectorField &out_field, ablastr::fields::ScalarField const &in_field, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update, int lev)
Calculation of the gradient of the given scalar field.
Definition ComputeGradient.cpp:26
void EvolveB(ablastr::fields::MultiFabRegister &fields, int lev, PatchType patch_type, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > &flag_info_cell, std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > &borrowing, amrex::Real dt)
Update the B field, over one timestep.
Definition EvolveB.cpp:53
ablastr::utils::enums::GridType m_grid_type
Definition FiniteDifferenceSolver.H:244
FiniteDifferenceSolver(ElectromagneticSolverAlgo fdtd_algo, std::array< amrex::Real, 3 > cell_size, ablastr::utils::enums::GridType grid_type)
Initialize the finite-difference Maxwell solver (for a given refinement level)
Definition FiniteDifferenceSolver.cpp:32
void EvolveECTRho(ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField const &edge_lengths, ablastr::fields::VectorField const &face_areas, ablastr::fields::VectorField const &ECTRhofield, int lev)
Update the B field, over one timestep.
Definition EvolveECTRho.cpp:48
void EvolveE(ablastr::fields::MultiFabRegister &fields, int lev, PatchType patch_type, ablastr::fields::VectorField const &Efield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, amrex::Real dt)
Update the E field, over one timestep.
Definition EvolveE.cpp:55
void EvolveBCylindrical(ablastr::fields::VectorField const &Bfield, ablastr::fields::VectorField const &Efield, int lev, amrex::Real dt)
Definition EvolveB.cpp:394
void EvolveF(amrex::MultiFab *Ffield, ablastr::fields::VectorField const &Efield, amrex::MultiFab *rhofield, int rho_comp, amrex::Real dt)
Update the F field, over one timestep.
Definition EvolveF.cpp:48
void HybridPICSolveE(ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField &Jfield, ablastr::fields::VectorField const &Jifield, ablastr::fields::VectorField const &Bfield, amrex::MultiFab const &rhofield, amrex::MultiFab const &Pefield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, int lev, HybridPICModel const *hybrid_model, bool solve_for_Faraday)
E-update in the hybrid PIC algorithm as described in Winske et al. (2003) Eq. 10. https://link....
Definition HybridPICSolveE.cpp:484
void EvolveEPML(ablastr::fields::MultiFabRegister &fields, PatchType patch_type, int level, MultiSigmaBox const &sigba, amrex::Real dt, bool pml_has_particles)
Update the E field, over one timestep.
Definition EvolveEPML.cpp:46
void ComputeGradientCylindrical(ablastr::fields::VectorField &out_field, ablastr::fields::ScalarField const &in_field, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update, int lev)
Calculation of the gradient of the given scalar field.
Definition ComputeGradient.cpp:67
void ComputeCurlACylindrical(ablastr::fields::VectorField &Bfield, ablastr::fields::VectorField const &Afield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_B, int lev)
Calculate B from the curl of A i.e. B = curl(A) output field on B field mesh staggering.
Definition ComputeCurlA.cpp:78
void EvolveFPML(amrex::MultiFab *Ffield, ablastr::fields::VectorField Efield, amrex::Real dt)
Update the E field, over one timestep.
Definition EvolveFPML.cpp:40
void ComputeLaplacian(ablastr::fields::ScalarField &out_field, ablastr::fields::ScalarField const &in_field, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update, int lev)
Calculation of the Laplacian of the given scalar field.
Definition ComputeLaplacian.cpp:26
void EvolveFCylindrical(amrex::MultiFab *Ffield, ablastr::fields::VectorField const &Efield, amrex::MultiFab *rhofield, int rho_comp, amrex::Real dt)
Definition EvolveF.cpp:144
void ComputeVectorLaplacianCylindrical(ablastr::fields::VectorField &out_field, ablastr::fields::VectorField const &in_field, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update, int lev)
Calculation of the vector Laplacian of the given vector field.
Definition ComputeLaplacian.cpp:209
void MacroscopicEvolveE(MacroscopicSolverAlgo macroscopic_solver_algo, ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField const &Bfield, ablastr::fields::VectorField const &Jfield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, 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:38
amrex::Gpu::DeviceVector< amrex::Real > m_stencil_coefs_z
Definition FiniteDifferenceSolver.H:253
void HybridPICSolveECylindrical(ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField const &Jfield, ablastr::fields::VectorField const &Jifield, ablastr::fields::VectorField const &Bfield, amrex::MultiFab const &rhofield, amrex::MultiFab const &Pefield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, int lev, HybridPICModel const *hybrid_model, bool solve_for_Faraday)
Definition HybridPICSolveE.cpp:534
void ComputeVectorLaplacian(ablastr::fields::VectorField &out_field, ablastr::fields::VectorField const &in_field, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update, int lev)
Calculation of the vector Laplacian of the given vector field.
Definition ComputeLaplacian.cpp:168
void ComputeLaplacianCylindrical(ablastr::fields::ScalarField &out_field, ablastr::fields::ScalarField const &in_field, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update, int lev)
Calculation of the Laplacian of the given scalar field.
Definition ComputeLaplacian.cpp:67
void EvolveBPML(ablastr::fields::MultiFabRegister &fields, PatchType patch_type, int level, amrex::Real dt, bool dive_cleaning)
Update the B field, over one timestep.
Definition EvolveBPML.cpp:42
amrex::Vector< amrex::Real > m_h_stencil_coefs_z
Definition FiniteDifferenceSolver.H:250
amrex::Gpu::DeviceVector< amrex::Real > m_stencil_coefs_r
Definition FiniteDifferenceSolver.H:252
void EvolveG(amrex::MultiFab *Gfield, ablastr::fields::VectorField const &Bfield, amrex::Real dt)
Definition EvolveG.cpp:38
amrex::Real m_dr
Definition FiniteDifferenceSolver.H:247
void ComputeDivECylindrical(ablastr::fields::VectorField const &Efield, amrex::MultiFab &divE)
Definition ComputeDivE.cpp:136
void ApplySilverMuellerBoundary(ablastr::fields::VectorField &Efield, ablastr::fields::VectorField &Bfield, amrex::Box domain_box, amrex::Real dt, amrex::Array< FieldBoundaryType, 3 > field_boundary_lo, amrex::Array< FieldBoundaryType, 3 > field_boundary_hi)
Update the B field at the boundary, using the Silver-Mueller condition.
Definition ApplySilverMuellerBoundary.cpp:37
amrex::Vector< amrex::Real > m_h_stencil_coefs_r
Definition FiniteDifferenceSolver.H:250
amrex::Real m_rmin
Definition FiniteDifferenceSolver.H:247
ElectromagneticSolverAlgo m_fdtd_algo
Definition FiniteDifferenceSolver.H:243
void CalculateCurrentAmpereCylindrical(ablastr::fields::VectorField &Jfield, ablastr::fields::VectorField const &Bfield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, int lev)
Calculate total current from Ampere's law without displacement current i.e. J = 1/mu_0 curl x B.
Definition HybridPICSolveE.cpp:80
void EvolveECylindrical(ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField const &Bfield, ablastr::fields::VectorField const &Jfield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, amrex::MultiFab const *Ffield, int lev, amrex::Real dt)
Definition EvolveE.cpp:240
void CalculateCurrentAmpere(ablastr::fields::VectorField &Jfield, ablastr::fields::VectorField const &Bfield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update_E, int lev)
Calculation of total current using Ampere's law (without displacement current): J = (curl x B) / mu0.
Definition HybridPICSolveE.cpp:31
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid...
Definition HybridPICModel.H:41
Definition PML.H:124
amrex_real Real
PODVector< T, ArenaAllocator< T > > DeviceVector
std::array< T, N > Array
Definition EffectivePotentialPoissonSolver.H:63
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:191
amrex::MultiFab * ScalarField
Definition MultiFabRegister.H:180
GridType
Definition Enums.H:23
PatchType
Definition Enums.H:30
BoxND< 3 > Box
Definition MultiFabRegister.H:262