forrtl:严重(408):堡垒:(3):数组foo的下标#3的值0小于1的下限

时间:2019-06-09 16:17:49

标签: fortran

我正在尝试运行Fortran代码,但是在if语句中的逻辑条件下,我遇到了数组索引错误。

我正在将Intel Fortran编译器与VS2019一起使用。我试图将if条件分成单独的语句(见下文)。

给出错误的确切行是

if(i.gt.1 .and. nnext(nzcur,nbout,i,2).gt.nnext(nzcur,nbout,i-1,2))then

并位于DO循环中,其中iDO变量,在我的情况下,范围是从14。我无法提供整个项目,但是我可以重新创建一个类似的MWE:

program MWE real array(40,40,40,2) do i=1,4 if(i.gt.1 .and. array(1,1,i,1).gt.array(1,1,i-1,1))then write(*,*)"foo" endif end do end program

会重现错误。

如果我修改if语句,则不会出现该错误:

program MWE real array(40,40,40,2) do i=1,4 write(*,*)"Stuck here", i if(i.gt.1)then if(array(1,1,i,1).gt.array(1,1,i-1,1))then write(*,*)"foo" endif endif end do end program

但是,这在连续打印"Stuck here"i=1时卡住了,并且没有打印"foo",即i没有进行,也没有进入下一个if块。

错误是

forrtl: severe (408): fort: (3): Subscript #3 of the array ARRAY has value 0 which is less than the lower bound of 1

我了解它正在读取条件语句,其中i-1 = 1-1 = 0超出了数组的范围(范围从140)。

我想做的是阅读条件语句的第一部分,看到i=1<1为假,因此忽略了if块并继续执行代码。我试图通过将条件语句分成两个单独的if块来执行此操作,但是正如我之前提到的DO变量卡在1上并且没有进展,因此从不输入第二个if块。

为我的凌乱代码道歉,我是Fortran的新手。有没有办法让它读取if条件的第一部分,然后继续忽略i=1发生索引错误的后一部分?

0 个答案:

没有答案