aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/MultiParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Yin-YinjianZhao <yinjianzhao@lbl.gov> 2019-11-12 16:55:56 -0800
committerGravatar Yin-YinjianZhao <yinjianzhao@lbl.gov> 2019-11-12 16:55:56 -0800
commitbd8fb800bcb8675429464292cdd96dae8ac9c761 (patch)
treeb12b7f2930cdd44f7fe155780d126dcbee65a43b /Source/Particles/MultiParticleContainer.cpp
parent1b3836bd9d479786f4e0c04c813468fd19ee2578 (diff)
downloadWarpX-bd8fb800bcb8675429464292cdd96dae8ac9c761.tar.gz
WarpX-bd8fb800bcb8675429464292cdd96dae8ac9c761.tar.zst
WarpX-bd8fb800bcb8675429464292cdd96dae8ac9c761.zip
add CollisionType
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r--Source/Particles/MultiParticleContainer.cpp60
1 files changed, 39 insertions, 21 deletions
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp
index 6b3a34e38..c1c774cdc 100644
--- a/Source/Particles/MultiParticleContainer.cpp
+++ b/Source/Particles/MultiParticleContainer.cpp
@@ -54,6 +54,12 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core)
}
}
ionization_process = IonizationProcess();
+
+ // collision
+ for (int i = 0; i < ncollisions; ++i) {
+ allcollisions[i].reset(new CollisionType(species_names, collision_names[i]));
+ }
+
}
void
@@ -120,6 +126,13 @@ MultiParticleContainer::ReadParameters ()
}
}
+ // collisions
+ ParmParse pc("collisions");
+ pc.query("ncollisions", ncollisions);
+ BL_ASSERT(ncollisions >= 0);
+ pc.getarr("collision_names", collision_names);
+ BL_ASSERT(collision_names.size() == ncollisions);
+
}
pp.query("use_fdtd_nci_corr", WarpX::use_fdtd_nci_corr);
@@ -622,29 +635,34 @@ MultiParticleContainer::doCoulombCollisions ()
{
BL_PROFILE("MPC::doCoulombCollisions");
- // At this point, the code always collides the first and second species
- // TODO: Read the user input to read the different types of collisions requested
- // and loop over all types of collisions, selecting each time the
- // two types of species that will be collided
- auto& species1 = allcontainers[0];
- auto& species2 = allcontainers[1];
-
- // Enable tiling
- MFItInfo info;
- if (Gpu::notInLaunchRegion()) info.EnableTiling(species1->tile_size);
-
- // Loop over refinement levels
- for (int lev = 0; lev <= species1->finestLevel(); ++lev){
-
- // Loop over all grids/tiles at this level
+ for (int i = 0; i < ncollisions; ++i)
+ {
+ // At this point, the code always collides the first and second species
+ // TODO: Read the user input to read the different types of collisions requested
+ // and loop over all types of collisions, selecting each time the
+ // two types of species that will be collided
+ // auto& species1 = allcontainers[0];
+ // auto& species2 = allcontainers[1];
+ auto& species1 = allcollisions[i].m_species1;
+ auto& species2 = allcollisions[i].m_species2;
+
+ // Enable tiling
+ MFItInfo info;
+ if (Gpu::notInLaunchRegion()) info.EnableTiling(species1->tile_size);
+
+ // Loop over refinement levels
+ for (int lev = 0; lev <= species1->finestLevel(); ++lev){
+
+ // Loop over all grids/tiles at this level
#ifdef _OPENMP
- info.SetDynamic(true);
- #pragma omp parallel
+ info.SetDynamic(true);
+ #pragma omp parallel
#endif
- for (MFIter mfi = species1->MakeMFIter(lev, info); mfi.isValid(); ++mfi){
-
- doCoulombCollisionsWithinTile( lev, mfi, species1, species2 );
-
+ for (MFIter mfi = species1->MakeMFIter(lev, info); mfi.isValid(); ++mfi){
+
+ doCoulombCollisionsWithinTile( lev, mfi, species1, species2 );
+
+ }
}
}
}