在Fortran中通过参数传递外部函数

时间:2020-04-07 22:16:29

标签: fortran

我的最小的,可复制的示例如下所示:在程序mymain中,我调用一个子例程,该子例程具有一个外部函数f1和一个变量result作为参数。在子例程中,该函数完成了一些操作(在本例中,该函数只是在特定点被评估),结果通过参数result返回。

PROGRAM mymain

    IMPLICIT NONE

    REAL(KIND=8)    f1
    REAL(KIND=8)    result

    EXTERNAL f1


    CALL sub1(f1,result)

    PRINT *,result

END PROGRAM mymain

SUBROUTINE sub1(f1,result)

    IMPLICIT NONE

    REAL(KIND=8)                ::f1
    REAL(KIND=8), INTENT(OUT)   ::result
    REAL(KIND=8)                ::input

    EXTERNAL f1

    input=0.5

    result=f1(input)

END SUBROUTINE sub1

REAL(KIND=8) FUNCTION f1(x)

    REAL(KIND=8), INTENT(IN)    ::x
    REAL(KIND=8)                ::const

    const=1.

    f1=x**2+const

END FUNCTION f1

我的问题是我想从const内部更改函数f1中的变量mymain

在我的现实世界问题中,子例程是一个Fortran库之一,该库接受外部函数的积分,因此我需要多次调用此子例程,但始终在外部函数中使用不同的参数。

我不知道该怎么做,因为我不能像这样从mymain调用子程序

CALL sub1(f1(x,const),result)

1 个答案:

答案 0 :(得分:1)

有几种方法可以实现所需的功能,但是我建议您学习使用Fortran的模块功能。这将允许您封装该函数的信息。在下面,我介绍两个模块。第一个用于为nnoremap <BS> x 类型的kind类型参数设置命名常量。在代码中,使用<BS>时将使用编译器特定的值。第二个定义函数x和设置.vimrc

的方法
:
相关问题