double darkOmega(double * Xf, int Fast, double Beps) { double Yt,Yi,Xt=25; double Z1=1.1; double Z2=10; int i; double Xf1; if(Xf)*Xf=Xt; assignVal("Q",2*M); if(Beps>=1) Beps=0.999; if(Z1<=1) Z1=1.1; fast_=Fast; Yt= darkOmega1(&Xt, Z1, (Z1-1)/5,Fast, Beps); if(Yt<0||FError) return -1; Xf1=Xt; for(i=0; ;i++) { double X2=vSigmaGrid.xtop*pow(XSTEP,i+1); double y; if(Yt>=Z2*Yeq(Xt)) break; if(Xt>X2*0.999999) continue; while(vSigmaGrid.pow<=i+1) { double X; if(vSigmaGrid.pow==vSigmaGrid.size) { vSigmaGrid.size+=10; vSigmaGrid.data=(double*)realloc(vSigmaGrid.data,sizeof(double)*vSigmaGrid.size); } X=vSigmaGrid.xtop*pow(XSTEP,vSigmaGrid.pow); MassCut=M*(2-log(Beps)/X); vSigmaGrid.data[vSigmaGrid.pow++]=aRate(X,0,Fast,NULL); if(FError) return -1; } y=log(Yt); odeint(&y,1 , Xt , X2 , 1.E-3, (X2-Xt)/2, &XderivLn); Yt=exp(y); Xt=X2; } if(Xf) *Xf=0.5*(Xf1+Xt); Yi=1/( (M/Xt)*sqrt(M_PI/45)*MPlank*aRate(Xt,1,Fast,NULL) ); if(!finite(Yi)||FError) return -1; return 2.742E8*M/(1/Yt + 1/Yi); /* 2.828-old 2.755-new,2.742 -newnew */ }
double darkOmega(double * Xf, int Fast, double Beps) { double Yt,Yi,Xt=25; double Z1=1.1; double Z2=10; int i; double Xf1; if(Xf)*Xf=Xt; assignVal("Q",2*Mcdm); if(Beps>=1) Beps=0.999; Beps_=Beps; Fast_=Fast; if(Z1<=1) Z1=1.1; Yt= darkOmega1(&Xt, Z1, (Z1-1)/5,Fast, Beps); if(Yt<0||FError) {return -1;} Xf1=Xt; for(i=0; ;i++) { double X2=vSigmaGrid.xtop*pow(XSTEP,i+1); double y; if(Yt>=Z2*Yeq(Xt)) break; if(Xt>X2*0.999999) continue; y=Yt; if(odeint(&y,1 , Xt , X2 , 1.E-3, (X2-Xt)/2, &XderivLn)){return -1;} Yt=y; Xt=X2; } if(Xf) *Xf=0.5*(Xf1+Xt); Yi=1/( (Mcdm/Xt)*sqrt(M_PI/45)*MPlank*aRate(Xt,1,Fast,NULL,NULL)); if(!finite(Yi)||FError) return -1; if(deltaY==0.) { dmAsymm=0; return 2.742E8*Mcdm/(1/Yt + 1/Yi); /* 2.828-old 2.755-new,2.742 -newnew */ } else { double a,f,z0,Y0; a=fabs(deltaY); f= (sqrt(Yt*Yt+a*a)-a)/ (sqrt(Yt*Yt+a*a)+a)*exp(-2*a/Yi); z0=sqrt(f)*2*a/(1-f); Y0=sqrt(z0*z0+a*a); dmAsymm=log((Y0+deltaY)/(Y0-deltaY)); return 2.742E8*Mcdm*Y0; } }
double darkOmegaFO(double * Xf_, int Fast, double Beps) { double Yf,Yi; double Z1=2.5; double dZ1=0.05; double x; double Xf=25; if(Xf_) *Xf_=Xf; assignVal("Q",2*M); if(Beps>=1) Beps=0.999; Yf= darkOmega1(&Xf, Z1, dZ1,Fast, Beps); if(Yf<0||FError) return -1; x=Xf; Yi=1/( (M/x)*sqrt(M_PI/45)*MPlank*aRate(x, 1,Fast, NULL) ); if(!finite(Yi)||FError) return -1; if(Xf_) *Xf_=Xf; return 2.742E8*M/(1/Yf + 1/Yi); /* 2.828-old 2.755-new 2.742 next-new */ }