static double pbarPropRate(double ek) { double fluxDM, dFluxDM; double i2,i3; ek_=ek; Kdif=pbar_beta(ek)*K_dif*pow(pbar_rig(ek),Delta_dif); //printf("Kdif=%E\n",Kdif); switch(Gtot_style) { case 0: Gtot=0; break; case 1: Gtot= ( DensityH*sigma_inelastic_ANN_pbarH_TAN_and_NG(ek) + DensityHe*sigma_inelastic_ANN_pbarHe_TAN_and_NG(ek) ); break; default: Gtot= 0.8*sigma_inelastic_pbarH_TAN_and_NG(ek)*(DensityH + DensityHe*2.519842); } Gtot*= pbar_beta(ek)*c_light/cmpers_to_kpcperMyr/s_to_Myr * mb_to_cm2; Vdif=Vc_dif*kmpers_to_kpcperMyr; { double kv,kd,knL; int i; kv=Vdif/(2.*Kdif); kd= (2.*h*Gtot/Kdif + 2.*kv); if(kd) { int nn; knL= (0.5)*M_PI; if(kd>0) nn=1; else nn=0; for(i=0; i<10; ++i) knL = nn*M_PI - atan(2.*knL/(kd*L_dif)); } else knL= (0.5)*M_PI; // lastK=0; // kn[0]=knL; Leff=1/sqrt(SQR(knL/L_dif)+SQR(kv)); } fluxDM=4*simpson(zIntegrandP,0.,sqrt(L_dif),Eps); i2=simpson(rhoQ_2,rHaloMin, rHalo1, 1.E-2) -rHalo1*rhoQ_2(rHalo1)/3; i3=simpson(rhoQ_3,rHaloMin, rHalo1, 1.E-2) -rHalo1*rhoQ_3(rHalo1)/4; dFluxDM=4*M_PI*i2*pbar_PropagatorInfiniteR(Rsun,0.5*i3/i2,ek); fluxDM+=dFluxDM; return fluxDM*pbar_beta(ek)*c_light/cm_to_kpc/(4.*M_PI); }
static double rIntegrandP(double r) { double fluxDM_r_z; double thetaMin,thetaMax,sinMax; double drQ = rHalo1*rHalo1-z_*z_ -(Rsun-r)*(Rsun-r); double RQ = Rdisk*Rdisk -z_*z_ -(Rsun-r)*(Rsun-r); double prQ; if(r==0) return 0; if(RQ<=0) return 0; if(drQ>0) thetaMin= 2*asin(sqrt(drQ/(4*Rsun*r))); else thetaMin=0; sinMax=sqrt(RQ/(4*Rsun*r)); if(sinMax>=1) thetaMax=M_PI; else thetaMax=2*asin(sinMax); r_=r; prQ=hProfile_(rHalo1); prQ*=prQ*cProfile_(rHalo1); fluxDM_r_z=2*2*simpson(thetaIntegrandP,sqrt(thetaMin),sqrt(thetaMax), 0.1*Eps)+2*thetaMin*prQ; return r*fluxDM_r_z*pbar_PropagatorInfiniteR(r,z_,ek_); }