28 inline double min(
double x,
double y)
32 int main(
int argc,
char** argv)
35 printf(
"Usage: %s <rmin> <eccentricity> [<mass ratio>] [PLOT] [<TMAX>]\n",
40 double rmin0 = atof(argv[1]);
42 printf(
"Error! rmin must be >=0\n");
45 double e0 = atof(argv[2]);
47 printf(
"Error! Orbit must be initially parabolic or bound.\n");
52 double t_end = 10000000.0;
57 printf(
"Error! mass ratio must be between 0 and 1\n");
62 if(argc>5)t_end = atof(argv[5]);
70 printf(
"Mbh = %.1lf\nMns = %.1lf\n", Mbh, Mns);
76 double t_post_merger = 400;
78 double Jspin = abh*Mbh*Mbh;
80 double a0 = Jspin+mu*L0;
83 if (e0<1 && r0 > rmin0*(1+e0)/(1-e0)) r0 = rmin0*(1+
e0)/(1-e0);
86 int N_plot = t_end/
dt;
88 geodesic geo(r0, phi0, E0, L0, dir, Jspin, mu);
90 bool success = geo.
integrate(t_end, N_plot, 0,
true);
93 FILE*
f = fopen(
"path_cc.dat",
"w");
94 for(
int i=0;
i<N_plot; ++
i)
95 fprintf(f,
"%1.6e %1.6e %1.6e %1.6e %1.6e %1.6e %1.6e %1.6e %1.6e\n",
106 double* r_LR =
new double[N_plot];
107 for(
int i=0;
i<N_plot; ++
i)
108 r_LR[
i] = 2*(1+cos(2*(acos(-
min(mu*geo.
Lt[
i] + Jspin, 1.))/3))) - geo.
r[
i];
109 tmerge =
interp(0, r_LR, geo.
t, N_plot, 1., 1.);
113 int Ntsig = (geo.
t[N_plot-1]+t_post_merger)/dt;
114 double* tsig =
new double[Ntsig];
115 for(
int i=0;
i<Ntsig; ++
i) tsig[
i] = dt*
i;
117 double* hr =
interp(tsig, Ntsig, geo.
t, geo.
hplus, N_plot, 0, 0);
118 double* hi =
interp(tsig, Ntsig, geo.
t, geo.
hcross, N_plot, 0, 0);
121 for(
int i=0;
i<Ntsig; ++
i)hsig[
i] =
Complex(hr[
i], hi[i]);
123 a_final = mu*geo.
Lt[N_plot-1] + abh*Mbh*Mbh;
125 double tstart_merger = tmerge;
126 if (tmerge>0)
irs_merger(dt, tmerge, tsig, hsig, Ntsig, a_final, tstart_merger);
128 f=fopen(
"wave_cc.dat",
"w");
129 for(
int i=0; i<Ntsig; ++
i)
130 fprintf(f,
"%1.8e %1.8e %1.8e\n", tsig[i], hsig[i].Re(), hsig[i].Im());
int main(int argc, char **argv)
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<< "\ layers : "<< nLAYERS<< "\ dF(hz) : "<< dF<< "\ 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
bool integrate(double D_t, int &N, double rmin=0, bool stop_alr=false)
cout<< "SNR "<< xsnr<< endl;wavearray< double > f
fprintf(stdout,"start=%f duration=%f rate=%f\, x.start(), x.size()/x.rate(), x.rate())
printf("total live time: non-zero lags = %10.1f \, liveTot)
double interp(double v, double *x, double *y, int n)
double energy_geo(double rp, double e, double a)
double min(double x, double y)
double ang_mom_eff_geo(double rp, double e, double Jspin, double mu)
void irs_merger(double dt, double tmerge, double *tsig, Complex *hsig, int lentsig, double a, double tstart=-1)