Procedure arguments may be specified with a keyword and may also be optional:
CALL set_corners(a)
CALL set_corners(a,VALUE=2)
...
SUBROUTINE set_corners(a,value)
INTEGER, INTENT(IN), OPTIONAL :: value
INTEGER, DIMENSION(:,:) :: a
IF (PRESENT(value)) THEN
a(::SIZE(a,DIM=1)-1,::SIZE(a,DIM=2)-1) = value
ELSE
a(::SIZE(a,DIM=1)-1,::SIZE(a,DIM=2)-1) = 0
END IF
END
The purpose of keywords and the OPTIONAL attribute is to break FORTRAN 77's rigid dependence on variable position within the calling list to identify the argument to which it corresponds.