I slightly modify your script, it works with 64-bit linux and the first result 
for fftw i.8 is not all zero

   load jpath '~addons/math/fftw/fftw3.ijs'
   fftw i.8
28 _4j9.6568542 _4j4 _4j1.6568542 _4 _4j_1.6568542 _4j_4 _4j_9.6568542
   fftw i.8
28 _4j9.6568542 _4j4 _4j1.6568542 _4 _4j_1.6568542 _4j_4 _4j_9.6568542
   
Therefore I suspect the problem originated from the window binary.


NB. built from project: ~Addons/math/fftw/fftw
NB. z definitions:

script_z_ '~system\main\dll.ijs'

coclass 'jfftw'


fftw_z_=: (_1 & fftwnd_jfftw_) :. (1 & fftwnd_jfftw_)
ifftw_z_=: (1 & fftwnd_jfftw_) :. (_1 & fftwnd_jfftw_)

NB. fftw utils
NB.
NB. cd            15!:0
NB. clean         clean numbers near 0
NB. info          cover for wdinfo
NB. matchclean    if clean x-y is all 0

izero=: 23-23
ione=: 23-22
dzero=: 1.1-1.1
done=: 2.1-1.1
zzero=: 1j1-1j1
zone=: 2j1-1j1

3 : 0''
if. IFUNIX do.
  DLL=: 'libfftw3.so.3'
else.
  DLL=: '"',~'"',jpath '~addons\math\fftw\libfftw3-3.dll'
end.
)

FFTW_FORWARD=: _1
FFTW_BACKWARD=: ione
FFTW_ESTIMATE=: izero
FFTW_MEASURE=: ione

FFTW_VERSION=: 3.2

cd=: 15!:0

info=: wdinfo @ ('FFTW'&;)

matchclean=: 0: *./ . = clean @ , @: -

NB. =========================================================
NB.*clean v clean numbers to tolerance (default 1e_10)
NB. sets values less than tolerance to 0
clean=: (1e_10&$:) : (4 : 0)
if. L. y do.
  x clean each y
else.
  if. 16 ~: 3!:0 y do.
    y * x <: |y
  else.
    j./"1 y* x <: | y=. +.y
  end.
end.
)


NB. fftw

NB. =========================================================
NB.*createplan v create a plan
NB. y = shape ; in ; out ; direction; flag
NB.
NB.   direction = FFTW_FORWARD | FFTW_BACKWARD
NB.   flag = FFTW_ESTIMATE | FFTW_MEASURE
createplan=: 3 : 0
'shape in out dir flag'=. y
assert dir e. FFTW_FORWARD,FFTW_BACKWARD
assert flag e. FFTW_ESTIMATE, FFTW_MEASURE
shape=. ,shape + izero
dir=. dir + izero
flag=. flag + izero
cmd=. DLL,' fftw_plan_dft + x i *i *j *j i i'
0 pick cmd cd (#shape);shape;in;out;dir;flag
)

NB. =========================================================
NB.*destroyplan v destroy a plan
destroyplan=: 3 : 0
cmd=. DLL,' fftw_destroy_plan + n x'
1 [ cmd cd y
)

NB. =========================================================
NB.*fftwnd d n-dimensional FFT
NB. x =  _1 forward
NB.        1 backward
NB. y =  data
fftwnd=: 4 : 0
shp=. $y
in=. zzero + , |: y
out=. in * 0
assert x e. _1 1
dir=. x + izero
plan=. createplan shp;in;out;dir;FFTW_ESTIMATE
fftwexecute plan
destroyplan plan
res=. |: (|.shp) $ out
if. dir=1 do. res % */shp end.
)

NB. =========================================================
NB.*fftwexecute d one call to n-dimensional FFT
NB. y =  plan
fftwexecute=: 3 : 0
cmd=. DLL,' fftw_execute + n x'
1 [ cmd cd y
)


-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to