PeTar
N-body code for collisional gravitational systems
escaper.hpp
Go to the documentation of this file.
1 #pragma once
2 #include<particle_simulator.hpp>
3 
5 class Escaper{
6 public:
7  PS::F64 r_escape_sq; // escape distance criterion square
8  bool check_energy_flag; // if true, escaper should have E>0
9 
10  Escaper(): r_escape_sq(PS::LARGE_FLOAT), check_energy_flag(true) {}
11 
13  template <class Tptcl, class Tpcm>
14  bool isEscaper(Tptcl& _p, Tpcm& _pcm) {
15  //assert(_p.pot_tot!=0.0);
16  bool is_escape=true;
17 
18  if (check_energy_flag) {
19  // check energy
20  PS::F64 kin = _p.vel*_p.vel;
21  PS::F64 tot = _p.pot_tot + kin;
22  if (tot<0) is_escape=false;
23  }
24 
25  // check distance
26 #ifdef RECORD_CM_IN_HEADER
27  PS::F64vec dr = _p.pos;
28 #else
29  PS::F64vec dr = _p.pos - _pcm.pos;
30 #endif
31  PS::F64 r2 = dr*dr;
32  if (r2<r_escape_sq) is_escape=false;
33 
34  return is_escape;
35  }
36 };
Escaper::isEscaper
bool isEscaper(Tptcl &_p, Tpcm &_pcm)
check escaper based on distance and c.m. of the system
Definition: escaper.hpp:14
PIKG::F64vec
Vector3< F64 > F64vec
Definition: pikg_vector.hpp:167
PIKG::F64
double F64
Definition: pikg_vector.hpp:17
Escaper
escaper checker
Definition: escaper.hpp:5
Escaper::check_energy_flag
bool check_energy_flag
Definition: escaper.hpp:8
Escaper::r_escape_sq
PS::F64 r_escape_sq
Definition: escaper.hpp:7
Escaper::Escaper
Escaper()
Definition: escaper.hpp:10