gpt4 book ai didi

fortran - 如何在 Fortran 90/95 中使用 Fortran 77 子程序?

转载 作者:行者123 更新时间:2023-12-02 00:09:20 26 4
gpt4 key购买 nike

我正在使用 Fortran 90 编写代码,现在我需要使用 *amos Fotran 77 库 ( http://www.netlib.org/amos/ ) 中的特殊函数。现在我找到了这些例程的模块接口(interface)(https://github.com/certik/fortran-utils/blob/master/src/amos.f90)。

我的问题是:如何将它们组合起来并在我的 Fortran 90 程序中使用它们以及如何正确编译它们?

为此折腾了一整天,还是想不通。

以下是我的测试代码:

PROGRAM TEST_ZBESI
USE set_precisions
USE amos
IMPLICIT NONE
INTEGER :: n, i, nz, ierr
!double precision :: zr,zi, cyr(5), cyi(5)
REAL(kind=DBL) :: zr, zi, cyr(5), cyi(5)

n=5
zr=1.0_DBL
zi=2.0_DBL

call ZBESI(zr,zi,0.0_DBL,1,n,cyr,cyi,nz,ierr)
print *,' '
do i=1, n
write(*,10) i-1, cyr(i)
write(*,11) i-1, cyi(i)
end do
print *,' NZ=', NZ
print *,' Error code:', ierr
print *,' '

10 format(' zr(',I1,') = ',F10.6)
11 format(' zi(',I1,') = ',F10.6)

END PROGRAM TEST_ZBESI

我得到的结果如下:

  zr(0) =   0.000000
zi(0) = 0.000000
zr(1) = 0.000000
zi(1) = 0.000000
zr(2) = 0.000000
zi(2) = 0.000000
zr(3) = 0.000000
zi(3) = 0.000000
zr(4) = 0.000000
zi(4) = 0.000000
NZ= 0
Error code: 4

看来怎么也得不到正确答案。

我尝试手动将 ZBESI.f Fortran 77 代码转换为 Fortran 90 代码。但是代码太长了,真是一场灾难。

最佳答案

除了极少数异常(exception),FORTRAN 77 是 Fortran 90/95/2003/2008 的子集。实际上,编译器仍然支持过时的功能。使用相同的编译器编译 FORTRAN 77 和 Fortran 90/59/2003/2008 源代码应该会生成兼容的目标模块。您可能必须分别编译这两种语言版本,因为可能需要不同的编译器选项,例如,对于固定格式和自由格式的源代码布局。对于 Fortan 90/95/2003/2008 代码中的接口(interface),编译器将使用兼容的调用约定。

您有什么具体问题?您需要了解 FORTRAN 77 的编译器选项吗?您使用的是什么编译器?

编辑:您必须在使用它的源代码之前编译模块。方便的是先把FORTRAN 77 编译成目标文件,然后用编译Fortran 95 的fortran 命令链接一切。所以尝试:

ifort -c -fixed ZBESI.f
ifort ZBESI.o set_precisions.f90 amos.f90 test_ZBESI.f90.

关于fortran - 如何在 Fortran 90/95 中使用 Fortran 77 子程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342259/

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