From 2fe64fb007abd3b55b320ba1acf2f285345248ae Mon Sep 17 00:00:00 2001 From: David Grote Date: Sun, 3 Jan 2021 14:10:24 -0800 Subject: 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 --- Source/Particles/Collision/CollisionHandler.cpp | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Source/Particles/Collision/CollisionHandler.cpp (limited to 'Source/Particles/Collision/CollisionHandler.cpp') 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 + +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(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(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); + } + +} -- cgit v1.2.3