Changeset 1402 in Sophya for trunk/SophyaLib/NTools


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

Modifs FFTServerInterface + FFTPackServer (Suite - Fin ?) - Reza 13/2/2001

Location:
trunk/SophyaLib/NTools
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/fftmserver.cc

    r1394 r1402  
    246246
    247247/* --Methode-- */
    248 void FFTMayerServer::FFTBackward(TArray< complex<r_4> > const & ina, TArray< r_4 > & outa)
     248void FFTMayerServer::FFTBackward(TArray< complex<r_4> > const & ina, TArray< r_4 > & outa,
     249                                 bool usoutsz)
    249250{
    250251 ckR4.CheckResize(ina, outa);
     
    338339
    339340/* --Methode-- */
    340 void FFTMayerServer::FFTBackward(TArray< complex<r_8> > const & ina, TArray< r_8 > & outa)
     341void FFTMayerServer::FFTBackward(TArray< complex<r_8> > const & ina, TArray< r_8 > & outa,
     342                                 bool usoutsz)
    341343{
    342344 ckR8.CheckResize(ina, outa);
  • trunk/SophyaLib/NTools/fftmserver.h

    r1394 r1402  
    2121  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
    2222  virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
    23   virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
     23  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     24                           bool usoutsz=false);
    2425
    2526
     
    2829  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out);
    2930  virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out);
    30   virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out);
     31  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out,
     32                           bool usoutsz=false);
    3133
    3234
  • trunk/SophyaLib/NTools/fftpserver.cc

    r1400 r1402  
    9797}
    9898
    99 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out)
    100 {
    101   ckR4.CheckResize(in, out);   
     99void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out,
     100                                bool usoutsz)
     101{
     102  ckR4.CheckResize(in, out, usoutsz);   
    102103  ReShapetoReal(in, out);
    103104  fftb(out.Size(), out.Data());
     
    114115}
    115116
    116 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out)
    117 {
    118   ckR8.CheckResize(in, out); 
     117void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     118                                bool usoutsz)
     119{
     120  ckR8.CheckResize(in, out, usoutsz); 
    119121  ReShapetoReal(in, out);
    120122  fftb(out.Size(), out.Data());
  • trunk/SophyaLib/NTools/fftpserver.h

    r1394 r1402  
    2626  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
    2727  virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
    28   virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
     28  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     29                           bool usoutsz=false);
    2930
    3031  // Transforme unidimensionnel sur des float
     
    3233  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out);
    3334  virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out);
    34   virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out);
     35  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out,
     36                           bool usoutsz=false);
    3537
    3638// Methodes statiques pour reordonner les donnees
  • trunk/SophyaLib/NTools/fftservintf.cc

    r1400 r1402  
    4141
    4242/* --Methode-- */
    43 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const &, TArray< r_8 > &)
     43void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const &, TArray< r_8 > &, bool)
    4444{
    4545  throw NotAvailableOperation("FFTServer::FFTBackward(TArray...) Unsupported operation !");
     
    6868
    6969/* --Methode-- */
    70 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const &, TArray< r_4 > &)
     70void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const &, TArray< r_4 > &, bool)
    7171{
    7272  throw NotAvailableOperation("FFTServer::FFTBackward(TArray r_4 ... ) Unsupported operation !");
     
    183183/* --Methode-- */
    184184template <class T>
    185 int FFTArrayChecker<T>::CheckResize(TArray< complex<T> > const & in, TArray< T > & out)
     185int FFTArrayChecker<T>::CheckResize(TArray< complex<T> > const & in, TArray< T > & out,
     186                                    bool usoutsz)
    186187{
    187188  int k;
     
    204205      throw(SzMismatchError(msg));
    205206    }
    206   sa_size_t sz[BASEARRAY_MAXNDIMS];
    207   if (ndg1 > 1) {
    208     sz[0] = 2*in.Size(0)-1;
    209     for(k=1; k<in.NbDimensions(); k++)
    210       sz[k] = in.Size(k);
     207  if (usoutsz) { // We have to use output array size
     208    bool fgerr = false;
     209    if (ndg1 > 1) {
     210      if (in.Size(0) != out.Size(0)/2+1) fgerr = true;
     211    }     
     212    else {
     213      if (in.Size(in.MaxSizeKA()) != out.Size(in.MaxSizeKA())/2+1) fgerr = true;
     214    }
     215    if (fgerr) {
     216        msg = _msg + "CheckResize(complex in, real out) - Incompatible in-out sizes !";
     217        throw(SzMismatchError(msg));
     218    }
     219  }
     220  else {  // We have to resize the output array
     221    sa_size_t sz[BASEARRAY_MAXNDIMS];
     222    if (ndg1 > 1) {
     223      sz[0] = 2*in.Size(0)-1;
     224      for(k=1; k<in.NbDimensions(); k++)
     225        sz[k] = in.Size(k);
    211226    //      sz[k] = in.Size(k)*2-1;
    212   }
    213   else {
    214     for(k=0; k<BASEARRAY_MAXNDIMS; k++)  sz[k] = 1;
    215     T thr = ZeroThreshold();
    216     sa_size_t n = in.Size(in.MaxSizeKA());
    217     sa_size_t ncs = ( (in[n-1].imag() < -thr) || (in[n-1].imag() > thr) ) ?
    218                     ncs = 2*n-1 : ncs = 2*n-2;
    219     sz[in.MaxSizeKA()] = ncs;
    220   }
    221 
     227    }
     228    else {
     229      for(k=0; k<BASEARRAY_MAXNDIMS; k++)  sz[k] = 1;
     230      T thr = ZeroThreshold();
     231      sa_size_t n = in.Size(in.MaxSizeKA());
     232      sa_size_t ncs = ( (in[n-1].imag() < -thr) || (in[n-1].imag() > thr) ) ?
     233        ncs = 2*n-1 : ncs = 2*n-2;
     234      sz[in.MaxSizeKA()] = ncs;
     235    }
    222236  out.ReSize(in.NbDimensions(), sz);
     237  }
    223238
    224239  return(ndg1);
     
    226241}
    227242
    228 /* --Methode--
    229 template <class T>
    230 void FFTArrayChecker<T>::ReShapetoReal( TArray< complex<T> > const & in, TArray< T >  & out)
    231 {
    232   sa_size_t n = in.Size();
    233   //  int ncs = (fabs(in(n-1).imag()) > 1.e-12) ? ncs = 2*n-1 : ncs = n*2-2;
    234   sa_size_t ncs = 2*n-1;
    235   sa_size_t k;
    236   out[0] = in[0].real();
    237   for(k=1;k<n-1;k++) {
    238     out[2*k-1] = in[k].real();
    239     out[2*k] = in[k].imag();
    240   }
    241   //  if (ncs == n*2-2)  out[ncs-1] = in[n-1].real();
    242   //  else { out[ncs-2] = in[n-1].real();  out[ncs-1] = in[n-1].imag(); }
    243   out[ncs-2] = in[n-1].real();  out[ncs-1] = in[n-1].imag();
    244 }
    245 */
    246 
    247 /* --Methode--
    248 template <class T>
    249 void FFTArrayChecker<T>::ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out)
    250 {
    251   sa_size_t n =  in.Size();
    252   sa_size_t ncs = n/2+1;
    253   sa_size_t nc = (n%2 != 0) ? n/2+1 : n/2;
    254   out[0] = complex<T> (in[0],0.);
    255   for(int k=1;k<nc;k++)
    256     out[k] =  complex<T> (in[2*k-1], in[2*k]);
    257   if (n%2 == 0) out[ncs-1] = complex<r_8>(in[n-1], 0.);
    258 }
    259 */
    260243
    261244#ifdef __CXX_PRAGMA_TEMPLATES__
  • trunk/SophyaLib/NTools/fftservintf.h

    r1400 r1402  
    3535  virtual void FFTForward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
    3636  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
    37   virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
    38   virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
     37  virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
     38  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     39                           bool usoutsz=false);
    3940
    4041  // Transforme N-dim sur des float
     
    4243  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out);
    4344  virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out);
    44   virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out);
     45  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out,
     46                           bool usoutsz=false);
    4547
    4648 protected:
     49
    4750  bool _fgnorm;
    4851  string _info;
     52 
    4953};
    5054
     
    5862  virtual       ~FFTArrayChecker();
    5963  static T      ZeroThreshold();
     64 
     65  inline void   SetMsg(string const & msg) { _msg = msg; }
     66  inline void   CheckPackedArray(bool ck=true) { _checkpack = ck; }
     67  inline void   Accept1DOnly(bool ac1d=false) { _onedonly = ac1d; }
     68
    6069  virtual int   CheckResize(TArray< complex<T> > const & in, TArray< complex<T> > & out);
    6170  virtual int   CheckResize(TArray< T > const & in, TArray< complex<T> > & out);
    62   virtual int   CheckResize(TArray< complex<T> > const & in, TArray< T > & out);
    63   //  virtual void  ReShapetoReal(TArray< complex<T> > const & in, TArray< T >  & out);
    64   //  virtual void  ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out);
     71  virtual int   CheckResize(TArray< complex<T> > const & in, TArray< T > & out,
     72                            bool usoutsz=false);
    6573
    6674protected:
     
    6876  bool _checkpack;
    6977  bool _onedonly;
     78
    7079};
    7180
Note: See TracChangeset for help on using the changeset viewer.