diff options
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r-- | Source/Particles/MultiParticleContainer.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index bf1ffb74e..d84bc1afa 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -54,6 +54,14 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) } } ionization_process = IonizationProcess(); + + // collision + allcollisions.resize(ncollisions); + for (int i = 0; i < ncollisions; ++i) { + allcollisions[i].reset + (new CollisionType(species_names, collision_names[i])); + } + } void @@ -120,6 +128,15 @@ MultiParticleContainer::ReadParameters () } } + // collision + ParmParse pc("collisions"); + pc.query("ncollisions", ncollisions); + BL_ASSERT(ncollisions >= 0); + if (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); @@ -609,6 +626,40 @@ MultiParticleContainer::doFieldIonization () } // pc_source } +void +MultiParticleContainer::doCoulombCollisions () +{ + BL_PROFILE("MPC::doCoulombCollisions"); + + for (int i = 0; i < ncollisions; ++i) + { + auto& species1 = allcontainers[ allcollisions[i]->m_species1_index ]; + auto& species2 = allcontainers[ allcollisions[i]->m_species2_index ]; + + // 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 if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi = species1->MakeMFIter(lev, info); mfi.isValid(); ++mfi){ + + CollisionType::doCoulombCollisionsWithinTile + ( lev, mfi, species1, species2, + allcollisions[i]->m_isSameSpecies, + allcollisions[i]->m_CoulombLog ); + + } + } + } +} + #ifdef WARPX_QED void MultiParticleContainer::InitQED () { |