diff options
author | 2021-05-03 12:48:21 -0700 | |
---|---|---|
committer | 2021-05-03 12:48:21 -0700 | |
commit | 1f8862084391fbeb4b87f765eea01beaf5f21074 (patch) | |
tree | 75c526dbafbd6fb14b5602970087552b72ae9f26 /Source/FieldSolver/WarpXPushFieldsEM.cpp | |
parent | 7113d7e9ce4fe89c87ba5e2c490a24595f85bc74 (diff) | |
download | WarpX-1f8862084391fbeb4b87f765eea01beaf5f21074.tar.gz WarpX-1f8862084391fbeb4b87f765eea01beaf5f21074.tar.zst WarpX-1f8862084391fbeb4b87f765eea01beaf5f21074.zip |
Implement div(B) Cleaning With FDTD (#1829)
* Implement div(B) Cleaning With FDTD
* Add CI Test
* Clean Up
Diffstat (limited to 'Source/FieldSolver/WarpXPushFieldsEM.cpp')
-rw-r--r-- | Source/FieldSolver/WarpXPushFieldsEM.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index a991c539d..222a6ae6f 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -192,9 +192,11 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt) // Evolve B field in regular cells if (patch_type == PatchType::fine) { - m_fdtd_solver_fp[lev]->EvolveB(Bfield_fp[lev], Efield_fp[lev], m_face_areas[lev], lev, a_dt ); + m_fdtd_solver_fp[lev]->EvolveB(Bfield_fp[lev], Efield_fp[lev], G_fp[lev], + m_face_areas[lev], lev, a_dt); } else { - m_fdtd_solver_cp[lev]->EvolveB(Bfield_cp[lev], Efield_cp[lev], m_face_areas[lev], lev, a_dt ); + m_fdtd_solver_cp[lev]->EvolveB(Bfield_cp[lev], Efield_cp[lev], G_cp[lev], + m_face_areas[lev], lev, a_dt); } // Evolve B field in PML cells @@ -318,7 +320,50 @@ WarpX::EvolveF (int lev, PatchType patch_type, amrex::Real a_dt, DtType a_dt_typ pml[lev]->GetF_cp(), pml[lev]->GetE_cp(), a_dt ); } } +} + +void +WarpX::EvolveG (amrex::Real a_dt, DtType a_dt_type) +{ + if (!do_divb_cleaning) return; + + for (int lev = 0; lev <= finest_level; ++lev) + { + EvolveG(lev, a_dt, a_dt_type); + } +} + +void +WarpX::EvolveG (int lev, amrex::Real a_dt, DtType a_dt_type) +{ + if (!do_divb_cleaning) return; + + EvolveG(lev, PatchType::fine, a_dt, a_dt_type); + + if (lev > 0) + { + EvolveG(lev, PatchType::coarse, a_dt, a_dt_type); + } +} + +void +WarpX::EvolveG (int lev, PatchType patch_type, amrex::Real a_dt, DtType /*a_dt_type*/) +{ + if (!do_divb_cleaning) return; + + WARPX_PROFILE("WarpX::EvolveG()"); + + // Evolve G field in regular cells + if (patch_type == PatchType::fine) + { + m_fdtd_solver_fp[lev]->EvolveG(G_fp[lev], Bfield_fp[lev], a_dt); + } + else // coarse patch + { + m_fdtd_solver_cp[lev]->EvolveG(G_cp[lev], Bfield_cp[lev], a_dt); + } + // TODO Evolution in PML cells will go here } void |