У меня возникает ошибка сегментации при использовании FFTW с фортраном, и я не смог понять, почему. Не повезло и в онлайн-поиске. Вот мой код:
integer, parameter :: Nx=128, Ny=Nx, Nz=Nx
integer, parameter :: NORM=Nx*Ny*Nz,Ntop=MAX(Nx,Ny,Nz)/2, LX1=Nx/2+1
double precision, parameter :: Etot=0.5
double complex, dimension(LX1,Ny,Nz) :: fbx, fby, fbz
double precision, dimension(Nx,Ny,Nz) :: bx, by, bz
real
! ...
! Assign values to fbx, fby, fbz
! ...
call dfftw_plan_dft_c2r_3d(plan,Nx,Ny,Nz,fbx,bx,FFTW_ESTIMATE)
call dfftw_execute_dft_c2r(plan, fbx, bx)
call dfftw_execute_dft_c2r(plan, fby, by)
call dfftw_execute_dft_c2r(plan, fbz, bz)
call dfftw_destroy_plan(plan)
! et = sum(abs(fbx)**2+abs(fby)**2+abs(fbz)**2)
! bx=bx*sqrt(Etot/et); by=by*sqrt(Etot/et); bz=bz*sqrt(Etot/et)
! Write bx, by, bz to files
Код работает нормально таким образом. Проблема возникает, когда я раскомментирую строки, вычисляющие et и масштабирующие bx. Когда я раскомментирую эти строки, я получаю сообщение об ошибке сегментации, говорящее «недопустимая ссылка на память». Ошибка seg возникает при первом выполнении dfftw_execute_dft_c2r().
Я пробовал как fftw 3.2, так и fftw 3.4 с ifort и gfortran на двух разных машинах (со всеми возможными комбинациями), но безуспешно.
Это сводит меня с ума!! Мне нужна помощь, пожалуйста!! Почему это происходит именно так?
Спасибо!