diff liboctave/array/fNDArray.cc @ 25586:59f4fda5c548

remove fftpack sources We now require FFTW to perform FFT calculations. * liboctave/external/fftpack: Delete directory and all files. * liboctave/external/module.mk: Update. * lo-fftpack-proto.h: Delete. * liboctave/numeric/module.mk: Update. * CMatrix.cc, CNDArray.cc, dMatrix.cc, dNDArray.cc, fCMatrix.cc, fCNDArray.cc, fMatrix.cc, fNDArray.cc: Require FFTW to compute FFT. * interpft.m, fftconv.m, fftfilt.m, freqz.m, fft.cc, fft2.cc, fftn.cc: Use TESTIF HAVE_FFTW as needed. * NEWS: Note change.
author John W. Eaton <jwe@octave.org>
date Wed, 11 Jul 2018 17:41:36 -0400
parents cb1606f78f6b
children b2917b7858ba
line wrap: on
line diff
--- a/liboctave/array/fNDArray.cc	Wed Jul 11 11:20:58 2018 -0700
+++ b/liboctave/array/fNDArray.cc	Wed Jul 11 17:41:36 2018 -0400
@@ -186,293 +186,57 @@
 
 #else
 
-#include "lo-fftpack-proto.h"
-
 FloatComplexNDArray
 FloatNDArray::fourier (int dim) const
 {
-  dim_vector dv = dims ();
-
-  if (dim > dv.ndims () || dim < 0)
-    return FloatComplexNDArray ();
-
-  FloatComplexNDArray retval (dv);
-  octave_idx_type npts = dv(dim);
-  octave_idx_type nn = 4*npts+15;
-  Array<FloatComplex> wsave (dim_vector (nn, 1));
-  FloatComplex *pwsave = wsave.fortran_vec ();
-
-  OCTAVE_LOCAL_BUFFER (FloatComplex, tmp, npts);
-
-  octave_idx_type stride = 1;
-
-  for (int i = 0; i < dim; i++)
-    stride *= dv(i);
+  (*current_liboctave_error_handler)
+    ("support for FFTW was unavailable or disabled when liboctave was built");
 
-  octave_idx_type howmany = numel () / npts;
-  howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany));
-  octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride);
-  octave_idx_type dist = (stride == 1 ? npts : 1);
-
-  F77_FUNC (cffti, CFFTI) (npts, F77_CMPLX_ARG (pwsave));
-
-  for (octave_idx_type k = 0; k < nloop; k++)
-    {
-      for (octave_idx_type j = 0; j < howmany; j++)
-        {
-          octave_quit ();
-
-          for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem ((i + k*npts)*stride + j*dist);
-
-          F77_FUNC (cfftf, CFFTF) (npts, F77_CMPLX_ARG (tmp), F77_CMPLX_ARG (pwsave));
-
-          for (octave_idx_type i = 0; i < npts; i++)
-            retval((i + k*npts)*stride + j*dist) = tmp[i];
-        }
-    }
-
-  return retval;
+  return FloatComplexNDArray ();
 }
 
 FloatComplexNDArray
 FloatNDArray::ifourier (int dim) const
 {
-  dim_vector dv = dims ();
-
-  if (dim > dv.ndims () || dim < 0)
-    return FloatComplexNDArray ();
-
-  FloatComplexNDArray retval (dv);
-  octave_idx_type npts = dv(dim);
-  octave_idx_type nn = 4*npts+15;
-  Array<FloatComplex> wsave (dim_vector (nn, 1));
-  FloatComplex *pwsave = wsave.fortran_vec ();
-
-  OCTAVE_LOCAL_BUFFER (FloatComplex, tmp, npts);
-
-  octave_idx_type stride = 1;
-
-  for (int i = 0; i < dim; i++)
-    stride *= dv(i);
-
-  octave_idx_type howmany = numel () / npts;
-  howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany));
-  octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride);
-  octave_idx_type dist = (stride == 1 ? npts : 1);
-
-  F77_FUNC (cffti, CFFTI) (npts, F77_CMPLX_ARG (pwsave));
-
-  for (octave_idx_type k = 0; k < nloop; k++)
-    {
-      for (octave_idx_type j = 0; j < howmany; j++)
-        {
-          octave_quit ();
-
-          for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem ((i + k*npts)*stride + j*dist);
-
-          F77_FUNC (cfftb, CFFTB) (npts, F77_CMPLX_ARG (tmp), F77_CMPLX_ARG (pwsave));
-
-          for (octave_idx_type i = 0; i < npts; i++)
-            retval((i + k*npts)*stride + j*dist) = tmp[i] /
-                                                   static_cast<float> (npts);
-        }
-    }
-
-  return retval;
+  (*current_liboctave_error_handler)
+    ("support for FFTW was unavailable or disabled when liboctave was built");
+  return FloatComplexNDArray ();
 }
 
 FloatComplexNDArray
 FloatNDArray::fourier2d (void) const
 {
-  dim_vector dv = dims ();
-  dim_vector dv2 (dv(0), dv(1));
-  int rank = 2;
-  FloatComplexNDArray retval (*this);
-  octave_idx_type stride = 1;
-
-  for (int i = 0; i < rank; i++)
-    {
-      octave_idx_type npts = dv2(i);
-      octave_idx_type nn = 4*npts+15;
-      Array<FloatComplex> wsave (dim_vector (nn, 1));
-      FloatComplex *pwsave = wsave.fortran_vec ();
-      Array<FloatComplex> row (dim_vector (npts, 1));
-      FloatComplex *prow = row.fortran_vec ();
-
-      octave_idx_type howmany = numel () / npts;
-      howmany = (stride == 1 ? howmany
-                             : (howmany > stride ? stride : howmany));
-      octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride);
-      octave_idx_type dist = (stride == 1 ? npts : 1);
+  (*current_liboctave_error_handler)
+    ("support for FFTW was unavailable or disabled when liboctave was built");
 
-      F77_FUNC (cffti, CFFTI) (npts, F77_CMPLX_ARG (pwsave));
-
-      for (octave_idx_type k = 0; k < nloop; k++)
-        {
-          for (octave_idx_type j = 0; j < howmany; j++)
-            {
-              octave_quit ();
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                prow[l] = retval((l + k*npts)*stride + j*dist);
-
-              F77_FUNC (cfftf, CFFTF) (npts, F77_CMPLX_ARG (prow), F77_CMPLX_ARG (pwsave));
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                retval((l + k*npts)*stride + j*dist) = prow[l];
-            }
-        }
-
-      stride *= dv2(i);
-    }
-
-  return retval;
+  return FloatComplexNDArray ();
 }
 
 FloatComplexNDArray
 FloatNDArray::ifourier2d (void) const
 {
-  dim_vector dv = dims ();
-  dim_vector dv2 (dv(0), dv(1));
-  int rank = 2;
-  FloatComplexNDArray retval (*this);
-  octave_idx_type stride = 1;
-
-  for (int i = 0; i < rank; i++)
-    {
-      octave_idx_type npts = dv2(i);
-      octave_idx_type nn = 4*npts+15;
-      Array<FloatComplex> wsave (dim_vector (nn, 1));
-      FloatComplex *pwsave = wsave.fortran_vec ();
-      Array<FloatComplex> row (dim_vector (npts, 1));
-      FloatComplex *prow = row.fortran_vec ();
-
-      octave_idx_type howmany = numel () / npts;
-      howmany = (stride == 1 ? howmany
-                             : (howmany > stride ? stride : howmany));
-      octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride);
-      octave_idx_type dist = (stride == 1 ? npts : 1);
+  (*current_liboctave_error_handler)
+    ("support for FFTW was unavailable or disabled when liboctave was built");
 
-      F77_FUNC (cffti, CFFTI) (npts, F77_CMPLX_ARG (pwsave));
-
-      for (octave_idx_type k = 0; k < nloop; k++)
-        {
-          for (octave_idx_type j = 0; j < howmany; j++)
-            {
-              octave_quit ();
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                prow[l] = retval((l + k*npts)*stride + j*dist);
-
-              F77_FUNC (cfftb, CFFTB) (npts, F77_CMPLX_ARG (prow), F77_CMPLX_ARG (pwsave));
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                retval((l + k*npts)*stride + j*dist) =
-                  prow[l] / static_cast<float> (npts);
-            }
-        }
-
-      stride *= dv2(i);
-    }
-
-  return retval;
+  return FloatComplexNDArray ();
 }
 
 FloatComplexNDArray
 FloatNDArray::fourierNd (void) const
 {
-  dim_vector dv = dims ();
-  int rank = dv.ndims ();
-  FloatComplexNDArray retval (*this);
-  octave_idx_type stride = 1;
-
-  for (int i = 0; i < rank; i++)
-    {
-      octave_idx_type npts = dv(i);
-      octave_idx_type nn = 4*npts+15;
-      Array<FloatComplex> wsave (dim_vector (nn, 1));
-      FloatComplex *pwsave = wsave.fortran_vec ();
-      Array<FloatComplex> row (dim_vector (npts, 1));
-      FloatComplex *prow = row.fortran_vec ();
-
-      octave_idx_type howmany = numel () / npts;
-      howmany = (stride == 1 ? howmany
-                             : (howmany > stride ? stride : howmany));
-      octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride);
-      octave_idx_type dist = (stride == 1 ? npts : 1);
+  (*current_liboctave_error_handler)
+    ("support for FFTW was unavailable or disabled when liboctave was built");
 
-      F77_FUNC (cffti, CFFTI) (npts, F77_CMPLX_ARG (pwsave));
-
-      for (octave_idx_type k = 0; k < nloop; k++)
-        {
-          for (octave_idx_type j = 0; j < howmany; j++)
-            {
-              octave_quit ();
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                prow[l] = retval((l + k*npts)*stride + j*dist);
-
-              F77_FUNC (cfftf, CFFTF) (npts, F77_CMPLX_ARG (prow), F77_CMPLX_ARG (pwsave));
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                retval((l + k*npts)*stride + j*dist) = prow[l];
-            }
-        }
-
-      stride *= dv(i);
-    }
-
-  return retval;
+  return FloatComplexNDArray ();
 }
 
 FloatComplexNDArray
 FloatNDArray::ifourierNd (void) const
 {
-  dim_vector dv = dims ();
-  int rank = dv.ndims ();
-  FloatComplexNDArray retval (*this);
-  octave_idx_type stride = 1;
-
-  for (int i = 0; i < rank; i++)
-    {
-      octave_idx_type npts = dv(i);
-      octave_idx_type nn = 4*npts+15;
-      Array<FloatComplex> wsave (dim_vector (nn, 1));
-      FloatComplex *pwsave = wsave.fortran_vec ();
-      Array<FloatComplex> row (dim_vector (npts, 1));
-      FloatComplex *prow = row.fortran_vec ();
-
-      octave_idx_type howmany = numel () / npts;
-      howmany = (stride == 1 ? howmany
-                             : (howmany > stride ? stride : howmany));
-      octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride);
-      octave_idx_type dist = (stride == 1 ? npts : 1);
-
-      F77_FUNC (cffti, CFFTI) (npts, F77_CMPLX_ARG (pwsave));
+  (*current_liboctave_error_handler)
+    ("support for FFTW was unavailable or disabled when liboctave was built");
 
-      for (octave_idx_type k = 0; k < nloop; k++)
-        {
-          for (octave_idx_type j = 0; j < howmany; j++)
-            {
-              octave_quit ();
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                prow[l] = retval((l + k*npts)*stride + j*dist);
-
-              F77_FUNC (cfftb, CFFTB) (npts, F77_CMPLX_ARG (prow), F77_CMPLX_ARG (pwsave));
-
-              for (octave_idx_type l = 0; l < npts; l++)
-                retval((l + k*npts)*stride + j*dist) =
-                  prow[l] / static_cast<float> (npts);
-            }
-        }
-
-      stride *= dv(i);
-    }
-
-  return retval;
+  return FloatComplexNDArray ();
 }
 
 #endif