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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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__
Note: See TracChangeset for help on using the changeset viewer.