如何将一组函数存储到 Fortran 数组中
How to store a set of functions into a Fortran array
众所周知,函数名可以作为参数传递给其他子程序in/out。我想知道我们是否有任何技巧可以将函数列表保存到一个数组中,该数组将被传入和传出以进行处理。
!--------例如。
在某处我们设置任何数组
type(Idonotknow)::Farray(N)
然后设置值:
Farray(1)%any=>fun1
Farray(2)%any=>fun2
...
Farray(N)%any=>funN
其中 fun1、fun2...funN 类似于
Function fun1(input)
implicit none
statements
End Function
终于可以打电话给他们了
do i = 1, N
Call F(i)%any(input)
enddo
首先你应该创建一个只包含一个不传递任何参数的过程指针的类型。然后创建该类型的数组。
示例:
program test_func_array
implicit none
type pp
procedure(func) ,pointer ,nopass :: f =>null()
end type pp
interface
function func(x)
real :: func
real, intent (in) :: x
end function func
end interface
type(pp) :: func_array(4)
func_array(1)%f => exp
func_array(2)%f => tan
func_array(3)%f => cos
func_array(4)%f => sin
print*,func_array(1)%f(1.)
print*,func_array(2)%f(1.)
print*,func_array(3)%f(0.)
print*,func_array(4)%f(0.)
end program test_func_array
众所周知,函数名可以作为参数传递给其他子程序in/out。我想知道我们是否有任何技巧可以将函数列表保存到一个数组中,该数组将被传入和传出以进行处理。
!--------例如。 在某处我们设置任何数组
type(Idonotknow)::Farray(N)
然后设置值:
Farray(1)%any=>fun1
Farray(2)%any=>fun2
...
Farray(N)%any=>funN
其中 fun1、fun2...funN 类似于
Function fun1(input)
implicit none
statements
End Function
终于可以打电话给他们了
do i = 1, N
Call F(i)%any(input)
enddo
首先你应该创建一个只包含一个不传递任何参数的过程指针的类型。然后创建该类型的数组。
示例:
program test_func_array
implicit none
type pp
procedure(func) ,pointer ,nopass :: f =>null()
end type pp
interface
function func(x)
real :: func
real, intent (in) :: x
end function func
end interface
type(pp) :: func_array(4)
func_array(1)%f => exp
func_array(2)%f => tan
func_array(3)%f => cos
func_array(4)%f => sin
print*,func_array(1)%f(1.)
print*,func_array(2)%f(1.)
print*,func_array(3)%f(0.)
print*,func_array(4)%f(0.)
end program test_func_array