6 #include <gsl/gsl_math.h>
7 #include <gsl/gsl_integration.h>
10 #include <sys/types.h>
36 static double Reps[8192][3];
59 static double kernel(
double loga,
void * params) {
68 gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000);
75 gsl_integration_qags (&F,
tab_loga[i], 0, 0, 1e-7, 1000,
84 gsl_integration_workspace_free (w);
95 for(i = 0; i <
NENTRY; i ++) {
101 MPI_Comm_rank(MPI_COMM_WORLD, &
ThisTask);
103 sprintf(buf,
"%s/lightcone/", OutputDir);
105 sprintf(buf,
"%s/lightcone/%03d/", OutputDir, (
int)(
ThisTask / chunk));
107 sprintf(buf,
"%s/lightcone/%03d/lightcone-%05d.raw", OutputDir, (
int)(
ThisTask / chunk),
ThisTask);
111 endrun(1,
"failed to open %s\n", buf);
114 printf(
"lightcone reference redshift = %g distance = %g\n",
120 double loga = log(a);
129 double u2 =
tab_loga[bin + 1] - loga;
143 for(i = 0; i < Nmax; i ++) {
144 double dx = BoxSize * rx;
145 double dy = BoxSize * ry;
146 double dz = BoxSize * rz;
148 d1 = dx * dx + dy * dy + dz * dz;
152 d2 = dx * dx + dy * dy + dz * dz;
159 endrun(951234,
"too many replica");
182 #pragma omp parallel for
190 double z = 1 / a - 1;
227 if(
P[p].Type != 1)
return;
236 double dnew = 0, dold = 0;
237 for(k = 0; k < 3; k ++) {
240 dnew += pnew[k] * pnew[k];
241 dold += pold[k] * pold[k];
253 u1 = -cold / (cnew - cold);
254 u2 = cnew / (cnew - cold);
262 for(k = 0; k < 3; k ++) {
263 p3[k] = pold[k] * u2 + pnew[k] * u1;
double hubble_function(const Cosmology *CP, double a)
void message(int where, const char *fmt,...)
void endrun(int where, const char *fmt,...)
static double SampleFraction
static double HorizonDistance2Prev
static double tab_loga[NENTRY]
static double HorizonDistanceRef
static double tab_Dc[NENTRY]
static double kernel(double loga, void *params)
static double HorizonDistance
static FILE * fd_lightcone
void lightcone_compute(double a, double BoxSize, Cosmology *CP, inttime_t ti_curr, inttime_t ti_next)
static void lightcone_set_time(double a, const double BoxSize)
static double HorizonDistance2
static void lightcone_init_entry(Cosmology *CP, int i, const double UnitLength_in_cm)
static double HorizonDistancePrev
static void update_replicas(double a, double BoxSize)
static void lightcone_cross(int p, double ddrift)
static double ReferenceRedshift
void lightcone_init(Cosmology *CP, double timeBegin, const double UnitLength_in_cm, const char *OutputDir)
static double Reps[8192][3]
static double lightcone_get_horizon(double a)
struct part_manager_type PartManager[1]
static double UnitLength_in_cm
double CurrentParticleOffset[3]
double get_random_number(uint64_t id)
double get_exact_drift_factor(Cosmology *CP, inttime_t ti0, inttime_t ti1)