我的最小的,可复制的示例如下所示:在程序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)
答案 0 :(得分:1)
有几种方法可以实现所需的功能,但是我建议您学习使用Fortran的模块功能。这将允许您封装该函数的信息。在下面,我介绍两个模块。第一个用于为nnoremap <BS> x
类型的kind类型参数设置命名常量。在代码中,使用<BS>
时将使用编译器特定的值。第二个定义函数x
和设置.vimrc
: