PeTar
N-body code for collisional gravitational systems
|
Go to the documentation of this file.
4 #include "Common/Float.h"
14 #ifdef INTEGRATED_CUTOFF_FUNCTION
33 template <
class Tpars>
44 void setR(
const Float& _m_fac,
const Float& _r_in,
const Float& _r_out) {
48 Float m_fac3 =
std::max(std::pow(_m_fac,(1.0/3.0)),1.0);
51 r_out_ = m_fac3*_r_out;
52 norm_ = 1.0/(r_out_-r_in_);
53 coff_ = (r_out_-r_in_)/(r_out_+r_in_);
54 pot_off_ = (1.0+coff_)/r_out_;
55 #ifdef CHANGEOVER_DEBUG
67 void setR(
const Float& _r_in,
const Float& _r_out) {
70 norm_ = 1.0/(_r_out-_r_in);
71 coff_ = (_r_out-_r_in)/(_r_out+_r_in);
72 pot_off_ = (1.0+coff_)/_r_out;
73 #ifdef CHANGEOVER_DEBUG
98 void print(std::ostream & _fout)
const{
99 _fout<<
" r_in="<<r_in_
109 _fout<<std::setw(_width)<<
"r_in"
110 <<std::setw(_width)<<
"r_out";
120 int counter = _counter;
122 _fout<<std::setw(_offset)<<
" "<<counter<<
". r_in: inner changeover radius (0.0)\n";
124 _fout<<std::setw(_offset)<<
" "<<counter<<
". r_out: outer changeover radius (0.0)\n";
134 _fout<<std::setw(_width)<<r_in_
135 <<std::setw(_width)<<r_out_;
142 fwrite(
this,
sizeof(Float),2,_fp);
149 size_t rcount = fread(
this,
sizeof(Float),2,_fin);
151 std::cerr<<
"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<
".\n";
154 setR(1.0, r_in_, r_out_);
161 fprintf(_fp,
"%26.17e %26.17e ",
162 this->r_in_, this->r_out_);
169 PS::S64 rcount=fscanf(_fin,
"%lf %lf ",
170 &this->r_in_, &this->r_out_);
172 std::cerr<<
"Error: Data reading fails! requiring data number is 2, only obtain "<<rcount<<
".\n";
175 setR(1.0, r_in_, r_out_);
182 template <
class Tpars>
185 r_out_ = _par.r_out_ ;
188 pot_off_= _par.pot_off_;
190 #ifdef INTEGRATED_CUTOFF_FUNCTION
197 #ifdef INTEGRATED_CUTOFF_FUNCTION
202 inline Float
calcPotW(
const Float& _dr)
const {
203 #ifdef CHANGEOVER_DEBUG
205 assert(r_out_>r_in_);
207 Float dr_rout = _dr/r_out_;
215 Float denominator = (q-1.0)*(q-1.0)*(q-1.0)*(q-1.0)*(q-1.0)*(q-1.0)*(q-1.0);
216 Float A7 = 20.0/denominator/-6;
217 Float A6 = (-70.0*q - 70.0)/denominator/-5;
218 Float A5 = (84.0*q2 + 252.0*q + 84.0)/denominator/-4;
219 Float A4 = (-35.0*q3 - 315.0*q2 - 315.0*q - 35.0)/denominator/-3;
220 Float A3 = (140.0*q3 + 420.0*q2 + 140.0*q)/denominator/-2;
221 Float A2 = (-210*q3 - 210.0*q2)/denominator/-1;
222 Float A1 = (140*q3)/denominator*-1;
223 Float A0 = (-35.0*q4 + 21.0*q5 - 7.0*q6 + q7)/denominator;
225 Float B1 = 1.0 - ( (((((((A7*x + A6)*x + A5)*x + A4)*x + A3)*x + A2)*x + A1*log(x))*x) + A0 );
226 Float A1_dash = -7*(60*q3*log(q) - q6 + 9.0*q5 - 45.0*q4 + 45.0*q2 - 9.0*q + 1.0)/(3.0*denominator);
227 if(dr_rout <= q)
return 1.0 - A1_dash*dr_rout;
228 else if(dr_rout >= 1.0)
return 0.0;
229 else return 1.0 - (((((((A7*dr_rout + A6)*dr_rout + A5)*dr_rout + A4)*dr_rout + A3)*dr_rout + A2)*dr_rout + A1*log(dr_rout) + B1)*dr_rout) - A0;
238 inline Float
calcAcc0W(
const Float& _dr)
const {
239 #ifdef CHANGEOVER_DEBUG
241 assert(r_out_>r_in_);
243 Float x = (_dr - r_in_)*norm_;
244 x = (x < 1.0) ? x : 1.0;
245 x = (x > 0.0) ? x : 0.0;
248 Float k = 1-(((-20.0*x+70.0)*x-84.0)*x+35.0)*x4;
261 inline Float
calcAcc1W(
const Float& _dr,
const Float& _drdot)
const {
262 #ifdef CHANGEOVER_DEBUG
264 assert(r_out_>r_in_);
266 Float x = (_dr - r_in_)*norm_;
267 Float xdot = norm_*_drdot;
279 kdot = -(-140.0*x6 + 420.0*x5 - 420.0*x4 + 140.0*x3) * xdot;
295 #ifdef CHANGEOVER_DEBUG
297 assert(r_out_>r_in_);
299 Float x = (_dr - r_in_)*norm_;
301 if(x >= 1.0 ) k = pot_off_*_dr;
306 k -= coff_*x5*(5.0*x3 - 20.0*x2 + 28.0*x - 14.0);
319 #ifdef CHANGEOVER_DEBUG
321 assert(r_out_>r_in_);
323 Float x = (_dr - r_in_)*norm_;
324 x = (x < 1.0) ? x : 1.0;
325 x = (x > 0.0) ? x : 0.0;
332 Float k = x_4*(1.0 + 4.0*x + 10.0*x2 + 20.0*x3 + 35.0*coff_*x4);
346 inline Float
calcAcc1W(
const Float& _dr,
const Float& _drdot)
const {
347 #ifdef CHANGEOVER_DEBUG
349 assert(r_out_>r_in_);
351 Float x = (_dr - r_in_)*norm_;
352 Float xdot = norm_*_drdot;
354 if(x > 0.0 && x < 1.0) {
357 Float x_3 = x_1*x_1*x_1;
358 kdot = coff_*280.0*x3*(r_in_*norm_ + x)*x_3*xdot;
int kw1
Definition: bse_test.cxx:15
Float calcAcc0W(const Float &_dr) const
changeover function for force
Definition: changeover.hpp:318
double mscale
radius scaling factor from NB to Rsun
Definition: bse_interface.h:1061
static void printReference(std::ostream &fout, const int offset=4)
print reference to cite
Definition: bse_interface.h:1146
void merge(StarParameter &_star1, StarParameter &_star2, StarParameterOut &_out1, StarParameterOut &_out2, double &_semi, double &_ecc)
merge two star using mix function, star 2 will becomes zero mass
Definition: bse_interface.h:1612
static std::string getBSEOutputFilenameSuffix()
Definition: bse_interface.h:1178
IO parameters manager for BSE based code.
Definition: bse_interface.h:619
Float r_scale_next
(1 + coff_)/r_out = 2/(r_out+r_in)
Definition: changeover.hpp:19
double ecc0
Definition: bse_test.cxx:14
double semi
Definition: bse_test.cxx:14
fp
Definition: galpy_pot_movie.py:131
int evolveBinary(StarParameter &_star1, StarParameter &_star2, StarParameterOut &_out1, StarParameterOut &_out2, double &_semi, double &_period, double &_ecc, BinaryEvent &_bse_event, const int &_binary_init_type, const double _dt_nb)
call evolv2 for a binary
Definition: bse_interface.h:1450
void printBinaryEventColumnOne(std::ostream &_fout, const BinaryEvent &_bin_event, const int k, const int _width=20, const bool print_type_name=true)
print binary event one in column
Definition: bse_interface.h:1384
Float calcAcc1W(const Float &_dr, const Float &_drdot) const
changeover function for force derivative
Definition: changeover.hpp:346
Float calcPotW(const Float &_dr) const
changeover function for potential
Definition: changeover.hpp:294
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: changeover.hpp:119
dt
Definition: galpy_pot_movie.py:134
void printColumn(std::ostream &_fout, const int _width=20) const
print data of class members using column style
Definition: bse_interface.h:345
void updateWithRScale()
update radius based on r_scale_next, reset r_scale_next to 1
Definition: changeover.hpp:79
void print(std::ostream &fout) const
for print in one line
Definition: bse_interface.h:439
void setR(const Float &_r_in, const Float &_r_out)
set r_in and r_out for changeover function
Definition: changeover.hpp:67
BSE based code event recorder class.
Definition: bse_interface.h:493
StarParameter star[2]
Definition: bse_test.cxx:17
static std::string getBSEName()
Definition: bse_interface.h:1198
BinaryEvent bse_event
Definition: bse_test.cxx:19
void writeBinary(FILE *_fp) const
write class data to file with binary format
Definition: changeover.hpp:141
int64_t S64
Definition: pikg_vector.hpp:23
static void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: changeover.hpp:108
void dataCopy(const Tpars &_par)
copy data from inherited class object
Definition: changeover.hpp:183
double ecc
Definition: bse_test.cxx:14
void printBinaryEventOne(std::ostream &_fout, const BinaryEvent &_bin_event, const int k)
print binary event one
Definition: bse_interface.h:1373
double m1
Definition: bse_test.cxx:14
int main(int argc, char **argv)
Definition: bse_test.cxx:31
T min(const Vector3< T > &v)
Definition: pikg_vector.hpp:150
StarParameterOut out[2]
Definition: bse_test.cxx:18
double getTime(StarParameter &_star)
get evolved Time in NB unit
Definition: bse_interface.h:1342
bool checkParams()
Definition: bse_interface.h:1090
void printColumn(std::ostream &_fout, const int _width=20)
print data of class members using column style
Definition: changeover.hpp:133
double getDTMiss(StarParameterOut &_out)
get the difference of required finishing time and actually evolved time in NB unit
Definition: bse_interface.h:1347
SSE/BSE based code star parameter for output.
Definition: bse_interface.h:393
Changeover function class.
Definition: changeover.hpp:7
void initial(const IOParamsBSE &_input, const bool _print_flag=false)
initial SSE/BSE based code global parameters
Definition: bse_interface.h:1226
void writeAscii(FILE *_fp) const
write class data to file with binary format
Definition: changeover.hpp:160
double tphys
Definition: bse_test.cxx:16
static Float calcPotWTwo(const ChangeOver &_ch1, const ChangeOver &_ch2, const Float &_dr)
calculate changeover function Pot by selecting maximum rout
Definition: changeover.hpp:366
static Float calcAcc0WTwo(const ChangeOver &_ch1, const ChangeOver &_ch2, const Float &_dr)
calculate changeover function Acc0 by selecting maximum rout
Definition: changeover.hpp:372
void initial(double _mass, int _kw=1, double _ospin=0.0, double _epoch=0.0)
Landmark luminosities
Definition: bse_interface.h:276
void readBinary(FILE *_fin)
read class data to file with binary format
Definition: changeover.hpp:148
const int WRITE_PRECISION
Definition: bse_test.cxx:11
static void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: bse_interface.h:327
bool checkParams()
check whether parameters values are correct
Definition: changeover.hpp:26
const Float & getRin() const
get r_in
Definition: changeover.hpp:87
int evolveStar(StarParameter &_star, StarParameterOut &_out, const double _dt, bool _unit_in_myr=false)
call SSE evolv1 for single star
Definition: bse_interface.h:1412
double tscale
metallicity parameters
Definition: bse_interface.h:1059
const Float & getRout() const
get r_out
Definition: changeover.hpp:94
long long int kw
Definition: bse_interface.h:258
const int WRITE_WIDTH
Definition: bse_test.cxx:10
SSE/BSE interface manager.
Definition: bse_interface.h:1053
static Float calcAcc1WTwo(const ChangeOver &_ch1, const ChangeOver &_ch2, const Float &_dr, const Float &_drdot)
calculate changeover function Acc1 by selecting maximum rout
Definition: changeover.hpp:378
void readAscii(FILE *fp)
Definition: bse_test.cxx:21
T max(const Vector3< T > &v)
Definition: pikg_vector.hpp:143
double m2
Definition: bse_test.cxx:14
double getVelocityChange(double *dv, StarParameterOut &_out)
get velocity change in NB unit
Definition: bse_interface.h:1399
ChangeOver()
scaling for changeover factor (for next step)
Definition: changeover.hpp:21
double period0
Definition: bse_test.cxx:14
void print(std::ostream &_fout) const
Definition: changeover.hpp:98
void readAscii(FILE *_fin)
read class data to file with binary format
Definition: changeover.hpp:168
double vscale
mass scaling factor from NB to Msun
Definition: bse_interface.h:1062
double tphys
starting time of one evolution phase, age = tphys - epoch
Definition: bse_interface.h:266
static std::string getSSEOutputFilenameSuffix()
Definition: bse_interface.h:1168
void setR(const Float &_m_fac, const Float &_r_in, const Float &_r_out)
set r_in and r_out for changeover function
Definition: changeover.hpp:44
void print(std::ostream &fout) const
for print in one line
Definition: bse_interface.h:309
double getTimeStepBinary(StarParameter &_star1, StarParameter &_star2, double &_semi, double &_ecc, int &_binary_type)
call BSE evolv2 for a binary
Definition: bse_interface.h:1719
Definition: bse_test.cxx:13
int read(int argc, char *argv[], const int opt_used_pre=0)
reading parameters from GNU option API
Definition: bse_interface.h:754
double period
Definition: bse_test.cxx:14
static void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: bse_interface.h:409
double getTimeStepStar(StarParameter &_star)
get next time step to check in Myr
Definition: bse_interface.h:1689
int kw2
Definition: bse_test.cxx:15
ChangeOver(const Tpars &_par)
constructor based on inherited class
Definition: changeover.hpp:34
SSE/BSE based code star parameter for saving.
Definition: bse_interface.h:257
bool print_flag
Definition: bse_interface.h:666