主题:求助,ELEMENTAL类型函数中如何声明其他函数(Fortran中的Elemental和pure)
heizaoniangao
[专家分:310] 发布于 2011-07-30 01:01:00
我想写一个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个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-07-30 21:48:00
用MODULE吧,用INTERFACE也行,但麻烦:)
板凳
cgl_lgs [专家分:21040] 发布于 2011-07-30 21:49:00
ELEMENTAL可以调用PURE。
3 楼
heizaoniangao [专家分:310] 发布于 2011-07-31 00:27:00
哦,谢谢。函数B的module写在同一个文件里,还是写在另外一个文件里。
能不能帮我编出来呢,非常感谢,哈哈[em1]
4 楼
heizaoniangao [专家分:310] 发布于 2011-07-31 00:28:00
哦,谢谢,函数B的MODULE可以写在同一个文件里吗?
能不能帮我编出来呢,非常感谢,哈哈
5 楼
heizaoniangao [专家分:310] 发布于 2011-07-31 00:32:00
谢谢啊,函数B的MODULE可以写在同一个文件里吗?
能不能帮我编出来吗?非常感谢,呵呵
6 楼
cgl_lgs [专家分:21040] 发布于 2011-07-31 21:00:00
方法1:把两个都写到Module的Contains里。这样就不用再声名了。
方法2:把被调用的放到Contains里,调用者USE那个Module就行了。
方法3:两个都是全局的,那就要定义那个Interface。
7 楼
heizaoniangao [专家分:310] 发布于 2011-07-31 23:36:00
前二种还懂,第三种的全局的是什么意思,是指两个函数都在主程序里吗,然后在主程序开头写上第二个函数的INTERFACE,是这个意思吗?
另外感觉你FORTRAN好厉害啊,又很热心,经常在论坛上回答问题,谢谢!
8 楼
cgl_lgs [专家分:21040] 发布于 2011-08-01 10:15:00
呵呵,千万别这么说,论坛里高手太多:)我估摸着能算上中等吧:)
9 楼
cgl_lgs [专家分:21040] 发布于 2011-08-01 10:18:00
全局意思就是像你现在这样,只不过还要加上INTERFACE的声名。
10 楼
liangrong [专家分:2090] 发布于 2011-08-01 17:17:00
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
我来回复