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.