diff options
author | 2019-11-12 16:55:56 -0800 | |
---|---|---|
committer | 2019-11-12 16:55:56 -0800 | |
commit | bd8fb800bcb8675429464292cdd96dae8ac9c761 (patch) | |
tree | b12b7f2930cdd44f7fe155780d126dcbee65a43b /Source/Particles/MultiParticleContainer.cpp | |
parent | 1b3836bd9d479786f4e0c04c813468fd19ee2578 (diff) | |
download | WarpX-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.cpp | 60 |
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 ); + + } } } } |