5 static const double pi = 3.14159265358979312;
9 return (1+73.0/24*e2+37.0/96*e2*e2)/pow(1.0+e,3.5);
13 {
return (1.0+7.0/8*e*e)/(1.0+
e)/(1+e);
16 double bisect(
double (*
f)(
double),
double a,
double b)
19 if (fa == 0.)
return a;
20 if (fb == 0.)
return b;
44 double F = ( p*p*p - 2*Mbh*(3.0+e*
e)*p*p + Mbh*Mbh*pow(3.0+e*e, 2)*p -
45 4*Mbh*a*a*pow(1.0-e*e, 2) )/p/p/p;
46 double N = (2.0/p)*(-Mbh*p*p+(Mbh*Mbh*(3.0+e*e)-a*
a)*p-Mbh*a*a*(1+3*e*e) );
49 double xsq, des =
fabs(N*N-4.0*F*C);
51 if (a>0)xsq = (-N - sqrt(des))/2.0/F;
52 else xsq = (-N + sqrt(des))/2.0/F;
54 return p*p-xsq*(1.0+
e)*(3.0-e);
60 {
return zw_func(p, rw_e, rw_a);
76 else return (6.0+2.0*e)/(1.0+
e);
86 double w, R0 =sqrt(r*r + a*a*(1+2*m/r));
87 if (a>0)w = m/(m*a + r*sqrt(m*r));
88 else w = m/(m*a- r*sqrt(m*r));
89 double Delta = r*r + a*a - 2*m*
r;
90 return r*r/(2*
pi)/sqrt(
fabs( 3.0*r*r*Delta + 4.0*m/w/w*(r*R0*R0*w*w - 4*m*a*w - r + 2*m) ) );
94 {
double gamma_parabolic = 0.19;
103 double E = a*(e-1.0)/2.0;
104 double const b = (64.0*3.14159265358979312)/5.0;
105 double L = mu*sqrt(rmin*(1.0+e));
106 double deltaE = b*mu*mu*pow(1.0/rmin, 3.5)*
E_ecc(e);
107 double deltaL = b*a*a*
J_ecc(e);
111 e_new = sqrt(1.0+2*E*L*L/mu/mu/mu);
112 rmin_new = (e_new-1.0)/2.0/(E/mu);
115 void gwave_data(
double e,
double rmin,
double mu,
double& e_new,
double& rmin_new)
117 double E = mu*(e-1.0)/2.0/rmin;
118 double L = mu*sqrt(rmin*(1.0+e));
119 double rp[7] = {6.95, 7.22, 7.5, 8.75, 10, 12.5, 15};
120 double E_data[7] = { 0.006753, 0.003573, 0.002420,
121 0.000730, 0.000334, 0.000105, 3.081720e-05};
122 double J_data[7] = { 0.071858, 0.044782, 0.035159,
123 0.015815, 0.009692, 0.004601, 2.144661e-03};
130 e_new = rmin_new = 0;
131 if ((1.0+2*E*L*L/mu/mu/mu)<0)
return;
132 e_new = sqrt(1.0+2*E*L*L/mu/mu/mu);
133 rmin_new = (e_new-1.0)/2.0/(E/mu);
140 double getE0(
double e,
double rmin,
double mu,
double rc)
141 {
return mu*(e-1.0)/2.0/rmin + mu/2.0/rc;
147 double rparabolic = 6.89;
155 double E0 =
getE0(e,rmin,mu,rc);
158 return E0*( 1 - pow((rmin-rc)/Delta,gamma) );
163 double L0 = mu*(sqrt(rmin*(1.0+e)) - sqrt(rc));
166 return L0*( 1 - pow((rmin-rc)/Delta, gamma) );
171 double E = mu*(e-1.0)/2.0/rmin;
172 double L = mu*sqrt(rmin*(1.0+e));
179 if ((rmin-rc)>=Delta or (64.0*
pi)/5.0*mu*mu*pow(1.0/rmin,3.5)*
E_ecc(e)>deltaE)
184 double f = 1.0+2*E*L*L/mu/mu/mu;
186 printf(
"E=%e deltaE=%e rmin=%e e=%e\n", E, deltaE, rmin, e);
190 rmin_new = (e_new-1.0)/2.0/(E/mu);
198 double E0 =
getE0(e,rmin,mu,rc);
200 if (rmin>rc)deltaE = E0*(1- pow((rmin-rc)/Delta, gamma) );
202 double deltaEpm = (64.0*
pi)/5.0*mu*mu*pow(1.0/rmin, 3.5)*
E_ecc(e);
203 double ratio = deltaE/deltaEpm;
204 if (
fabs(rmin-rc)>Delta || ratio < 1)ratio = 1;
213 double F = ( p*p*p - 2*Mbh*(3+e*
e)*p*p + p*Mbh*Mbh*pow(3.0+e*e, 2)-4*Mbh*a*a*pow(1.0-e*e,2) )/p/p/p;
214 double N = (2/p)*( -Mbh*p*p + p*( Mbh*Mbh*(3.0+e*e)-a*
a) - Mbh*a*a*(1+3*e*e) );
215 double C = a*a-Mbh*p;
218 double xsq, des =
fabs(N*N-4*F*C);
220 if (a>=0)xsq = (-N - sqrt(des))/2/F;
221 else xsq = (-N + sqrt(des))/2/F;
222 return sqrt(
fabs( 1 - (Mbh/p)*(1.0-e*e)*(1.0-xsq/p/p*(1.0-e*e)) ) );
229 double F = ( p*p*p - 2*Mbh*(3+e*
e)*p*p + p*Mbh*Mbh*pow(3.0+e*e, 2)-4*Mbh*a*a*pow(1.0-e*e,2) )/p/p/p;
230 double N = (2/p)*( -Mbh*p*p + p*( Mbh*Mbh*(3.0+e*e)-a*
a) - Mbh*a*a*(1+3*e*e) );
231 double C = a*a-Mbh*p;
234 double xsq, des =
fabs(N*N-4*F*C);
236 if (a>=0)xsq = (-N - sqrt(des))/2/F;
237 else xsq = (-N + sqrt(des))/2/F;
238 double E = sqrt( 1 - (Mbh/p)*(1.0-e*e)*(1.0-xsq/p/p*(1.0-e*e)) );
239 return sqrt(
fabs(xsq)) + a*E;
243 {
double a = Jspin+mu*sqrt((1+e)*rp);
245 while(
fabs(a-a1)>1.0e-5){
260 double des = pow(p/x,4) + 4*p*p*p/x/x*(E*E-1);
262 double y = 0.5*(pow(p/x, 2)-sqrt(des));
263 return sqrt(
fabs(1-y));
280 if (E>1)
printf(
"Error in orbital_param_geo, E>0\n");
294 double E0 =
getE0(e,rmin,mu,rc);
297 return E0*(1.0 - pow ((rmin-rc)/Delta, gamma) );
303 double L0 = mu*(sqrt(rmin*(1.0+e)) - sqrt(rc));
306 return L0*(1.0 - pow( (rmin-rc)/Delta, gamma ) );
318 if ((rmin-rc)>=Delta || (64.0*
pi)/5.0*mu*mu*pow(1.0/rmin, 3.5)*
E_ecc(e)>deltaE){
319 deltaE = (64.0*
pi)/5.0*mu*mu*pow(1.0/rmin,3.5)*
E_ecc(e);
320 deltaL = (64.0*
pi)/5.0*mu*mu/rmin/rmin*
J_ecc(e);
326 printf(
"%lf %lf %lf %lf\n", E/mu, L/mu,
333 double rparabolic = 6.89;
346 double E0 =
getE0(e,rmin,mu,rc);
348 if (rmin>rc)deltaE = E0*(1.0-pow((rmin-rc)/Delta, gamma) );
350 double deltaEpm = (64.0*
pi)/5.0*mu*mu*pow(1.0/rmin,3.5)*
E_ecc(e);
351 double ratio = deltaE/deltaEpm;
352 if (
fabs(rmin-rc)>Delta || ratio < 1)ratio = 1.0;
358 {
double E = 1+(e-1.0)/2.0/rmin;
359 double L = sqrt(rmin*(1.0+e));
366 double f = 1.0+2*E*L*
L;
368 if (E>0)rmin_new = (e_new-1.0)/2.0/E;
369 else if (E==0.) rmin_new = L*L/2.0;
373 double a_eff(
double e,
double rp,
double mu,
double Jbh)
374 {
return 0.5*sqrt( (1+e)*rp/(2*6.89) )+Jbh;
double geo_crit_radius(double e, double a)
printf("total live time: non-zero lags = %10.1f \n", liveTot)
double newt_crit_radius(double e, double a)
double bisect(double(*f)(double), double a, double b)
wavearray< double > a(hp.size())
double rzoom_whirl(double e, double a)
cout<< endl;cout<< "ts size = "<< ts.size()<< " ts rate = "<< ts.rate()<< endl;tf.Forward(ts, wdm);int levels=tf.getLevel();cout<< "tf size = "<< tf.size()<< endl;double dF=tf.resolution();double dT=1./(2 *dF);cout<< "rate(hz) : "<< RATE<< "\t layers : "<< nLAYERS<< "\t dF(hz) : "<< dF<< "\t dT(ms) : "<< dT *1000.<< endl;int itime=TIME_PIXEL_INDEX;int ifreq=FREQ_PIXEL_INDEX;int index=(levels+1)*itime+ifreq;double time=itime *dT;double freq=(ifreq >0)?ifreq *dF:dF/4;cout<< endl;cout<< "PIXEL TIME = "<< time<< " sec "<< endl;cout<< "PIXEL FREQ = "<< freq<< " Hz "<< endl;cout<< endl;wavearray< double > x
double geo_amp_enhance(double e, double rmin, double mu, double a)
double ang_mom_geo(double rp, double e, double a)
void orbital_param_geo_to_newt(double rmin, double e, double a, double &rmin_new, double &e_new)
double newt_getDeltaE(double e, double rmin, double mu, double a)
double scaling_exp(double e, double a)
double geo_getDeltaE(double e, double rmin, double mu, double a)
double newt_amp_enhance(double e, double rmin, double mu, double a)
double crit_radius(double e, double a)
double getE0(double e, double rmin, double mu, double rc)
double amp_enhance(double e, double rmin, double mu, double a)
double geo_getDeltaL(double e, double rmin, double mu, double a)
void gwave_data(double e, double rmin, double mu, double &e_new, double &rmin_new)
double scaling_exp_zw(double a, double r0)
void newt_close_encounter(double e, double rmin, double mu, double a, double &e_new, double &rmin_new)
void close_encounter_pm(double e, double rmin, double mu, double &e_new, double &rmin_new)
void orbital_param_geo(double E, double L, double a, double &rp, double &e)
double newt_getDeltaL(double e, double rmin, double mu, double a)
double a_eff(double e, double rp, double mu, double Jbh)
double interp(double v, double *x, double *y, int n)
double fabs(const Complex &x)
void geo_close_encounter(double e, double rmin, double mu, double a, double &e_new, double &rmin_new)
double energy_geo(double rp, double e, double a)
double ang_mom_eff_geo(double rp, double e, double Jspin, double mu)
void orbital_param_newt_to_geo(double rmin, double e, double a, double &rp, double &ee)
double zw_func(double p, double e, double a)