Fortran 95:数组函数返回。出界外

时间:2014-09-13 13:42:50

标签: arrays fortran indexoutofboundsexception fortran95

我在一个相当简单的代码中有一个简单的问题,但我真的不会在几个小时后找到错误。这里是代码的最小化版本,出现问题:

SUBROUTINE Partial_KlassRKV(x,y,f,f_xMarge,f_yMarge)
    USE DGL_Functions
    IMPLICIT NONE

    REAL :: x(:),y(:),f(:,:,:),f_xMarge(:,:),f_yMarge(:,:)
    INTEGER :: i,j,k
    REAL :: partial_fx(6,6)

    DO k=1,size(f,3)

       partial_fx=PartialCalc(x,y,f(:,:,k),f_xMarge,f_yMarge)
       WRITE(*,*) 'Nach PartialCalc x'
       STOP

    END DO  

...

MODULE DGL_Functions
CONTAINS

FUNCTION PartialCalc(x,y,f,f_xMarge,f_yMarge) 
    IMPLICIT NONE
    REAL :: x(:),y(:),f(:,:),f_xMarge(:,:),f_yMarge(:,:)
    REAL :: PartialCalc(6,6)
    INTEGER :: i,j


    DO i=1,size(PartialCalc,1)
        DO j=1,size(PartialCalc,2)
            PartialCalc(i,j)=i+j
        END DO  
    END DO 

    WRITE(*,*) 'PartialCalc ',PartialCalc


END FUNCTION PartialCalc

它返回FUNCION PartialCalc中的最后一个WRITE语句,但不是

之后的WRITE
partial_fx=PartialCalc(x,y,f(:,:,k),f_xMarge,f_yMarge)
在SUBROUTINE中。在那一行有#34;数组下标超出界限"。我不明白这一点。两个数组(partial_fx和PartialCalc)都用dim(6,6)声明,并且为每个PartialCalc(i,j)赋值......?

Greets intasys

PS:我正在使用Plato f95和Checkmate 32。

1 个答案:

答案 0 :(得分:1)

也许尝试不同的编译器。 gfortran和ifort通常会识别数组,甚至是索引值。这是我写的一个例子:

module mysubs

contains

subroutine subxy (x,y)
   real, dimension (5) :: x, y
   x = 4.0
   y = 5.0
end subroutine subxy

end module mysubs

program test_bounds
   use mysubs
   real :: x(4), y(5)

   call subxy (x, y)

   write (*, *) x, y

end program test_bounds

gfortran,使用正确的编译器选项,在编译时发现它,具有有用的特异性:

   call subxy (x, y)
               1
Warning: Actual argument contains too few elements for dummy argument 'x' (4/5) at (1)