double fdeltatime(double z1, double z2) { double temp; double dz=0.001,z; double deltat; int n,i; if (z1 > z2) { temp=z1; z1=z2; z2=temp; } n=(int)round((z2-z1)/dz); dz=(z2-z1)/n; deltat=0.; for (i=0;i<n;i++) { z=z1+dz/2.+dz*i; deltat+=fabs(dtdz(z)); // just in case there is a negative sign - results in seconds } deltat*=dz; return deltat; }
/* comoving distance (in cm) per unit redshift */ double drdz(float z){ return (1.0+z)*C*dtdz(z); }
/* in proper Mpc */ double d_L_derivs(double z, void * params){ return (1+z) * fabs(dtdz(z)); }
/* Comoving volume (in Mpc^3) probed by past light cone, per z interval */ double dVdz(float z){ double d; d = d_L(z); return 4*PI*d*d*C*fabs(dtdz(z)) / (1+z) / CMperMPC; }
double ddtdz(double z, void * params) { return dtdz(z); }