Changeset 1403 in Sophya for trunk/SophyaExt/IFFTW


Ignore:
Timestamp:
Feb 13, 2001, 7:12:43 PM (25 years ago)
Author:
ansari
Message:

Debug FFTWServer (Pas fini) - Reza 13/2/2001

Location:
trunk/SophyaExt/IFFTW
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaExt/IFFTW/fftwserver.cc

    r1401 r1403  
    1313  void Recreate(int n);
    1414  void Recreate(int nd, int * nxyz);
     15
     16  static void FillSizes(const BaseArray & in, int * sz);
    1517
    1618  int _n;  // Array dimension for 1-d arrays
     
    123125}
    124126
     127void
     128FFTWServerPlan::FillSizes(const BaseArray & in, int * sz)
     129{
     130  int k1 = 0;
     131  int k2 = 0;
     132  for(k1=in.NbDimensions()-1; k1>=0; k1--) {
     133    sz[k2] = in.Size(k1); k2++;
     134  }
     135}
    125136
    126137/* --Methode-- */
     
    176187      throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !");
    177188    int sz[MAXND_FFTW];
    178     int k1 = 0;
    179     int k2 = 0;
    180     for(k1=in.NbDimensions()-1; k1>=0; k1--) {
    181       sz[k2] = in.Size(k1); k2++;
    182     }
     189    FFTWServerPlan::FillSizes(in, sz);
     190    //    int k1 = 0;
     191    //    int k2 = 0;
     192    //    for(k1=in.NbDimensions()-1; k1>=0; k1--) {
     193    //      sz[k2] = in.Size(k1); k2++;
     194    //    }
    183195    if (_pndf) _pndf->Recreate(in.NbDimensions(), sz);
    184196    else _pndf = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_FORWARD, false);
     
    202214      throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !");
    203215    int sz[MAXND_FFTW];
    204     int k1 = 0;
    205     int k2 = 0;
    206     for(k1=in.NbDimensions()-1; k1>=0; k1--) {
    207       sz[k2] = in.Size(k1); k2++;
    208     }
     216    FFTWServerPlan::FillSizes(in, sz);
     217    //    int k1 = 0;
     218    //    int k2 = 0;
     219    //    for(k1=in.NbDimensions()-1; k1>=0; k1--) {
     220    //      sz[k2] = in.Size(k1); k2++;
     221    //    }
    209222    if (_pndb) _pndb->Recreate(in.NbDimensions(), sz);
    210223    else _pndb = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_BACKWARD, false);
     
    231244      throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !");
    232245    int sz[MAXND_FFTW];
    233     int k1 = 0;
    234     int k2 = 0;
    235     for(k1=in.NbDimensions()-1; k1>=0; k1--) {
    236       sz[k2] = in.Size(k1); k2++;
    237     }
     246    FFTWServerPlan::FillSizes(in, sz);
     247    //    int k1 = 0;
     248    //    int k2 = 0;
     249    //   for(k1=in.NbDimensions()-1; k1>=0; k1--) {
     250    //      sz[k2] = in.Size(k1); k2++;
     251    //    }
    238252    if (_pndrf) _pndrf->Recreate(in.NbDimensions(), sz);
    239253    else _pndrf = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_REAL_TO_COMPLEX, true);
     
    248262
    249263
    250 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out)
     264void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     265                             bool usoutsz)
    251266{
    252267 
    253   int rank = ckR8.CheckResize(in, out);
     268  int rank = ckR8.CheckResize(in, out, usoutsz);
    254269  if (rank == 1) { // One dimensional transform
    255270    TArray<r_8> intemp;
     
    266281  else {   // Multi dimensional
    267282    if (in.NbDimensions() > MAXND_FFTW)
    268       throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !");
     283      throw ParmError("FFTWServer::FFTForward( complex<r_8>, r_8 ) rank > MAXND_FFTW !");
    269284    int sz[MAXND_FFTW];
    270     int k1 = 0;
    271     int k2 = 0;
    272     for(k1=in.NbDimensions()-1; k1>=0; k1--) {
    273       sz[k2] = in.Size(k1); k2++;
    274     }
     285    FFTWServerPlan::FillSizes(out, sz);
     286    //    int k1 = 0;
     287    //    int k2 = 0;
     288    //    for(k1=out.NbDimensions()-1; k1>=0; k1--) {
     289    //      sz[k2] = out.Size(k1); k2++;
     290    //    }
    275291    if (_pndrb) _pndrb->Recreate(in.NbDimensions(), sz);
    276292    else _pndrb = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_COMPLEX_TO_REAL, true);
     
    281297}
    282298
    283 /*
    284 void FFTWServer::FFTForward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)
    285 {
    286   out.ReSize(in.NRows(),in.NCols());
    287 
    288   if (_pndf) _pndf->Recreate( in.NRows(),in.NCols());
    289   else _pndf = new FFTWServerPlan( in.NCols(),in.NRows(), FFTW_FORWARD, false);
    290  
    291   fftwnd_one(_pndf->pnd, (fftw_complex *)(in.Data()) , (fftw_complex *)(out.Data()) );
    292   if(this->getNormalize()) out=out/complex<r_8>(pow(in.NRows()*in.NCols(),0.5),0.); 
    293 }
    294 
    295 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)
    296 {
    297   if (_pndb) _pndb->Recreate(in.NCols(), in.NRows());
    298   else _pndb = new FFTWServerPlan(in.NCols(), in.NRows(), FFTW_BACKWARD, false);
    299   out.ReSize(in.NRows(), in.NCols());
    300   fftwnd_one(_pndb->pnd, (fftw_complex *)(in.Data()) , (fftw_complex *)(out.Data()) );
    301   if(this->getNormalize()) out=out/complex<r_8>(pow(in.NRows()*in.NCols(),0.5),0.);
    302 
    303 }
    304 
    305 
    306 void FFTWServer::FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out)
    307 {
    308 
    309   TArray< r_8 > inNew(in.NCols(),in.NRows());
    310   for(int i=0; i<in.NRows(); i++)
    311     for(int j=0;j<in.NCols(); j++)
    312       inNew(j,i) = in(i,j);
    313  
    314   if (_pndrf) _pndrf->Recreate(inNew.NRows(),inNew.NCols());
    315   else _pndrf = new FFTWServerPlan(inNew.NRows(), inNew.NCols(),FFTW_REAL_TO_COMPLEX, true);
    316   //  rfftwnd_plan p;
    317   TArray< complex<r_8> > outTemp;
    318   outTemp.ReSize(in.NRows(),in.NCols());
    319 
    320   rfftwnd_one_real_to_complex(_pndrf->rpnd, (fftw_real *)(in.Data()) , (fftw_complex *)(out.Data()) );
    321 }
    322 
    323 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out)
    324 {
    325 
    326   TArray< complex<r_8> > inNew(in.NCols(),in.NRows());
    327   for(int i=0; i<in.NRows(); i++)
    328     for(int j=0;j<in.NCols(); j++)
    329       inNew(j,i) = in(i,j);
    330  
    331   if (_pndrb) _pndrb->Recreate(inNew.NRows(),inNew.NCols());
    332   else _pndrb = new FFTWServerPlan(inNew.NRows(), inNew.NCols(),FFTW_COMPLEX_TO_REAL, true);
    333   //  rfftwnd_plan p;
    334   out.ReSize(in.NRows(),in.NCols());
    335 
    336   rfftwnd_one_complex_to_real(_pndrb->rpnd, (fftw_complex *)(in.Data()) , (fftw_real *)(out.Data()) );
    337   cout << " in the function !!!" << endl;
    338   if(this->getNormalize())
    339     {
    340       r_8 norm = (r_8)(in.NRows()*in.NCols());
    341       out=out/norm;
    342     }
    343 }
    344 
    345 */
    346299
    347300
  • trunk/SophyaExt/IFFTW/fftwserver.h

    r1395 r1403  
    2323  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
    2424  virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
    25   virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
     25  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     26                           bool usoutsz=false);
    2627
    27 // Methodes statiques pour reordonner les donnees
    28   virtual void ReShapetoReal(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
    29   virtual void ReShapetoCompl(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
     28// Methodes statiques pour reordonner les donnees en 1-D
     29  static void ReShapetoReal(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
     30  static void ReShapetoCompl(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
    3031
    3132 protected:
Note: See TracChangeset for help on using the changeset viewer.