User Tools

Site Tools


fortran

manual svn http://svnbook.red-bean.com/en/1.1/ch03s05.html

Pointers on functions and subroutines in Fortran

It works with both ifort 10 and gfortran-4.4

example 1: main.f90

module HelloWorld

  procedure(), pointer :: ptr

  contains

  subroutine Hello1()
    print *,'Ahoj'
  end subroutine

  subroutine Hello2(a)
    integer, intent(in) ::  a
    print *,'Nazdar',a
  end subroutine

end module

program main
  use HelloWorld
  implicit none

  ptr => Hello1
  call ptr

  ptr => Hello2
  call ptr(2)

end program

output:

zdenka@pc209:~/simulations/fireball/ptr_func$ ifort -c main.f90 -o main.o;ifort main.o -o test;./test
 Ahoj
 Nazdar           2

Example 2: main.f90

module HelloWorld

  procedure(Hello1), pointer :: ptr

  contains

  subroutine Hello1(a,b)
      integer, intent(in) :: a
      real, intent(in) :: b
      print *,'Ahoj',a,b
  end subroutine

  subroutine Hello2(a,b)
      integer, intent(in) :: a
      real, intent(in) :: b
      print *,'Nazdar',a,b
  end subroutine

end module

program main
  use HelloWorld

  ptr => Hello1
  call ptr(1,1.0)

  ptr => Hello2
  call ptr(2,2.0)
end program

output

zdenka@pc209:~/simulations/fireball/ptr_func$ ifort -c main.f90 -o main.o;ifort main.o -o test;./test
Ahoj           1   1.000000    
Nazdar           2   2.000000 

Links - new features in fortran 95/2003:

fortran.txt · Last modified: 2011/02/18 13:13 (external edit)