gpt4 book ai didi

Fortran 隐式更改类型

转载 作者:行者123 更新时间:2023-12-04 05:02:13 25 4
gpt4 key购买 nike

我正在修改一些旧的 Fortran 代码(我想是 F77),用 Intel 编译器编译。我遇到了一些这种形式的 SLATEC 例程:

subroutine cffti (n,wsave)

dimension wsave(1)

iw1 = n+n+1
iw2 = iw1+n+n
call cffti1 (n,wsave(iw1),wsave(iw2))

return
end subroutine cffti


subroutine cffti1 (n,wa,ifac)

....
....
end subroutine cffti

Wsave 是一个数组,它的第一部分应该存储浮点数,而第二部分(来自 iw2)存储整数。

所有变量都是隐式的,因此当 wsave(iw2) 传递给 ifac 时,会被解释为整数,而 ifac 中的值没有意义。

我很困惑:所有这些东西怎么能正常工作?
我该如何克服这个问题?

最佳答案

这种正确填充数据的转换可以使用 EQUIVALENCE 来完成。在 Fortran 77 中。Fortran 95 提供 TRANSFER出于同样的目的。

wsave(iw2:) = transfer(some_integer_array, wsave)

接收数据不是问题,因为隐式接口(interface)只传递指针而不检查类型。如果您需要内部使用显式接口(interface),您也可以在内部使用相同的接口(interface)。

在现代代码中,只需使用 2 个不同类型的不同数组,并远离这些技术。

关于Fortran 隐式更改类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16009528/

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