gpt4 book ai didi

fortran - 如何将具有多个参数的函数传递给需要仅具有一个参数的函数的子例程?

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

我有一个子例程(最小示例)

subroutine treatfunction(f,input,output)
external, real::f
real, intent(in):: input
real, intent(out):: output

output = f(input) + f(1.0) ! i.e. f has only one argument
end subroutine

和一个带有两个参数的函数

real function fun(x,a)
real,intent(in)::x,a

现在对于给定的a在运行时修复,我想通过 funtreatfunction 。所以理想情况下,我想调用类似的东西

call treatfunction(fun(:,a=a0), input=myinput, output=myoutput)

使用 Fortran2003 功能执行此操作的最优雅方式是什么 gfortran-5支持?

当然,我可以插入一个可选的虚拟参数 atreatfunction并调用f或者 f(x)f(x,a)取决于present(a)在子程序的主体中。但改变子例程并不优雅。

最佳答案

在 Fortran 2008 中,您可以将内部函数作为参数传递,并且 gfortran 支持它。

 subroutine calling()

a0 = ...
call treatfunction(wrapper, input=myinput, output=myoutput)
contains
real function wrapper(x)
real, intent(in) :: x
wrapper = fun(x,a0)
end function
end subroutine

顺便说一句,我会远离外部,它是邪恶的,使用接口(interface) block 。

关于fortran - 如何将具有多个参数的函数传递给需要仅具有一个参数的函数的子例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208594/

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