Index: /trunk/psLib/src/fft/psVectorFFT.c
===================================================================
--- /trunk/psLib/src/fft/psVectorFFT.c	(revision 11718)
+++ /trunk/psLib/src/fft/psVectorFFT.c	(revision 11719)
@@ -6,6 +6,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.38 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-02-08 04:23:57 $
+ *  @version $Revision: 1.39 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-02-09 00:45:51 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -49,5 +49,5 @@
 
     // Do the FFT
-    fftwf_complex *out = fftwf_malloc(num * sizeof(fftwf_complex)); // Output data
+    fftwf_complex *out = fftwf_malloc((num/2 + 1) * sizeof(fftwf_complex)); // Output data
     fftwf_plan plan = fftwf_plan_dft_r2c_1d(num, in->data.F32, out, FFTW_PLAN_RIGOR);
     fftwf_execute(plan);
@@ -55,6 +55,7 @@
 
     // Pull the real and imaginary parts out
-    *real = psVectorRecycle(*real, num/2 + 1, PS_TYPE_F32);
-    *imag = psVectorRecycle(*imag, num/2 + 1, PS_TYPE_F32);
+    num = num/2 + 1;
+    *real = psVectorRecycle(*real, num, PS_TYPE_F32);
+    *imag = psVectorRecycle(*imag, num, PS_TYPE_F32);
     for (int i = 0; i < num; i++) {
 #if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I)
@@ -105,6 +106,6 @@
 
     // Do the FFT
-    *out = psVectorRecycle(*out, 2 * num, PS_TYPE_F32);
-    fftwf_plan plan = fftwf_plan_dft_c2r_1d(2 * num, in, (*out)->data.F32, FFTW_PLAN_RIGOR);
+    *out = psVectorRecycle(*out, origNum, PS_TYPE_F32);
+    fftwf_plan plan = fftwf_plan_dft_c2r_1d(origNum, in, (*out)->data.F32, FFTW_PLAN_RIGOR);
     fftwf_execute(plan);
     fftwf_destroy_plan(plan);
@@ -173,8 +174,11 @@
     for (int i = 0; i < num; i++) {
         // (a + bi) * (c + di) = (ac - bd) + (bc + ad)i
-        (*outReal)->data.F32[i] = in1Real->data.F32[i] * in2Real->data.F32[i] -
+        float real = in1Real->data.F32[i] * in2Real->data.F32[i] -
             in1Imag->data.F32[i] * in2Imag->data.F32[i];
-        (*outImag)->data.F32[i] = in1Imag->data.F32[i] * in2Real->data.F32[i] +
+        float imag = in1Imag->data.F32[i] * in2Real->data.F32[i] +
             in1Real->data.F32[i] * in2Imag->data.F32[i];
+
+        (*outReal)->data.F32[i] = real;
+        (*outImag)->data.F32[i] = imag;
     }
 
