主题:Fortran中遇到interface block的错误请教大家
最近遇到一个十分悲剧的问题在这请教大家,我遇到一个莫名奇妙的问题,代码如下:
MODULE initial_para
REAL*8,PARAMETER :: Lt=10
REAL*8,PARAMETER :: dt=0.001d0*Lt
INTEGER*4,PARAMETER ::Num=Lt/dt+1
END module
FUNCTION func1(yn) RESULT(f1)
USE initial_para,ONLY : Num
IMPLICIT NONE
COMPLEX*16 :: yn(Num),f1(Num)
INTENT(IN) :: yn
执行部分省略
END FUNCTION
subroutine pulse()
USE initial_para,ONLY : Num
IMPLICIT NONE
INTERFACE
FUNCTION func1(yn) RESULT(f1)
USE initial_para,ONLY : Num
IMPLICIT NONE
COMPLEX*16 :: yn(Num),f1(Num)
INTENT(IN) :: yn
END FUNCTION
END INTERFACE
REAL*8 :: t(Num)
COMPLEX*16 :: At(Num),Azt(Num)
At=DCPMLX(sin(t))
Azt=func1(At)
……
END subroutine
PROGRAM
IMPLICIT NONE
CALL pulse()
END PROGRAM
出现的问题如下:
当我直接运行以上程序段时不会出错,但是当我做如下改动,将module中的dt=0.001d0*Lt改成dt=0.0001d0*Lt,num相应的由1001变成10001时程序就会运行错误,报错如下:
there is a conflict between local interface block and external interface block [func1]
报错位置为subroutine pulse 中的语句Azt=func1(At)处。
请各位牛人帮忙啊,我郁闷了这个错误?多谢多谢多谢
MODULE initial_para
REAL*8,PARAMETER :: Lt=10
REAL*8,PARAMETER :: dt=0.001d0*Lt
INTEGER*4,PARAMETER ::Num=Lt/dt+1
END module
FUNCTION func1(yn) RESULT(f1)
USE initial_para,ONLY : Num
IMPLICIT NONE
COMPLEX*16 :: yn(Num),f1(Num)
INTENT(IN) :: yn
执行部分省略
END FUNCTION
subroutine pulse()
USE initial_para,ONLY : Num
IMPLICIT NONE
INTERFACE
FUNCTION func1(yn) RESULT(f1)
USE initial_para,ONLY : Num
IMPLICIT NONE
COMPLEX*16 :: yn(Num),f1(Num)
INTENT(IN) :: yn
END FUNCTION
END INTERFACE
REAL*8 :: t(Num)
COMPLEX*16 :: At(Num),Azt(Num)
At=DCPMLX(sin(t))
Azt=func1(At)
……
END subroutine
PROGRAM
IMPLICIT NONE
CALL pulse()
END PROGRAM
出现的问题如下:
当我直接运行以上程序段时不会出错,但是当我做如下改动,将module中的dt=0.001d0*Lt改成dt=0.0001d0*Lt,num相应的由1001变成10001时程序就会运行错误,报错如下:
there is a conflict between local interface block and external interface block [func1]
报错位置为subroutine pulse 中的语句Azt=func1(At)处。
请各位牛人帮忙啊,我郁闷了这个错误?多谢多谢多谢