Example #1
0
int main(void)
{
	char txt[MAXSTR];
	int i,nval;
	float ci,si,x,xci,xsi;
	FILE *fp;

	if ((fp = fopen("fncval.dat","r")) == NULL)
		nrerror("Data file fncval.dat not found\n");
	fgets(txt,MAXSTR,fp);
	while (strncmp(txt,"Cosine and Sine Integrals",25)) {
		fgets(txt,MAXSTR,fp);
		if (feof(fp)) nrerror("Data not found in fncval.dat\n");
	}
	fscanf(fp,"%d %*s",&nval);
	printf("\n%s\n",txt);
	printf("%5s %12s %12s %12s %12s \n",
		"x","actual","ci(x)","actual","si(x)");
	for (i=1;i<=nval;i++) {
		fscanf(fp,"%f %f %f",&x,&xci,&xsi);
		cisi(x,&ci,&si);
		printf("%6.2f %12.6f %12.6f %12.6f %12.6f\n",
			x,xci,ci,xsi,si);
	}
	fclose(fp);
	return 0;
}
double nfw_transform(double xk, double m)
{
  double c,rvir,kappa1,kappa2,f,y,ci1,ci2,si1,si2;

  c=halo_concentration(m)*CVIR_FAC;
  rvir=pow(3.0*m/(4.0*DELTA_HALO*PI*OMEGA_M*RHO_CRIT),1.0/3.0);

  kappa1=xk*rvir/c;
  kappa2=kappa1*(1.0+c);
  f=log(1.0+c)-c/(1.0+c);
  f=1.0/f;
  
  cisi(kappa1,&ci1,&si1);
  cisi(kappa2,&ci2,&si2);

  y=-sin(kappa1*c)/kappa2;
  y=y+sin(kappa1)*(si2-si1)+cos(kappa1)*(ci2-ci1);
  y=f*y;

  return(y);
}