왜 FFTW를 fortran과 함께 사용하는지에 따라 세분화 된 오류가 발생하며 그 이유를 파악하지 못했습니다. 온라인 검색에서도 운이 없습니다. 내 코드는 다음과 같습니다.FFTW 3 세그멘테이션 오류
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
코드가 이렇게 잘 실행됩니다. 문제는 내가 계산하는 줄의 주석 처리를 제거하고 bx를 다시 스케일링 할 때 발생합니다. 내가 그 라인의 주석을 풀 때, 나는 "잘못된 메모리 참조"라는 세그먼테이션 오류를 얻는다. 독방 감금 오류가 나는 FFTW 3.2 FFTW 3.4 ifort뿐만 아니라 두 개의 서로 다른 시스템에 gfortran 어떤 성공없이 (이들의 모든 가능한 조합) 모두 해봤()
dfftw_execute_dft_c2r의 첫 번째 실행에서 발생한다.
그것은 나를 미치게합니다! 제발 도와주세요! 왜 이런 식으로 일어나는거야?
감사합니다.
오류 검사를 수행 했습니까? 디버거를 사용해 보셨습니까? –
오류 검사와 함께 컴파일했는데 디버거에서 오류가있는 곳만 알려줍니다 (원래 게시물에서 언급했듯이). – toylas