Changeset 3749 in Sophya for trunk


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

Location:
trunk/Cosmo/SimLSS
Files:
3 edited

Legend:

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

    r3557 r3749  
    3434inline double min22sr(double amin) {return amin*pow(min2rad(1.),2.);}
    3535
    36 double LargeurDoppler(double v /* km/s */, double nu);
    37 double DzFrV(double v /* km/s */, double zred);
    38 double DNuFrDz(double dzred,double nu_at_0,double zred);
    39 double DzFrDNu(double dnu_at_0,double nu_at_0,double zred);
    40 double DzFrDNuApprox(double dnu_at_0,double nu_at_0,double zred);
    41 double ZFrLos(double loscom /* Mpc com */,CosmoCalc& univ);
    4236double AngsolEqTelescope(double nu /* GHz */,double telsurf /* m^2 */);
     37
    4338void usage(void);
    4439
     
    258253 for(int i=0;i<3;i++) {
    259254   double l = loscom[i]; if(l<=0.) l = dz/2.;
    260    redshift[i]  = ZFrLos(l,univ);
     255   redshift[i]  = univ.ZFrLos(l);
    261256   unplusz[i]   = 1. + redshift[i];
    262257   growthfac[i] = growth(redshift[i]);
     
    792787
    793788
    794 //-------------------------------------------------------------------------------------------
    795 double LargeurDoppler(double v, double nu)
    796 // largeur doppler pour une vitesse v en km/s et une frequence nu
    797 {
    798  return v / SpeedOfLight_Cst * nu;
    799 }
    800 
    801 double DzFrV(double v, double zred)
    802 // largeur en redshift pour une vitesse v en km/s au redshift zred
    803 {
    804   return v / SpeedOfLight_Cst * (1. + zred);
    805 }
    806 
    807 double DNuFrDz(double dzred,double nu_at_0,double zred)
    808 // Largeur DNu pour une largeur en redshift "dzred" au redshift "zred"
    809 //    pour la frequence "nu_at_0" a z=0
    810 // nu =  NuHi(z=0)/(1.+z0)
    811 // dnu = NuHi(z=0)/(1.+z0-dz/2) - NuHi/(1.+z0+dz/2)
    812 //     = NuHi(z=0)*dz/[ (1+z0)^2 - (dz/2)^2 ]
    813 //     = NuHi(z=0)*dz/(1.+z0)^2 / [ 1 - [dz/(1+z0)/2)]^2 ]
    814 //     = NuHi(z=0)*dz/(1.+z0)^2 / [1 - dz/(1+z0)/2] / [1 + dz/(1+z0)/2]
    815 //    ~= NuHi(z=0)*dz/(1.+z0)^2   (approx. pour dz<<z0 a l'ordre (dz/z0)^2)
    816 {
    817   double zp1 = 1.+zred;
    818   return nu_at_0*dzred/(zp1*zp1)/(1.-dzred/zp1/2.)/(1.+dzred/zp1/2.);
    819 }
    820 
    821 double DzFrDNu(double dnu_at_0,double nu_at_0,double zred)
    822 // Largeur en redshift au redshift "zred" pour une largeur
    823 // en frequence "dnu_at_0" a la frequence "nu_at_0" a z=0
    824 {
    825   if(dnu_at_0<=0.) return 0.;
    826   double zp1 = 1.+zred;
    827   double dnusnu0 = dnu_at_0/nu_at_0;
    828   return 2./dnusnu0 * (sqrt(1.+(dnusnu0*zp1)*(dnusnu0*zp1)) - 1.);
    829 }
    830 double DzFrDNuApprox(double dnu_at_0,double nu_at_0,double zred)
    831 // idem DzFrDNu mais on utilise l'approximation: dnu=NuHi(z=0)*dz/(1.+z0)^2
    832 {
    833   double zp1 = 1.+zred;
    834   return dnu_at_0/nu_at_0 *(zp1*zp1);
    835 }
    836 
    837 double ZFrLos(double loscom,CosmoCalc& univ)
    838 // Recherche du redshift correspondant a une distance comobile
    839 // le long de la ligne de visee egale a "loscom" Mpc
    840 // et pour un univers "univ"
    841 {
    842   double dz = univ.ZMax()/10.; if(dz<=0.) dz = 0.1;
    843   double zmin=0., zmax=0.;
    844   while(univ.Dloscom(zmax)<loscom) zmax += dz;
    845   if(zmax==0.) return 0.;
    846   for(int i=0; i<6; i++) {
    847     zmin=zmax-dz; if(zmin<0.) zmin=0.;
    848     dz /= 10.;
    849     for(double z=zmin; z<zmax+dz; z+=dz) {
    850       double d = univ.Dloscom(z);
    851       if(d<loscom) continue;
    852       zmax = z;
    853       //cout<<"ZFrLos: z="<<zmax<<" d="<<d<<" / "<<loscom<<endl;
    854       break;
    855     }
    856   }
    857   return zmax;
    858 }
    859 
     789//-----------------------------------------------------------------------------------
    860790double AngsolEqTelescope(double nu /* GHz */,double telsurf /* m^2 */)
    861791/*
  • 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
  • trunk/Cosmo/SimLSS/cosmocalc.h

    r3325 r3749  
    5757  double Vol4Pi(double z1,double z2);
    5858
     59  double ZFrLos(double loscom /* Mpc com */, int niter=6);
     60
    5961  void Print(double z=0.);
    6062
     
    9698};
    9799
     100//-----------------------------------------------------------------------------------
     101double LargeurDoppler(double v /* km/s */, double nu);
     102double DzFrV(double v /* km/s */, double zred);
     103double DNuFrDz(double dzred,double nu_at_0,double zred);
     104double DzFrDNu(double dnu_at_0,double nu_at_0,double zred);
     105double DzFrDNuApprox(double dnu_at_0,double nu_at_0,double zred);
     106
     107//-----------------------------------------------------------------------------------
     108
    98109} // Fin du namespace SOPHYA
    99110
Note: See TracChangeset for help on using the changeset viewer.