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); }