回 帖 发 新 帖 刷新版面

主题:求助,ELEMENTAL类型函数中如何声明其他函数(Fortran中的Elemental和pure)

我想写一个ELEMENTAL类型的函数A,这个函数里面需要调用一个函数B,该如何声明函数B呢?

是否需要借助INTERFACE或者MODULE来解决呢?

另外函数B能不能修饰为PURE属性的,而不修饰为ELEMENTAL属性的

例子如下
    Elemental real function A (X)
        real, intent(in) :: X
        real, external :: B           !该如何声明呢?
        A = B(X) + 1.0
    End function A

    Elemental real funciton B(X)      !这个函数是否可以修饰为 Pure?
        real, intent(in) :: X
        B = X+1.0
    End function B

回复列表 (共13个回复)

沙发

用MODULE吧,用INTERFACE也行,但麻烦:)

板凳

ELEMENTAL可以调用PURE。

3 楼

哦,谢谢。函数B的module写在同一个文件里,还是写在另外一个文件里。
能不能帮我编出来呢,非常感谢,哈哈[em1]

4 楼

哦,谢谢,函数B的MODULE可以写在同一个文件里吗?
能不能帮我编出来呢,非常感谢,哈哈

5 楼


谢谢啊,函数B的MODULE可以写在同一个文件里吗?
能不能帮我编出来吗?非常感谢,呵呵

6 楼

方法1:把两个都写到Module的Contains里。这样就不用再声名了。
方法2:把被调用的放到Contains里,调用者USE那个Module就行了。
方法3:两个都是全局的,那就要定义那个Interface。

7 楼


前二种还懂,第三种的全局的是什么意思,是指两个函数都在主程序里吗,然后在主程序开头写上第二个函数的INTERFACE,是这个意思吗?

另外感觉你FORTRAN好厉害啊,又很热心,经常在论坛上回答问题,谢谢!

8 楼

呵呵,千万别这么说,论坛里高手太多:)我估摸着能算上中等吧:)

9 楼

全局意思就是像你现在这样,只不过还要加上INTERFACE的声名。

10 楼

elemental 本身即有 pure 屬性, A 裡面引用的 B 也須是 pure, 都要有
interface, 把 A, B 放在 module 或 program 的 contains 內比較方便
例如:
program main
  implicit none
  write (*, *) a((/1.0, 1.0, 1.0/))
  contains
    Elemental real function A (X)
      real, intent(in) :: X
      A = B(X) + 1.0
    End function A

    pure real function B (X)
      real, intent(in) :: X
      B = X + 1.0
    End function B
end program main

我来回复

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