首页 > 解决方案 > 具有函数参数的 Fortran 函数,这些函数本身具有不同数量的参数

问题描述

我想编写一个将另一个函数作为输入的 Fortran 函数。我知道我可以通过界面来做到这一点。从现在开始,我将这两个不同的函数称为“函数”和“接口函数”。

想象一下,我的函数只改变了接口函数的第一个参数。例如,它可能是一个正在集成的集成例程x,它是我将传递给它的任何接口函数的第一个参数。

我希望能够将带有任意数量参数的接口函数传递给第一个函数,并且能够以某种方式为接口函数所需的任何其他参数设置固定常量值。我想要的东西类型的一个最小示例如下:

PROGRAM test

  IMPLICIT NONE

  !This works
  WRITE(*,*) add(g)

  !This does not work
  WRITE(*,*) add(h(:,0.))

CONTAINS

  REAL FUNCTION add(f)

    IMPLICIT NONE

    INTERFACE
       REAL FUNCTION f(x)
         REAL, INTENT(IN) :: x
       END FUNCTION f
    END INTERFACE

    add=f(1.)+f(2.)

  END FUNCTION add

  REAL FUNCTION g(x)

    IMPLICIT NONE
    REAL, INTENT(IN) :: x

    g=x**2

  END FUNCTION g

  REAL FUNCTION h(x,y)

    IMPLICIT NONE
    REAL, INTENT(IN) :: x, y

    h=x**2+y**2

  END FUNCTION h

END PROGRAM test

add上面的代码在主程序中的第二次调用将无法编译,并在参数列表中抱怨语法错误。但是,如果没有这条线,它可以正常工作。

有什么方法可以调整我的代码,以便我可以add使用输入h函数以及输入函数调用我的g函数?

请注意,我为此考虑的实际应用程序相对复杂,并且涉及“接口函数”,在其参数列表中需要各种不同的类型。

标签: functionfortranarguments

解决方案


推荐阅读