【发布时间】:2015-08-04 15:45:24
【问题描述】:
我将这些作为运行线性积分的程序的一部分,这是我的函数和子例程,这是问题的一部分
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
我理解错误代码,但我看不出哪里出错了,谁能帮忙? 谢谢
【问题讨论】:
-
我正在尽力理解这一切,但我对它很陌生,请耐心等待。
-
不要改变太多问题!它使答案非常混乱......
-
对于新问题:不要将函数结果定义为数组。这不是计算出来的,并且使事情进一步复杂化。一个简单的
real function ...就足够了。如果您觉得豪华,可以明确定义linterp,但请删除,DIMENSION(5)。 -
您是在编译还是运行时遇到错误?
标签: fortran fortran90 gfortran fortran95