aboutsummaryrefslogtreecommitdiff
path: root/Source/PhysicalParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Weiqun Zhang <weiqunzhang@lbl.gov> 2018-09-23 21:14:01 -0700
committerGravatar Maxence Thevenet <mthevenet@lbl.gov> 2018-10-03 14:38:27 -0700
commitfe08f1bab97b487a63f9aa054b1f10b3b2edcfb7 (patch)
tree21257b26728725dd56f2bb5db29c42a26d007f7d /Source/PhysicalParticleContainer.cpp
parentd4f2e2fb2339b1f6c679cf25dcb8016de872099b (diff)
downloadWarpX-fe08f1bab97b487a63f9aa054b1f10b3b2edcfb7.tar.gz
WarpX-fe08f1bab97b487a63f9aa054b1f10b3b2edcfb7.tar.zst
WarpX-fe08f1bab97b487a63f9aa054b1f10b3b2edcfb7.zip
add particles.deposit_on_main_grid option to allow deposit some particles to the main grid
Diffstat (limited to 'Source/PhysicalParticleContainer.cpp')
-rw-r--r--Source/PhysicalParticleContainer.cpp93
1 files changed, 50 insertions, 43 deletions
diff --git a/Source/PhysicalParticleContainer.cpp b/Source/PhysicalParticleContainer.cpp
index 403606bfb..5e33e85b2 100644
--- a/Source/PhysicalParticleContainer.cpp
+++ b/Source/PhysicalParticleContainer.cpp
@@ -891,6 +891,10 @@ PhysicalParticleContainer::Evolve (int lev,
}
}
+ if (deposit_on_main_grid && lev > 0) {
+ nfine_current = 0;
+ }
+
if (nfine_current != np || nfine_gather != np)
{
particle_tmp.resize(np);
@@ -1127,51 +1131,54 @@ PhysicalParticleContainer::Evolve (int lev,
const std::array<Real, 3>& xyzmin = xyzmin_tile;
- tbx.grow(ngJ);
- tby.grow(ngJ);
- tbz.grow(ngJ);
-
- local_jx.resize(tbx);
- local_jy.resize(tby);
- local_jz.resize(tbz);
-
- local_jx = 0.0;
- local_jy = 0.0;
- local_jz = 0.0;
-
- jx_ptr = local_jx.dataPtr();
- jy_ptr = local_jy.dataPtr();
- jz_ptr = local_jz.dataPtr();
-
- jxntot = local_jx.length();
- jyntot = local_jy.length();
- jzntot = local_jz.length();
-
- warpx_current_deposition(
- jx_ptr, &ngJ, jxntot,
- jy_ptr, &ngJ, jyntot,
- jz_ptr, &ngJ, jzntot,
- &np_current, xp.data(), yp.data(), zp.data(),
- uxp.data(), uyp.data(), uzp.data(),
- giv.data(), wp.data(), &this->charge,
- &xyzmin[0], &xyzmin[1], &xyzmin[2],
- &dt, &dx[0], &dx[1], &dx[2],
- &WarpX::nox,&WarpX::noy,&WarpX::noz,
- &lvect,&WarpX::current_deposition_algo);
-
- BL_PROFILE_VAR_STOP(blp_pxr_cd);
-
- BL_PROFILE_VAR_START(blp_accumulate);
- const int ncomp = 1;
- amrex_atomic_accumulate_fab(BL_TO_FORTRAN_3D(local_jx),
- BL_TO_FORTRAN_3D(jxfab), ncomp);
+ if (np_current > 0)
+ {
+ tbx.grow(ngJ);
+ tby.grow(ngJ);
+ tbz.grow(ngJ);
+
+ local_jx.resize(tbx);
+ local_jy.resize(tby);
+ local_jz.resize(tbz);
- amrex_atomic_accumulate_fab(BL_TO_FORTRAN_3D(local_jy),
- BL_TO_FORTRAN_3D(jyfab), ncomp);
+ local_jx = 0.0;
+ local_jy = 0.0;
+ local_jz = 0.0;
- amrex_atomic_accumulate_fab(BL_TO_FORTRAN_3D(local_jz),
- BL_TO_FORTRAN_3D(jzfab), ncomp);
- BL_PROFILE_VAR_STOP(blp_accumulate);
+ jx_ptr = local_jx.dataPtr();
+ jy_ptr = local_jy.dataPtr();
+ jz_ptr = local_jz.dataPtr();
+
+ jxntot = local_jx.length();
+ jyntot = local_jy.length();
+ jzntot = local_jz.length();
+
+ warpx_current_deposition(
+ jx_ptr, &ngJ, jxntot,
+ jy_ptr, &ngJ, jyntot,
+ jz_ptr, &ngJ, jzntot,
+ &np_current, xp.data(), yp.data(), zp.data(),
+ uxp.data(), uyp.data(), uzp.data(),
+ giv.data(), wp.data(), &this->charge,
+ &xyzmin[0], &xyzmin[1], &xyzmin[2],
+ &dt, &dx[0], &dx[1], &dx[2],
+ &WarpX::nox,&WarpX::noy,&WarpX::noz,
+ &lvect,&WarpX::current_deposition_algo);
+
+ BL_PROFILE_VAR_STOP(blp_pxr_cd);
+
+ BL_PROFILE_VAR_START(blp_accumulate);
+ const int ncomp = 1;
+ amrex_atomic_accumulate_fab(BL_TO_FORTRAN_3D(local_jx),
+ BL_TO_FORTRAN_3D(jxfab), ncomp);
+
+ amrex_atomic_accumulate_fab(BL_TO_FORTRAN_3D(local_jy),
+ BL_TO_FORTRAN_3D(jyfab), ncomp);
+
+ amrex_atomic_accumulate_fab(BL_TO_FORTRAN_3D(local_jz),
+ BL_TO_FORTRAN_3D(jzfab), ncomp);
+ BL_PROFILE_VAR_STOP(blp_accumulate);
+ }
if (np_current < np)
{