aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorGravatar Remi Lehe <remi.lehe@normalesup.org> 2020-01-24 20:22:36 -0800
committerGravatar Remi Lehe <remi.lehe@normalesup.org> 2020-01-24 20:22:36 -0800
commitb51df322f2d17cd4dbf7b98d277491caf9d1ebfc (patch)
tree873172fc624621e9ca1bebcbd6c86f1cee7c1aec /Source
parent3b2a9e7bd9d656c503324f502ff298239d448287 (diff)
downloadWarpX-b51df322f2d17cd4dbf7b98d277491caf9d1ebfc.tar.gz
WarpX-b51df322f2d17cd4dbf7b98d277491caf9d1ebfc.tar.zst
WarpX-b51df322f2d17cd4dbf7b98d277491caf9d1ebfc.zip
Avoid pushing B twice
Diffstat (limited to 'Source')
-rw-r--r--Source/FieldSolver/WarpXPushFieldsEM.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp
index 21d9424a8..f0af7f605 100644
--- a/Source/FieldSolver/WarpXPushFieldsEM.cpp
+++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp
@@ -111,11 +111,14 @@ WarpX::EvolveB (int lev, amrex::Real a_dt)
void
WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt)
{
+
+#if ((defined WARPX_DIM_3D) || (defined WARPX_DIM_XZ)) // Only in Cartesian
if (patch_type == PatchType::fine) {
fdtd_solver_fp[lev]->EvolveB( Bfield_fp[lev], Efield_fp[lev], a_dt );
} else {
fdtd_solver_cp[lev]->EvolveB( Bfield_cp[lev], Efield_cp[lev], a_dt );
}
+#endif
// Goes into initializer
const int patch_level = (patch_type == PatchType::fine) ? lev : lev-1;
@@ -151,6 +154,7 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt)
const Real xmin = Geom(0).ProbLo(0);
// Loop through the grids, and over the tiles within each grid
+#ifdef WARPX_DIM_RZ // Only in cylindrical geometry
#ifdef _OPENMP
#pragma omp parallel if (Gpu::notInLaunchRegion())
#endif
@@ -241,6 +245,7 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt)
});
}
}
+#endif
if (do_pml && pml[lev]->ok())
{
@@ -261,7 +266,21 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt)
auto const& pml_Exfab = pml_E[0]->array(mfi);
auto const& pml_Eyfab = pml_E[1]->array(mfi);
auto const& pml_Ezfab = pml_E[2]->array(mfi);
- if (WarpX::maxwell_fdtd_solver_id == 1) {
+ if (WarpX::maxwell_fdtd_solver_id == 0) {
+ amrex::ParallelFor(tbx, tby, tbz,
+ [=] AMREX_GPU_DEVICE (int i, int j, int k) {
+ warpx_push_pml_bx_yee(i,j,k,pml_Bxfab,pml_Eyfab,pml_Ezfab,
+ dtsdy,dtsdz);
+ },
+ [=] AMREX_GPU_DEVICE (int i, int j, int k) {
+ warpx_push_pml_by_yee(i,j,k,pml_Byfab,pml_Exfab,pml_Ezfab,
+ dtsdx,dtsdz);
+ },
+ [=] AMREX_GPU_DEVICE (int i, int j, int k) {
+ warpx_push_pml_bz_yee(i,j,k,pml_Bzfab,pml_Exfab,pml_Eyfab,
+ dtsdx,dtsdy);
+ });
+ } else if (WarpX::maxwell_fdtd_solver_id == 1) {
Real betaxy, betaxz, betayx, betayz, betazx, betazy;
Real gammax, gammay, gammaz;
Real alphax, alphay, alphaz;