Changeset 3749 in Sophya for trunk/Cosmo/SimLSS/cmvdefsurv.cc
- Timestamp:
- Mar 2, 2010, 10:49:07 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/cmvdefsurv.cc
r3557 r3749 34 34 inline double min22sr(double amin) {return amin*pow(min2rad(1.),2.);} 35 35 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);42 36 double AngsolEqTelescope(double nu /* GHz */,double telsurf /* m^2 */); 37 43 38 void usage(void); 44 39 … … 258 253 for(int i=0;i<3;i++) { 259 254 double l = loscom[i]; if(l<=0.) l = dz/2.; 260 redshift[i] = ZFrLos(l,univ);255 redshift[i] = univ.ZFrLos(l); 261 256 unplusz[i] = 1. + redshift[i]; 262 257 growthfac[i] = growth(redshift[i]); … … 792 787 793 788 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 //----------------------------------------------------------------------------------- 860 790 double AngsolEqTelescope(double nu /* GHz */,double telsurf /* m^2 */) 861 791 /*
Note:
See TracChangeset
for help on using the changeset viewer.