回 帖 发 新 帖 刷新版面

主题: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)处。

请各位牛人帮忙啊,我郁闷了这个错误?多谢多谢多谢

回复列表 (共1个回复)

沙发

我发现当第一次编译运行成功之后,给数组分配的空间好像是保存在了系统之中,如果再改变Num相当于改变了数组的维数,此时编译就会出错,这个问题该如何解决啊各位,急死人

我来回复

您尚未登录,请登录后再回复。点此登录或注册