array3e.f
PROGRAM ARRAY3
c
c This Program contains a misuse of the ALLOCATE statement
c Once you have set space for an array, you can't use ALLOCATE to
c stretch the size as more space is needed.
c
c John Mahaffy 2/2/95
c
IMPLICIT NONE
INTEGER I,J,IERR,N,NDAT
c
c Declare A, B, and C to be arrays to be ALLOCATABLE
c
REAL, ALLOCATABLE :: A(:),B(:),C(:)
REAL CSUM,CMAX,CMIN,AVERAGE
c
c
NDAT=10
ALLOCATE (A(1:NDAT),B(NDAT),C(NDAT))
A(1:NDAT) = (/( I, I=1,NDAT)/)
B(1:NDAT) = (/(I/3, I=1,NDAT)/)
PRINT *, 'ERROR FLAG =', IERR
C(1:NDAT)=A(1:NDAT)+B(1:NDAT)
CSUM=SUM(C(1:NDAT))
CMIN=MINVAL(C(1:NDAT))
CMAX=MAXVAL(C(1:NDAT))
C
AVERAGE=CSUM/NDAT
WRITE(*,'(//,'' RESULTS FOR ELEMENTS 1 THROUGH '',I3,'' OF C'')')
& NDAT
WRITE(6,2002)AVERAGE,CMIN,CMAX
2002 FORMAT(' AVERAGE OF SELECTED ELEMENTS IN C = ', F8.3,/,
& ' MINIMUM OF SELECTED ELEMENTS IN C = ', F8.3,/,
& ' MAXIMUM OF SELECTED ELEMENTS IN C = ', F8.3)
WRITE(6,2003) C(1:NDAT)
2003 FORMAT(' C = ',/,(1P,8E10.2))
c
N=NDAT
NDAT=NDAT+5
ALLOCATE (A(1:NDAT),B(NDAT),C(NDAT),STAT=IERR)
PRINT *, 'ERROR FLAG =', IERR
C(N+1:NDAT)=5.0
WRITE(6,2003) C(1:NDAT)
STOP
END