SUBROUTINE LISTR(NFILE,N,MAX,LDUPCK,LIST) C This routine reads a list of integer variables from a file. C It checks for variables being in range, and optionally for repetitions. C Inputs: C NFILE Input file number C N Length of list C MAX Largest integer permitted C LDUPCK If .TRUE., check for duplication of entries. C Outputs: C LIST List of integers read LOGICAL LDUPCK DIMENSION LIST(N) READ(NFILE,*,END=110,ERR=120)(LIST(I),I=1,N) DO 10 I=1,N 10 IF((LIST(I).LE.0).OR.(LIST(I).GT.MAX))GO TO 130 IF(.NOT.LDUPCK)RETURN DO 20 I=2,N DO 20 J=1,I-1 20 IF(LIST(I).EQ.LIST(J))GO TO 140 RETURN 110 WRITE(6,115) 115 FORMAT(/,' *** UNANTICIPATED END-OF-FILE IN READING LIST') CALL TERM 120 WRITE(6,125) 125 FORMAT(/,' *** ERROR IN READING LIST') CALL TERM 130 WRITE(6,135)I,(LIST(L),L=1,N) 135 FORMAT(/,' *** ELEMENT',I3,' OF LIST OUT OF RANGE',/,(1X,26I3)) CALL TERM 140 WRITE(6,145)J,I,(LIST(L),L=1,N) 145 FORMAT(/,' *** DUPLICATE ENTRIES',I3,' AND',I3,/,(1X,26I3)) CALL TERM END C SUBROUTINE PLISTR(NFILE,N,A) C This routine reads a list of positive real variables from a file. C It checks that they are actually positive. C Inputs: C NFILE Input file number C N Length of list C Outputs: C A List of real constants read IMPLICIT REAL*8 (A-H,O-Z) DIMENSION A(N) READ(NFILE,*,END=110,ERR=120)(A(I),I=1,N) DO 10 I=1,N 10 IF(A(I).LE.0.0D0)GOTO 20 RETURN 20 WRITE(6,30)I,A(I) 30 FORMAT(/,' *** ELEMENT',I3,' OF LIST =',1PE15.7, 1 ' IS NOT POSITIVE.') CALL TERM 110 CALL PEND('UNANTICIPATED END OF FILE READING POSITIVE CONSTANTS.') 120 CALL PEND('ERROR IN READING LIST OF POSITIVE CONSTANTS.') END