我在一个相当简单的代码中有一个简单的问题,但我真的不会在几个小时后找到错误。这里是代码的最小化版本,出现问题:
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语句,但不是
之后的WRITEpartial_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。
答案 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)