SUBROUTINE GETCRS(CRSTIT) USE BLK1MOD ! INCLUDE 'BLK1.COM' CHARACTER*8 ID1 CHARACTER*72 DLIN1,CRSTIT !IPK JUN06 DATA VOIDCR/-1.E15/ MCRS=0 MPTS=00 DO call ginpt(icrin,id1,dlin1) IF(ID1(1:3) .EQ. 'ICS') THEN READ(DLIN1,'(I8)') MILCT MCRS=MAX(MILCT,MCRS) MPTCT=0 DO call ginpt(icrin,id1,dlin1) IF(ID1(1:3) .EQ. 'CRS') THEN MPTCT=MPTCT+1 ELSE MPTS=MAX(MPTCT,MPTS) EXIT ENDIF ENDDO ELSEIF(ID1(1:7) .EQ. 'ENDDATA') THEN REWIND (ICRIN) EXIT ENDIF ENDDO ALLOCATE (IVMIL(MCRS),NRIVL(MCRS),NOREACH(MCRS)& ,CRSDAT(MCRS,-4:MPTS,3),XCRS(MCRS),YCRS(MCRS)) XCRS=VOIDCR YCRS=VOIDCR NRIVCR1=0 NRIVCR2=0 !ipk jun11 NOREACH=0 NRIVL=0 IVMIL=0 WTRIVCR1=0. WTRIVCR2=0. call ginpt(icrin,id1,dlin1) IF(ID1(1:2) .EQ. 'TC') THEN CRSTIT=DLIN1 call ginpt(icrin,id1,dlin1) ELSE CALL WMessageBox(0,3,1,'Cross-section Title not found'//char(13)//& 'Cross-section file input terminated','ERROR') return ENDIF N=0 200 N=N+1 IF(N .GT. MCRS+1) THEN CALL WMessageBox(0,3,1,'Allowable number of sections (1000) exceeded'//char(13)//& 'Cross-section file input terminated','ERROR') return ENDIF IF(ID1(1:3) .EQ. 'RCH') THEN READ(DLIN1,'(I8)') NOREACHTMP write(90,'(a)') 'rch',id1,dlin1 Call ginpt(icrin,id1,dlin1) ENDIF IF(ID1(1:3) .EQ. 'ICS') THEN READ(DLIN1,'(2I8,8x,2f16.0)') IVMIL(N),NRIVL(IVMIL(N)),XCRS(IVMIL(N)),YCRS(IVMIL(N)) ! ! IVMIL = CROSS-SECTION NUMBER ! NRIVL = NUMBER OF POINTS IN SECTION ! NOREACH = REACH/TYPE NUMBER ! CRSDAT 1 = ELEVATION ! CRSDAT 2 = AREA ! CRSDAT 3 = WIDTH write(90,'(a)') 'ics',id1,dlin1 NOREACH(IVMIL(N))=NOREACHTMP IF(NRIVL(IVMIL(N)) .GT. MPTS) THEN CALL WMessageBox(0,3,1,'Allowable number of points in a cross-section (75) exceeded'//char(13)//& 'Cross-section file input terminated','ERROR') return ENDIF ! IF(NOREACH(N) .EQ. 0) THEN ! IF(N .GT. 1) THEN ! NOREACH(N)=NOREACH(N-1) ! ELSE ! NOREACH(N)=1 ! ENDIF ! ENDIF call ginpt(icrin,id1,dlin1) DO I=1,NRIVL(IVMIL(N)) write(90,'(a)') 'crs',id1,dlin1 READ(DLIN1,'(3F8.0)') (CRSDAT(IVMIL(N),I,J),J=1,3) !IPK JUN04 if(i .gt. 1) then CRSDAT(IVMIL(N),I,2)=CRSDAT(IVMIL(N),I-1,2)+& (CRSDAT(IVMIL(N),I,1)-CRSDAT(IVMIL(N),I-1,1))*& (CRSDAT(IVMIL(N),I,3)+CRSDAT(IVMIL(N),I-1,3))/2. endif call ginpt(icrin,id1,dlin1) ENDDO NCRSEC=N ! TEST NCRSEC=MAX(N,IVMIL(N)) GO TO 200 ENDIF !ipk jun06 DO N=1,NCRSEC DO N=1,MCRS IF(ID1(1:3) .EQ. 'XYL') THEN READ(DLIN1,'(I8,2F16.0)') NN,XCRS(NN),YCRS(NN) !IPK JUN06 IF(NN .GT. NCRSEC) NCRSEC=NN call ginpt(icrin,id1,dlin1) ELSE GO TO 400 ENDIF ENDDO 400 CONTINUE DO N=1,MAXP IF(ID1(1:3) .EQ. 'CRF') THEN READ(DLIN1,'(2I8,F8.0,I8,F8.0)') NODCRS& ,NRIVCR1(NODCRS),WTRIVCR1(NODCRS)& ,NRIVCR2(NODCRS),WTRIVCR2(NODCRS) call ginpt(icrin,id1,dlin1) ELSE GO TO 500 ENDIF ENDDO 500 CONTINUE CLOSE(ICRIN) ! CHECK THE DATA LOADED IERR=0 DO N=1,NE IF(IMAT(N) .LT. 900) THEN IF(NCORN(N) .EQ. 3 .OR. NCORN(N) .EQ. 5) THEN DO J=1,3,2 IF(NRIVCR1(NOP(N,J)) .NE. 0) THEN WD1(NOP(N,J))=& CRSDAT(NRIVCR1(NOP(N,J)),1,1)*WTRIVCR1(NOP(N,J))+& CRSDAT(NRIVCR2(NOP(N,J)),1,1)*WTRIVCR2(NOP(N,J)) ! ELSE ! WRITE(75,*) ' NO CROSS-SECTION FILE REFERENCE FOR',NOP(N,J) ! WRITE(75,*) ' EXECUTION TERMINATED' ! WRITE(*,*) ' NO CROSS-SECTION FILE REFERENCE FOR',NOP(N,J) ! WRITE(*,*) ' EXECUTION TERMINATED' ! IERR=IERR+1 ELSE WD1(NOP(N,J))=WD(NOP(N,J)) ENDIF ! ENDDO IF(NOP(N,2) .GT. 0) WD1(NOP(N,2))=(WD1(NOP(N,1))+WD1(NOP(N,3)))/2. ! ELSE DO J=1,NCORN(N) WD1(NOP(N,J))=WD(NOP(N,J)) ENDDO ENDIF ENDIF ENDDO RETURN END SUBROUTINE WRTCRS(ICROUT,CRSTIT) USE BLK1MOD ! INCLUDE 'BLK1.COM' ! COMMON/ICN1/ ICN(MAXP) CHARACTER*8 ID1,ENDDAT CHARACTER*72 CRSTIT !IPK JUN06 DATA VOIDCRP/-1.E14/ DO J=1,MAXP ICN(J)=0 END DO ! First sort out the potential midsides ! Note that transition elements caues a problem ! Find these first DO 200 N=1,NE if(NCORN(N) .GT. 5) GO TO 200 IF(NCORN(N) .EQ. 5 .AND. IMAT(N) .LT. 901) THEN ! ! We have a transition mark node number as if it were corner ! ICN(NOP(N,3))=1 ICN(NOP(N,1))=2 ICN(NOP(N,4))=2 ICN(NOP(N,5))=2 ELSE ! ! Store ICN = 2 for corner nodes ! NCN=NCORN(N) !IPKOCT93 IF(IMAT(N) .GT. 900) THEN IF(IMAT(N) .GT. 900 .AND. IMAT(N) .LT. 904) THEN MST=1 ELSE MST=2 ENDIF DO 180 M=1,NCN,MST ICN(NOP(N,M))=2 180 CONTINUE ENDIF 200 END DO ID1='TC ' WRITE(ICROUT,'(A8,A72)') ID1,CRSTIT DO N=1,NCRSEC !ipk jun06 !! IF(NRIVL(N) .GT. 0) THEN ID1='RCH ' WRITE(ICROUT,'(A8,I8)') ID1,NOREACH(IVMIL(N)) ID1='ICS ' !! write(icrout,'(A8,2I8,8x,2f16.4)') ID1,IVMIL(N),NRIVL(N),XCRS(N),YCRS(N) !!jul15 write(icrout,'(A8,2I8,8x,2f16.4)') ID1,N,NRIVL(N),XCRS(N),YCRS(N) write(icrout,'(A8,2I8,8x,2f16.4)') ID1,IVMIL(N),NRIVL(IVMIL(N)),XCRS(IVMIL(N)),YCRS(IVMIL(N)) ID1='CRS ' DO I=1,NRIVL(IVMIL(N)) if(crsdat(IVMIL(N),i,2) .gt. 999999.) then WRITE(ICROUT,'(A8,3F8.0)') ID1,(CRSDAT(IVMIL(N),I,J),J=1,3) elseif(crsdat(IVMIL(N),i,2) .gt. 99999.) then WRITE(ICROUT,'(A8,3F8.1)') ID1,(CRSDAT(IVMIL(N),I,J),J=1,3) else WRITE(ICROUT,'(A8,3F8.2)') ID1,(CRSDAT(IVMIL(N),I,J),J=1,3) endif ENDDO !ipk jun06 !! ENDIF ENDDO DO N=1,NCRSEC !ipk jun06 IF(XCRS(N) .GT. VOIDCRP) THEN ID1='XYL ' WRITE(ICROUT,'(A8,I8,2F16.4)') ID1,IVMIL(N),XCRS(IVMIL(N)),YCRS(IVMIL(N)) !ipk jun06 ENDIF ENDDO ID1='CRF ' DO N=1,NP IF(ICN(N) .EQ. 2) THEN IF(NRIVCR1(N) .GT. 0) THEN WRITE(ICROUT,'(A8,2I8,F8.4,I8,F8.4)') ID1,N& ,NRIVCR1(N),WTRIVCR1(N)& ,NRIVCR2(N),WTRIVCR2(N) ENDIF ENDIF ENDDO ENDDAT='ENDDATA ' WRITE(ICROUT,'(A8)') ENDDAT RETURN END