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


Ignore:
Timestamp:
Mar 2, 2010, 10:49:07 AM (16 years ago)
Author:
cmv
Message:

deplacement de fct utilitaires depuis cmvdefsurv.cc vers cosmocalc.cc, cmv 02/03/2010

File:
1 edited

Legend:

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

    r3325 r3749  
    364364
    365365  return oldum + z*z*(_Ocurv0 + z*(_Omatter0+z*_Orelat0));
     366}
     367
     368//----------------------------------------------------------
     369double CosmoCalc::ZFrLos(double loscom /* Mpc com */, int niter)
     370// Recherche du redshift correspondant a une distance comobile
     371// le long de la ligne de visee (radiale) egale a "loscom" Mpc
     372// niter = nomber of iterations for precision measurement
     373{
     374  if(niter<3) niter = 6;
     375  double dz = ZMax()/10.; if(dz<=0.) dz = 0.1;
     376  double zmin=0., zmax=0.;
     377  while(Dloscom(zmax)<loscom) zmax += dz;
     378  if(zmax==0.) return 0.;
     379  for(int i=0; i<niter; i++) {
     380    zmin=zmax-dz; if(zmin<0.) zmin=0.;
     381    dz /= 10.;
     382    for(double z=zmin; z<zmax+dz; z+=dz) {
     383      double d = Dloscom(z);
     384      if(d<loscom) continue;
     385      zmax = z;
     386      //cout<<"ZFrLos: z="<<zmax<<" d="<<d<<" / "<<loscom<<endl;
     387      break;
     388    }
     389  }
     390  return zmax;
    366391}
    367392
     
    457482}
    458483
     484//==========================================================================
     485//==========================================================================
     486//==========================================================================
     487double LargeurDoppler(double v, double nu)
     488// largeur doppler pour une vitesse v en km/s et une frequence nu
     489{
     490 return v / SpeedOfLight_Cst * nu;
     491}
     492
     493double DzFrV(double v, double zred)
     494// largeur en redshift pour une vitesse v en km/s au redshift zred
     495{
     496  return v / SpeedOfLight_Cst * (1. + zred);
     497}
     498
     499double DNuFrDz(double dzred,double nu_at_0,double zred)
     500// Largeur DNu pour une largeur en redshift "dzred" au redshift "zred"
     501//    pour la frequence "nu_at_0" a z=0
     502// nu =  NuHi(z=0)/(1.+z0)
     503// dnu = NuHi(z=0)/(1.+z0-dz/2) - NuHi/(1.+z0+dz/2)
     504//     = NuHi(z=0)*dz/[ (1+z0)^2 - (dz/2)^2 ]
     505//     = NuHi(z=0)*dz/(1.+z0)^2 / [ 1 - [dz/(1+z0)/2)]^2 ]
     506//     = NuHi(z=0)*dz/(1.+z0)^2 / [1 - dz/(1+z0)/2] / [1 + dz/(1+z0)/2]
     507//    ~= NuHi(z=0)*dz/(1.+z0)^2   (approx. pour dz<<z0 a l'ordre (dz/z0)^2)
     508{
     509  double zp1 = 1.+zred;
     510  return nu_at_0*dzred/(zp1*zp1)/(1.-dzred/zp1/2.)/(1.+dzred/zp1/2.);
     511}
     512
     513double DzFrDNu(double dnu_at_0,double nu_at_0,double zred)
     514// Largeur en redshift au redshift "zred" pour une largeur
     515// en frequence "dnu_at_0" a la frequence "nu_at_0" a z=0
     516{
     517  if(dnu_at_0<=0.) return 0.;
     518  double zp1 = 1.+zred;
     519  double dnusnu0 = dnu_at_0/nu_at_0;
     520  return 2./dnusnu0 * (sqrt(1.+(dnusnu0*zp1)*(dnusnu0*zp1)) - 1.);
     521}
     522double DzFrDNuApprox(double dnu_at_0,double nu_at_0,double zred)
     523// idem DzFrDNu mais on utilise l'approximation: dnu=NuHi(z=0)*dz/(1.+z0)^2
     524{
     525  double zp1 = 1.+zred;
     526  return dnu_at_0/nu_at_0 *(zp1*zp1);
     527}
     528
    459529}  // Fin namespace SOPHYA
Note: See TracChangeset for help on using the changeset viewer.