aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
diff options
context:
space:
mode:
authorGravatar Glenn Richardson <gtrichardson@berkeley.edu> 2020-03-30 23:36:09 -0700
committerGravatar GitHub <noreply@github.com> 2020-03-30 23:36:09 -0700
commitaee52dfbc4b1016d9765915ace174a065abfc646 (patch)
tree4d479e924508c2eb5eef50f73b2ea8b7a39dcc05 /Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
parentf790faedf7071a9d1cc1a5e48ff516b124b1a18d (diff)
downloadWarpX-aee52dfbc4b1016d9765915ace174a065abfc646.tar.gz
WarpX-aee52dfbc4b1016d9765915ace174a065abfc646.tar.zst
WarpX-aee52dfbc4b1016d9765915ace174a065abfc646.zip
Current effects in QED corrections (#767)
* corrected two typos missed during review of PR-719 * changed file permission from executable to read/write * added current into QED corrections * corrected tabs * fixed indent in multifab construction section * adjusted more indentations that were accidently changed from the origional * Corrected the curent mesh * Update Source/FieldSolver/WarpX_QED_Field_Pushers.cpp Co-Authored-By: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> * Correctly implimented Revathi's recommended changes to the E,B and J boxes * Adjusted comments, tabs, and copyrights * and EOL Co-authored-by: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com>
Diffstat (limited to 'Source/FieldSolver/WarpX_QED_Field_Pushers.cpp')
-rw-r--r--Source/FieldSolver/WarpX_QED_Field_Pushers.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp b/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
index 4892610c6..4aece5178 100644
--- a/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
+++ b/Source/FieldSolver/WarpX_QED_Field_Pushers.cpp
@@ -1,4 +1,4 @@
-/* Copyright 2019-2020 Glenn Richardson, Maxence Thevenet
+/* Copyright 2019-2020 Glenn Richardson, Maxence Thevenet, Revathi Jambunathan, Axel Huebl
*
* This file is part of WarpX.
*
@@ -10,6 +10,7 @@
#include "BoundaryConditions/WarpX_PML_kernels.H"
#include "BoundaryConditions/PML_current.H"
#include "WarpX_FDTD.H"
+
#ifdef WARPX_USE_PY
# include "Python/WarpX_py.H"
#endif
@@ -63,7 +64,7 @@ WarpX::Hybrid_QED_Push (int lev, PatchType patch_type, Real a_dt)
const Real dy = dx_vec[1];
const Real dz = dx_vec[2];
- MultiFab *Ex, *Ey, *Ez, *Bx, *By, *Bz;
+ MultiFab *Ex, *Ey, *Ez, *Bx, *By, *Bz, *Jx, *Jy, *Jz;
if (patch_type == PatchType::fine)
{
Ex = Efield_fp[lev][0].get();
@@ -72,6 +73,9 @@ WarpX::Hybrid_QED_Push (int lev, PatchType patch_type, Real a_dt)
Bx = Bfield_fp[lev][0].get();
By = Bfield_fp[lev][1].get();
Bz = Bfield_fp[lev][2].get();
+ Jx = current_fp[lev][0].get();
+ Jy = current_fp[lev][1].get();
+ Jz = current_fp[lev][2].get();
}
else
{
@@ -81,6 +85,9 @@ WarpX::Hybrid_QED_Push (int lev, PatchType patch_type, Real a_dt)
Bx = Bfield_cp[lev][0].get();
By = Bfield_cp[lev][1].get();
Bz = Bfield_cp[lev][2].get();
+ Jx = current_cp[lev][0].get();
+ Jy = current_cp[lev][1].get();
+ Jz = current_cp[lev][2].get();
}
amrex::Vector<amrex::Real>* cost = WarpX::getCosts(lev);
@@ -97,12 +104,19 @@ WarpX::Hybrid_QED_Push (int lev, PatchType patch_type, Real a_dt)
}
Real wt = amrex::second();
- // Get boxes for E and B
- const Box& tbx = mfi.tilebox(Bx_nodal_flag);
+ // Get boxes for E, B, and J
+
+ const Box& tbx = mfi.tilebox(Bx->ixType().ixType());
+ const Box& tby = mfi.tilebox(By->ixType().ixType());
+ const Box& tbz = mfi.tilebox(Bz->ixType().ixType());
- const Box& tex = mfi.tilebox(Ex_nodal_flag);
- const Box& tey = mfi.tilebox(Ey_nodal_flag);
- const Box& tez = mfi.tilebox(Ez_nodal_flag);
+ const Box& tex = mfi.tilebox(Ex->ixType().ixType());
+ const Box& tey = mfi.tilebox(Ey->ixType().ixType());
+ const Box& tez = mfi.tilebox(Ez->ixType().ixType());
+
+ const Box& tjx = mfi.tilebox(Jx->ixType().ixType());
+ const Box& tjy = mfi.tilebox(Jy->ixType().ixType());
+ const Box& tjz = mfi.tilebox(Jz->ixType().ixType());
// Get field arrays
auto const& Bxfab = Bx->array(mfi);
@@ -111,6 +125,9 @@ WarpX::Hybrid_QED_Push (int lev, PatchType patch_type, Real a_dt)
auto const& Exfab = Ex->array(mfi);
auto const& Eyfab = Ey->array(mfi);
auto const& Ezfab = Ez->array(mfi);
+ auto const& Jxfab = Jx->array(mfi);
+ auto const& Jyfab = Jy->array(mfi);
+ auto const& Jzfab = Jz->array(mfi);
// Define grown box with 1 ghost cell for finite difference stencil
const Box& gex = amrex::grow(tex,1);
@@ -148,14 +165,15 @@ WarpX::Hybrid_QED_Push (int lev, PatchType patch_type, Real a_dt)
// Make local copy of xi, to use on device.
const Real xi_c2 = WarpX::quantum_xi_c2;
+
// Apply QED correction to electric field, using temporary arrays.
amrex::ParallelFor(
tbx,
[=] AMREX_GPU_DEVICE (int j, int k, int l)
{
warpx_hybrid_QED_push(j,k,l, Exfab, Eyfab, Ezfab, Bxfab, Byfab,
- Bzfab, tmpEx, tmpEy, tmpEz, dx, dy, dz,
- a_dt, xi_c2);
+ Bzfab, tmpEx, tmpEy, tmpEz, Jxfab, Jyfab, Jzfab, dx, dy, dz,
+ a_dt, xi_c2);
}
);