Changeset 3749 in Sophya for trunk/Cosmo/SimLSS/cosmocalc.cc
- Timestamp:
- Mar 2, 2010, 10:49:07 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/cosmocalc.cc
r3325 r3749 364 364 365 365 return oldum + z*z*(_Ocurv0 + z*(_Omatter0+z*_Orelat0)); 366 } 367 368 //---------------------------------------------------------- 369 double 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; 366 391 } 367 392 … … 457 482 } 458 483 484 //========================================================================== 485 //========================================================================== 486 //========================================================================== 487 double 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 493 double 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 499 double 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 513 double 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 } 522 double 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 459 529 } // Fin namespace SOPHYA
Note:
See TracChangeset
for help on using the changeset viewer.