Changeset 2959 in Sophya for trunk


Ignore:
Timestamp:
Jun 1, 2006, 4:34:31 PM (19 years ago)
Author:
ansari
Message:

correction fonctions optimisees calcul Ylm en version <r_4> - Reza 1/06/2006

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/Samba/lambdaBuilder.cc

    r2958 r2959  
    223223     
    224224      //DEL        lambda_(l,m) = lam_2*lam_mm;
    225       *almp += (lam_2*lam_mm) * phi;
    226       almp++;
     225      *almp += (lam_2*lam_mm) * phi;    almp++;
    227226     
    228227      b_rec=1./a_rec;
     
    244243                                        TVector< complex<r_4> >& phase, Alm<r_4> & alm)
    245244{
    246   TVector< complex<r_8> > phase8;
    247   phase8 = phase;
    248   Alm<r_8> alm8(alm.Lmax());
    249   ComputeAlmFrPhase(theta, lmax, mmax, phase8, alm8);
    250   for(sa_size_t k=0; k<alm.Size(); k++)
    251     alm(k) = complex<r_4>((r_4)alm8(k).real() , (r_4)alm8(k).imag());
    252   return;
     245  updateArrayRecurrence(lmax);
     246  r_8 cth = cos(theta);
     247  r_8 sth = sin(theta);
     248 
     249  r_8 bignorm2 = 1.e268; // = 1e-20*1.d288
     250 
     251  r_8 lam_mm = 1. / sqrt(4.*Pi) *bignorm2;
     252  r_8 lam_0, lam_1, lam_2;
     253  register r_8 a_rec, b_rec;
     254  register r_4 cff;
     255  complex<r_4>* almp = alm.columnData(0);
     256  r_8* arecp = a_recurrence_.columnData(0);
     257
     258  int_4 l, m;
     259  for (m=0; m<=mmax;m++)  {
     260    //MOV^ complex<r_4>* almp = alm.columnData(m);
     261    complex<r_4>  phi = phase(m);
     262   
     263    cff = lam_mm / bignorm2;
     264    *almp += cff*phi;  almp++;
     265
     266    lam_0=0.;
     267    lam_1=1. /bignorm2 ;
     268   
     269    //MOV^ r_8* arecp = a_recurrence_.columnData(m);
     270    a_rec = *arecp; arecp++; // a_recurrence_(m,m);
     271    b_rec = 0.;
     272    for (l=m+1; l<=lmax; l++)   {
     273      lam_2 = (cth*lam_1-b_rec*lam_0)*a_rec;
     274     
     275      //DEL        lambda_(l,m) = lam_2*lam_mm;
     276      cff = (lam_2*lam_mm);
     277      *almp += cff * phi;    almp++;
     278     
     279      b_rec=1./a_rec;
     280      //           a_rec= LWK->a_recurr(l,m);
     281      a_rec= *arecp; arecp++; // a_recurrence_(l,m);
     282      lam_0 = lam_1;
     283      lam_1 = lam_2;
     284    }
     285    lam_mm = -lam_mm*sth* sqrt( (2.*m+3.)/ (2.*m+2.) );
     286  }
    253287}
    254288
Note: See TracChangeset for help on using the changeset viewer.