C C $Id: rdgrid.F,v 1.6 1998/07/16 16:40:29 jjv5 Exp arjan $ C C------------------------------------------------------------------------ SUBROUTINE RDGRID(IERROR) C C READS IN PARAMETERS FOR GRID SUBSETTING: C C GRID C xcore=5.6 ycore=5.7 zcore=5.6 overlap=1.0 dbuff1=2.0 dbuff2=3.1 C END_GRID C C THE ERROR FLAG IS SET TO ONE IF ANY ERRORS ARE ENCOUNTERED WHILE C READING THIS INFORMATION. C IMPLICIT DOUBLE PRECISION (A-H,O-Z) #include "divcon.dim" #include "divcon.h" C C LOCAL: C CHARACTER LINE*80 LOGICAL READIT(6) C IERROR = 0 C C C RETURN WITH AN ERROR IF THE USER HAS NOT DEFINED RESIDUES. C IF(NRES.EQ.0)THEN IERROR = 1 C-RDC WRITE(iout, C-RDC . '(/" CANNOT DO GRID SUBSETTING UNLESS RESIDUES", C-RDC . " ARE DEFINED")') RETURN ENDIF C READIT(1) = .FALSE. READIT(2) = .FALSE. READIT(3) = .FALSE. READIT(4) = .FALSE. READIT(5) = .FALSE. READIT(6) = .FALSE. NREAD = 0 100 READ(INPT,FMT='(A80)',END=1000) LINE CALL UPCASE1(LINE,80) IF(INDEX(LINE,'END_GRID').NE.0)THEN IF(NREAD.LT.6)THEN IERROR = 1 C-RDC WRITE(iout, C-RDC . '(/" SPECIFICATION OF GRID SUBSETTING", C-RDC . " PARAMETERS IS INCOMPLETE")') ENDIF C . do some consistency checking if (overlap.lt.0.0) then overlap = 0.0 endif if (dgbuff2.lt.0.0) then dgbuff2 = 0.0 endif C . shift buffers if buff2 is specified but buff1 not if (dgbuff1.le.0.0) then dgbuff1 = dgbuff2 dgbuff2 = 0.0 endif if ((overlap.ge.core(1)) & .or.(overlap.ge.core(2)) & .or.(overlap.ge.core(3))) then C-RDC write(iout,'(/" OVERLAP MUST BE SMALLER THAN CORE")') ierror = 1 endif c . report subsetting data C-RDC write(iout,'( C-RDC & //" GRID SUBSETTING PARAMETERS:", C-RDC & /" --------------------------", C-RDC & //" CORE = ",F8.4," * ",F8.4," * ",F8.4," A", C-RDC & /" OVERLAP = ",F8.4," A",/" DBUFF1 = ",F8.4," A", C-RDC & /" DBUFF2 = ",F8.4," A")') C-RDC & core(1), core(2), core(3),overlap,dgbuff1,dgbuff2 RETURN ELSE C C LOOK FOR PARAMETERS. C CALL WDJOIN(LINE,80,'=',IERROR) IF(IERROR.NE.0)THEN C-RDC WRITE(iout, C-RDC . '(/" IMPROPER USE OF EQUALS SIGN IN GRID", C-RDC . " SUBSETTING PARAMETERS")') RETURN ENDIF C ISTART = 1 200 CALL RDWORD(LINE,ISTART,ISTOP) C C IF THERE ARE NO MORE WORDS LEFT ON THIS LINE, GO BACK AND C READ ANOTHER LINE. C IF(ISTART.EQ.0) GO TO 100 C IF(INDEX(LINE(ISTART:ISTOP),'XCORE=').NE.0)THEN IF(READIT(1)) GO TO 200 CALL RDNUM(LINE,ISTART,core(1),IERROR) IF(IERROR.NE.0) GO TO 2000 NREAD = NREAD + 1 READIT(1) = .TRUE. ELSEIF(INDEX(LINE(ISTART:ISTOP),'YCORE=').NE.0)THEN IF(READIT(2)) GO TO 200 CALL RDNUM(LINE,ISTART,core(2),IERROR) IF(IERROR.NE.0) GO TO 2000 NREAD = NREAD + 1 READIT(2) = .TRUE. ELSEIF(INDEX(LINE(ISTART:ISTOP),'ZCORE=').NE.0)THEN IF(READIT(3)) GO TO 200 CALL RDNUM(LINE,ISTART,core(3),IERROR) IF(IERROR.NE.0) GO TO 2000 NREAD = NREAD + 1 READIT(3) = .TRUE. elseif (index(line(istart:istop),'OVERLAP=').ne.0) then if(readit(4)) goto 200 call rdnum(line,istart,overlap,ierror) if (ierror.ne.0) goto 2000 nread = nread + 1 readit(4) = .true. ELSEIF(INDEX(LINE(ISTART:ISTOP),'DBUFF1=').NE.0)THEN IF(READIT(5)) GO TO 200 CALL RDNUM(LINE,ISTART,DGBUFF1,IERROR) IF(IERROR.NE.0) GO TO 2000 NREAD = NREAD + 1 READIT(5) = .TRUE. ELSEIF(INDEX(LINE(ISTART:ISTOP),'DBUFF2=').NE.0)THEN IF(READIT(6)) GO TO 200 CALL RDNUM(LINE,ISTART,DGBUFF2,IERROR) IF(IERROR.NE.0) GO TO 2000 NREAD = NREAD + 1 READIT(6) = .TRUE. ELSE IERROR = 1 C-RDC WRITE(iout, C-RDC . '(/" UNRECOGNIZED PARAMETER SPECIFICATION: ", C-RDC . 80A1)') (LINE(I:I),I=ISTART,ISTOP) RETURN ENDIF C C GO BACK AND TRY TO READ ANOTHER WORD IN THIS LINE, UNLESS ALL C WORDS HAVE BEEN READ. C IF(NREAD.LT.6)THEN ISTART = ISTOP + 1 GO TO 200 ELSE GO TO 100 ENDIF C ENDIF 1000 IERROR = 1 C-RDC WRITE(iout, C-RDC . '(/" END-OF-FILE ENCOUNTERED WHILE READING GRID", C-RDC . " SUBSETTING PARAMETERS")') RETURN 2000 IERROR = 1 C-RDC WRITE(iout, C-RDC . '(/" ERROR READING GRID SUBSETTING PARAMETERS")') RETURN END