Fortran语言:另一个模块从过程调用一个模块中的功能(Fortran: Calling a fu

2019-10-17 19:03发布

我承认标题可能有点晦涩难懂,所以让我给什么,我想要做的,什么行不通的例子。 我有一个调用子程序这是一个模块中的主要程序:

Program Test_program

Use module_A
Implicit none
Integer :: i
i = 1
call subroutine_A(i)

End program Test_program

这subroutine_A是在模块A中,并在匝调用function_B这是在module_B:

module module_A

use module_B
implicit none
contains

subroutine subroutine_A(i)
implicit none
integer, intent(in) :: i
double precision :: j
j = function_B(i)
end subroutine subroutine_A

end module module_A

最后,module_B看起来是这样的:

module module_B
Implicit none
Contains

double precision function function_B(i)
implicit none
integer,intent(in) :: i
function_B = 5.d0*i
end function function_B

end module module_B

程序和模块在不同的文件。 不幸的是,这并不能编译,因为我得到一个错误信息:

ERROR Subroutine_A:该参考子程序function_B不是CALL语句。

看来该计划认为,function_B是一个子程序,所以我不知道该怎么做。 顺便说一句,我想用我的子程序和使用模块功能的适当封装,因为我被告知,但如果这不是我愿意接受建议的正确方法(我被告知不要使用接口,但模块,而不是因此这测试)。

谢谢

Answer 1:

我的道歉,我实际上是“解决”之谜:不使用名称function_B的,我用的名字Compute_Error。 当我改变了函数名别的东西,上面的方法工作。 这似乎有些库我链接到某处有一个子程序compute_error,虽然该错误消息没有告诉我是哪一个,或者如果是这样的问题是肯定的。 不管怎样,再次抱歉,但我想我可以让帖子,因为它有助于了解如何链接模块和程序(我没有在互联网上找到特定的例子很多例子)。 使用模块和程序,这种方式当然是不正确的方式,随意添加一些有用的知识。



文章来源: Fortran: Calling a function in a module from a procedure in another module