Beispiel #1
0
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 */
}
Beispiel #2
0
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;
  }   
}
Beispiel #3
0
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 */
}