Hello, I tried to test the sin transform using fftw, met some problems which I had no clue what's the reason. The following is my program, it first does sin transform of sin([1:7]/ 8*pi) use flags :FFTW_RODFT00,FFTW_ESTIMATE and there's no problem. Problem appeared after I try to reuse the 'plan' to do inverse, which gave 'Segmentation fault'. If I recreate the plan again, the problem disappears. Also the Segmentation fault appeared whenever I call dfftw_destroy_plan(plan). I'll appreciate your wisdom. JBW ----------------------------------------------------- program testdst implicit none include 'fftw3.f' integer, parameter :: N=7 integer :: i, plan real*8, dimension(N)::in,out real*8, parameter :: PI=3.14159265358979 do i = 1,7 in(i) = sin(real(i)/8*PI) enddo write(*,'(7f6.2)') in call dfftw_plan_r2r_1d(plan,N,in,out,FFTW_RODFT00,FFTW_MEASURE) call dfftw_execute(plan,N,in,out) write(*,'(7f6.2)') out ! call dfftw_execute(plan,N,in,out) ! write(*,'(7f6.2)') in end program testdst output: 0.38 0.71 0.92 1.00 0.92 0.71 0.38 8.00 0.00 -0.00 0.00 -0.00 0.00 -0.00 if this two lines are uncommented ! call dfftw_execute(plan,N,in,out) ! write(*,'(7f6.2)') in then I got output: 0.38 0.71 0.92 1.00 0.92 0.71 0.38 8.00 0.00 -0.00 0.00 -0.00 0.00 -0.00 Segmentation fault
question about fftw3 in fortran, reuse plan, FFTW_MEASURE, FFTW_ESTIMATE, Segmentation fault
Started by ●March 9, 2010
Reply by ●March 10, 20102010-03-10
In article <95a66cf7-e379-407a-a299- 89057e6f3b48@d27g2000yqf.googlegroups.com>, jinbow@gmail.com says...> > >Hello, >I tried to test the sin transform using fftw, met some problems which >I had no clue what's the reason. > >The following is my program, it first does sin transform of sin([1:7]/ >8*pi) use flags :FFTW_RODFT00,FFTW_ESTIMATE and there's no problem. >Problem appeared after I try to reuse the 'plan' to do inverse, which >gave 'Segmentation fault'. If I recreate the plan again, the problem >disappears. Also the Segmentation fault appeared whenever I call >dfftw_destroy_plan(plan). > >I'll appreciate your wisdom. >JBW >----------------------------------------------------- >program testdst > implicit none > include 'fftw3.f' > integer, parameter :: N=7 > integer :: i, plan > real*8, dimension(N)::in,out > real*8, parameter :: PI=3.14159265358979 > do i = 1,7 > in(i) = sin(real(i)/8*PI) > enddo > write(*,'(7f6.2)') in > call dfftw_plan_r2r_1d(plan,N,in,out,FFTW_RODFT00,FFTW_MEASURE) > call dfftw_execute(plan,N,in,out) > write(*,'(7f6.2)') out >! call dfftw_execute(plan,N,in,out) >! write(*,'(7f6.2)') in >end program testdst > >output: > 0.38 0.71 0.92 1.00 0.92 0.71 0.38 > 8.00 0.00 -0.00 0.00 -0.00 0.00 -0.00 > >if this two lines are uncommented >! call dfftw_execute(plan,N,in,out) >! write(*,'(7f6.2)') in >then I got output: > 0.38 0.71 0.92 1.00 0.92 0.71 0.38 > 8.00 0.00 -0.00 0.00 -0.00 0.00 -0.00 >Segmentation faultYou might want to post your question to comp.lang.fortran. Sometimes, problems like this are caused by mismatches between a called subroutine and the caller. Putting the two called subroutines in a module and Using the module in the main program will force the compiler to generate an explicit interface for each subroutine automatically. This might help diagnose your problem. Your compiler probably has an option to turn on run-time checking of array bounds, detecting if the program when running tries to write to unallocated memory. This is another thing to try.