Numerics
Assumed-Shape Array
One Procedure, Any Size
An assumed-shape dummy argument arr(:) accepts an array of any size, and size(arr) queries its length at runtime.
Program
Play the program to compute the integer mean of two different arrays with one subroutine.
assumed_shape.f90
program assumed_shape_demo
implicit none
integer :: a(3) = [1, 2, 3]
integer :: b(5) = [10, 20, 30, 40, 50]
integer :: result_
call mean_int(a, result_)
print '(I0)', result_
call mean_int(b, result_)
print '(I0)', result_
contains
subroutine mean_int(arr, m)
integer, intent(in) :: arr(:)
integer, intent(out) :: m
m = sum(arr) / size(arr)
end subroutine mean_int
end program assumed_shape_demo
assumed-shape
`arr(:)` declares a dummy argument that takes its shape from the caller.
size
`size(arr)` returns the runtime length.
reuse
The same procedure works for arrays of any length.