mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-05 07:41:11 +00:00
beginning to fold in HOD code with jeremy tinker's approval
This commit is contained in:
parent
d8108d3a8e
commit
44cd0eb71f
95 changed files with 21950 additions and 0 deletions
231
c_tools/hod/one_halo_rspace.c
Normal file
231
c_tools/hod/one_halo_rspace.c
Normal file
|
@ -0,0 +1,231 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "header.h"
|
||||
|
||||
/* These routines control the real-space one-halo term.
|
||||
* For specifics, see:
|
||||
*
|
||||
* Berlind, A.\ A., \& Weinberg, D.\ H.\ 2002, \apj, 575, 587
|
||||
* Zheng, Z. 2003, \apj, 610, 61
|
||||
* Tinker, Weinberg, Zheng, Zehavi 2005 Apj 631 (App B)
|
||||
*
|
||||
*/
|
||||
|
||||
/* Local functions.
|
||||
*/
|
||||
void calc_real_space_one_halo(double *r, double *xi, int n);
|
||||
double func1(double m);
|
||||
double func1cs(double m);
|
||||
double func1satsat(double m);
|
||||
double func1_xcorr(double m);
|
||||
double one_halo_ss(double r);
|
||||
double one_halo_cs(double r);
|
||||
|
||||
double *xi_cs_g2,*xi_ss_g2,*xi_rad_g2;
|
||||
|
||||
/* These are the local globals to use during the qromo integration
|
||||
*/
|
||||
double r_g2;
|
||||
|
||||
|
||||
/* This function tabulates the one-halo real-space term for spline interpolation.
|
||||
* If the requested radius is out-of-bounds of the tabulated function, a value of
|
||||
* zero is returned.
|
||||
*/
|
||||
double one_halo_real_space(double r)
|
||||
{
|
||||
static int flag=0;
|
||||
static double *x,*y,*y2;
|
||||
int i,n=100;
|
||||
double a;
|
||||
|
||||
if(!HOD.pdfs)return(0);
|
||||
|
||||
if(!flag || RESET_FLAG_1H)
|
||||
{
|
||||
if(!flag)
|
||||
{
|
||||
x=dvector(1,n);
|
||||
y=dvector(1,n);
|
||||
y2=dvector(1,n);
|
||||
}
|
||||
flag=1;
|
||||
RESET_FLAG_1H=0;
|
||||
calc_real_space_one_halo(x,y,n);
|
||||
spline(x,y,n,2.0E+30,2.0E+30,y2);
|
||||
}
|
||||
if(r>x[n])return(0);
|
||||
if(r<x[1])return(0);
|
||||
splint(x,y,y2,n,r,&a);
|
||||
return(a);
|
||||
|
||||
}
|
||||
|
||||
/* Here we calculate the one-halo real space term
|
||||
* logarithmically spaced in r. The minimum value of r = 0.01 Mpc/h. The maximum
|
||||
* value of r is set to be approximately twice the virial radius of M_max.
|
||||
*
|
||||
* Only halos with virial radii greater than 1/2 the separation
|
||||
* contribute to the 1-halo term.
|
||||
* Terminate integrations when r>2*R_vir(M_max).
|
||||
*/
|
||||
void calc_real_space_one_halo(double *r, double *xi, int n)
|
||||
{
|
||||
static int ncnt=0;
|
||||
double fac,s1,rhi=1,rlo=-2,dr,mlo,x1,x2;
|
||||
int i,j;
|
||||
FILE *fp;
|
||||
char fname[100];
|
||||
|
||||
ncnt++;
|
||||
rlo=log(0.01);
|
||||
rhi=log(1.9*pow(3*HOD.M_max/(4*PI*DELTA_HALO*RHO_CRIT*OMEGA_M),1.0/3.0));
|
||||
dr=(rhi-rlo)/(n-1);
|
||||
|
||||
if(OUTPUT>1)
|
||||
printf("calc_one_halo> starting...\n");
|
||||
if(!XCORR)
|
||||
GALAXY_DENSITY2 = GALAXY_DENSITY;
|
||||
|
||||
for(i=1;i<=n;++i)
|
||||
{
|
||||
r_g2=r[i]=exp((i-1)*dr + rlo);
|
||||
fac=1.0/(2*PI*r_g2*r_g2*GALAXY_DENSITY*GALAXY_DENSITY2);
|
||||
|
||||
mlo = 4./3.*PI*RHO_CRIT*DELTA_HALO*OMEGA_M*pow(r[i]*.5,3.0);
|
||||
if(mlo<HOD.M_low)
|
||||
mlo = HOD.M_low;
|
||||
|
||||
if(XCORR)
|
||||
s1=fac*qromo(func1_xcorr,log(mlo),log(HOD.M_max),midpnt)*0.5;
|
||||
else
|
||||
s1=fac*qromo(func1,log(mlo),log(HOD.M_max),midpnt);
|
||||
|
||||
xi[i]=s1;
|
||||
if(OUTPUT>1)
|
||||
printf("calc_one_halo> %f %e %e\n",r[i],s1,fac);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* This is the function passed to qromo in the above routine.
|
||||
* It is the number density of
|
||||
* galaxy pairs in halos of mass m at separation r_g2.
|
||||
* See Equation (11) from Berlind & Weinberg.
|
||||
*/
|
||||
double func1(double m)
|
||||
{
|
||||
double N,n,fac2,rvir,f_ss,f_cs,cvir,x,rfof,ncen,nsat;
|
||||
|
||||
m=exp(m);
|
||||
cvir=halo_concentration(m)*CVIR_FAC;
|
||||
|
||||
n=dndM_interp(m);
|
||||
|
||||
nsat=N_sat(m);
|
||||
ncen=N_cen(m);
|
||||
|
||||
rvir=2*pow(3.0*m/(4*DELTA_HALO*PI*OMEGA_M*RHO_CRIT),1.0/3.0);
|
||||
|
||||
/* Break up the contribution of pairs into
|
||||
* central-satellite (cs) and satellite-satellite (ss) pairs.
|
||||
*/
|
||||
f_ss=dFdx_ss(r_g2/rvir,cvir)*moment_ss(m)*0.5;
|
||||
f_cs=dFdx_cs(r_g2/rvir,cvir)*nsat*ncen;
|
||||
x=n*(f_ss+f_cs)/rvir*m;
|
||||
return(x);
|
||||
|
||||
}
|
||||
|
||||
double func1satsat(double m)
|
||||
{
|
||||
double N,n,fac2,rvir,f_ss,f_cs,cvir,x,rfof,ncen,nsat;
|
||||
|
||||
m=exp(m);
|
||||
cvir=halo_concentration(m)*CVIR_FAC;
|
||||
|
||||
n=dndM_interp(m);
|
||||
|
||||
nsat=N_sat(m);
|
||||
ncen=N_cen(m);
|
||||
|
||||
rvir=2*pow(3.0*m/(4*DELTA_HALO*PI*OMEGA_M*RHO_CRIT),1.0/3.0);
|
||||
|
||||
/* Break up the contribution of pairs into
|
||||
* central-satellite (cs) and satellite-satellite (ss) pairs.
|
||||
*/
|
||||
f_ss=dFdx_ss(r_g2/rvir,cvir)*moment_ss(m)*0.5;
|
||||
x=n*(f_ss)/rvir*m;
|
||||
return(x);
|
||||
|
||||
}
|
||||
|
||||
double func1cs(double m)
|
||||
{
|
||||
double N,n,fac2,rvir,f_ss,f_cs,cvir,x,rfof,ncen,nsat;
|
||||
|
||||
m=exp(m);
|
||||
cvir=halo_concentration(m)*CVIR_FAC;
|
||||
|
||||
n=dndM_interp(m);
|
||||
|
||||
nsat=N_sat(m);
|
||||
ncen=N_cen(m);
|
||||
|
||||
rvir=2*pow(3.0*m/(4*DELTA_HALO*PI*OMEGA_M*RHO_CRIT),1.0/3.0);
|
||||
|
||||
/* Break up the contribution of pairs into
|
||||
* central-satellite (cs) and satellite-satellite (ss) pairs.
|
||||
*/
|
||||
f_cs=dFdx_cs(r_g2/rvir,cvir)*nsat*ncen;
|
||||
x=n*(f_cs)/rvir*m;
|
||||
|
||||
return(x);
|
||||
}
|
||||
|
||||
/* Same as above, only now we're calculating the number of pairs
|
||||
* in the cross-correlation.
|
||||
*
|
||||
* NB! -- We're assuming that the satellite galaxy profiles
|
||||
* of both HODs are the same.
|
||||
*/
|
||||
double func1_xcorr(double m)
|
||||
{
|
||||
double N,n,fac2,rvir,f_ss=0,f_cs=0,cvir,x,rfof,ncen1,nsat1,ncen2,nsat2;
|
||||
|
||||
m=exp(m);
|
||||
cvir=halo_concentration(m)*CVIR_FAC;
|
||||
n=dndM_interp(m);
|
||||
|
||||
nsat1=N_sat(m);
|
||||
ncen1=N_cen(m);
|
||||
|
||||
nsat2=N_sat2(m);
|
||||
ncen2=N_cen2(m);
|
||||
|
||||
rvir=2*pow(3.0*m/(4*DELTA_HALO*PI*OMEGA_M*RHO_CRIT),1.0/3.0);
|
||||
|
||||
/* Break up the contribution of pairs into
|
||||
* central-satellite (cs) and satellite-satellite (ss) pairs.
|
||||
* But for x-corr, we have c1-s2, c2-s1, s1-s2.
|
||||
*/
|
||||
f_ss=dFdx_ss(r_g2/rvir,cvir)*nsat1*nsat2;
|
||||
f_cs=dFdx_cs(r_g2/rvir,cvir)*(nsat1*ncen2 + nsat2*ncen1);
|
||||
x=n*(f_ss+f_cs)/rvir*m;
|
||||
|
||||
return(x);
|
||||
|
||||
}
|
||||
|
||||
/* The public version doesn't currently support cross-correlations.
|
||||
*/
|
||||
double N_sat2(double m)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
double N_cen2(double m)
|
||||
{
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue