13 inline double min(
double x,
double y)
17 {
const double C = 299792458;
18 const double G = 6.67428e-11;
20 const double L = G/C/C*SolarMass*totalMass;
23 double* tt =
new double[
N];
25 for(
int i=0;
i<
N; ++
i){
31 double tMax = tt[N-1];
33 if(tMax*Rate<2.1e9)nSamples = tMax*
Rate;
40 for(
int i=0;
i<nSamples; ++
i){
44 double frac = (ts - tt[j-1])/(tt[j] - tt[j-1]);
45 hps[
i] = H[j-1].
Re() + (H[
j].
Re() - H[j-1].
Re())*frac;
46 hxs[
i] = H[j-1].
Im() + (H[
j].
Im() - H[j-1].
Im())*frac;
55 printf(
"Error! masses must be >=0\n");
60 printf(
"Error! rmin must be >=0\n");
64 printf(
"Error! Orbit must be initially parabolic or bound.\n");
81 double t_post_merger = 400;
83 double Jspin = abh*Mbh*Mbh;
85 double a0 = Jspin+mu*L0;
88 if (e0<1 && r0 > rmin0*(1+e0)/(1-e0)) r0 = rmin0*(1+
e0)/(1-e0);
91 int N_plot = t_end/
dt;
94 geodesic geo(r0, phi0, E0, L0, dir, Jspin, mu);
96 bool success = geo.
integrate(t_end, N_plot, 0,
true);
104 double* r_LR =
new double[N_plot];
105 for(
int i=0;
i<N_plot; ++
i)
106 r_LR[
i] = 2*(1+cos(2*(acos(-
min(mu*geo.
Lt[
i] + Jspin, 1.))/3))) - geo.
r[
i];
107 tmerge =
interp(0, r_LR, geo.
t, N_plot, 1., 1.);
111 int Ntsig = (geo.
t[N_plot-1]+t_post_merger)/dt;
112 double* tsig =
new double[Ntsig];
113 for(
int i=0;
i<Ntsig; ++
i) tsig[
i] = dt*
i;
115 double* hr =
interp(tsig, Ntsig, geo.
t, geo.
hplus, N_plot, 0, 0);
116 double* hi =
interp(tsig, Ntsig, geo.
t, geo.
hcross, N_plot, 0, 0);
119 for(
int i=0;
i<Ntsig; ++
i)hsig[
i] =
Complex(hr[
i], hi[i]);
121 a_final = mu*geo.
Lt[N_plot-1] + abh*Mbh*Mbh;
123 double tstart_merger = tmerge;
124 if (tmerge>0)
irs_merger(dt, tmerge, tsig, hsig, Ntsig, a_final, tstart_merger);
126 int retVal =
Sample(hsig, tsig, Ntsig, m1+m2, 16384., Hp, Hx)==0;
wavearray< double > t(hp.size())
printf("total live time: non-zero lags = %10.1f \n", liveTot)
double min(double x, double y)
virtual void rate(double r)
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
bool integrate(double D_t, int &N, double rmin=0, bool stop_alr=false)
int Sample(Complex *H, double *t, int N, double totalMass, double Rate, wavearray< double > &hps, wavearray< double > &hxs)
wavearray< double > ts(N)
double interp(double v, double *x, double *y, int n)
int getEBBH(double m1, double m2, double rmin0, double e0, wavearray< double > &Hp, wavearray< double > &Hx, double t_end)
double energy_geo(double rp, double e, double a)
double ang_mom_eff_geo(double rp, double e, double Jspin, double mu)
virtual void resize(unsigned int)
void irs_merger(double dt, double tmerge, double *tsig, Complex *hsig, int lentsig, double a, double tstart=-1)