gpt4 book ai didi

Fortran,静态库创建和简化(这里是新手)

转载 作者:行者123 更新时间:2023-12-02 14:14:22 24 4
gpt4 key购买 nike

我对 Fortran 有点陌生,但我开始在我一遍又一遍地使用的模块中收集大量函数和子例程。我一直在尝试构建自己的库,以便可以从我编写的新源代码中调用其中一些函数和子例程。到目前为止,我已经能够让子例程工作,但不能让函数工作。我只是不知道如何在代码中调用该函数。

这是一个例子。以下函数接受一个整数并返回单位矩阵。

module test
contains
function IDENTITY(rows) !RETURNS THE IDENTITY MATRIX
real, dimension(rows,rows) :: IDENTITY
integer, intent(in) :: rows
integer :: i, j
!f2py intent(in) rows
!f2py intent(out) IDENTITY
!f2py depend(rows) IDENTITY
IDENTITY = ZEROS(rows,rows)
do i = 1, rows
do j = 1, rows
if (i == j) then
IDENTITY(i,j) = 1
endif
enddo
enddo
end function IDENTITY
end module

现在我将其编译成目标文件,然后将其归档到库中。然后我编写了一个小程序,我想在其中使用这个函数——这就是我想避免的问题。我想我必须在我的源代码中添加一个\use\语句,以便它能够使用该模块。然后我必须在编译时包含 .mod 的路径。但最终,我将有一整个部分充满了 use 语句。我想避免做所有这些事情,而只是让一切变得漂亮和整洁。有办法吗?任何帮助都会很棒,

谢谢

最佳答案

您可以将许多子例程和函数放入一个模块的 contains 部分。您不需要为每个模块使用单独的模块。通过为相关过程(子例程和函数)创建模块/文件来组织代码是有意义的。

图书馆是我曾经使用过的一个很好的策略。在这个时代我通常不去图书馆。编译器速度非常快,我只需编译包含程序所需模块的文件即可。这取决于您的代码有多大。

您可以使用 call 语句调用子例程。您可以通过在表达式(例如赋值语句)中使用函数来调用函数:

x = sin (y)
matrix = identity (n)

附注而不是:

do i = 1, rows
do j = 1, rows
if (i == j) then
IDENTITY(i,j) = 1
endif
enddo
enddo

为什么不:

do i = 1, rows
IDENTITY(i,i) = 1
enddo

你有一个函数 ZEROS 来将你的矩阵归零吗?该语言将通过赋值语句来做到这一点:

IDENTITY = 0.0

关于Fortran,静态库创建和简化(这里是新手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com