Changeset 3353 in Sophya


Ignore:
Timestamp:
Oct 17, 2007, 4:44:53 PM (18 years ago)
Author:
cmv
Message:

modifs sur VarianceFrReal pour calcul; sima8 dans epace reel, cmv 17/10/2007

Location:
trunk/Cosmo/SimLSS
Files:
2 edited

Legend:

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

    r3351 r3353  
    3939     <<"           typevol=2 noise evolved with distance to middle of Z planes"<<endl
    4040     <<" -2 : compute also 2D spectrum (default: no)"<<endl
    41      <<" -N scalemass: facteur d\'unite pour la masse (default: 1)"<<endl
     41     <<" -N scalemass: facteur d\'unite pour la masse (default: -1)"<<endl
    4242     <<"               ex: si on veut unites 10^8 Msol -> scalemass=1.e-8"<<endl
    4343     <<"               si <0 alors facteur=-scalemass*Mpix"<<endl
     
    9999 bool no_poisson = false;
    100100
    101  double scalemass = 1.;
     101 double scalemass = -1.;
    102102
    103103 // *** Niveau de bruit
     
    528528   fluct3d.VarianceFrReal(R,varr);
    529529   cout<<"...Computed variance = "<<varr
    530        <<" , Theorical variance at (z=0) = "<<pow(sigmaR,1.)
    531        <<" , at (z="<<zref<<") = "<<pow(sigmaR*growth_at_z,1.)<<endl;
     530       <<" , Theorical variance at (z=0) = "<<pow(sigmaR,2.)
     531       <<" , at (z="<<zref<<") = "<<pow(sigmaR*growth_at_z,2.)<<endl;
    532532   PrtTim(">>>> End Check variance sigmaR in real space");
    533533 }
  • trunk/Cosmo/SimLSS/genefluct3d.cc

    r3351 r3353  
    10211021int_8 GeneFluct3D::VarianceFrReal(double R,double& var)
    10221022// Recompute MASS variance in spherical top-hat (rayon=R)
     1023// Par definition: SigmaR^2 = <(M-<M>)^2>/<M>^2
     1024//                 ou M = masse dans sphere de rayon R
    10231025{
    10241026  if(lp_>0) cout<<"--- VarianceFrReal R="<<R<<endl;
    10251027 check_array_alloc();
    10261028
    1027  long dnx = long(R/Dx_+0.5); if(dnx<=0) dnx = 1;
    1028  long dny = long(R/Dy_+0.5); if(dny<=0) dny = 1;
    1029  long dnz = long(R/Dz_+0.5); if(dnz<=0) dnz = 1;
     1029 long dnx = long(R/Dx_)+1; if(dnx<=0) dnx = 1;
     1030 long dny = long(R/Dy_)+1; if(dny<=0) dny = 1;
     1031 long dnz = long(R/Dz_)+1; if(dnz<=0) dnz = 1;
    10301032 if(lp_>0) cout<<"dnx="<<dnx<<" dny="<<dny<<" dnz="<<dnz<<endl;
    10311033
    1032  double sum=0., sum2=0., r2 = R*R; int_8 nsum=0;
    1033 
    1034  for(long i=dnx;i<Nx_-dnx;i+=dnx) {
    1035    for(long j=dny;j<Ny_-dny;j+=dny) {
    1036      for(long l=dnz;l<Nz_-dnz;l+=dnz) {
    1037        double s=0.; int_8 n=0;
     1034 double sum=0., sum2=0., sn=0., r2 = R*R;
     1035 int_8 nsum=0;
     1036
     1037 for(long i=dnx;i<Nx_-dnx;i+=2*dnx) {
     1038   for(long j=dny;j<Ny_-dny;j+=2*dny) {
     1039     for(long l=dnz;l<Nz_-dnz;l+=2*dnz) {
     1040       double m=0.; int_8 n=0;
    10381041       for(long ii=i-dnx;ii<=i+dnx;ii++) {
    10391042         double x = (ii-i)*Dx_; x *= x;
     
    10441047             if(x+y+z>r2) continue;
    10451048             int_8 ip = IndexR(ii,jj,ll);
    1046              s += 1.+data_[ip];
     1049             m += 1.+data_[ip];  // 1+drho/rho
    10471050             n++;
    10481051           }
    10491052         }
    10501053       }
    1051        if(n>0) {sum += s; sum2 += s*s; nsum++;}
    1052        //cout<<i<<","<<j<<","<<l<<" n="<<n<<" s="<<s<<" sum="<<sum<<" sum2="<<sum2<<endl;
     1054       if(n>0) {sum += m; sum2 += m*m; nsum++; sn += n;}
     1055       //cout<<i<<","<<j<<","<<l<<" n="<<n<<" m="<<m<<" sum="<<sum<<" sum2="<<sum2<<endl;
    10531056     }
    10541057   }
     
    10561059
    10571060 if(nsum<=1) {var=0.; return nsum;}
    1058 
    10591061 sum /= nsum;
    10601062 sum2 = sum2/nsum - sum*sum;
    1061  if(lp_>0) cout<<"...nsum="<<nsum<<" <M>="<<sum<<" <(M-<M>)^2>="<<sum2<<endl;
    1062 
    1063  var = sum2/(sum*sum);  // <dM>^2/<M>^2
    1064  if(lp_>0) cout<<"...sigmaR^2="<<var<<" -> "<<sqrt(var)<<endl;
     1063 sn /= nsum;
     1064 if(lp_>0) cout<<"...<n>="<<sn<<", nsum="<<nsum<<" <M>="<<sum<<" <(M-<M>)^2>="<<sum2<<endl;
     1065 var = sum2/(sum*sum);  // <dM^2>/<M>^2
     1066 if(lp_>0) cout<<"...sigmaR^2 = <(M-<M>)^2>/<M>^2 = "<<var
     1067               <<" -> sigmaR = "<<sqrt(var)<<endl;
    10651068
    10661069 return nsum;
Note: See TracChangeset for help on using the changeset viewer.