void output_matter_variance() { int k,nr=50; double dlogr,r,slin,snl,mass,rmin = 0.05,rmax = 80.0,pnorm,pnorm_nl; FILE *fp; char aa[100]; fprintf(stderr,"\n\nCALCULATING MATTER VARIANCE.\n"); fprintf(stderr, "----------------------------\n\n"); sprintf(aa,"%s.sigma_r",Task.root_filename); fp = fopen(aa,"w"); dlogr = (log(rmax) - log(rmin))/(nr-1); pnorm = SIGMA_8/sigmac(8.0); pnorm_nl = pnorm*sigmac(80.0)/nonlinear_sigmac(80.0); for(k=0;k<nr;++k) { r = exp(k*dlogr)*rmin; mass = 4./3.*PI*r*r*r*RHO_CRIT*OMEGA_M; slin = sigmac(r)*pnorm; snl = nonlinear_sigmac(r)*pnorm_nl; fprintf(fp,"%e %e %e %e\n",r,slin,snl,mass); } fclose(fp); }
int main(int argc, char **argv) { double s1, delta_vir, omega_m, x; int i, j; FILE *fp; #ifdef PARALLEL printf("STARTING>>>\n"); fflush(stdout); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &ThisTask); MPI_Comm_size(MPI_COMM_WORLD, &NTask); printf("TASK %d reporting for duty.\n",ThisTask); fflush(stdout); #endif ARGC = argc; ARGV = argv; OUTPUT=0; HOD.fredc = HOD.freds = 1.0; for(i=1; i<=99; ++i) HOD.free[i]=0; wp.esys=0; Work.chi2=0; Work.imodel=1; USE_ERRORS = 0; ITRANS=4; HUBBLE=0.7; BEST_FIT = 0; HOD.M_sat_break = 1.0e14; HOD.alpha1 = 1.0; if(argc==1) endrun("./HOD.x hod.bat_file > output"); read_parameter_file(argv[1]); if(REDSHIFT>0) { SIGMA_8 = SIGMA_8*growthfactor(REDSHIFT); HUBBLEZ = sqrt(OMEGA_M*pow(1+REDSHIFT,3.0)+1-OMEGA_M); OMEGA_Z = OMEGA_M*pow(1+REDSHIFT,3.0)/(OMEGA_M*pow(1+REDSHIFT,3.0)+(1-OMEGA_M)); fprintf(stdout,"SIGMA_8(Z=%.3f)= %.4f\n",REDSHIFT,SIGMA_8); fprintf(stdout,"H(Z=%.3f)/H0= %.4f\n",REDSHIFT,HUBBLEZ); HOD.M_min = 0; RESET_COSMOLOGY++; set_HOD_params(); } /* Output the virial overdensity for reference. */ if(OUTPUT) { omega_m=OMEGA_M*pow(1+REDSHIFT,3.0)/(OMEGA_M*pow(1+REDSHIFT,3.0)+(1-OMEGA_M)); x=omega_m-1; delta_vir=(18*PI*PI+82*x-39*x*x)/(1+x); printf("DELTA_VIR(Omega_m,z) = %f\n",delta_vir); } /* Do some initialization if we're doing SHMR */ if(SHMR_FLAG) { if(SATELLITE_PARAMETERIZATION)SHMR_PARAMS = 14; if(VARIABLE_ALPHA)SHMR_PARAMS += 2; if(VARIABLE_EXCLUSION)wpl.a[SHMR_PARAMS+1] = EXCLUSION_RADIUS; wpl.ncf = SHMR_PARAMS + VARIABLE_EXCLUSION; HOD.pdfs = 100; HOD.pdfc = 101; wpx.calculate_two_halo = 1; input_stellar_mass_bins(); // if we have input from the prompt, take that if(argc>2 && atoi(argv[2])!=999) { fp = openfile(argv[2]); fscanf(fp,"%d %d",&i,&j); for(i=1; i<=wpl.ncf; ++i) fscanf(fp,"%lf",&wpl.a[i]); fclose(fp); } } for(i=1; i<=wpl.ncf; ++i) printf("wpl.a[%d]= %e\n",i,wpl.a[i]); /* LENSING TESTING FOR ALEXIE */ if(argc>2) IDUM_MCMC=atoi(argv[2]); SIGMA_8Z0 = 0.8; if(argc>2) if(atoi(argv[2])==999) test(argc,argv); /* If there's no cross-correlation function, * set the second number density equal to the first */ if(!XCORR) GALAXY_DENSITY2 = GALAXY_DENSITY; /* Initialize the non-linear power spectrum. */ nonlinear_sigmac(8.0); sigmac_interp(1.0E13); sigmac_radius_interp(1.0); /* Skip the HOD stuff if we're SHMR-ing it: */ if(SHMR_FLAG) { if(argc>2 && atoi(argv[2])==999)test(argc, argv); if(argc>3 && atoi(argv[3])==999)test(argc, argv); goto TASKS; } /* Get the galaxy bias factor */ s1=qromo(func_galaxy_bias,log(HOD.M_low),log(HOD.M_max),midpnt); GALAXY_BIAS=s1/GALAXY_DENSITY; if(OUTPUT) fprintf(stdout,"Galaxy Bias bg= %f\n",GALAXY_BIAS); fflush(stdout); /* Get the galaxy satellite fraction */ s1=qromo(func_satellite_density,log(HOD.M_low),log(HOD.M_max),midpnt)/ GALAXY_DENSITY; if(OUTPUT) fprintf(stdout,"fsat %e\n",s1); fflush(stdout); /* Mean halo mass. */ if(OUTPUT) fprintf(stdout,"M_eff %e\n",number_weighted_halo_mass()); fflush(stdout); /* Set up BETA for wp integration. */ BETA = pow(OMEGA_M,0.6)/GALAXY_BIAS; if(OUTPUT) printf("BETA = %f\n",BETA); TASKS: tasks(argc,argv); }
double chi2_zspace(double *a) { static double **xiz; int i,j,na=0,nb=0,nc=0,i1,i2,j1,j2; double chi2d=0,chi2a=0,chi2b=0,chi2c=0,chi2,e,rhalf[100],**tmp,**tmp2; double x,rslo,rplo,drs,drp,dx1,rshi,rphi,x1,x2,psend=0,precv; static int iter=0,flag=1; if(flag) { flag=0; COVARZ=0; Work.chi2=1; Work.SysErrFlag=0; initialize_chi2_zspace(); input_datafiles(); if(Work.izspace) xiz = dmatrix(1,Work.n_z,1,Work.n_z); if(Work.ihalf_covar) { tmp=dmatrix(1,Work.n_half,1,1); tmp2=dmatrix(1,Work.n_half,1,Work.n_half); for(i=0;i<Work.n_half;++i) for(j=0;j<Work.n_half;++j) { tmp2[i+1][j+1]=Work.covar_h[i][j]; } gaussj(tmp2,Work.n_half,tmp,1); for(i=1;i<=Work.n_half;++i) for(j=1;j<=Work.n_half;++j) { Work.covar_h[i-1][j-1]=tmp2[i][j]; if(i==j && !ThisTask) printf("DIAG HALF %d %d %e\n",i,j,Work.covar_q[i-1][j-1]); } free_dmatrix(tmp,1,Work.n_half,1,1); free_dmatrix(tmp2,1,Work.n_half,1,Work.n_half); } if(Work.iquad_covar) { tmp=dmatrix(1,Work.n_quad,1,1); tmp2=dmatrix(1,Work.n_quad,1,Work.n_quad); for(i=0;i<Work.n_quad;++i) for(j=0;j<Work.n_quad;++j) { tmp2[i+1][j+1]=Work.covar_q[i][j]; } gaussj(tmp2,Work.n_quad,tmp,1); for(i=1;i<=Work.n_quad;++i) for(j=1;j<=Work.n_quad;++j) { Work.covar_q[i-1][j-1]=tmp2[i][j]; if(i==j && !ThisTask) printf("DIAG QUAD %d %d %e\n",i,j,Work.covar_q[i-1][j-1]); } free_dmatrix(tmp,1,Work.n_quad,1,1); free_dmatrix(tmp2,1,Work.n_quad,1,Work.n_quad); } if(Work.imono_covar) { tmp=dmatrix(1,Work.n_mono,1,1); tmp2=dmatrix(1,Work.n_mono,1,Work.n_mono); for(i=0;i<Work.n_mono;++i) for(j=0;j<Work.n_mono;++j) { tmp2[i+1][j+1]=Work.covar_m[i][j]; } gaussj(tmp2,Work.n_mono,tmp,1); for(i=1;i<=Work.n_mono;++i) for(j=1;j<=Work.n_mono;++j) { Work.covar_m[i-1][j-1]=tmp2[i][j]; if(i==j && !ThisTask) printf("DIAG MONO %d %d %e\n",i,j,Work.covar_m[i-1][j-1]); } free_dmatrix(tmp,1,Work.n_mono,1,1); free_dmatrix(tmp2,1,Work.n_mono,1,Work.n_mono); } } if(!LINEAR_PSP) nonlinear_sigmac(8.0); RESET_PVZ=1; Work.em_abs=Work.eq_abs=0; Work.percentage_error=0; if(Work.imono || Work.iquad) { xi_multipoles(); if(Work.imono && !Work.imono_covar) { for(i=0;i<Work.n_mono;++i) { if(Work.r_mono[i]>=Work.rmlo && Work.r_mono[i]<=Work.rmhi) { e=0;//esys_mono(Work.r_mono[i])*Work.xi_mono[i]; chi2a+=(Work.xi_mono[i]-Work.data_m[i])*(Work.xi_mono[i]-Work.data_m[i])/ (Work.err_m[i]*Work.err_m[i] + e*e); if(!ThisTask && OUTPUTZ) printf("CHIMONO%d %d %f %e %e %e %e\n",Work.imodel,iter,Work.r_mono[i], Work.xi_mono[i],Work.data_m[i],Work.err_m[i],e); } } } if(Work.imono && Work.imono_covar) { for(i=0;i<Work.n_mono;++i) for(j=0;j<Work.n_mono;++j) { chi2a+=(Work.xi_mono[i]-Work.data_m[i])*(Work.xi_mono[j]-Work.data_m[j])* Work.covar_m[i][j]; if(!ThisTask && OUTPUTZ && i==j) printf("CHIMONO %d %f %e %e %e\n",iter,Work.r_mono[i], Work.xi_mono[i],Work.data_m[i],Work.err_m[i]); } } if(Work.iquad && !Work.iquad_covar) { for(i=0;i<Work.n_quad;++i) { if(Work.r_quad[i]>=Work.rqlo && Work.r_quad[i]<=Work.rqhi) { e=esys_quad(Work.r_quad[i]); if(Work.r_quad[i]<3)e*=Work.xi_quad[i]; /* Try percentage error on (1+abs(Q)) -- originally 0.02 */ e = 0.013*(1+mabs(Work.xi_quad[i])); if(Work.xi_quad[i]>0.2) e = 0.013*(Work.xi_quad[i]); x1=(Work.xi_quad[i]-Work.data_q[i])* (Work.xi_quad[i]-Work.data_q[i])/ (Work.err_q[i]*Work.err_q[i] + e*e); chi2b+=x1; if(!ThisTask && OUTPUTZ) { printf("CHIQUAD%d %d %f %e %e %e %e %e\n", Work.imodel,iter,Work.r_quad[i], Work.xi_quad[i],Work.data_q[i],Work.err_q[i],e,x1); fflush(stdout); } } } } } if(Work.iquad && Work.iquad_covar) { for(i=0;i<Work.n_quad;++i) for(j=0;j<Work.n_quad;++j) { chi2b+= (Work.xi_quad[i]-Work.data_q[i])*(Work.xi_quad[j]-Work.data_q[j])* (Work.covar_q[i][j]); if(!ThisTask && OUTPUTZ && i==j) printf("CHIQUAD %d %f %e %e %e\n", iter,Work.r_quad[j], Work.xi_quad[j],Work.data_q[j],Work.err_q[i]); } } if(Work.ihalf && !Work.ihalf_covar) { if(!ThisTask)printf("HERE %d\n",Work.n_half); calc_rhalf(Work.r_half,rhalf,Work.n_half); for(i=0;i<Work.n_half;++i) { // if(Work.r_half[i]<Work.rhlo || Work.r_half[i]>Work.rhhi)continue; e=esys_half(Work.r_half[i])*rhalf[i]; e=0; /*rhalf=small_scale_measure(Work.r_half[i]);*/ chi2c+=(rhalf[i]-Work.data_h[i])*(rhalf[i]-Work.data_h[i])/ (Work.err_h[i]*Work.err_h[i] + e*e); if(!ThisTask && OUTPUTZ) printf("CHIHALF%d %d %f %e %e %e %e\n",Work.imodel,iter,Work.r_half[i], rhalf[i],Work.data_h[i],Work.err_h[i],e); } } if(Work.ihalf && Work.ihalf_covar) { calc_rhalf(Work.r_half,rhalf,Work.n_half); for(i=0;i<Work.n_half;++i) for(j=0;j<Work.n_half;++j) { chi2c+=(rhalf[i]-Work.data_h[i])*(rhalf[j]-Work.data_h[j])* (Work.covar_h[i][j]); if(!ThisTask && OUTPUTZ && i==j) printf("CHIHALF %d %f %e %e %e\n", iter,Work.r_half[j], rhalf[j],Work.data_h[j],Work.err_h[i]); /* if(OUTPUTZ && i==j) printf("CPUHALF%02d %d %f %e %e %e\n",ThisTask, iter,Work.r_half[j], rhalf[j],Work.data_h[j],Work.err_h[i]); */ } } if(Work.izspace) { for(i=0;i<Work.n_z;++i) for(j=0;j<Work.n_z;++j) { if(!i)continue; if(i>12 || j>12)continue; rplo=pow(10.0,-1.12+0.2*j); if(!j)rplo=0; rphi=pow(10.0,-1.12+0.2*(j+1)); rslo=pow(10.0,-1.12+0.2*i); if(!i)rslo=0; rshi=pow(10.0,-1.12+0.2*(i+1)); /* x2 = integrated_bin(rslo,rplo,rshi-rslo,rphi-rplo,10); x=one_halo(Work.rsigma[i][j],Work.rpi[i][j]) + two_halo(Work.rsigma[i][j],Work.rpi[i][j]); */ x = xi2d_interp(rslo,rplo,rshi,rphi); e = 0.03*x; chi2d+=(x-Work.data_z[i][j])*(x-Work.data_z[i][j])/ (Work.err_z[i][j]*Work.err_z[i][j] + e*e); if(!ThisTask && OUTPUTZ){ printf("CHIZSPACE %d %f %f %e %e %e %e %e\n",iter,Work.rsigma[i][j], Work.rpi[i][j],Work.data_z[i][j],Work.err_z[i][j],x,x2,x1); fflush(stdout); } } } chi2=chi2a+chi2b+chi2c+chi2d; ++iter; if(!ThisTask) { printf("ITERZ %d %e %e %e %e %e\n",iter,chi2,chi2a,chi2b,chi2c,chi2d); fflush(stdout); } // printf("CPUCHIZ%02d %d %e %e %e %e %e\n",ThisTask,iter,chi2,chi2a,chi2b,chi2c,chi2d); //fflush(stdout); return(chi2); }