我将这些作为运行线性集成的程序的一部分,这是我的函数和子程序,这是问题的一部分
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
我理解错误代码,但我无法看到我出错的地方,有人可以帮忙吗? 感谢
答案 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) )