To work with Fortran 90 generic functions:
(dbx) list 1,99
1 MODULE cr
2 INTERFACE cube_root
3 FUNCTION s_cube_root(x)
4 REAL :: s_cube_root
5 REAL, INTENT(IN) :: x
6 END FUNCTION s_cube_root
7 FUNCTION d_cube_root(x)
8 DOUBLE PRECISION :: d_cube_root
9 DOUBLE PRECISION, INTENT(IN) :: x
10 END FUNCTION d_cube_root
11 END INTERFACE
12 END MODULE cr
13 FUNCTION s_cube_root(x)
14 REAL :: s_cube_root
15 REAL, INTENT(IN) :: x
16 s_cube_root = x ** (1.0/3.0)
17 END FUNCTION s_cube_root
18 FUNCTION d_cube_root(x)
19 DOUBLE PRECISION :: d_cube_root
20 DOUBLE PRECISION, INTENT(IN) :: x
21 d_cube_root = x ** (1.0d0/3.0d0)
22 END FUNCTION d_cube_root
23 USE cr
24 REAL :: x, cx
25 DOUBLE PRECISION :: y, cy
26 WRITE(*,"('Enter a SP number: ')")
27 READ (*,*) x
28 cx = cube_root(x)
29 y = x
30 cy = cube_root(y)
31 WRITE(*,'("Single: ",F10.4, ", ", F10.4)') x, cx
32 WRITE(*,'("Double: ",F12.6, ", ", F12.6)') y, cy
33 WRITE(*,"('Enter a DP number: ')")
34 READ (*,*) y
35 cy = cube_root(y)
36 x = y
37 cx = cube_root(x)
38 WRITE(*,'("Single: ",F10.4, ", ", F10.4)') x, cx
39 WRITE(*,'("Double: ",F12.6, ", ", F12.6)') y, cy
40 END
To use dbx with a generic function, cube root.
If asked "What is cube_root?", select one.
If asked for cube_root(8), dbx asks you to select which one.
If told to stop in cube_root, dbx asks you to select which one.
From inside s_cube_root,
show current value of x.
(dbx) stop at 26
(2) stop at "Generic.f90":26
(dbx) run
Running: Generic
(process id 14633)
stopped in main at line 26 in file "Generic.f90"
26 WRITE(*,"('Enter a SP number : ')")
(dbx) whatis cube_root
More than one identifier 'cube_root.'
Select one of the following names:
1) `Generic.f90`cube_root s_cube_root ! real*4 s_cube_root
2) `Generic.f90`cube_root s_cube_root ! real*8 d_cube_root
> 1
real*4 function cube_root (x)
(dummy argument) real*4 x
(dbx) print cube_root(8.0)
More than one identifier 'cube_root.'
Select one of the following names:
1) `Generic.f90`cube_root ! real*4 s_cube_root
2) `Generic.f90`cube_root ! real*8 d_cube_root
> 1
cube_root(8) = 2.0
(dbx) stop in cube_root
More than one identifier 'cube_root.'
Select one of the following names:
1) `Generic.f90`cube_root ! real*4 s_cube_root
2) `Generic.f90`cube_root ! real*8 d_cube_root
> 1
(3) stop in cube_root
(dbx) cont
continuing
Enter a SP number:
8
stopped in cube_root at line 16 in file "Generic.f90"
16 s_cube_root = x ** (1.0/3.0)
(dbx) print x
x = 8.0