diff options
author | 2021-01-03 14:10:24 -0800 | |
---|---|---|
committer | 2021-01-03 14:10:24 -0800 | |
commit | 2fe64fb007abd3b55b320ba1acf2f285345248ae (patch) | |
tree | c9bac6b32c296889717598445917e8704b8c485e /Source/Particles/Collision/CollisionHandler.cpp | |
parent | 4a62e7c9c62f3ffee3f61902139fd302fefba521 (diff) | |
download | WarpX-2fe64fb007abd3b55b320ba1acf2f285345248ae.tar.gz WarpX-2fe64fb007abd3b55b320ba1acf2f285345248ae.tar.zst WarpX-2fe64fb007abd3b55b320ba1acf2f285345248ae.zip |
Reconfigured the collision classes to allow for generalization (#1583)
* Reconfigured the collision classes to allow for generalization
* Added literals to PairWiseCoulombCollision
* Minor cleanup of PairWiseCoulombCollision.cpp, removing query of ndt
* Add boilerplate to CollisionBase class
* Fixed white space in CollisionBase.H
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
Diffstat (limited to 'Source/Particles/Collision/CollisionHandler.cpp')
-rw-r--r-- | Source/Particles/Collision/CollisionHandler.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/Particles/Collision/CollisionHandler.cpp b/Source/Particles/Collision/CollisionHandler.cpp new file mode 100644 index 000000000..588e8d008 --- /dev/null +++ b/Source/Particles/Collision/CollisionHandler.cpp @@ -0,0 +1,52 @@ +/* Copyright 2020 David Grote + * + * This file is part of WarpX. + * + * License: BSD-3-Clause-LBNL + */ +#include "CollisionHandler.H" +#include "PairWiseCoulombCollision.H" +#include <AMReX_ParmParse.H> + +CollisionHandler::CollisionHandler() +{ + + // Read in collision input + amrex::ParmParse pp_collisions("collisions"); + pp_collisions.queryarr("collision_names", collision_names); + + // Create instances based on the collision type + auto const ncollisions = collision_names.size(); + collision_types.resize(ncollisions); + allcollisions.resize(ncollisions); + for (int i = 0; i < static_cast<int>(ncollisions); ++i) { + amrex::ParmParse pp_collision_name(collision_names[i]); + + // For legacy, pairwisecoulomb is the default + std::string type = "pairwisecoulomb"; + + pp_collision_name.query("type", type); + collision_types[i] = type; + + if (type == "pairwisecoulomb") { + allcollisions[i] = std::make_unique<PairWiseCoulombCollision>(collision_names[i]); + } + + } + +} + +/** Perform all collisions + * + * @param cur_time Current time + * @param mypc MultiParticleContainer calling this method + * + */ +void CollisionHandler::doCollisions ( amrex::Real cur_time, MultiParticleContainer* mypc) +{ + + for (auto& collision : allcollisions) { + collision->doCollisions( cur_time, mypc); + } + +} |