ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
|
#include "collision.hpp"
#include "BoxGeometry.hpp"
#include "Particle.hpp"
#include "bonded_interactions/bonded_interaction_data.hpp"
#include "cell_system/Cell.hpp"
#include "cell_system/CellStructure.hpp"
#include "communication.hpp"
#include "errorhandling.hpp"
#include "nonbonded_interactions/nonbonded_interaction_data.hpp"
#include "system/System.hpp"
#include "virtual_sites.hpp"
#include <utils/Vector.hpp>
#include <utils/constants.hpp>
#include <utils/math/sqr.hpp>
#include <utils/mpi/all_compare.hpp>
#include <utils/mpi/gather_buffer.hpp>
#include <boost/mpi/collectives.hpp>
#include <boost/serialization/serialization.hpp>
#include <algorithm>
#include <array>
#include <cmath>
#include <stdexcept>
#include <string>
#include <utility>
#include <vector>
Go to the source code of this file.
Classes | |
struct | CollisionPair |
Data type holding the info about a single collision. More... | |
Namespaces | |
namespace | boost |
namespace | boost::serialization |
namespace | anonymous_namespace{collision.cpp} |
Functions | |
template<typename Archive > | |
void | boost::serialization::serialize (Archive &ar, CollisionPair &c, const unsigned int) |
Particle & | anonymous_namespace{collision.cpp}::get_part (CellStructure &cell_structure, int id) |
static bool | bind_centers () |
Return true if a bond between the centers of the colliding particles needs to be placed. | |
static int | get_bond_num_partners (int bond_id) |
void | prepare_local_collision_queue () |
void | queue_collision (const int part1, const int part2) |
Add the collision between the given particle ids to the collision queue. | |
static auto const & | glue_to_surface_calc_vs_pos (Particle const &p1, Particle const &p2, BoxGeometry const &box_geo, Utils::Vector3d &pos) |
Calculate position of vs for GLUE_TO_SURFACE mode. | |
static void | bind_at_point_of_collision_calc_vs_pos (Particle const &p1, Particle const &p2, BoxGeometry const &box_geo, Utils::Vector3d &pos1, Utils::Vector3d &pos2) |
static void | coldet_do_three_particle_bond (Particle &p, Particle const &p1, Particle const &p2, BoxGeometry const &box_geo) |
static void | place_vs_and_relate_to_particle (CellStructure &cell_structure, BoxGeometry const &box_geo, double const min_global_cut, int const current_vs_pid, Utils::Vector3d const &pos, int const relate_to) |
static void | bind_at_poc_create_bond_between_vs (CellStructure &cell_structure, int const current_vs_pid, CollisionPair const &c) |
static void | glue_to_surface_bind_part_to_vs (Particle const *const p1, Particle const *const p2, int const vs_pid_plus_one, CollisionPair const &, CellStructure &cell_structure) |
std::vector< CollisionPair > | gather_global_collision_queue () |
static void | three_particle_binding_do_search (Cell *basecell, Particle &p1, Particle &p2, BoxGeometry const &box_geo) |
static void | three_particle_binding_domain_decomposition (CellStructure &cell_structure, BoxGeometry const &box_geo, std::vector< CollisionPair > const &gathered_queue) |
void | handle_collisions (CellStructure &cell_structure) |
Handle the collisions recorded in the queue. | |
Variables | |
static std::vector< CollisionPair > | local_collision_queue |
During force calculation, colliding particles are recorded in the queue. The queue is processed after force calculation, when it is safe to add particles. | |
Collision_parameters | collision_params |
Parameters for collision detection. | |
|
static |
Definition at line 362 of file collision.cpp.
References Collision_parameters::bond_vs, collision_params, get_bond_num_partners(), CellStructure::get_local_particle(), CollisionPair::pp1, and CollisionPair::pp2.
Referenced by handle_collisions().
|
static |
Definition at line 268 of file collision.cpp.
References collision_params, BoxGeometry::get_mi_vector(), Particle::pos(), and Collision_parameters::vs_placement.
Referenced by handle_collisions().
|
static |
Return true if a bond between the centers of the colliding particles needs to be placed.
At this point, all modes need this.
Definition at line 91 of file collision.cpp.
References collision_params, GLUE_TO_SURF, Collision_parameters::mode, and OFF.
Referenced by handle_collisions().
|
static |
Definition at line 280 of file collision.cpp.
References Collision_parameters::bond_three_particles, Particle::bonds(), collision_params, Collision_parameters::distance, BoxGeometry::get_mi_vector(), Particle::id(), Utils::pi(), Particle::pos(), Collision_parameters::three_particle_angle_resolution, and TINY_COS_VALUE.
Referenced by three_particle_binding_do_search().
std::vector< CollisionPair > gather_global_collision_queue | ( | ) |
Definition at line 408 of file collision.cpp.
References comm_cart, Utils::Mpi::gather_buffer(), local_collision_queue, and res.
Referenced by handle_collisions().
|
static |
Definition at line 100 of file collision.cpp.
References BondedInteractionsMap::at(), bonded_ia_params, and number_of_partners().
Referenced by bind_at_poc_create_bond_between_vs(), and Collision_parameters::initialize().
|
static |
Definition at line 387 of file collision.cpp.
References Collision_parameters::bond_vs, Particle::bonds(), collision_params, anonymous_namespace{collision.cpp}::get_part(), Particle::id(), Collision_parameters::part_type_after_glueing, and Particle::type().
Referenced by handle_collisions().
|
static |
Calculate position of vs for GLUE_TO_SURFACE mode.
Returns id of particle to bind vs to.
Definition at line 243 of file collision.cpp.
References collision_params, Collision_parameters::dist_glued_part_to_vs, BoxGeometry::get_mi_vector(), Collision_parameters::part_type_to_attach_vs_to, Collision_parameters::part_type_to_be_glued, Particle::pos(), pos, and Particle::type().
Referenced by handle_collisions().
void handle_collisions | ( | CellStructure & | cell_structure | ) |
Handle the collisions recorded in the queue.
Definition at line 482 of file collision.cpp.
References Utils::Mpi::all_compare(), bind_at_poc_create_bond_between_vs(), bind_at_point_of_collision_calc_vs_pos(), bind_centers(), BIND_THREE_PARTICLES, BIND_VS, Collision_parameters::bond_centers, Particle::bonds(), collision_params, comm_cart, Cells::DATA_PART_BONDS, Cells::DATA_PART_PROPERTIES, gather_global_collision_queue(), CellStructure::get_local_particle(), CellStructure::get_max_local_particle_id(), anonymous_namespace{collision.cpp}::get_part(), System::get_system(), GLUE_TO_SURF, glue_to_surface_bind_part_to_vs(), glue_to_surface_calc_vs_pos(), Particle::id(), Particle::is_ghost(), local_collision_queue, Collision_parameters::mode, Collision_parameters::part_type_after_glueing, Collision_parameters::part_type_to_be_glued, place_vs_and_relate_to_particle(), pos, Cells::RESORT_GLOBAL, Particle::set_can_rotate_all_axes(), CellStructure::set_resort_particles(), three_particle_binding_domain_decomposition(), Particle::type(), and CellStructure::update_ghosts_and_resort_particle().
Referenced by System::System::integrate().
|
static |
Definition at line 347 of file collision.cpp.
References CellStructure::add_particle(), collision_params, anonymous_namespace{collision.cpp}::get_part(), pos, Collision_parameters::vs_particle_type, and vs_relate_to().
Referenced by handle_collisions().
void prepare_local_collision_queue | ( | ) |
Definition at line 234 of file collision.cpp.
References local_collision_queue.
Referenced by System::System::calculate_forces().
void queue_collision | ( | const int | part1, |
const int | part2 | ||
) |
Add the collision between the given particle ids to the collision queue.
Definition at line 236 of file collision.cpp.
References local_collision_queue.
Referenced by detect_collision().
|
static |
Definition at line 417 of file collision.cpp.
References Neighbors< CellRef >::all(), coldet_do_three_particle_bond(), Particle::id(), Particle::is_ghost(), and Cell::neighbors().
Referenced by three_particle_binding_domain_decomposition().
|
static |
Definition at line 458 of file collision.cpp.
References CellStructure::find_current_cell(), CellStructure::get_local_particle(), and three_particle_binding_do_search().
Referenced by handle_collisions().
Collision_parameters collision_params |
Parameters for collision detection.
Definition at line 73 of file collision.cpp.
Referenced by bind_at_poc_create_bond_between_vs(), bind_at_point_of_collision_calc_vs_pos(), bind_centers(), System::System::calculate_forces(), coldet_do_three_particle_bond(), collision_detection_cutoff(), ScriptInterface::CollisionDetection::CollisionDetection::CollisionDetection(), detect_collision(), ScriptInterface::CollisionDetection::CollisionDetection::do_call_method(), System::System::get_global_ghost_flags(), glue_to_surface_bind_part_to_vs(), glue_to_surface_calc_vs_pos(), glue_to_surface_criterion(), handle_collisions(), Collision_parameters::initialize(), and place_vs_and_relate_to_particle().
|
static |
During force calculation, colliding particles are recorded in the queue. The queue is processed after force calculation, when it is safe to add particles.
Definition at line 70 of file collision.cpp.
Referenced by gather_global_collision_queue(), handle_collisions(), prepare_local_collision_queue(), and queue_collision().