PeTar
N-body code for collisional gravitational systems
|
Go to the documentation of this file.
3 #include "Common/Float.h"
4 #include "Common/binary_tree.h"
30 template <
class TBinary>
49 Float theta0 = acos(1/e);
50 Float ge = (COMM::PI - theta0) * (96.0 + 292*e2 + 37*e2*e2) + sqrt(e2 - 1)/3.0 * (602.0 + 673*e2);
54 Float m12sq = m12*m12;
55 Float p = a * (1 - e2);
57 Float G_over_r3 = G_over_r * G_over_r * G_over_r;
58 Float G_over_r7 = G_over_r3 * G_over_r3 * G_over_r;
59 Float Etid = 2.0 * sqrt(G_over_r7 * mtot) * m12sq * ge / (15.0 * c5);
62 ge = (COMM::PI - theta0) * (8.0 + 7*e2) + sqrt(e2 - 1) * (13 + 2*e2);
63 Float Ltid = 8.0 * G_over_r3 * p * m12sq * ge / (15.0 * c5);
69 Float Ebin = - GM12 / (2.0 * a);
70 Float Ebin_new = Ebin - Etid;
71 Float semi_new = - GM12 / (2.0 * Ebin_new);
74 Float mfac = GM12 * m12 / mtot;
75 Float Lbin = sqrt(mfac * p);
76 Float Lbin_new = Lbin - Ltid;
77 Float ecc2_new = 1.0 - Lbin_new*Lbin_new / (mfac*_bin.semi);
83 if (ecc2_new < 0)
return true;
86 _bin.ecc = sqrt(ecc2_new);
101 template <
class TBinary>
102 Float
evolveOrbitDynamicalTide(TBinary& _bin,
const Float& rad1,
const Float& rad2,
const Float& poly_type1,
const Float& poly_type2) {
103 ASSERT(_bin.getMemberN()==2);
109 ASSERT(poly_type1==1.5||poly_type1==3.0);
110 ASSERT(poly_type2==1.5||poly_type2==3.0);
112 if (_bin.ecc<0.1)
return 0.0;
114 Float peri = _bin.semi * (1.0 - _bin.ecc);
119 Float mtot = _bin.m1 + _bin.m2;
122 Float p_over_r1 = peri / rad1;
123 Float p_over_r2 = peri / rad2;
124 Float r1_over_peri = 1.0 / p_over_r1;
125 Float r2_over_peri = 1.0 / p_over_r2;
126 Float eta1 = sqrt(_bin.m1 / mtot * p_over_r1 * p_over_r1 * p_over_r1);
127 Float eta2 = sqrt(_bin.m2 / mtot * p_over_r2 * p_over_r2 * p_over_r2);
130 Float mard = 0.5 * fabs(eta1 - 2.);
131 mard = (0.5 + 0.25 * sqrt(mard * mard * mard));
132 Float neweta1 = eta1 * pow(2.0 / (1.0 + _bin.ecc), mard);
134 mard = 0.5 * fabs(eta2 - 2.);
135 mard = (0.5 + 0.25 * sqrt(mard * mard * mard));
136 Float neweta2 = eta2 * pow(2. / (1.0 + _bin.ecc), mard);
141 if ((eta1 > 0) & (eta1 < 10) & (neweta1 > 0) & (neweta1 < 10)) {
146 if ((eta2 > 0) & (eta2 < 10) & (neweta2 > 0) & (neweta2 < 10)) {
151 Float pold = _bin.semi *(1.0 - _bin.ecc*_bin.ecc);
156 Float Ebin = - GM12 / (2.0 * _bin.semi);
157 Float Ebin_new = Ebin - Etid;
158 _bin.semi = - GM12 / (2.0 * Ebin_new);
161 _bin.ecc = sqrt(1.0 - pold/_bin.semi);
180 Float
calcEtidPolynomicalFit(
const Float& _mpert,
const Float& _rad_over_peri,
const Float& _peri,
const Float& _eta,
const Float& _poly_type) {
182 Float fA=0, fB=0, fC=0, fD=0, fE=0, fF=0;
183 if (_poly_type == 1.5) {
191 else if (_poly_type == 3.0) {
200 std::cerr<<
"Error, polynomical types should be 1.5, 3.0, given "<<_poly_type<<std::endl;
205 Float r_over_p2 = _rad_over_peri * _rad_over_peri;
206 Float r_over_p5 = r_over_p2 * r_over_p2 * _rad_over_peri;
212 }
else if (_eta < 10) {
213 Float let = log10(_eta);
214 etid *= pow(10, fA + let * (fB + let * (fC + let * (fD + let * (fE + let * fF)))));
static PS::S32 getParticleN()
get particle number
Definition: tidal_tensor.hpp:435
Definition: soft_ptcl.hpp:271
Float gravitational_constant
Definition: two_body_tide.hpp:11
static void createTidalTensorMeasureParticles(Tptcl *_ptcl_tt, const Tptcl &_ptcl_cm, const PS::F64 _size)
create tidal tensor measurement particles
Definition: tidal_tensor.hpp:51
void printAcc(FPSoft *ptcl, FPSoft &pcm, int n, TidalTensor &tt)
Definition: tidal_tensor_test.cxx:35
PS::F64vec3 pos
Definition: tide_test.cxx:20
bool checkParams()
check whether parameters values are correct
Definition: two_body_tide.hpp:19
Definition: soft_ptcl.hpp:26
void copyFromForce(const ForceSoft &force)
Definition: soft_ptcl.hpp:84
PS::F64 mass
Definition: soft_ptcl.hpp:314
bool evolveOrbitHyperbolicGW(TBinary &_bin, Float &_Etid, Float &_Ltid)
evolve hyperbolic orbit based on GW effect
Definition: two_body_tide.hpp:31
Basic particle class.
Definition: particle_base.hpp:20
A sample particle class.
Definition: tide_test.cxx:16
Definition: soft_ptcl.hpp:4
Vector3< F64 > F64vec
Definition: pikg_vector.hpp:167
PS::F64vec pos
Definition: soft_ptcl.hpp:274
void readAscii(std::istream &_fin)
read class data to file with ASCII format
Definition: tide_test.cxx:59
void initial(const IOParamsGalpy &_input, const double _time, const std::string _conf_name, const bool _restart_flag, const bool _print_flag=false)
initialization function
Definition: galpy_interface.h:852
PS::F64 pot_tot
Definition: soft_ptcl.hpp:32
double F64
Definition: pikg_vector.hpp:17
void writeBinary(FILE *_fout) const
write class data to file with binary format
Definition: tide_test.cxx:26
void calcAccPot(double *acc, double &pot, const double _time, const double gm, const double *pos_g, const double *pos_l)
calculate acceleration and potential at give position
Definition: galpy_interface.h:1603
bool print_flag
Definition: galpy_interface.h:28
int main(int argc, char **argv)
Definition: tidal_tensor_test.cxx:67
void fit(Tptcl *_ptcl_tt, Tptcl &_ptcl_cm, const PS::F64 _size)
tidal tensor fitting function,
Definition: tidal_tensor.hpp:128
void print(std::ostream &_fout, const int _width) const
Definition: tidal_tensor.hpp:371
Two Body Tide effct.
Definition: two_body_tide.hpp:9
PS::S64 id
Definition: soft_ptcl.hpp:273
A class to manager the API to Galpy.
Definition: galpy_interface.h:658
PS::F64vec pos
Definition: particle_base.hpp:24
TwoBodyTide()
Definition: two_body_tide.hpp:14
PS::F64vec acc
Definition: soft_ptcl.hpp:28
Float speed_of_light
Definition: two_body_tide.hpp:12
PS::F64 r_search
Definition: soft_ptcl.hpp:275
Float mass
Definition: tide_test.cxx:19
static void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: tide_test.cxx:69
static void subtractCMForce(Tptcl *_ptcl_tt, const Tptcl &_ptcl_cm)
subtract c.m. force from measure points
Definition: tidal_tensor.hpp:94
Float evolveOrbitDynamicalTide(TBinary &_bin, const Float &rad1, const Float &rad2, const Float &poly_type1, const Float &poly_type2)
evolve two-body orbit based on dynamical tide implementation from Alessandro Alberto Trani
Definition: two_body_tide.hpp:102
Tidal tensor perterbation for AR.
Definition: tidal_tensor.hpp:4
Definition: soft_ptcl.hpp:311
long long int id
Definition: tide_test.cxx:18
PS::F64 pot_soft
Definition: soft_ptcl.hpp:33
PS::F64vec pos
Definition: soft_ptcl.hpp:315
int read(int argc, char *argv[], const int opt_used_pre=0)
reading parameters from GNU option API
Definition: galpy_interface.h:49
PS::S64 id
Definition: soft_ptcl.hpp:313
static PS::F64 eps
Definition: soft_ptcl.hpp:281
void eval(PS::F64 *acc, const PS::F64vec &pos) const
Definition: tidal_tensor.hpp:289
IO parameters for Galpy manager.
Definition: galpy_interface.h:15
PS::F64 mass
Definition: particle_base.hpp:23
ArtificialParticleInformation artificial
Definition: ptcl.hpp:18
PS::F64vec3 vel
Definition: tide_test.cxx:21
void writeAscii(std::ostream &_fout) const
write class data to file with ASCII format
Definition: tide_test.cxx:46
Float calcEtidPolynomicalFit(const Float &_mpert, const Float &_rad_over_peri, const Float &_peri, const Float &_eta, const Float &_poly_type)
Tidal energy based on Polynomical fits from Portegies Zwart et al. 1993.
Definition: two_body_tide.hpp:180
void setParticleTypeToSingle()
set particle type to single
Definition: artificial_particles.hpp:78
void printColumn(std::ostream &_fout, const int _width=20)
print data of class members using column style
Definition: tide_test.cxx:84
#define ASSERT(expr)
Definition: hard_assert.hpp:238
int main(int argc, char **argv)
Definition: tide_test.cxx:96
Vector3< F64 > F64vec3
Definition: pikg_vector.hpp:169
#define PRINT_WIDTH
Definition: io.hpp:10
static int printTitleWithMeaning(std::ostream &_fout, const int _counter=0, const int _offset=0)
print column title with meaning (each line for one column)
Definition: particle_base.hpp:243
void readBinary(FILE *_fin)
read class data to file with binary format
Definition: tide_test.cxx:34
GroupDataDeliver group_data
Definition: ptcl.hpp:40
Definition: soft_force.hpp:125
void readAscii(FILE *fp)
read class data with ASCII format
Definition: particle_base.hpp:161
static PS::F64 grav_const
neighbor number+1
Definition: soft_ptcl.hpp:15