aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/WarpX_FDTD.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/WarpX_FDTD.H')
-rw-r--r--Source/FieldSolver/WarpX_FDTD.H396
1 files changed, 378 insertions, 18 deletions
diff --git a/Source/FieldSolver/WarpX_FDTD.H b/Source/FieldSolver/WarpX_FDTD.H
index 865277446..e2d40f4c2 100644
--- a/Source/FieldSolver/WarpX_FDTD.H
+++ b/Source/FieldSolver/WarpX_FDTD.H
@@ -5,50 +5,411 @@
using namespace amrex;
-AMREX_GPU_HOST_DEVICE AMREX_INLINE
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_bx_yee(int i, int j, int k, Array4<Real> const& Bx,
+ Array4<Real const> const& Ey, Array4<Real const> const& Ez,
+ Real dtsdy, Real dtsdz)
+{
+#if defined WARPX_DIM_3D
+ Bx(i,j,k) += - dtsdy * (Ez(i,j+1,k ) - Ez(i,j,k))
+ + dtsdz * (Ey(i,j ,k+1) - Ey(i,j,k));
+#elif (defined WARPX_DIM_2D) || (defined WARPX_DIM_RZ)
+ // Note that the 2D Cartesian and RZ versions are the same
+ Bx(i,j,0) += + dtsdz * (Ey(i,j+1,0) - Ey(i,j,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_by_yee(int i, int j, int k, Array4<Real> const& By,
+ Array4<Real const> const& Ex, Array4<Real const> const& Ez,
+ Real dtsdx, Real dtsdz)
+{
+#if defined WARPX_DIM_3D
+ By(i,j,k) += + dtsdx * (Ez(i+1,j,k ) - Ez(i,j,k))
+ - dtsdz * (Ex(i ,j,k+1) - Ex(i,j,k));
+#elif (defined WARPX_DIM_2D) || (defined WARPX_DIM_RZ)
+ // Note that the 2D Cartesian and RZ versions are the same
+ By(i,j,0) += + dtsdx * (Ez(i+1,j ,0) - Ez(i,j,0))
+ - dtsdz * (Ex(i ,j+1,0) - Ex(i,j,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_bz_yee(int i, int j, int k, Array4<Real> const& Bz,
+ Array4<Real const> const& Ex, Array4<Real const> const& Ey,
+ Real dtsdx, Real dtsdy, Real dxinv, Real rmin)
+{
+#if defined WARPX_DIM_3D
+ Bz(i,j,k) += - dtsdx * (Ey(i+1,j ,k) - Ey(i,j,k))
+ + dtsdy * (Ex(i ,j+1,k) - Ex(i,j,k));
+#elif defined WARPX_DIM_2D
+ Bz(i,j,0) += - dtsdx * (Ey(i+1,j,0) - Ey(i,j,0));
+#elif defined WARPX_DIM_RZ
+ const Real ru = 1. + 0.5/(rmin*dxinv + i + 0.5);
+ const Real rd = 1. - 0.5/(rmin*dxinv + i + 0.5);
+ Bz(i,j,0) += - dtsdx * (ru*Ey(i+1,j,0) - rd*Ey(i,j,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ex_yee(int i, int j, int k, Array4<Real> const& Ex,
+ Array4<Real const> const& By, Array4<Real const> const& Bz, Array4<Real const> const& Jx,
+ Real mu_c2_dt, Real dtsdy_c2, Real dtsdz_c2)
+{
+#if defined WARPX_DIM_3D
+ Ex(i,j,k) += + dtsdy_c2 * (Bz(i,j,k) - Bz(i,j-1,k ))
+ - dtsdz_c2 * (By(i,j,k) - By(i,j ,k-1))
+ - mu_c2_dt * Jx(i,j,k);
+#elif (defined WARPX_DIM_2D) || (defined WARPX_DIM_RZ)
+ // Note that the 2D Cartesian and RZ versions are the same
+ Ex(i,j,0) += - dtsdz_c2 * (By(i,j,0) - By(i,j-1,0))
+ - mu_c2_dt * Jx(i,j,0);
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ey_yee(int i, int j, int k, Array4<Real> const& Ey,
+ Array4<Real const> const& Bx, Array4<Real const> const& Bz, Array4<Real const> const& Jy,
+ Real mu_c2_dt, Real dtsdx_c2, Real dtsdz_c2, Real rmin)
+{
+#if defined WARPX_DIM_3D
+ Ey(i,j,k) += - dtsdx_c2 * (Bz(i,j,k) - Bz(i-1,j,k))
+ + dtsdz_c2 * (Bx(i,j,k) - Bx(i,j,k-1))
+ - mu_c2_dt * Jy(i,j,k);
+#elif (defined WARPX_DIM_2D) || (defined WARPX_DIM_RZ)
+ // 2D Cartesian and RZ are the same, except that the axis is skipped with RZ
+#ifdef WARPX_DIM_RZ
+ if (i != 0 || rmin != 0.)
+#endif
+ {
+ Ey(i,j,0) += - dtsdx_c2 * (Bz(i,j,0) - Bz(i-1,j,0))
+ + dtsdz_c2 * (Bx(i,j,0) - Bx(i,j-1,0))
+ - mu_c2_dt * Jy(i,j,0);
+ }
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ez_yee(int i, int j, int k, Array4<Real> const& Ez,
+ Array4<Real const> const& Bx, Array4<Real const> const& By, Array4<Real const> const& Jz,
+ Real mu_c2_dt, Real dtsdx_c2, Real dtsdy_c2, Real dxinv, Real rmin)
+{
+#if defined WARPX_DIM_3D
+ Ez(i,j,k) += + dtsdx_c2 * (By(i,j,k) - By(i-1,j ,k))
+ - dtsdy_c2 * (Bx(i,j,k) - Bx(i ,j-1,k))
+ - mu_c2_dt * Jz(i,j,k);
+#elif defined WARPX_DIM_2D
+ Ez(i,j,0) += + dtsdx_c2 * (By(i,j,0) - By(i-1,j,0))
+ - mu_c2_dt * Jz(i,j,0);
+#elif defined WARPX_DIM_RZ
+ if (i != 0 || rmin != 0.) {
+ const Real ru = 1. + 0.5/(rmin*dxinv + i);
+ const Real rd = 1. - 0.5/(rmin*dxinv + i);
+ Ez(i,j,0) += + dtsdx_c2 * (ru*By(i,j,0) - rd*By(i-1,j,0))
+ - mu_c2_dt * Jz(i,j,0);
+ } else {
+ Ez(i,j,0) += + 4.*dtsdx_c2 * By(i,j,0)
+ - mu_c2_dt * Jz(i,j,0);
+ }
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ex_f_yee(int j, int k, int l, Array4<Real> const& Ex,
+ Array4<Real const> const& F, Real dtsdx_c2)
+{
+#if defined WARPX_DIM_3D
+ Ex(j,k,l) += + dtsdx_c2 * (F(j+1,k,l) - F(j,k,l));
+#elif (defined WARPX_DIM_2D) || (defined WARPX_DIM_RZ)
+ Ex(j,k,0) += + dtsdx_c2 * (F(j+1,k,0) - F(j ,k,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ey_f_yee(int j, int k, int l, Array4<Real> const& Ey,
+ Array4<Real const> const& F, Real dtsdy_c2)
+{
+#if defined WARPX_DIM_3D
+ Ey(j,k,l) += + dtsdy_c2 * (F(j,k+1,l) - F(j,k,l));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ez_f_yee(int j, int k, int l, Array4<Real> const& Ez,
+ Array4<Real const> const& F, Real dtsdz_c2)
+{
+#if defined WARPX_DIM_3D
+ Ez(j,k,l) += + dtsdz_c2 * (F(j,k,l+1) - F(j,k,l));
+#elif (defined WARPX_DIM_2D) || (defined WARPX_DIM_RZ)
+ Ez(j,k,0) += + dtsdz_c2 * (F(j,k+1,0) - F(j,k,0));
+#endif
+}
+
+static void warpx_calculate_ckc_coefficients(Real dtsdx, Real dtsdy, Real dtsdz,
+ Real &betaxy, Real &betaxz, Real &betayx, Real &betayz, Real &betazx, Real &betazy,
+ Real &gammax, Real &gammay, Real &gammaz,
+ Real &alphax, Real &alphay, Real &alphaz)
+{
+ // Cole-Karkkainen-Cowan push
+ // computes coefficients according to Cowan - PRST-AB 16, 041303 (2013)
+#if defined WARPX_DIM_3D
+ const Real delta = std::max( { dtsdx,dtsdy,dtsdz } );
+ const Real rx = (dtsdx/delta)*(dtsdx/delta);
+ const Real ry = (dtsdy/delta)*(dtsdy/delta);
+ const Real rz = (dtsdz/delta)*(dtsdz/delta);
+ const Real beta = 0.125*(1. - rx*ry*rz/(ry*rz + rz*rx + rx*ry));
+ betaxy = ry*beta;
+ betaxz = rz*beta;
+ betayx = rx*beta;
+ betayz = rz*beta;
+ betazx = rx*beta;
+ betazy = ry*beta;
+ gammax = ry*rz*(0.0625 - 0.125*ry*rz/(ry*rz + rz*rx + rx*ry));
+ gammay = rx*rz*(0.0625 - 0.125*rx*rz/(ry*rz + rz*rx + rx*ry));
+ gammaz = rx*ry*(0.0625 - 0.125*rx*ry/(ry*rz + rz*rx + rx*ry));
+ alphax = 1. - 2.*betaxy - 2.*betaxz - 4.*gammax;
+ alphay = 1. - 2.*betayx - 2.*betayz - 4.*gammay;
+ alphaz = 1. - 2.*betazx - 2.*betazy - 4.*gammaz;
+
+ betaxy *= dtsdx;
+ betaxz *= dtsdx;
+ betayx *= dtsdy;
+ betayz *= dtsdy;
+ betazx *= dtsdz;
+ betazy *= dtsdz;
+ alphax *= dtsdx;
+ alphay *= dtsdy;
+ alphaz *= dtsdz;
+ gammax *= dtsdx;
+ gammay *= dtsdy;
+ gammaz *= dtsdz;
+#elif defined WARPX_DIM_2D
+ const Real delta = std::max(dtsdx,dtsdz);
+ const Real rx = (dtsdx/delta)*(dtsdx/delta);
+ const Real rz = (dtsdz/delta)*(dtsdz/delta);
+ betaxz = 0.125*rz;
+ betazx = 0.125*rx;
+ alphax = 1. - 2.*betaxz;
+ alphaz = 1. - 2.*betazx;
+
+ betaxz *= dtsdx;
+ betazx *= dtsdz;
+ alphax *= dtsdx;
+ alphaz *= dtsdz;
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_bx_ckc(int j, int k, int l, Array4<Real> const& Bx,
+ Array4<Real const> const& Ey, Array4<Real const> const& Ez,
+ Real betaxy, Real betaxz, Real betayx, Real betayz, Real betazx, Real betazy,
+ Real gammax, Real gammay, Real gammaz,
+ Real alphax, Real alphay, Real alphaz)
+{
+#if defined WARPX_DIM_3D
+ Bx(j,k,l) += - alphay * (Ez(j ,k+1,l ) - Ez(j, k ,l ))
+ - betayx * (Ez(j+1,k+1,l ) - Ez(j+1,k ,l )
+ + Ez(j-1,k+1,l ) - Ez(j-1,k ,l ))
+ - betayz * (Ez(j ,k+1,l+1) - Ez(j ,k ,l+1)
+ + Ez(j ,k+1,l-1) - Ez(j ,k ,l-1))
+ - gammay * (Ez(j+1,k+1,l+1) - Ez(j+1,k ,l+1)
+ + Ez(j-1,k+1,l+1) - Ez(j-1,k ,l+1)
+ + Ez(j+1,k+1,l-1) - Ez(j+1,k ,l-1)
+ + Ez(j-1,k+1,l-1) - Ez(j-1,k ,l-1))
+ + alphaz * (Ey(j ,k ,l+1) - Ey(j, k, l ))
+ + betazx * (Ey(j+1,k ,l+1) - Ey(j+1,k ,l )
+ + Ey(j-1,k ,l+1) - Ey(j-1,k ,l ))
+ + betazy * (Ey(j ,k+1,l+1) - Ey(j ,k+1,l )
+ + Ey(j ,k-1,l+1) - Ey(j ,k-1,l ))
+ + gammaz * (Ey(j+1,k+1,l+1) - Ey(j+1,k+1,l )
+ + Ey(j-1,k+1,l+1) - Ey(j-1,k+1,l )
+ + Ey(j+1,k-1,l+1) - Ey(j+1,k-1,l )
+ + Ey(j-1,k-1,l+1) - Ey(j-1,k-1,l ));
+#elif defined WARPX_DIM_2D
+ Bx(j,k,0) += + alphaz * (Ey(j ,k+1,0) - Ey(j, k,0))
+ + betazx * (Ey(j+1,k+1,0) - Ey(j+1,k,0)
+ + Ey(j-1,k+1,0) - Ey(j-1,k,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_by_ckc(int j, int k, int l, Array4<Real> const& By,
+ Array4<Real const> const& Ex, Array4<Real const> const& Ez,
+ Real betaxy, Real betaxz, Real betayx, Real betayz, Real betazx, Real betazy,
+ Real gammax, Real gammay, Real gammaz,
+ Real alphax, Real alphay, Real alphaz)
+{
+#if defined WARPX_DIM_3D
+ By(j,k,l) += + alphax * (Ez(j+1,k ,l ) - Ez(j, k, l ))
+ + betaxy * (Ez(j+1,k+1,l ) - Ez(j ,k+1,l )
+ + Ez(j+1,k-1,l ) - Ez(j ,k-1,l ))
+ + betaxz * (Ez(j+1,k ,l+1) - Ez(j ,k ,l+1)
+ + Ez(j+1,k ,l-1) - Ez(j ,k ,l-1))
+ + gammax * (Ez(j+1,k+1,l+1) - Ez(j ,k+1,l+1)
+ + Ez(j+1,k-1,l+1) - Ez(j ,k-1,l+1)
+ + Ez(j+1,k+1,l-1) - Ez(j ,k+1,l-1)
+ + Ez(j+1,k-1,l-1) - Ez(j ,k-1,l-1))
+ - alphaz * (Ex(j ,k ,l+1) - Ex(j ,k ,l ))
+ - betazx * (Ex(j+1,k ,l+1) - Ex(j+1,k ,l )
+ + Ex(j-1,k ,l+1) - Ex(j-1,k ,l ))
+ - betazy * (Ex(j ,k+1,l+1) - Ex(j ,k+1,l )
+ + Ex(j ,k-1,l+1) - Ex(j ,k-1,l ))
+ - gammaz * (Ex(j+1,k+1,l+1) - Ex(j+1,k+1,l )
+ + Ex(j-1,k+1,l+1) - Ex(j-1,k+1,l )
+ + Ex(j+1,k-1,l+1) - Ex(j+1,k-1,l )
+ + Ex(j-1,k-1,l+1) - Ex(j-1,k-1,l ));
+#elif defined WARPX_DIM_2D
+ By(j,k,0) += + alphax * (Ez(j+1,k ,0) - Ez(j,k ,0))
+ + betaxz * (Ez(j+1,k+1,0) - Ez(j,k+1,0)
+ + Ez(j+1,k-1,0) - Ez(j,k-1,0))
+ - alphaz * (Ex(j ,k+1,0) - Ex(j,k ,0))
+ - betazx * (Ex(j+1,k+1,0) - Ex(j+1,k,0)
+ + Ex(j-1,k+1,0) - Ex(j-1,k,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_bz_ckc(int j, int k, int l, Array4<Real> const& Bz,
+ Array4<Real const> const& Ex, Array4<Real const> const& Ey,
+ Real betaxy, Real betaxz, Real betayx, Real betayz, Real betazx, Real betazy,
+ Real gammax, Real gammay, Real gammaz,
+ Real alphax, Real alphay, Real alphaz)
+{
+#if defined WARPX_DIM_3D
+ Bz(j,k,l) += - alphax * (Ey(j+1,k ,l ) - Ey(j ,k ,l ))
+ - betaxy * (Ey(j+1,k+1,l ) - Ey(j ,k+1,l )
+ + Ey(j+1,k-1,l ) - Ey(j ,k-1,l ))
+ - betaxz * (Ey(j+1,k ,l+1) - Ey(j ,k ,l+1)
+ + Ey(j+1,k ,l-1) - Ey(j ,k ,l-1))
+ - gammax * (Ey(j+1,k+1,l+1) - Ey(j ,k+1,l+1)
+ + Ey(j+1,k-1,l+1) - Ey(j ,k-1,l+1)
+ + Ey(j+1,k+1,l-1) - Ey(j ,k+1,l-1)
+ + Ey(j+1,k-1,l-1) - Ey(j ,k-1,l-1))
+ + alphay * (Ex(j ,k+1,l ) - Ex(j ,k ,l ))
+ + betayx * (Ex(j+1,k+1,l ) - Ex(j+1,k ,l )
+ + Ex(j-1,k+1,l ) - Ex(j-1,k ,l ))
+ + betayz * (Ex(j ,k+1,l+1) - Ex(j ,k ,l+1)
+ + Ex(j ,k+1,l-1) - Ex(j ,k ,l-1))
+ + gammay * (Ex(j+1,k+1,l+1) - Ex(j+1,k ,l+1)
+ + Ex(j-1,k+1,l+1) - Ex(j-1,k ,l+1)
+ + Ex(j+1,k+1,l-1) - Ex(j+1,k ,l-1)
+ + Ex(j-1,k+1,l-1) - Ex(j-1,k ,l-1));
+#elif defined WARPX_DIM_2D
+ Bz(j,k,0) += - alphax * (Ey(j+1,k ,0) - Ey(j,k ,0))
+ - betaxz * (Ey(j+1,k+1,0) - Ey(j,k+1,0)
+ + Ey(j+1,k-1,0) - Ey(j,k-1,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ex_f_ckc(int j, int k, int l, Array4<Real> const& Ex,
+ Array4<Real const> const& F,
+ Real betaxy, Real betaxz, Real betayx, Real betayz, Real betazx, Real betazy,
+ Real gammax, Real gammay, Real gammaz,
+ Real alphax, Real alphay, Real alphaz)
+{
+#if defined WARPX_DIM_3D
+ Ex(j,k,l) += + alphax * (F(j+1,k ,l ) - F(j, k, l ))
+ + betaxy * (F(j+1,k+1,l ) - F(j,k+1,l )
+ + F(j+1,k-1,l ) - F(j,k-1,l ))
+ + betaxz * (F(j+1,k ,l+1) - F(j,k ,l+1)
+ + F(j+1,k ,l-1) - F(j,k ,l-1))
+ + gammax * (F(j+1,k+1,l+1) - F(j,k+1,l+1)
+ + F(j+1,k-1,l+1) - F(j,k-1,l+1)
+ + F(j+1,k+1,l-1) - F(j,k+1,l-1)
+ + F(j+1,k-1,l-1) - F(j,k-1,l-1));
+#elif defined WARPX_DIM_2D
+ Ex(j,k,0) += + alphax * (F(j+1,k ,0) - F(j,k ,0))
+ + betaxz * (F(j+1,k+1,0) - F(j,k+1,0)
+ + F(j+1,k-1,0) - F(j,k-1,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ey_f_ckc(int j, int k, int l, Array4<Real> const& Ey,
+ Array4<Real const> const& F,
+ Real betaxy, Real betaxz, Real betayx, Real betayz, Real betazx, Real betazy,
+ Real gammax, Real gammay, Real gammaz,
+ Real alphax, Real alphay, Real alphaz)
+{
+#if defined WARPX_DIM_3D
+ Ey(j,k,l) += + alphay * (F(j ,k+1,l ) - F(j ,k,l ))
+ + betayx * (F(j+1,k+1,l ) - F(j+1,k,l )
+ + F(j-1,k+1,l ) - F(j-1,k,l ))
+ + betayz * (F(j ,k+1,l+1) - F(j ,k,l+1)
+ + F(j ,k+1,l-1) - F(j ,k,l-1))
+ + gammay * (F(j+1,k+1,l+1) - F(j+1,k,l+1)
+ + F(j-1,k+1,l+1) - F(j-1,k,l+1)
+ + F(j+1,k+1,l-1) - F(j+1,k,l-1)
+ + F(j-1,k+1,l-1) - F(j-1,k,l-1));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+void warpx_push_ez_f_ckc(int j, int k, int l, Array4<Real> const& Ez,
+ Array4<Real const> const& F,
+ Real betaxy, Real betaxz, Real betayx, Real betayz, Real betazx, Real betazy,
+ Real gammax, Real gammay, Real gammaz,
+ Real alphax, Real alphay, Real alphaz)
+{
+#if defined WARPX_DIM_3D
+ Ez(j,k,l) += + alphaz * (F(j ,k ,l+1) - F(j, k, l))
+ + betazx * (F(j+1,k ,l+1) - F(j+1,k ,l)
+ + F(j-1,k ,l+1) - F(j-1,k ,l))
+ + betazy * (F(j ,k+1,l+1) - F(j ,k+1,l)
+ + F(j ,k-1,l+1) - F(j ,k-1,l))
+ + gammaz * (F(j+1,k+1,l+1) - F(j+1,k+1,l)
+ + F(j-1,k+1,l+1) - F(j-1,k+1,l)
+ + F(j+1,k-1,l+1) - F(j+1,k-1,l)
+ + F(j-1,k-1,l+1) - F(j-1,k-1,l));
+#elif defined WARPX_DIM_2D
+ Ez(j,k,0) += + alphaz * (F(j ,k+1,0) - F(j ,k,0))
+ + betazx * (F(j+1,k+1,0) - F(j+1,k,0)
+ + F(j-1,k+1,0) - F(j-1,k,0));
+#endif
+}
+
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
void warpx_computedivb(int i, int j, int k, int dcomp, Array4<Real> const& divB,
Array4<Real const> const& Bx, Array4<Real const> const& By, Array4<Real const> const& Bz,
Real dxinv, Real dyinv, Real dzinv
-#ifdef WARPX_RZ
+#ifdef WARPX_DIM_RZ
,const Real rmin
#endif
)
{
-#if (AMREX_SPACEDIM == 3)
+#if defined WARPX_DIM_3D
divB(i,j,k,dcomp) = (Bx(i+1,j ,k ) - Bx(i,j,k))*dxinv
+ (By(i ,j+1,k ) - By(i,j,k))*dyinv
+ (Bz(i ,j ,k+1) - Bz(i,j,k))*dzinv;
-#else
-#ifndef WARPX_RZ
+#elif defined WARPX_DIM_2D
divB(i,j,0,dcomp) = (Bx(i+1,j ,0) - Bx(i,j,0))*dxinv
+ (Bz(i ,j+1,0) - Bz(i,j,0))*dzinv;
-#else
- Real ru = 1. + 0.5/(rmin*dxinv + i + 0.5);
- Real rd = 1. - 0.5/(rmin*dxinv + i + 0.5);
+#elif defined WARPX_DIM_RZ
+ const Real ru = 1. + 0.5/(rmin*dxinv + i + 0.5);
+ const Real rd = 1. - 0.5/(rmin*dxinv + i + 0.5);
divB(i,j,0,dcomp) = (ru*Bx(i+1,j,0) - rd*Bx(i,j,0))*dxinv
+ (Bz(i,j+1,0) - Bz(i,j,0))*dzinv;
#endif
-#endif
}
-AMREX_GPU_HOST_DEVICE AMREX_INLINE
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
void warpx_computedive(int i, int j, int k, int dcomp, Array4<Real> const& divE,
Array4<Real const> const& Ex, Array4<Real const> const& Ey, Array4<Real const> const& Ez,
Real dxinv, Real dyinv, Real dzinv
-#ifdef WARPX_RZ
+#ifdef WARPX_DIM_RZ
,const Real rmin
#endif
)
{
-#if (AMREX_SPACEDIM == 3)
+#if defined WARPX_DIM_3D
divE(i,j,k,dcomp) = (Ex(i,j,k) - Ex(i-1,j,k))*dxinv
+ (Ey(i,j,k) - Ey(i,j-1,k))*dyinv
+ (Ez(i,j,k) - Ez(i,j,k-1))*dzinv;
-#else
-#ifndef WARPX_RZ
+#elif defined WARPX_DIM_2D
divE(i,j,0,dcomp) = (Ex(i,j,0) - Ex(i-1,j,0))*dxinv
+ (Ez(i,j,0) - Ez(i,j-1,0))*dzinv;
-#else
+#elif defined WARPX_DIM_RZ
if (i == 0 && rmin == 0.) {
// the bulk equation diverges on axis
// (due to the 1/r terms). The following expressions regularize
@@ -56,13 +417,12 @@ void warpx_computedive(int i, int j, int k, int dcomp, Array4<Real> const& divE,
divE(i,j,0,dcomp) = 4.*Ex(i,j,0)*dxinv
+ (Ez(i,j,0) - Ez(i,j-1,0))*dzinv;
} else {
- Real ru = 1. + 0.5/(rmin*dxinv + i);
- Real rd = 1. - 0.5/(rmin*dxinv + i);
+ const Real ru = 1. + 0.5/(rmin*dxinv + i);
+ const Real rd = 1. - 0.5/(rmin*dxinv + i);
divE(i,j,0,dcomp) = (ru*Ex(i,j,0) - rd*Ex(i-1,j,0))*dxinv
+ (Ez(i,j,0) - Ez(i,j-1,0))*dzinv;
}
#endif
-#endif
}
#endif