c c c
      program interface
c
c      Simple demonstration of the INTERFACE structure
c      to permit the creation of FUNCTIONS returning
c      arrays rather than single values.
c
c      John Mahaffy   4/3/96
c
      implicit none
      integer i
      real, dimension(10) :: z,y,x=(/(i,i=1,10)/)
      data y /5*1,5*2/
c
c   interface block to permit a vector valued
c   function named saxpy
c
      interface saxpy
         function saxpy (a,x,y)
            real x(:),y(:),a
            real saxpy (size(x))
c
c    Declare x,y,a as input only to saxpy
c
c
            intent (in) x,y,a
c
         end function saxpy
c
c
      end interface
c
c
c   Begin  Executable Statements
c
      z = saxpy(2.,x,y)
      write (*,2001)'a', 2.0
      write(*,2001) 'x', x
      write(*,2001) 'y', y
      write(*,*) ' For z = a x + y '
      write(*,2001) 'z',z
      stop
 2001 format (/, 1x,a1,' = ', 5f8.1,/, (5x,5f8.1))
      end
c
      function saxpy(a,x,y)
c
c   Multply all contents of an array "x" by the scalar "a"
c   then add the result to the array "y"
c
c   John Mahaffy    4/3/96
c
      implicit none
      real, dimension (:), intent(in):: x,y
      real saxpy (size(x))
      real a
      saxpy =  a*x + y
      return
      end
c
c c