aboutsummaryrefslogtreecommitdiff
path: root/Source/ParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Andrew Myers <atmyers2@gmail.com> 2018-10-15 10:39:41 -0700
committerGravatar Andrew Myers <atmyers2@gmail.com> 2018-10-15 10:39:41 -0700
commit7758925a9079d0772995c2c0b9445f17db75adc4 (patch)
treec481436904197af600ee46bda560b7ea698d3f80 /Source/ParticleContainer.cpp
parentcea0326b734f6c0dbbdab456eb8c59dc8d150734 (diff)
parent1a0a2542d16d94b61839aa85d1db3e579fd40c4e (diff)
downloadWarpX-7758925a9079d0772995c2c0b9445f17db75adc4.tar.gz
WarpX-7758925a9079d0772995c2c0b9445f17db75adc4.tar.zst
WarpX-7758925a9079d0772995c2c0b9445f17db75adc4.zip
fixing merge conflicts.
Diffstat (limited to 'Source/ParticleContainer.cpp')
-rw-r--r--Source/ParticleContainer.cpp77
1 files changed, 46 insertions, 31 deletions
diff --git a/Source/ParticleContainer.cpp b/Source/ParticleContainer.cpp
index c40e0c1bb..39119e960 100644
--- a/Source/ParticleContainer.cpp
+++ b/Source/ParticleContainer.cpp
@@ -23,6 +23,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core)
else if (species_types[i] == PCTypes::RigidInjected) {
allcontainers[i].reset(new RigidInjectedParticleContainer(amr_core, i, species_names[i]));
}
+ allcontainers[i]->deposit_on_main_grid = deposit_on_main_grid[i];
}
if (WarpX::use_laser) {
allcontainers[n-1].reset(new LaserParticleContainer(amr_core,n-1));
@@ -44,6 +45,16 @@ MultiParticleContainer::ReadParameters ()
pp.getarr("species_names", species_names);
BL_ASSERT(species_names.size() == nspecies);
+ deposit_on_main_grid.resize(nspecies, 0);
+ std::vector<std::string> tmp;
+ pp.queryarr("deposit_on_main_grid", tmp);
+ for (auto const& name : tmp) {
+ auto it = std::find(species_names.begin(), species_names.end(), name);
+ AMREX_ALWAYS_ASSERT_WITH_MESSAGE(it != species_names.end(), "ERROR: species in particles.deposit_on_main_grid must be part of particles.species_names");
+ int i = std::distance(species_names.begin(), it);
+ deposit_on_main_grid[i] = 1;
+ }
+
species_types.resize(nspecies, PCTypes::Physical);
std::vector<std::string> rigid_injected_species;
@@ -197,7 +208,7 @@ MultiParticleContainer::Evolve (int lev,
const MultiFab& Bx, const MultiFab& By, const MultiFab& Bz,
MultiFab& jx, MultiFab& jy, MultiFab& jz,
MultiFab* cjx, MultiFab* cjy, MultiFab* cjz,
- MultiFab* rho,
+ MultiFab* rho, MultiFab* crho,
const MultiFab* cEx, const MultiFab* cEy, const MultiFab* cEz,
const MultiFab* cBx, const MultiFab* cBy, const MultiFab* cBz,
Real t, Real dt)
@@ -209,9 +220,10 @@ MultiParticleContainer::Evolve (int lev,
if (cjy) cjy->setVal(0.0);
if (cjz) cjz->setVal(0.0);
if (rho) rho->setVal(0.0);
+ if (crho) crho->setVal(0.0);
for (auto& pc : allcontainers) {
pc->Evolve(lev, Ex, Ey, Ez, Bx, By, Bz, jx, jy, jz, cjx, cjy, cjz,
- rho, cEx, cEy, cEz, cBx, cBy, cBz, t, dt);
+ rho, crho, cEx, cEy, cEz, cBx, cBy, cBz, t, dt);
}
}
@@ -328,36 +340,39 @@ MultiParticleContainer
WarpXParticleContainer* pc = allcontainers[i].get();
WarpXParticleContainer::DiagnosticParticles diagnostic_particles;
pc->GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles);
-
- for (auto it = diagnostic_particles.begin(); it != diagnostic_particles.end(); ++it)
- {
- parts[i].GetRealData(DiagIdx::w).insert( parts[i].GetRealData(DiagIdx::w ).end(),
- it->second.GetRealData(DiagIdx::w ).begin(),
- it->second.GetRealData(DiagIdx::w ).end());
-
- parts[i].GetRealData(DiagIdx::x).insert( parts[i].GetRealData(DiagIdx::x ).end(),
- it->second.GetRealData(DiagIdx::x ).begin(),
- it->second.GetRealData(DiagIdx::x ).end());
- parts[i].GetRealData(DiagIdx::y).insert( parts[i].GetRealData(DiagIdx::y ).end(),
- it->second.GetRealData(DiagIdx::y ).begin(),
- it->second.GetRealData(DiagIdx::y ).end());
-
- parts[i].GetRealData(DiagIdx::z).insert( parts[i].GetRealData(DiagIdx::z ).end(),
- it->second.GetRealData(DiagIdx::z ).begin(),
- it->second.GetRealData(DiagIdx::z ).end());
-
- parts[i].GetRealData(DiagIdx::ux).insert( parts[i].GetRealData(DiagIdx::ux).end(),
- it->second.GetRealData(DiagIdx::ux).begin(),
- it->second.GetRealData(DiagIdx::ux).end());
-
- parts[i].GetRealData(DiagIdx::uy).insert( parts[i].GetRealData(DiagIdx::uy).end(),
- it->second.GetRealData(DiagIdx::uy).begin(),
- it->second.GetRealData(DiagIdx::uy).end());
-
- parts[i].GetRealData(DiagIdx::uz).insert( parts[i].GetRealData(DiagIdx::uz).end(),
- it->second.GetRealData(DiagIdx::uz).begin(),
- it->second.GetRealData(DiagIdx::uz).end());
+ for (int lev = 0; lev <= pc->finestLevel(); ++lev)
+ {
+ for (auto it = diagnostic_particles[lev].begin(); it != diagnostic_particles[lev].end(); ++it)
+ {
+ parts[i].GetRealData(DiagIdx::w).insert( parts[i].GetRealData(DiagIdx::w ).end(),
+ it->second.GetRealData(DiagIdx::w ).begin(),
+ it->second.GetRealData(DiagIdx::w ).end());
+
+ parts[i].GetRealData(DiagIdx::x).insert( parts[i].GetRealData(DiagIdx::x ).end(),
+ it->second.GetRealData(DiagIdx::x ).begin(),
+ it->second.GetRealData(DiagIdx::x ).end());
+
+ parts[i].GetRealData(DiagIdx::y).insert( parts[i].GetRealData(DiagIdx::y ).end(),
+ it->second.GetRealData(DiagIdx::y ).begin(),
+ it->second.GetRealData(DiagIdx::y ).end());
+
+ parts[i].GetRealData(DiagIdx::z).insert( parts[i].GetRealData(DiagIdx::z ).end(),
+ it->second.GetRealData(DiagIdx::z ).begin(),
+ it->second.GetRealData(DiagIdx::z ).end());
+
+ parts[i].GetRealData(DiagIdx::ux).insert( parts[i].GetRealData(DiagIdx::ux).end(),
+ it->second.GetRealData(DiagIdx::ux).begin(),
+ it->second.GetRealData(DiagIdx::ux).end());
+
+ parts[i].GetRealData(DiagIdx::uy).insert( parts[i].GetRealData(DiagIdx::uy).end(),
+ it->second.GetRealData(DiagIdx::uy).begin(),
+ it->second.GetRealData(DiagIdx::uy).end());
+
+ parts[i].GetRealData(DiagIdx::uz).insert( parts[i].GetRealData(DiagIdx::uz).end(),
+ it->second.GetRealData(DiagIdx::uz).begin(),
+ it->second.GetRealData(DiagIdx::uz).end());
+ }
}
}
}