Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing staircased EM solver #2739

Merged
merged 8 commits into from
Jan 13, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Fixing the staircase consistency
  • Loading branch information
lgiacome committed Jan 12, 2022
commit fd65f8e6986fe5ecface6a9424188d3728343873
24 changes: 6 additions & 18 deletions Source/BoundaryConditions/WarpXEvolvePML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,51 +148,39 @@ WarpX::DampPML (int lev, PatchType patch_type)

amrex::ParallelFor(tex, tey, tez,
[=] AMREX_GPU_DEVICE (int i, int j, int k) {
#ifdef AMREX_USE_EB
if(pml_lxfab(i, j, k) <= 0) return;
#endif

warpx_damp_pml_ex(i, j, k, pml_Exfab, Ex_stag, sigma_fac_x, sigma_fac_y, sigma_fac_z,
sigma_star_fac_x, sigma_star_fac_y, sigma_star_fac_z, x_lo, y_lo, z_lo,
dive_cleaning);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k) {
#ifdef AMREX_USE_EB
if(pml_lyfab(i, j, k) <= 0) return;
#endif

warpx_damp_pml_ey(i, j, k, pml_Eyfab, Ey_stag, sigma_fac_x, sigma_fac_y, sigma_fac_z,
sigma_star_fac_x, sigma_star_fac_y, sigma_star_fac_z, x_lo, y_lo, z_lo,
dive_cleaning);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k) {
#ifdef AMREX_USE_EB
if(pml_lzfab(i, j, k) <= 0) return;
#endif

warpx_damp_pml_ez(i, j, k, pml_Ezfab, Ez_stag, sigma_fac_x, sigma_fac_y, sigma_fac_z,
sigma_star_fac_x, sigma_star_fac_y, sigma_star_fac_z, x_lo, y_lo, z_lo,
dive_cleaning);
});

amrex::ParallelFor(tbx, tby, tbz,
[=] AMREX_GPU_DEVICE (int i, int j, int k) {
#ifdef AMREX_USE_EB
if(pml_Sxfab(i, j, k) <= 0) return;
#endif

warpx_damp_pml_bx(i, j, k, pml_Bxfab, Bx_stag, sigma_fac_x, sigma_fac_y, sigma_fac_z,
sigma_star_fac_x, sigma_star_fac_y, sigma_star_fac_z, x_lo, y_lo, z_lo,
divb_cleaning);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k) {
#ifdef AMREX_USE_EB
if(pml_Syfab(i, j, k) <= 0) return;
#endif

warpx_damp_pml_by(i, j, k, pml_Byfab, By_stag, sigma_fac_x, sigma_fac_y, sigma_fac_z,
sigma_star_fac_x, sigma_star_fac_y, sigma_star_fac_z, x_lo, y_lo, z_lo,
divb_cleaning);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k) {
#ifdef AMREX_USE_EB
if(pml_Szfab(i, j, k) <= 0) return;
#endif

warpx_damp_pml_bz(i, j, k, pml_Bzfab, Bz_stag, sigma_fac_x, sigma_fac_y, sigma_fac_z,
sigma_star_fac_x, sigma_star_fac_y, sigma_star_fac_z, x_lo, y_lo, z_lo,
divb_cleaning);
Expand Down
18 changes: 6 additions & 12 deletions Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,30 +150,24 @@ void FiniteDifferenceSolver::EvolveBCartesian (
amrex::ParallelFor(tbx, tby, tbz,

[=] AMREX_GPU_DEVICE (int i, int j, int k){
#ifdef AMREX_USE_EB
// Skip field push if this cell is fully covered by embedded boundaries
if (Sx(i, j, k) <= 0) return;
#endif

Bx(i, j, k) += dt * T_Algo::UpwardDz(Ey, coefs_z, n_coefs_z, i, j, k)
- dt * T_Algo::UpwardDy(Ez, coefs_y, n_coefs_y, i, j, k);

},

[=] AMREX_GPU_DEVICE (int i, int j, int k){
#ifdef AMREX_USE_EB
// Skip field push if this cell is fully covered by embedded boundaries
if (Sy(i, j, k) <= 0) return;
#endif

By(i, j, k) += dt * T_Algo::UpwardDx(Ez, coefs_x, n_coefs_x, i, j, k)
- dt * T_Algo::UpwardDz(Ex, coefs_z, n_coefs_z, i, j, k);

},

[=] AMREX_GPU_DEVICE (int i, int j, int k){
#ifdef AMREX_USE_EB
// Skip field push if this cell is fully covered by embedded boundaries
if (Sz(i, j, k) <= 0) return;
#endif

Bz(i, j, k) += dt * T_Algo::UpwardDy(Ex, coefs_y, n_coefs_y, i, j, k)
- dt * T_Algo::UpwardDx(Ey, coefs_x, n_coefs_x, i, j, k);

}
);

Expand Down
9 changes: 0 additions & 9 deletions Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,6 @@ void FiniteDifferenceSolver::EvolveBPMLCartesian (
amrex::ParallelFor(tbx, tby, tbz,

[=] AMREX_GPU_DEVICE (int i, int j, int k){
#ifdef AMREX_USE_EB
if(Sx(i, j, k) <= 0) return;
#endif

amrex::Real UpwardDz_Ey_yy = 0._rt;
amrex::Real UpwardDy_Ez_zz = 0._rt;
Expand All @@ -142,9 +139,6 @@ void FiniteDifferenceSolver::EvolveBPMLCartesian (
},

[=] AMREX_GPU_DEVICE (int i, int j, int k){
#ifdef AMREX_USE_EB
if(Sy(i, j, k) <= 0) return;
#endif

amrex::Real UpwardDx_Ez_zz = 0._rt;
amrex::Real UpwardDz_Ex_xx = 0._rt;
Expand All @@ -166,9 +160,6 @@ void FiniteDifferenceSolver::EvolveBPMLCartesian (
},

[=] AMREX_GPU_DEVICE (int i, int j, int k){
#ifdef AMREX_USE_EB
if(Sz(i, j, k) <= 0) return;
#endif

amrex::Real UpwardDy_Ex_xx = 0._rt;
amrex::Real UpwardDx_Ey_yy = 0._rt;
Expand Down