File: interface_30.f90

package info (click to toggle)
lfortran 0.61.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 61,892 kB
  • sloc: cpp: 181,767; f90: 92,175; python: 17,616; ansic: 10,170; yacc: 2,377; sh: 1,444; fortran: 892; makefile: 38; javascript: 15
file content (38 lines) | stat: -rw-r--r-- 976 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module interface_30_mod
   interface
      pure function scalar_1D_initializer_i(x) result(res)
         double precision, intent(in) :: x(:)
         double precision, allocatable :: res(:)
      end function
   end interface
end module

module interface_30_functions_m
   implicit none

contains

   pure function f(x)
      double precision, intent(in) :: x(:)
      double precision, allocatable :: f(:)
      allocate(f(size(x)))
      f = x**2
   end function

end module interface_30_functions_m

program interface_30
   use interface_30_functions_m
   use interface_30_mod
   implicit none
   procedure(scalar_1D_initializer_i), pointer :: scalar_1D_initializer => f
   double precision, allocatable :: x(:), res(:)
   integer :: n
   n = 5
   allocate(x(n))
   x = [1.0d0, 2.0d0, 3.0d0, 4.0d0, 5.0d0]
   res = scalar_1D_initializer(x)
   print *, res
   if (all(res /= [1.0d0, 4.0d0, 9.0d0, 16.0d0, 25.0d0])) error stop
   deallocate(x, res)
end program interface_30