aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpXComm.cpp
diff options
context:
space:
mode:
authorGravatar Remi Lehe <remi.lehe@normalesup.org> 2018-10-04 17:18:55 -0700
committerGravatar Remi Lehe <remi.lehe@normalesup.org> 2018-10-04 17:18:55 -0700
commit129eb13c2798467ede32cce1ceb80330d8067b75 (patch)
tree3d35ac99c8681b03c4f078e8a82a6f2058340219 /Source/WarpXComm.cpp
parentc669619caa759191a6a72e8425954e7b2616f48a (diff)
parentf98df173fb6c97d6c1cd13e204ee37f478f6680a (diff)
downloadWarpX-129eb13c2798467ede32cce1ceb80330d8067b75.tar.gz
WarpX-129eb13c2798467ede32cce1ceb80330d8067b75.tar.zst
WarpX-129eb13c2798467ede32cce1ceb80330d8067b75.zip
Merge branch 'dev' into depositonmaingrid
Diffstat (limited to 'Source/WarpXComm.cpp')
-rw-r--r--Source/WarpXComm.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/Source/WarpXComm.cpp b/Source/WarpXComm.cpp
index 435a430b0..23ce0ce0b 100644
--- a/Source/WarpXComm.cpp
+++ b/Source/WarpXComm.cpp
@@ -499,7 +499,8 @@ WarpX::SyncRho (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rhof,
Vector<std::unique_ptr<MultiFab> > rho_f_g(finest_level+1);
Vector<std::unique_ptr<MultiFab> > rho_c_g(finest_level+1);
-
+ Vector<std::unique_ptr<MultiFab> > rho_buf_g(finest_level+1);
+
if (WarpX::use_filter) {
for (int lev = 0; lev <= finest_level; ++lev) {
const int ncomp = rhof[lev]->nComp();
@@ -521,6 +522,18 @@ WarpX::SyncRho (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rhof,
applyFilter(*rho_c_g[lev], *rhoc[lev]);
std::swap(rho_c_g[lev], rhoc[lev]);
}
+ for (int lev = 1; lev <= finest_level; ++lev) {
+ if (charge_buf[lev]) {
+ const int ncomp = charge_buf[lev]->nComp();
+ IntVect ng = charge_buf[lev]->nGrowVect();
+ ng += 1;
+ rho_buf_g[lev].reset(new MultiFab(charge_buf[lev]->boxArray(),
+ charge_buf[lev]->DistributionMap(),
+ ncomp, ng));
+ applyFilter(*rho_buf_g[lev], *charge_buf[lev]);
+ std::swap(*rho_buf_g[lev], *charge_buf[lev]);
+ }
+ }
}
// Sum up fine patch
@@ -537,7 +550,14 @@ WarpX::SyncRho (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rhof,
const int ncomp = rhoc[lev+1]->nComp();
const IntVect& ngsrc = rhoc[lev+1]->nGrowVect();
const IntVect ngdst = IntVect::TheZeroVector();
- rhof[lev]->copy(*rhoc[lev+1],0,0,ncomp,ngsrc,ngdst,period,FabArrayBase::ADD);
+ const MultiFab* crho = rhoc[lev+1].get();
+ if (charge_buf[lev+1])
+ {
+ MultiFab::Add(*charge_buf[lev+1], *rhoc[lev+1], 0, 0, ncomp, ngsrc);
+ crho = charge_buf[lev+1].get();
+ }
+
+ rhof[lev]->copy(*crho,0,0,ncomp,ngsrc,ngdst,period,FabArrayBase::ADD);
}
// Sum up coarse patch
@@ -556,6 +576,13 @@ WarpX::SyncRho (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rhof,
std::swap(rho_c_g[lev], rhoc[lev]);
MultiFab::Copy(*rhoc[lev], *rho_c_g[lev], 0, 0, rhoc[lev]->nComp(), 0);
}
+ for (int lev = 1; lev <= finest_level; ++lev)
+ {
+ if (rho_buf_g[lev]) {
+ std::swap(rho_buf_g[lev], charge_buf[lev]);
+ MultiFab::Copy(*charge_buf[lev], *rho_buf_g[lev], 0, 0, rhoc[lev]->nComp(), 0);
+ }
+ }
}
// sync shared nodal points