From b739ed9ccdbfeb878ead2a9d2a9ad61fbcfce35e Mon Sep 17 00:00:00 2001 From: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> Date: Tue, 13 Jul 2021 00:27:49 -0700 Subject: Interface silver mueller (#2051) * interface silvermueller with refactored boundary interface * add interface in silver mueller input files * define first and second half for EvolveB * add do_pml parse snce RZ needs do_pml to be st to false * Silver-Mueller boundary condition in docs * add firsthalf in ApplyBfieldBoundary within PushPSATD as only first first half is used to apply silvermueller * CallSilverMueller once for all boundaries * remove unused do silvermueller flag * fix typo in input file * Apply suggestions from code review Co-authored-by: Remi Lehe * abort message if silver-mueller is not selected on all valid boundaries * fix typo * fix eol * remove ifdef from inside the Assert message * check silver-mueller selection after reading all boundaries Co-authored-by: Remi Lehe --- Source/Evolve/WarpXEvolve.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'Source/Evolve/WarpXEvolve.cpp') diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index 02bb1e1a1..eae665d44 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -412,9 +412,8 @@ WarpX::OneStep_nosub (Real cur_time) EvolveG(0.5_rt * dt[0], DtType::FirstHalf); FillBoundaryF(guard_cells.ng_FieldSolverF); FillBoundaryG(guard_cells.ng_FieldSolverG); - EvolveB(0.5_rt * dt[0]); // We now have B^{n+1/2} + EvolveB(0.5_rt * dt[0], DtType::FirstHalf); // We now have B^{n+1/2} - if (do_silver_mueller) ApplySilverMuellerBoundary( dt[0] ); FillBoundaryB(guard_cells.ng_FieldSolver); if (WarpX::em_solver_medium == MediumForEM::Vacuum) { @@ -430,7 +429,7 @@ WarpX::OneStep_nosub (Real cur_time) FillBoundaryE(guard_cells.ng_FieldSolver); EvolveF(0.5_rt * dt[0], DtType::SecondHalf); EvolveG(0.5_rt * dt[0], DtType::SecondHalf); - EvolveB(0.5_rt * dt[0]); // We now have B^{n+1} + EvolveB(0.5_rt * dt[0], DtType::SecondHalf); // We now have B^{n+1} // Synchronize E and B fields on nodal points NodalSyncE(); @@ -616,7 +615,7 @@ WarpX::OneStep_sub1 (Real curtime) ApplyFilterandSumBoundaryRho(fine_lev, PatchType::fine, 0, 2*ncomps); NodalSyncRho(fine_lev, PatchType::fine, 0, 2); - EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev]); + EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::FirstHalf); EvolveF(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::FirstHalf); FillBoundaryB(fine_lev, PatchType::fine, guard_cells.ng_FieldSolver); FillBoundaryF(fine_lev, PatchType::fine, guard_cells.ng_alloc_F); @@ -624,7 +623,7 @@ WarpX::OneStep_sub1 (Real curtime) EvolveE(fine_lev, PatchType::fine, dt[fine_lev]); FillBoundaryE(fine_lev, PatchType::fine, guard_cells.ng_FieldGather); - EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev]); + EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::SecondHalf); EvolveF(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::SecondHalf); if (do_pml) { @@ -643,7 +642,7 @@ WarpX::OneStep_sub1 (Real curtime) AddCurrentFromFineLevelandSumBoundary(coarse_lev); AddRhoFromFineLevelandSumBoundary(coarse_lev, 0, ncomps); - EvolveB(fine_lev, PatchType::coarse, dt[fine_lev]); + EvolveB(fine_lev, PatchType::coarse, dt[fine_lev], DtType::FirstHalf); EvolveF(fine_lev, PatchType::coarse, dt[fine_lev], DtType::FirstHalf); FillBoundaryB(fine_lev, PatchType::coarse, guard_cells.ng_FieldGather); FillBoundaryF(fine_lev, PatchType::coarse, guard_cells.ng_FieldSolverF); @@ -651,7 +650,7 @@ WarpX::OneStep_sub1 (Real curtime) EvolveE(fine_lev, PatchType::coarse, dt[fine_lev]); FillBoundaryE(fine_lev, PatchType::coarse, guard_cells.ng_FieldGather); - EvolveB(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev]); + EvolveB(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev], DtType::FirstHalf); EvolveF(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev], DtType::FirstHalf); FillBoundaryB(coarse_lev, PatchType::fine, guard_cells.ng_FieldGather); FillBoundaryF(coarse_lev, PatchType::fine, guard_cells.ng_FieldSolverF); @@ -674,7 +673,7 @@ WarpX::OneStep_sub1 (Real curtime) ApplyFilterandSumBoundaryRho(fine_lev, PatchType::fine, 0, ncomps); NodalSyncRho(fine_lev, PatchType::fine, 0, 2); - EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev]); + EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::FirstHalf); EvolveF(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::FirstHalf); FillBoundaryB(fine_lev, PatchType::fine, guard_cells.ng_FieldSolver); FillBoundaryF(fine_lev, PatchType::fine, guard_cells.ng_FieldSolverF); @@ -682,7 +681,7 @@ WarpX::OneStep_sub1 (Real curtime) EvolveE(fine_lev, PatchType::fine, dt[fine_lev]); FillBoundaryE(fine_lev, PatchType::fine, guard_cells.ng_FieldSolver); - EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev]); + EvolveB(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::SecondHalf); EvolveF(fine_lev, PatchType::fine, 0.5_rt*dt[fine_lev], DtType::SecondHalf); if (do_pml) { @@ -703,7 +702,7 @@ WarpX::OneStep_sub1 (Real curtime) EvolveE(fine_lev, PatchType::coarse, dt[fine_lev]); FillBoundaryE(fine_lev, PatchType::coarse, guard_cells.ng_FieldSolver); - EvolveB(fine_lev, PatchType::coarse, dt[fine_lev]); + EvolveB(fine_lev, PatchType::coarse, dt[fine_lev], DtType::SecondHalf); EvolveF(fine_lev, PatchType::coarse, dt[fine_lev], DtType::SecondHalf); if (do_pml) { @@ -720,7 +719,7 @@ WarpX::OneStep_sub1 (Real curtime) EvolveE(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev]); FillBoundaryE(coarse_lev, PatchType::fine, guard_cells.ng_FieldSolver); - EvolveB(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev]); + EvolveB(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev], DtType::SecondHalf); EvolveF(coarse_lev, PatchType::fine, 0.5_rt*dt[coarse_lev], DtType::SecondHalf); if (do_pml) { -- cgit v1.2.3