Changeset 3952 in Sophya for trunk/Cosmo/SimLSS/cosmocalc.cc


Ignore:
Timestamp:
Feb 22, 2011, 4:32:25 PM (15 years ago)
Author:
cmv
Message:

ajout evolution de w, cmv 22/02/2011

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cosmo/SimLSS/cosmocalc.cc

    r3768 r3952  
    6767 _Olambda0 = univ._Olambda0;
    6868 _W0 = univ._W0;
     69 _Wa = univ._Wa;
    6970 _Omatter0 = univ._Omatter0;
    7071 _Obaryon0 = univ._Obaryon0;
     
    149150}
    150151
    151 void CosmoCalc::SetDynParam(double h100,double om0,double or0,double ol0,double w0)
     152void CosmoCalc::SetDynParam(double h100,double om0,double or0,double ol0,double w0,double wa)
    152153{
    153154  _computespl=true;
     
    161162  _Olambda0 = ol0;
    162163  _W0 = w0;
     164  _Wa = wa;
    163165  _Otot0 = _Olambda0 + _Omatter0 + _Orelat0;
    164166  _Ocurv0 = 1. - _Otot0;
     
    209211
    210212  double h100 = 0.71;
    211   double ol0 = 0.73, w0 = -1.;
     213  double ol0 = 0.73, w0 = -1., wa = 0.;
    212214  double om0 = 0.135/(h100*h100);
    213215  // Relat = photons (2.725 K) + neutrinos (1.9 K)
    214216  double or0 = 2.47e-5 * (1. + 21./8.*pow(T_NU_Par/T_CMB_Par,4.)) / (h100*h100);
    215   SetDynParam(h100,om0,or0,ol0,w0);
     217  SetDynParam(h100,om0,or0,ol0,w0,wa);
    216218  _Obaryon0 = 0.0224/(h100*h100);
    217219
     
    224226  if(z<0.) z = 0.;
    225227
    226   printf("CosmoCalc::Print(spl=%d,zmax=%g,flat=%u)  for z=%g\n",int(_usespline),ZMax(),Flat(),z);
     228  printf("CosmoCalc::Print(spl=%d,zmax=%g,flat=%u)  for z=%g (a=%g)\n"
     229         ,int(_usespline),ZMax(),Flat(),z,1./(1.+z));
    227230  printf("h100=%g H0=%g Dhub=%g  H(z)=%g  Rhoc=%g g/cm^3 =%g Msol/Mpc^3\n"
    228231        ,h100(),H0(),Dhubble(),H(z),Rhoc(z),Rhoc(z)*GCm3toMsolMpc3_Cst);
    229   printf("Olambda=%g  W0=%g\n",Olambda(z),_W0);
     232  printf("Olambda=%g  W=%g   (%g+(%g)*(1-a))\n",Olambda(z),W(z),_W0,_Wa);
    230233  printf("Omatter=%g  Obaryon=%g\n",Omatter(z),Obaryon(z));
    231234  printf("Orelat=%g\n",Orelat(z));
     
    240243//----------------------------------------------------------
    241244double CosmoCalc::Olambda(double z)
    242 {
    243   double v = _Olambda0;
    244   if(_W0 != -1.) v *= pow((1.+z),3.*(1+_W0));
     245// Equation d'etat de l'energie noire: P=W(z)*Rho*C^2
     246//   avec W(z) = W0 + Wa*(1-a) = W0 + Wa * z/(1+z) et a=1/(1+z)
     247{
     248  double zp1 = 1. + z;
     249  double v = _Olambda0 * pow(zp1,3.*(1.+_W0+_Wa));
     250  if(_Wa!=0.) v *= exp(-3.*_Wa*z/zp1);
    245251  return v / E2(z);
    246252}
     
    248254double CosmoCalc::Omatter(double z)
    249255{
    250   return _Omatter0 * (1.+z)*(1.+z)*(1.+z) /E2(z);
     256  double zp1 = 1. + z;
     257  return _Omatter0 * zp1*zp1*zp1 /E2(z);
    251258}
    252259
    253260double CosmoCalc::Obaryon(double z)
    254261{
    255   return _Obaryon0 * (1.+z)*(1.+z)*(1.+z) /E2(z);
     262  double zp1 = 1. + z;
     263  return _Obaryon0 * zp1*zp1*zp1 /E2(z);
    256264}
    257265
     
    269277double CosmoCalc::Otot(double z)
    270278{
    271   return Olambda(z)+Omatter(z)+Orelat(z);
     279  return Olambda(z) + Omatter(z) + Orelat(z);
    272280}
    273281
     
    369377double CosmoCalc::E2(double z) const
    370378{
    371   z += 1.;
     379  double zp1 = 1. + z;
     380
    372381  double oldum = _Olambda0;
    373 
    374   if(oldum>0. && _W0!=-1.) oldum *= pow(z,3.*(1.+_W0));
    375 
    376   return oldum + z*z*(_Ocurv0 + z*(_Omatter0+z*_Orelat0));
     382  if(oldum>0.) {
     383    oldum *= pow(zp1,3.*(1.+_W0+_Wa));
     384    if(_Wa!=0.) oldum *= exp(-3.*_Wa*z/zp1);
     385  }
     386
     387  return oldum + zp1*zp1*(_Ocurv0 + zp1*(_Omatter0+zp1*_Orelat0));
    377388}
    378389
Note: See TracChangeset for help on using the changeset viewer.