在Fortran中运行子例程时出错

时间:2015-08-04 15:45:25

标签: fortran fortran90 gfortran fortran95

我将这些作为运行线性集成的程序的一部分,这是我的函数和子程序,这是问题的一部分

SUBROUTINE interpol(x,f,xd,fd)
IMPLICIT NONE
REAL::linterp
EXTERNAL linterp
REAL,DIMENSION(5)::x
REAL,DIMENSION(5)::f
REAL,DIMENSION(9)::xd
REAL (KIND=8),DIMENSION(9),INTENT(OUT)::fd
INTEGER::i,j
DO i=1, 9
    DO j=1, 5
        IF (x(j) <  xd(i) .AND. xd(i) <=  x(j+1)) THEN
        fd(i)=linterp(x(j),f(j),xd(j))
        END IF
    END DO
END DO
END SUBROUTINE interpol

FUNCTION linterp(xd,x,f)
IMPLICIT NONE
REAL,DIMENSION(5)::xd
REAL,DIMENSION(5)::linterp
REAL,DIMENSION(5)::x
REAL,DIMENSION(5)::f
INTEGER::j,i
linterp=f(i)+((x-x(i)))/(x(i+1)-x(i))*(f(i+1)-f(i))
END FUNCTION linterp

当我运行它时,我无法摆脱这个错误

lin.f90:26:0:

 linterp=f(i)+((x-x(i)))/(x(i+1)-x(i))*(f(i+1)-f(i))
 1
Error: Different shape for array assignment at (1) on dimension 1 (9 and 5)
lin.f90:3:13:

 REAL::linterp
             1
Error: Explicit interface required for ‘linterp’ at (1): array result

我理解错误代码,但我无法看到我出错的地方,有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:1)

您已将linterp定义为数组!

REAL,DIMENSION(9)::linterp

它应该是(标量)函数:

REAL :: linterp
EXTERNAL linterp

您还需要为linterp指定更多参数:

        fd(i)=linterp( x(j), x(j+1), f(j), f(j+1), xx(i) )