aboutsummaryrefslogtreecommitdiff
path: root/Source/BoundaryConditions/WarpXEvolvePML.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/BoundaryConditions/WarpXEvolvePML.cpp')
-rw-r--r--Source/BoundaryConditions/WarpXEvolvePML.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/Source/BoundaryConditions/WarpXEvolvePML.cpp b/Source/BoundaryConditions/WarpXEvolvePML.cpp
index b0688b2c1..08173e424 100644
--- a/Source/BoundaryConditions/WarpXEvolvePML.cpp
+++ b/Source/BoundaryConditions/WarpXEvolvePML.cpp
@@ -55,7 +55,6 @@ WarpX::DampPML (int lev, PatchType patch_type)
const Box& tbx = mfi.tilebox(Bx_nodal_flag);
const Box& tby = mfi.tilebox(By_nodal_flag);
const Box& tbz = mfi.tilebox(Bz_nodal_flag);
-
WRPX_DAMP_PML(tex.loVect(), tex.hiVect(),
tey.loVect(), tey.hiVect(),
tez.loVect(), tez.hiVect(),
@@ -79,3 +78,55 @@ WarpX::DampPML (int lev, PatchType patch_type)
}
}
}
+
+void
+WarpX::DampJPML ()
+{
+ for (int lev = 0; lev <= finest_level; ++lev) {
+ DampJPML(lev);
+ }
+}
+
+void
+WarpX::DampJPML (int lev)
+{
+ DampJPML(lev, PatchType::fine);
+ if (lev > 0) DampJPML(lev, PatchType::coarse);
+}
+
+void
+WarpX::DampJPML (int lev, PatchType patch_type)
+{
+ if (!do_pml) return;
+ if (!do_pml_j_damping) return;
+
+ BL_PROFILE("WarpX::DampJPML()");
+
+ if (pml[lev]->ok())
+ {
+ const auto& pml_j = (patch_type == PatchType::fine) ? pml[lev]->Getj_fp() : pml[lev]->Getj_cp();
+ const auto& sigba = (patch_type == PatchType::fine) ? pml[lev]->GetMultiSigmaBox_fp()
+ : pml[lev]->GetMultiSigmaBox_cp();
+
+#ifdef _OPENMP
+#pragma omp parallel if (Gpu::notInLaunchRegion())
+#endif
+ // amrex::Print()<<"===== DAMP PML ====="<<std::endl;
+ for ( MFIter mfi(*pml_j[0], TilingIfNotGPU()); mfi.isValid(); ++mfi )
+ {
+ const Box& tjx = mfi.tilebox(jx_nodal_flag);
+ const Box& tjy = mfi.tilebox(jy_nodal_flag);
+ const Box& tjz = mfi.tilebox(jz_nodal_flag);
+ // amrex::Print()<< "tjx = ["<< tjx.smallEnd()[0]<<", "<<tjx.smallEnd()[1]<<", "<<tjx.bigEnd()[0]<<", "<<tjx.bigEnd()[1]<<"]" <<std::endl;
+ // amrex::Print()<< "tjz = ["<< tjz.smallEnd()[0]<<", "<<tjz.smallEnd()[1]<<", "<<tjz.bigEnd()[0]<<", "<<tjz.bigEnd()[1]<<"]" <<std::endl;
+ WRPX_DAMPJ_PML(tjx.loVect(), tjx.hiVect(),
+ tjy.loVect(), tjy.hiVect(),
+ tjz.loVect(), tjz.hiVect(),
+ BL_TO_FORTRAN_3D((*pml_j[0])[mfi]),
+ BL_TO_FORTRAN_3D((*pml_j[1])[mfi]),
+ BL_TO_FORTRAN_3D((*pml_j[2])[mfi]),
+ WRPX_PML_SIGMAJ_TO_FORTRAN(sigba[mfi])); //WRPX_PML_SIGMACOEFF_TO_FORTRAN(sigba[mfi])
+ }
+
+ }
+}