首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用fftpack分割故障

用fftpack分割故障
EN

Stack Overflow用户
提问于 2021-02-10 10:48:08
回答 1查看 102关注 0票数 0

我试图用以下测试代码使用从https://www.netlib.org/fftpack/index.html下载的fftpack (特别是rffti.f、rffti1.f、rfftf.f、rfftf1.f、radf4.f、radf2.f、radf3.f、radf5.f、radfg.f):

代码语言:javascript
复制
program test
implicit none
integer,parameter:: n=100
real,dimension(n):: x,y
integer:: i 
real:: pi = 3.1415923535

x= [(i, i=1,n)]
y= sin((2*pi/100)*x)

call RFFTI(100,y)

end program test

,编译和运行:

代码语言:javascript
复制
gfortran -Wall -Wextra -o program.out \
rffti.f rffti1.f rfftf.f rfftf1.f radf4.f radf2.f radf3.f radf5.f radfg.f test.f90

./program.out

,我得到了这个运行时错误:

程序接收信号SIGSEGV:分割故障-无效内存引用.

此错误的回溯: do.sh:第6行: 9069分段错误(内核转储) ./program.out

除了这个错误之外,我还收到了以下警告:

代码语言:javascript
复制
rffti1.f:8:72:

    8 |       IF (J-4) 102,102,103
      |                                                                        1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
rffti1.f:14:72:

   14 |       IF (NR) 101,105,101
      |                                                                        1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
rffti1.f:24:11:

   24 |       IFAC(3) = 2
      |           1
Warning: Array reference at (1) is out of bounds (3 > 1) in dimension 1
rffti1.f:27:11:

   27 |       IFAC(2) = NF
      |           1
Warning: Array reference at (1) is out of bounds (2 > 1) in dimension 1
rffti1.f:35:19:

   34 |       DO 110 K1=1,NFM1
      |                                                                        2
   35 |          IP = IFAC(K1+2)
      |                   1
Warning: Array reference at (1) out of bounds (3 > 1) in loop beginning at (2)
rfftf1.f:3:16:

    3 |       NF = IFAC(2)
      |                1
Warning: Array reference at (1) is out of bounds (2 > 1) in dimension 1
radf4.f:13:72:

   13 |       IF (IDO-2) 107,105,102
      |                                                                        1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
radf4.f:18:43:

   16 |          DO 103 I=3,IDO,2
      |                                                                        2
   17 |             IC = IDP2-I
   18 |             CR2 = WA1(I-2)*CC(I-1,K,2)+WA1(I-1)*CC(I,K,2)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf4.f:19:41:

   16 |          DO 103 I=3,IDO,2
      |                                                                        2
......
   19 |             CI2 = WA1(I-2)*CC(I,K,2)-WA1(I-1)*CC(I-1,K,2)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf4.f:20:43:

   16 |          DO 103 I=3,IDO,2
      |                                                                        2
......
   20 |             CR3 = WA2(I-2)*CC(I-1,K,3)+WA2(I-1)*CC(I,K,3)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf4.f:21:41:

   16 |          DO 103 I=3,IDO,2
      |                                                                        2
......
   21 |             CI3 = WA2(I-2)*CC(I,K,3)-WA2(I-1)*CC(I-1,K,3)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf4.f:22:43:

   16 |          DO 103 I=3,IDO,2
      |                                                                        2
......
   22 |             CR4 = WA3(I-2)*CC(I-1,K,4)+WA3(I-1)*CC(I,K,4)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf4.f:23:41:

   16 |          DO 103 I=3,IDO,2
      |                                                                        2
......
   23 |             CI4 = WA3(I-2)*CC(I,K,4)-WA3(I-1)*CC(I-1,K,4)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf2.f:8:72:

    8 |       IF (IDO-2) 107,105,102
      |                                                                        1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
radf2.f:13:43:

   11 |          DO 103 I=3,IDO,2
      |                                                                        2
   12 |             IC = IDP2-I
   13 |             TR2 = WA1(I-2)*CC(I-1,K,2)+WA1(I-1)*CC(I,K,2)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf2.f:14:41:

   11 |          DO 103 I=3,IDO,2
      |                                                                        2
......
   14 |             TI2 = WA1(I-2)*CC(I,K,2)-WA1(I-1)*CC(I-1,K,2)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf3.f:16:43:

   14 |          DO 102 I=3,IDO,2
      |                                                                        2
   15 |             IC = IDP2-I
   16 |             DR2 = WA1(I-2)*CC(I-1,K,2)+WA1(I-1)*CC(I,K,2)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf3.f:17:41:

   14 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   17 |             DI2 = WA1(I-2)*CC(I,K,2)-WA1(I-1)*CC(I-1,K,2)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf3.f:18:43:

   14 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   18 |             DR3 = WA2(I-2)*CC(I-1,K,3)+WA2(I-1)*CC(I,K,3)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf3.f:19:41:

   14 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   19 |             DI3 = WA2(I-2)*CC(I,K,3)-WA2(I-1)*CC(I-1,K,3)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:22:43:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
   21 |             IC = IDP2-I
   22 |             DR2 = WA1(I-2)*CC(I-1,K,2)+WA1(I-1)*CC(I,K,2)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:23:41:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   23 |             DI2 = WA1(I-2)*CC(I,K,2)-WA1(I-1)*CC(I-1,K,2)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:24:43:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   24 |             DR3 = WA2(I-2)*CC(I-1,K,3)+WA2(I-1)*CC(I,K,3)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:25:41:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   25 |             DI3 = WA2(I-2)*CC(I,K,3)-WA2(I-1)*CC(I-1,K,3)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:26:43:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   26 |             DR4 = WA3(I-2)*CC(I-1,K,4)+WA3(I-1)*CC(I,K,4)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:27:41:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   27 |             DI4 = WA3(I-2)*CC(I,K,4)-WA3(I-1)*CC(I-1,K,4)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:28:43:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   28 |             DR5 = WA4(I-2)*CC(I-1,K,5)+WA4(I-1)*CC(I,K,5)
      |                                           1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
radf5.f:29:41:

   20 |          DO 102 I=3,IDO,2
      |                                                                        2
......
   29 |             DI5 = WA4(I-2)*CC(I,K,5)-WA4(I-1)*CC(I-1,K,5)
      |                                         1
Warning: Array reference at (1) out of bounds (2 > 1) in loop beginning at (2)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 11:13:31

RFFTI是一个初始化例程,它为一个特殊的工作数组准备一些工作数据。

代码语言:javascript
复制
  SUBROUTINE RFFTI (N,WSAVE)
  DIMENSION       WSAVE(1)

(1)只是一种过时的、非常不幸的编写(*)的方法。

您必须读取手册并找出WSAVE数组应该是什么大小。请注意,它是内部数据的特殊工作数组,而不是要转换的数据。

从手册中:

威赛克 一个工作数组,它至少必须被标注为2*n+15。只要n保持不变,相同的工作数组可以同时用于rfftf和rfftb。对于n的不同值,需要不同的wsave数组,在rfftf或rfftb调用之间不能更改wsave的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66135424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档