使用fortran将函数传递给子例程。

时间:2014-02-12 23:33:23

标签: function fortran subroutine

我编写了一组子程序并将它们编译成一个库。这些子程序基于一些定义的函数(x,y)。目前这被埋没在库例程中 - 但是我想要的是能够将任何函数(x,y)传递到这个库中 - 这可能吗?谢谢你们!

1 个答案:

答案 0 :(得分:1)

module ExampleFuncs

   implicit none

abstract interface
   function func (z)
      real :: func
      real, intent (in) :: z
   end function func
end interface


contains


subroutine EvalFunc (aFunc_ptr, x)

   procedure (func), pointer :: aFunc_ptr
   real, intent (in) :: x

   write (*, *)  "answer:", aFunc_ptr (x)

end subroutine EvalFunc


function f1 (x)
  real :: f1
  real, intent (in) :: x

  f1 = 2.0 * x

end function f1


function f2 (x)
   real :: f2
   real, intent (in) :: x

   f2 = 3.0 * x**2

end function f2

end module ExampleFuncs


program Func_to_Sub

   use ExampleFuncs

   implicit none

   procedure (func), pointer :: f_ptr => null ()

   f_ptr => f1
   call EvalFunc (f_ptr, 2.0)

   f_ptr => f2
   call EvalFunc (f_ptr, 2.0)

   stop

end program Func_to_Sub