diff options
author | 2021-07-13 00:27:49 -0700 | |
---|---|---|
committer | 2021-07-13 00:27:49 -0700 | |
commit | b739ed9ccdbfeb878ead2a9d2a9ad61fbcfce35e (patch) | |
tree | 8f3891e1606f37189458c877fdefc9e51a1383d5 /Source/Evolve/WarpXEvolve.cpp | |
parent | 02e3b8cce573fb54253b10fc9104695d9c24b188 (diff) | |
download | WarpX-b739ed9ccdbfeb878ead2a9d2a9ad61fbcfce35e.tar.gz WarpX-b739ed9ccdbfeb878ead2a9d2a9ad61fbcfce35e.tar.zst WarpX-b739ed9ccdbfeb878ead2a9d2a9ad61fbcfce35e.zip |
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 <remi.lehe@normalesup.org>
* 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 <remi.lehe@normalesup.org>
Diffstat (limited to 'Source/Evolve/WarpXEvolve.cpp')
-rw-r--r-- | Source/Evolve/WarpXEvolve.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
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) { |