gpt4 book ai didi

fortran - 将函数传递给子例程时,虚拟过程 'f' 中的接口(interface)不匹配

转载 作者:行者123 更新时间:2023-12-04 16:11:06 26 4
gpt4 key购买 nike

我正在尝试编写一个有两个参数的子例程(用于最小化):

  • 任意长度的数组x
  • 一个函数f,它接受一个该长度的数组并返回一个标量

示例模块:

module foo

contains

subroutine solve(x, f)
real, dimension(:), intent(inout) :: x
interface
real pure function f(y)
import x
real, dimension(size(x)), intent(in) :: y
end function
end interface

print *, x
print *, f(x)
end subroutine

end module

和测试程序:

use foo

real, dimension(2) :: x = [1.0, 2.0]

call solve(x, g)

contains

real pure function g(y)
real, dimension(2), intent(in) :: y

g = sum(y)
end function

end

gfortran 失败:

call solve(x, g)
1
Error: Interface mismatch in dummy procedure 'f' at (1): Shape mismatch in dimension 1 of argument 'y'

如果我更改 size(x) => 2 然后它编译(并运行)正常。如果我更改 : => 2,它也能正常工作。但这些解决方案都无法满足我的需求。

关于如何实现此目标的任何想法?

最佳答案

怎么样:

interface
real pure function f(y)
real, dimension(:), intent(in) :: y
end function
end interface

当您将 solve 的参数传递给函数时,数组的大小将自动传递。您不需要制作界面的这一部分。

关于fortran - 将函数传递给子例程时,虚拟过程 'f' 中的接口(interface)不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15926727/

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