我是新来福特兰的。这是我的密码:
subroutine fft_forward(Q,ier,fftable,ffwork,nfftable,nffwork, &
& nfft1,nfft2,nfft3,nfftdim1,nfftdim2, &
& nfftdim3)
implicit none
integer nfft1,nfft2,nfft3,nfftdim1,nfftdim2,nfftdim3
integer nfftable,nffwork,ier
double precision,dimension(nfftdim1,nfftdim2,nfftdim3):: Q
double precision,dimension(nfftable):: fftable
double precision,dimension(nffwork):: ffwork
call pubz3d(Q,ier,nfft1,nfft2,nfft3,nfftdim1,nfftdim2,nfftdim3, &
& fftable,nfftable,ffwork,nffwork)
write(6,*) 'bye'
return
end我在pubz3d子程序中的不同行放置了一些写语句,它们可以工作(它在最后一行子例程中打印“hi”)。但是子例程不返回任何值,甚至不打印“拜”。
subroutine pubz3d(Q,ier,nfft1,nfft2,nfft3,nfftdim1,nfftdim2, &
& nfftdim3,wsave,lensav,work,lenwrk)
implicit none
double precision,dimension(nfftdim1,nfftdim2,nfftdim3)::Q
double precision,dimension(lensav)::wsave
double precision,dimension(nfft1)::r
double precision,dimension(lenwrk)::work
integer nfft1,nfft2,nfft3,nfftdim1,nfftdim2,nfftdim3,n
integer lensav,lenwrk,ier
integer i,j,k
n = nfftdim1 * nfftdim2 *nfftdim3
do k = 1, nfft3
do j = 1, nfft2
do i = 1,nfft1
r(i) = Q(i,j,k)
continue
call dfft1f(n,1,r,n + 1,wsave,lensav,work,lenwrk,ier)
do i = 1,nfft1
Q(i,j,k) = r(i)
continue
continue
continue
do k = 1,nfft3
do i = 1,nfft1
do j = 1,nfft2
r(j) = Q(i,j,k)
continue
call dfft1f(n,1,r,n + 1,wsave,lensav,work,lenwrk,ier)
do j = 1,nfft2
Q(i,j,k) = r(j)
continue
continue
continue
do i = 1, nfft1
do j = 1, nfft2
do k = 1,nfft3
r(k) = Q(i,j,k)
continue
call dfft1f(n,1,r,n + 1,wsave,lensav,work,lenwrk,ier)
do k = 1,nfft3
Q(i,j,k) = r(k)
continue
continue
continue
write(6,*) 'hi'
return
end跑步,我得到
hi
*** Error in `./a.out': free(): invalid next size (normal): 0x0e5a9000 ***
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
#0 0xB760B163
#1 0xB760B800
#2 0xB77103FF
#3 0xB7710424
#4 0xB7416606
#5 0xB7419A32
#6 0xB7450E52
#7 0xB745B339
#8 0xB745BFAC
#9 0x804BD3B in pubz3d_
#10 0x804BFE4 in fft_forward_
#11 0x8055FF4 in do_pmesh_kspace_
#12 0x8054F2D in MAIN__ at main.f:?
Aborted谢谢
发布于 2015-10-09 22:32:31
你确定是nfft1>nfft2和nfft1>nfft3吗?您的辅助变量r有大小nfft1,但是在nfft2和nfft3的循环中都使用它。如果其中任何一个都大于nfft1,那么您将得到一个错误。确保r的维数足够大,足以容纳所有三种循环。
如果这不是问题所在,请尝试使用一些数组边界检查进行编译(gfortran:-fcheck=all,ifort:-check all以确保安全)。这可能会在某些地方出错时抛出一个信息更丰富的错误。
https://stackoverflow.com/questions/33046436
复制相似问题