pointers - How to use inteface blocks to pass a function to a subroutine? -


i understand interface command can used pass a function subroutine. example in main program i'd define function , pass subroutine like:

mainprogran  use ....  implicit none  type decorations etc  interface    function test(x,y)    real, intent(in) :: x, y    real :: test    end function end interface     call subroutine( limit1, limit2, test, ans)   end mainprogram 

is correct way of doing this? i'm quite stuck! within subroutine there need put let know function coming in? subroutine in case library don't want have keep recompiling change function.

module:

module fmod     interface        function f_interf(x,y)        real, intent(in) :: x, y        real :: f_interf        end function     end interface  contains      function f_sum(x,y)     real, intent(in) :: x, y     real f_sum      f_sum = x + y      end function      function f_subst(x,y)     real, intent(in) :: x, y     real f_subst      f_subst = x - y      end function      subroutine subr(limit1, limit2, func, ans)     real limit1, limit2     procedure(f_interf) func     real ans      ans = func(limit1, limit2)     end subroutine end module 

main program:

program pass_func use fmod implicit none real ans, limit1, limit2 limit1 = 1.0 limit2 = 2.0 call subr( limit1, limit2, f_subst, ans) write(*,*) ans call subr( limit1, limit2, f_sum, ans) write(*,*) ans end program pass_func 

and output:

  -1.000000    3.000000 

Comments

Popular posts from this blog

c# - How to get the current UAC mode -

postgresql - Lazarus + Postgres: incomplete startup packet -

javascript - Ajax jqXHR.status==0 fix error -