PeTar
N-body code for collisional gravitational systems
pseudoparticle_multipole.hpp
Go to the documentation of this file.
1 #pragma once
2 #include "Common/binary_tree.h"
3 #include <iostream>
4 
7 public:
9  bool checkParams() {
10  return true;
11  }
12 
14 
18  template <class Tptcl>
19  void createSampleParticles(Tptcl* _ptcl_artificial,
20  COMM::BinaryTree<Tptcl,COMM::Binary> &_bin) {
21  PS::F64 m12 = _bin.mass;
22  PS::F64 mu = _bin.m1*_bin.m2/m12;
23  PS::F64 prefactor = _bin.semi*std::sqrt(mu/m12);
24  PS::F64 pmass = m12/3.0;
25  PS::F64 ecc2 = _bin.ecc*_bin.ecc;
26 
27  PS::F64 beta = prefactor*std::sqrt((1-ecc2)/4.0);
28  PS::F64 alpha= prefactor*std::sqrt(3*ecc2+0.75);
29 
30  Tptcl* pi = &(_ptcl_artificial[0]);
31  pi->mass = pmass;
32  pi->pos = PS::F64vec(0, 2*beta, 0 );
33  _bin.rotateToOriginalFrame(&(pi->pos.x));
34  pi->pos += _bin.pos;
35  pi->vel = _bin.vel;
36 
37  pi = &(_ptcl_artificial[1]);
38  pi->mass = pmass;
39  pi->pos = PS::F64vec(alpha, -beta, 0 );
40  _bin.rotateToOriginalFrame(&(pi->pos.x));
41  pi->pos += _bin.pos;
42  pi->vel = _bin.vel;
43 
44  pi = &(_ptcl_artificial[2]);
45  pi->mass = pmass;
46  pi->pos = PS::F64vec(-alpha, -beta, 0 );
47  _bin.rotateToOriginalFrame(&(pi->pos.x));
48  pi->pos += _bin.pos;
49  pi->vel = _bin.vel;
50 
51 #ifdef ARTIFICIAL_PARTICLE_DEBUG
52  PS::F64vec dv = (_ptcl_artificial[0].pos + _ptcl_artificial[1].pos + _ptcl_artificial[2].pos)/3 - _bin.pos;
53  assert(dv*dv<1e-10);
54 #endif
55  }
56 
58  static PS::S32 getParticleN() {
59  return 3;
60  }
61 
63 
65  void writeBinary(FILE *_fp) {
66  }
67 
69 
71  void readBinary(FILE *_fin) {
72  }
73 
75  void print(std::ostream & _fout) const{
76  }
77 };
PseudoParticleMultipoleManager::createSampleParticles
void createSampleParticles(Tptcl *_ptcl_artificial, COMM::BinaryTree< Tptcl, COMM::Binary > &_bin)
create pseudoparticle multipole particles
Definition: pseudoparticle_multipole.hpp:19
PIKG::S32
int32_t S32
Definition: pikg_vector.hpp:24
PseudoParticleMultipoleManager::checkParams
bool checkParams()
check paramters
Definition: pseudoparticle_multipole.hpp:9
PIKG::F64vec
Vector3< F64 > F64vec
Definition: pikg_vector.hpp:167
PseudoParticleMultipoleManager::getParticleN
static PS::S32 getParticleN()
get particle number
Definition: pseudoparticle_multipole.hpp:58
PIKG::F64
double F64
Definition: pikg_vector.hpp:17
PseudoParticleMultipoleManager
PseudoParticle Multipole method for counter force from binaries.
Definition: pseudoparticle_multipole.hpp:6
PseudoParticleMultipoleManager::writeBinary
void writeBinary(FILE *_fp)
write class data to file with binary format
Definition: pseudoparticle_multipole.hpp:65
PseudoParticleMultipoleManager::print
void print(std::ostream &_fout) const
print parameters
Definition: pseudoparticle_multipole.hpp:75
PseudoParticleMultipoleManager::readBinary
void readBinary(FILE *_fin)
read class data to file with binary format
Definition: pseudoparticle_multipole.hpp:71