You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2832 lines
91 KiB
Fortran
2832 lines
91 KiB
Fortran
!IPK LAST UPDATE SEP 23 2015 ADD OPTION FOR SURFER FORMAT MAPS
|
|
!IPK LAST UPDATE FEB 11 2002 ADD LOCK AS VARIABLE AND READ NEW MAP FILE
|
|
!ipk jan99 fix restart file
|
|
!
|
|
!
|
|
!****************************************************************
|
|
!
|
|
SUBROUTINE WRTOUT(IFOM)
|
|
!ipk oct95 IFO replaced by IFOM because the value changes
|
|
!
|
|
! Write out updated data
|
|
!
|
|
! IFO = 0 write to backup
|
|
! IFO = 1 write to output in ASCII
|
|
!IPK MAR94 add a line
|
|
! IFO = -1 write to ASCII in emergency
|
|
! IFO = 2 write to output as binary
|
|
!
|
|
USE BLK1MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
CHARACTER*55 FMTT
|
|
CHARACTER*39 FMTU
|
|
!IPK JUL98
|
|
CHARACTER*8 ID8
|
|
CHARACTER*60 LIND
|
|
CHARACTER*32 IJNK
|
|
!
|
|
DATA ISET /2/,ZERO/0.0/,VDXX/-1.E19/
|
|
!ipk oct95 copy IFO from IFOM
|
|
!ipk feb99 IOT=20
|
|
!ipk feb99 IOT1=22
|
|
if(ifom .eq. 3) then
|
|
write(iot,'(''MESH2D'')')
|
|
WRITE(IOT,'(''MESHNAME'')')
|
|
do n=1,ne
|
|
if(imat(n) .lt. 1) cycle
|
|
if(ncorn(n) .lt. 6) then
|
|
|
|
return
|
|
endif
|
|
if(ncorn(n) .eq. 8) then
|
|
if(nop(n,2) .eq. 0) then
|
|
write(iot,'(''E4Q'',6i10)') N,(NOP(N,K),K=1,7,2),IMAT(N)
|
|
else
|
|
write(iot,'(''E8Q'',10i10)') N,(NOP(N,K),K=1,8),IMAT(N)
|
|
endif
|
|
elseif(ncorn(n) .eq. 6) then
|
|
if(nop(n,2) .eq. 0) then
|
|
write(iot,'(''E3T'',5i10)') N,(NOP(N,K),K=1,5,2),IMAT(N)
|
|
else
|
|
write(iot,'(''E6T'',8i10)') N,(NOP(N,K),K=1,6),IMAT(N)
|
|
endif
|
|
elseif(ncorn(n) .eq. 3) then
|
|
if(nop(n,2) .eq. 0) then
|
|
write(iot,'(''E2L'',4i10)') N,(NOP(N,K),K=1,3,2),IMAT(N)
|
|
else
|
|
write(iot,'(''E3L'',5i10)') N,(NOP(N,K),K=1,3),IMAT(N)
|
|
endif
|
|
endif
|
|
enddo
|
|
DO N=1,NP
|
|
IF(XUSR(N) .LT. VDXX) CYCLE
|
|
WRITE(IOT,'(''ND'',I8,1P3E16.8)') N,XUSR(N),YUSR(N),WD(N)
|
|
ENDDO
|
|
IF(NCLM .EQ. 0) RETURN
|
|
DO K=1,NCLM
|
|
IF(ICCLN(K,1) .EQ. 0) CYCLE
|
|
DO J=1,LLIST(K)
|
|
ILIST(K,J)=ICCLN(K,J)
|
|
ENDDO
|
|
ILIST(K,LLIST(K))=-ILIST(K,LLIST(K))
|
|
ILIST(K,LLIST(K)+1)=K
|
|
DO JJ=1,LLIST(K)+1,10
|
|
IF(JJ+9 .GT. LLIST(K)+1) THEN
|
|
WRITE(IOT,'(''NS'',10I8)') (ILIST(K,J),J=JJ,LLIST(K)+1)
|
|
ELSE
|
|
WRITE(IOT,'(''NS'',10I8)') (ILIST(K,J),J=JJ,JJ+9)
|
|
ENDIF
|
|
ENDDO
|
|
ENDDO
|
|
return
|
|
endif
|
|
|
|
IF((IFOM .EQ. 2 .AND. IOT1 .EQ. 0) .OR. &
|
|
& (IFOM .EQ. 1 .AND. IOT .EQ. 0)) THEN
|
|
CALL CLRBOX
|
|
WRITE(LIND,*) 'You have attempted to save without opening save f&
|
|
&ile'
|
|
CALL SYMBL(0.2,7.80,0.20,LIND,0.0,60)
|
|
WRITE(LIND,*) 'Press return to continue'
|
|
CALL SYMBL(0.2,7.55,0.20,LIND,0.0,60)
|
|
CALL GTCHARX(IJNK,NDIG,5.0,7.6)
|
|
CALL CLRBOX
|
|
RETURN
|
|
ENDIF
|
|
IFO=IFOM
|
|
|
|
IF(IFO .GT. 0) THEN
|
|
!
|
|
! Check connectivity before saving
|
|
!
|
|
CALL CHKCON(IREP)
|
|
IF(IREP .EQ. 0) RETURN
|
|
ENDIF
|
|
!
|
|
! Setup 1-D
|
|
IOD=2
|
|
DO N=1,NE
|
|
IF(NCORN(N) .LT. 6) THEN
|
|
IF(NCORN(N) .EQ. 5) THEN
|
|
NCN=3
|
|
ELSE
|
|
NCN=NCORN(N)
|
|
ENDIF
|
|
DO K=1,NCN
|
|
INODE=NOP(N,K)
|
|
IF(INODE .GT. 0) IOD(INODE)=1
|
|
ENDDO
|
|
ELSE
|
|
DO K=1,8
|
|
INODE=NOP(N,K)
|
|
IF(INODE .GT. 0) then
|
|
IF(IOD(INODE) .EQ. 2) IOD(INODE)=0
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
ENDDO
|
|
DO J=1,NP
|
|
IF(IOD(J) .EQ. 0) THEN
|
|
WIDTH(J)=0.
|
|
SS1(J)=0.
|
|
SS2(J)=0.
|
|
WIDS(J)=0.
|
|
WIDBS(J)=0.
|
|
SSO(J)=0.
|
|
BS1(J)=0.
|
|
ENDIF
|
|
ENDDO
|
|
!IPK MAR94 add a line
|
|
IFO = ABS(IFO)
|
|
if((ifo .eq. 1 .and. igfgsw .eq. 0) .or. ifo .ne. 1) then
|
|
if(itrianout .eq. 0) CALL HEADIN(IFO,ISET)
|
|
endif
|
|
IF(IFO .EQ. 0 ) THEN
|
|
WRITE(IBAK) ((NOP(J,K),K=1,8),IMAT(J),THTA(J),J=1,NE)
|
|
WRITE(IBAK) &
|
|
& (XUSR(J),YUSR(J),WD(J),WIDTH(J),SS1(J),SS2(J),WIDS(J), &
|
|
& WIDBS(J),SSO(J),BS1(J),J=1,NP)
|
|
!IPK MAR02 add BS1
|
|
!IPK JUL98 + (XUSR(J),YUSR(J),WD(J),WIDTH(J),SS1(J),SS2(J),WIDS(J)
|
|
WRITE(IBAK) NLST
|
|
IF(NLST .GT. 0) THEN
|
|
WRITE(IBAK) (LLIST(J),J=1,NLST), &
|
|
& ((ILIST(J,I),I=1,LLIST(J)),J=1,NLST)
|
|
ENDIF
|
|
!IPK JAN01
|
|
WRITE(IBAK) NENTRY,NLAYD,NCLM
|
|
IF(NENTRY .GT. 0) THEN
|
|
WRITE(IBAK) ((NEF(I,J),J=1,3),I=1,NENTRY)
|
|
ENDIF
|
|
IF(NLAYD .GT. 0) THEN
|
|
WRITE(IBAK) (LAY(I),I=0,NP),((WTLAY(I,J),J=1,9),I=0,NP)
|
|
ENDIF
|
|
!IPK JAN01
|
|
IF(NCLM .GT. 0) THEN
|
|
WRITE(IBAK) ((ICCLN(I,J),J=1,350),I=1,NCLM)
|
|
ENDIF
|
|
IF(IBAK .EQ. 21) THEN
|
|
CLOSE (IBAK)
|
|
OPEN(IBAK,FILE='ELT.BAK',STATUS='UNKNOWN',FORM='UNFORMATTED',IOSTAT=iost)
|
|
if(iost .gt. 0) then
|
|
OPEN(IBAK,FILE='ELT1.BAK',STATUS='UNKNOWN',FORM='UNFORMATTED',IOSTAT=iost)
|
|
if(iost .gt. 0) then
|
|
OPEN(IBAK,FILE='ELT2.BAK',STATUS='UNKNOWN',FORM='UNFORMATTED',IOSTAT=iost)
|
|
if(iost .gt. 0) then
|
|
write(*,*) 'ERROR UNABLE TO OPEN ELT.BAK FILE'
|
|
write(*,*) 'PRESS RETURN TO END'
|
|
read(*,'(I5)') junk
|
|
STOP
|
|
endif
|
|
ENDIF
|
|
ENDIF
|
|
! OPEN(IBAK,FILE='ELT.BAK',STATUS='UNKNOWN',FORM='BINARY')
|
|
ENDIF
|
|
|
|
ELSEIF(IFO .EQ. 2) THEN
|
|
if(igfgswb .eq. 0) then
|
|
!ipk may02 REWIND IOT1
|
|
WRITE(IOT1) &
|
|
& NP,NE,(XUSR(J),YUSR(J),ZERO,WD(J),J=1,NP), &
|
|
& ((NOP(J,K),K=1,8),IMAT(J),THTA(J),IEM(J),J=1,NE), &
|
|
& (WIDTH(J),SS1(J),SS2(J),WIDS(J),J=1,NP)
|
|
!IPK JUL98
|
|
ID8='part-2 '
|
|
WRITE(IOT1) ID8
|
|
WRITE(IOT1) (WIDBS(J),SSO(J),J=1,NP)
|
|
|
|
!IPK JAN01 Add part 3 write for continuity lines
|
|
IF(NCLM .GT. 0) THEN
|
|
ID8='part-3 '
|
|
WRITE(IOT1) ID8
|
|
WRITE(IOT1) NCLM,((ICCLN(I,J),J=1,350),I=1,NCLM)
|
|
ENDIF
|
|
!IPK JAN01 Add part 4 write for continuity lines
|
|
ID8='part-4 '
|
|
WRITE(IOT1) ID8
|
|
!ipk mar02 add BS1
|
|
write(iot1) (lock(j),bs1(j),j=1,np),&
|
|
nlst,((ilist(j,k),k=1,maeln),llist(j),j=1,maxln)
|
|
else
|
|
call wrtbin
|
|
endif
|
|
ELSE
|
|
if(igfgsw .eq. 0 .and. itrianout .eq. 0) then
|
|
IOF=IOT
|
|
|
|
JJ=0
|
|
DO 10 J=1,NE
|
|
IF (IMAT(J) .NE. 0) THEN
|
|
JJ=JJ+1
|
|
IF(IECHG .EQ. 0) IEM(JJ)=JJ
|
|
|
|
if(np .lt. 100000) then
|
|
WRITE(IOF,'(10I5,F10.3,I5)') &
|
|
& J, (NOP(J,K),K=1,8), IMAT(J),THTA(J),IEM(JJ)
|
|
else
|
|
WRITE(IOF,'(10I6,F10.3,I6)') &
|
|
& J, (NOP(J,K),K=1,8), IMAT(J),THTA(J),IEM(JJ)
|
|
endif
|
|
ENDIF
|
|
10 CONTINUE
|
|
!
|
|
!ipk jan98 restore 9999
|
|
if(np .lt. 100000) then
|
|
WRITE(IOF,'(I5)') 9999
|
|
else
|
|
WRITE(IOF,'(I6)') 9999
|
|
endif
|
|
!
|
|
! Write out nodal data
|
|
!
|
|
!ipk jun97 find max or min number in x or y
|
|
cminx=0.
|
|
cmaxx=0.
|
|
wdmin=1.e10
|
|
wdmax=-1.e10
|
|
do j=1,np
|
|
if(inew(j) .eq. 1) then
|
|
! write(90,*) j,xusr(j),yusr(j)
|
|
if(xusr(j) .gt. cmaxx) cmaxx=xusr(j)
|
|
if(yusr(j) .gt. cmaxx) cmaxx=yusr(j)
|
|
if(xusr(j) .lt. cminx) cminx=xusr(j)
|
|
if(yusr(j) .lt. cminx) cminx=yusr(j)
|
|
wdmin=min(wdmin,wd(j))
|
|
wdmax=max(wdmax,wd(j))
|
|
endif
|
|
enddo
|
|
if(abs(wdmin) .gt. abs(wdmax)) then
|
|
temp=log10(abs(wdmin))
|
|
elseif(wdmax .eq. 0.) then
|
|
temp=2.5
|
|
else
|
|
temp=log10(abs(wdmax))
|
|
endif
|
|
if(temp .gt. 2.) then
|
|
itp=3
|
|
elseif(temp .gt. 1.) then
|
|
itp=4
|
|
else
|
|
itp=5
|
|
endif
|
|
ndigp=1
|
|
if(cmaxx .gt. 1.) then
|
|
ndigp=int(log10(cmaxx))+1
|
|
endif
|
|
ndigm=2
|
|
if(abs(cminx) .gt. 1.) then
|
|
ndigm=int(log10(abs(cminx)))+2
|
|
endif
|
|
ndigo=max(ndigp,ndigm)
|
|
ndec=min(8-ndigo,4)
|
|
! write(90,*) 'ndigp',ndigp,ndigm,cmaxx,cminx,ndigo,ndec
|
|
if(ntempin .lt. 2) then
|
|
write(fmtt,6200) NDEC,NDEC,itp
|
|
!IPK JUL98 6200 format('(I10,F10.',i1,',F10.'I1,',F10.3,F10.1,2F10.3,F
|
|
!IPK FEB02 ALLOW FOR LOCK AND BS1
|
|
6200 format('(I10,F10.',i1,',F10.'I1,',F10.',I1,',F10.1,2F10.3,3F10.2,I10,F10.4)')
|
|
WRITE(FMTU,6201) NDEC,NDEC,ITP
|
|
!IPK FEB02 ALLOW FOR LOCK AND BS1
|
|
6201 format('(I10,F10.',i1,',F10.'I1,',F10.',I1,',60X,I10,F10.4)')
|
|
else
|
|
ndec=min(14-ndigo,4)
|
|
! write(fmtt,6202) NDEC+10,NDEC+10,ITP
|
|
write(fmtt,6202) NDEC+9,NDEC+9,ITP
|
|
6202 format('(I10,g20.',i2,',g20.'I2,',F10.',I1,',F10.1,2F10.3,3F10.2,I10,F10.4)')
|
|
! WRITE(FMTU,6203) NDEC+10,NDEC+10,ITP
|
|
WRITE(FMTU,6203) NDEC+9,NDEC+9,ITP
|
|
6203 format('(I10,g20.',i2,',g20.'I2,',F10.',I1,',60X,I10,F10.4)')
|
|
endif
|
|
DO 20 J=1,NP
|
|
IF (INEW(J) .EQ. 1) THEN
|
|
!ipk oct94 IF(WIDTH(J) .GT. 0.01) THEN
|
|
IF(WIDTH(J) .GT. 0.001 .or. bs1(j) .gt. 0.) THEN
|
|
!ipk feb97 WRITE(IOF, '(I10,2F10.3,F10.2,F10.1,2F10.3,F10.1
|
|
!IPK JUL97 WRITE(IOF, '(I10,3F10.3,F10.1,2F10.3,F10.1)')
|
|
!IPK FEB02 ADD LOCK AND BS1
|
|
|
|
WRITE(IOF, FMTT) &
|
|
& J,XUSR(J),YUSR(J),WD(J), &
|
|
& WIDTH(J),SS1(J),SS2(J),WIDS(J) &
|
|
& ,WIDBS(J),SSO(J),LOCK(J),BS1(J)
|
|
|
|
ELSE
|
|
! write(90,7777) fmtu,j,xusr(j),yusr(j),ndec,ndigo
|
|
7777 format(3x,a23,i5,2e15.6,2i8)
|
|
|
|
!ipk feb97 WRITE(IOF, '(I10,2F10.3,F10.2)')
|
|
!IPK JUL97 WRITE(IOF, '(I10,3F10.3)')
|
|
!ipk feb02 add lock AND BS1
|
|
WRITE(IOF, FMTU) &
|
|
& J,XUSR(J),YUSR(J),WD(J),lock(j),BS1(J)
|
|
ENDIF
|
|
ENDIF
|
|
20 CONTINUE
|
|
!ipk jan98 restore 9999
|
|
WRITE(IOF,'(I10)') 9999
|
|
IF(NLST .GT. 0) THEN
|
|
DO 30 J=1,NLST
|
|
IF(LLIST(J) .GT. 0) THEN
|
|
if(np .lt. 100000) then
|
|
WRITE(IOF,'(16I5)') (ILIST(J,I),I=1,LLIST(J))
|
|
else
|
|
WRITE(IOF,'(16I6)') (ILIST(J,I),I=1,LLIST(J))
|
|
endif
|
|
ENDIF
|
|
30 CONTINUE
|
|
ENDIF
|
|
!ipk jan98 restore 9999
|
|
WRITE(IOF,'(I5)') 9999
|
|
! IF(NLAYD .GT. 0) THEN
|
|
! WRITE(IOF,'(2I5)') (I,LAY(I),I=1,NP)
|
|
! ENDIF
|
|
WRITE(IOF,6000) NENTRY
|
|
6000 FORMAT(I5,20X,'NENTRY')
|
|
IF(NENTRY .GT. 0) THEN
|
|
WRITE(IOF,'(15I5)') (NEF(I,1),NEF(I,2),NEF(I,3),I=1,NENTRY)
|
|
ENDIF
|
|
WRITE(IOF,6001) NCLM
|
|
6001 FORMAT(I5,20X,'NCLM')
|
|
IF(NCLM .GT. 0) THEN
|
|
DO I=1,NCLM
|
|
DO J=1,350
|
|
IF(ICCLN(I,J) .EQ. 0) THEN
|
|
NTRAC=J-1
|
|
IF(NTRAC .GT. 0) THEN
|
|
WRITE(IOF,6002) I,(ICCLN(I,KK),KK=1,NTRAC)
|
|
6002 FORMAT('CC1',I5,9I8/('CC2',5X,9I8))
|
|
ELSE
|
|
WRITE(IOF,6002) I
|
|
ENDIF
|
|
GO TO 40
|
|
ENDIF
|
|
ENDDO
|
|
40 CONTINUE
|
|
ENDDO
|
|
ENDIF
|
|
WRITE(IOF,6003)
|
|
6003 FORMAT('ENDDATA')
|
|
elseif(itrianout .gt. 0) then
|
|
call wrtele(IOT,itrianout)
|
|
else
|
|
call wrtgfg(IOT)
|
|
endif
|
|
ENDIF
|
|
RETURN
|
|
END
|
|
!****************************************************************
|
|
SUBROUTINE HEADIN(IUNIT,ISET)
|
|
!
|
|
! Read and write header data
|
|
!
|
|
!****************************************************************
|
|
!
|
|
USE BLK1MOD
|
|
INTEGER*2 I32
|
|
CHARACTER*80 ALINE
|
|
!ipk dec97
|
|
character*40 dlin
|
|
CHARACTER*32 IJNK
|
|
!IPK JUL98
|
|
!ipk may02
|
|
CHARACTER*8 ID8
|
|
CHARACTER*3 ID
|
|
CHARACTER*1000 HEADER
|
|
|
|
COMMON /RECOD/ IRECD,TSPC
|
|
! INCLUDE 'BLK1.COM'
|
|
INCLUDE 'BFILES.I90'
|
|
INTEGER*2 NOP2(MAXE,8)
|
|
integer iunit,iset
|
|
DATA ISLP/0/,IPRT/1/,IPO/1/,IRO/1/,IRFN/0/,IGEN/0/,NXZL/0/,NITST/1/,ISCTXT/0/,IFILL/0/,IALTGM/1/
|
|
DATA HORIZ/10./,VERT/8./,XSALE/1./,YSALE/1./,XFACT/1./,YFACT/1./,AR/0./,ANG/0./
|
|
! ELSE
|
|
!ISLP=0
|
|
!IPRT=1
|
|
!IPO=1
|
|
!IRO=1
|
|
!IRFN=0
|
|
!IGEN=0
|
|
!NXZL=0
|
|
!NITST=1
|
|
!ISCTXT=0
|
|
!IFILL=0
|
|
!IALTGM=1
|
|
|
|
|
|
|
|
! IF ISET = 1 read file
|
|
! IUNIT = 0 get a title
|
|
! IUNIT ne 0 and IIN = 11 read RST header
|
|
! IUNIT ne 0 and IIN = 12 read GEO data
|
|
! IUNIT ne 0 and IIN = 10 read RM1 header
|
|
! IUNIT ne 0 and IIN = 10 ITRIAN .NE. 0 read ELE header
|
|
! IF ISET = 2 write file
|
|
! IUNIT = 0 write a backup header
|
|
! IUNIT = 0 write RM1 header
|
|
|
|
!
|
|
IF(ISET .EQ. 1) THEN
|
|
IF(IUNIT .EQ. 0) THEN
|
|
!
|
|
! Generate values
|
|
!
|
|
CALL SETD(23)
|
|
!ipk oct96 WRITE(*,*) 'Enter a title for output file'
|
|
WRITE(DLIN,'(a29)') 'Enter a title for output file'
|
|
!ipk oct96 change to dlin
|
|
! call symbl(0.5,5.0,0.25,dlin,0.0,29)
|
|
! ndig=29
|
|
! call gtcharx(title,ndig,0.,4.5)
|
|
|
|
IF(IRECD .NE. 2) call get_label(dlin,title)
|
|
|
|
!
|
|
|
|
!ipk oct96 end changes
|
|
!ipk oct96 READ(*,5000) TITLE
|
|
CALL SETD(2)
|
|
! ISPL=0
|
|
IPRT=1
|
|
IPNN=1
|
|
IPEN=1
|
|
IPO=1
|
|
IRO=1
|
|
IPP=0
|
|
IRFN=0
|
|
IGEN=0
|
|
NXZL=0
|
|
NITST=1
|
|
ISCTXT=0
|
|
IFILL=0
|
|
IALTGM=1
|
|
NLAYD=0
|
|
HORIZ=10.
|
|
VERT=8.
|
|
XSALE=0.
|
|
YSALE=0.
|
|
XFACT=0.
|
|
YFACT=0.
|
|
AR=0.
|
|
ANG=0.
|
|
xadded=0.
|
|
yadded=0.
|
|
ntempin=0.
|
|
ELSE
|
|
IF(IIN .EQ. 11) THEN
|
|
!IPK FEB03 READ(IIN) TITLE,NP,NE
|
|
!IPK FEB03 READ(IIN) ISLP,IPRT,IPNN,IPEN,IPO,IRO,IPP,IRFN &
|
|
!IPK FEB03 & ,IGEN,NXZL,NITST,ISCTXT,IFILL,IALTGM,NLAYD,xadded,yadded,ntempin
|
|
!IPK FEB03 READ(IIN) HORIZ,VERT,XSALE,YSALE,XFACT,YFACT,AR,ANG
|
|
!IPK FEB03 IF(IPP .GT. 0) READ(IIN) ALINE
|
|
CALL RDRST(1,IIN)
|
|
|
|
ELSEIF(IIN .EQ. 12) THEN
|
|
CALL SETD(23)
|
|
IPRT=1
|
|
IPNN=1
|
|
IPEN=1
|
|
IPO=1
|
|
IRO=1
|
|
IPP=0
|
|
IRFN=0
|
|
IGEN=0
|
|
NXZL=0
|
|
NITST=1
|
|
ISCTXT=0
|
|
IFILL=0
|
|
IALTGM=1
|
|
NLAYD=0
|
|
HORIZ=10.
|
|
VERT=8.
|
|
XSALE=0.
|
|
YSALE=0.
|
|
XFACT=0.
|
|
YFACT=0.
|
|
AR=0.
|
|
ANG=0.
|
|
xadded=0.
|
|
yadded=0.
|
|
ntempin=0.
|
|
!ipk oct96 WRITE(*,*) 'Enter a title for output file'
|
|
WRITE(dLIN,'(a29)') 'Enter a title for output file'
|
|
|
|
call get_label(dlin,title)
|
|
|
|
! call symbl(0.5,5.0,0.25,dlin,0.0,29)
|
|
! ndig=29
|
|
! call gtcharx(title,ndig,0.,4.5)
|
|
|
|
!ipk oct96 end changes
|
|
!ipk oct96 READ(*,5000) TITLE
|
|
CALL SETD(2)
|
|
IF(IGFG .EQ. 2) THEN
|
|
CALL RDBIN(IIN)
|
|
RETURN
|
|
ENDIF
|
|
!ipk dec97
|
|
read(iin,err=100) header
|
|
if(header(1:6) .eq. 'RMAGEN' .or. header(1:6) .eq. 'RMASIM') then
|
|
inopt=2
|
|
else
|
|
inopt=1
|
|
rewind iin
|
|
endif
|
|
read(iin) n1,m1
|
|
rewind iin
|
|
write(90,*) 'Apparent nodes and elements from file are'
|
|
write(90,'(i15,i10)') n1,m1
|
|
if(n1 .gt. maxp .or. m1 .gt. maxe) then
|
|
!
|
|
!...... Perhaps the file format is wrong, close and reopen
|
|
!
|
|
WRITE(DLIN,'(A32)') 'Parameter limits may be violated'
|
|
call symbl(0.5,4.5,0.20,dlin,0.0,32)
|
|
WRITE(DLIN,'(A35)') 'Retrying with alternate file format'
|
|
call symbl(0.5,4.2,0.20,dlin,0.0,35)
|
|
close (iin)
|
|
open(iin ,file=fnamkep,status='old',form='unformatted')
|
|
read(iin) n1,m1
|
|
write(90,*) 'Revised nodes and elements from file are'
|
|
write(90,'(i15,i10)') n1,m1
|
|
if(n1 .gt. maxp .or. m1 .gt. maxe) then
|
|
WRITE(DLIN,'(A31)') 'Parameter limits still violated'
|
|
call symbl(0.5,3.9,0.20,dlin,0.0,31)
|
|
WRITE(DLIN,'(A27)') 'Apparent nodes and elts are'
|
|
call symbl(0.5,3.6,0.20,dlin,0.0,27)
|
|
WRITE(DLIN,'(2i10)') n1,m1
|
|
call symbl(0.5,3.3,0.20,dlin,0.0,20)
|
|
WRITE(DLIN,'(A24)') 'Press enter to terminate'
|
|
call symbl(0.5,4.5,0.20,dlin,0.0,24)
|
|
CALL GTCHARX(ijnk,ndig,5.0,4.0)
|
|
!cipk aug00 read(*,'(i1)') junk
|
|
call quit_pgm
|
|
endif
|
|
endif
|
|
rewind iin
|
|
!ipk dec97 end changes
|
|
!ipk may02
|
|
if(inopt .eq. 2) then
|
|
read(iin,err=100) header
|
|
READ(IIN,ERR=100) &
|
|
& N1,M1,((CORD(J,K),K=1,2),ALPHA,WD(J),J=1,N1), &
|
|
& ((NOP(J,K),K=1,8),IMAT(J),THTA(J),I3,J=1,M1) &
|
|
& , (WIDTH(J),SS1(J),SS2(J),WIDS(J),J=1,N1)
|
|
!IPK JUL98
|
|
else
|
|
READ(IIN,ERR=100) &
|
|
& N1,M1,((CORDSN(J,K),K=1,2),ALPHA,WD(J),J=1,N1), &
|
|
& ((NOP2(J,K),K=1,8),IMAT(J),THTA(J),I32,J=1,M1) &
|
|
& , (WIDTH(J),SS1(J),SS2(J),WIDS(J),J=1,N1)
|
|
DO J=1,N1
|
|
DO K=1,2
|
|
CORD(J,K)=CORDSN(J,K)
|
|
ENDDO
|
|
ENDDO
|
|
DO J=1,M1
|
|
DO K=1,8
|
|
NOP(J,K)=NOP2(J,K)
|
|
ENDDO
|
|
ENDDO
|
|
endif
|
|
read(IIN,err=120,end=120) id8
|
|
if(id8(1:6) .eq. 'part-2') then
|
|
read(IIN,err=104) (widbs(j),sso(j),j=1,n1)
|
|
read(IIN,err=120,end=120) id8
|
|
endif
|
|
|
|
!IPK JAN01 Add part 3 write for continuity lines
|
|
if(id8(1:6) .eq. 'part-3') then
|
|
|
|
!ipk aug02 IF(NCLM .GT. 0) THEN
|
|
READ(IIN,ERR=104) NCLM,((ICCLN(I,J),J=1,350),I=1,NCLM)
|
|
!ipk aug02 ENDIF
|
|
read(IIN,err=120,end=120) id8
|
|
endif
|
|
!IPK DEB02 Add part 4 write for lock and BS1 lines and reordering
|
|
if(id8(1:6) .eq. 'part-4') then
|
|
read(iin,err=104,end=120) (lock(j),bs1(j),j=1,n1)
|
|
read(iin,err=104,end=90) &
|
|
nlst,((ilist(j,k),k=1,maeln),llist(j),j=1,maxln)
|
|
endif
|
|
GO TO 120
|
|
!IPK MAR04
|
|
90 NLST=0
|
|
DO J=1,MAXLN
|
|
LLIST(J)=0
|
|
DO K=1,MAELN
|
|
ILIST(J,K)=0
|
|
ENDDO
|
|
ENDDO
|
|
GO TO 120
|
|
|
|
100 READ(IIN,ERR=104) &
|
|
& N1,M1,((CORDSN(J,K),K=1,2),ALPHA,WD(J),J=1,N1), &
|
|
& ((NOP2(J,K),K=1,8),IMAT(J),THTA(J),I32,J=1,M1)
|
|
DO J=1,N1
|
|
DO K=1,2
|
|
CORD(J,K)=CORDSN(J,K)
|
|
ENDDO
|
|
ENDDO
|
|
DO J=1,M1
|
|
DO K=1,8
|
|
NOP(J,K)=NOP2(J,K)
|
|
ENDDO
|
|
ENDDO
|
|
GO TO 120
|
|
|
|
104 WRITE(90,*) 'Error reading binary geometry file'
|
|
!ipk jan98 CALL SETD(23)
|
|
call clscrn()
|
|
WRITE(aline,*) 'Error reading binary geometry file'
|
|
call symbl &
|
|
& (1.1,3.3,0.20,aline,0.0,80)
|
|
WRITE(aline,*) 'Press enter to exit'
|
|
call symbl &
|
|
& (1.1,3.0,0.20,aline,0.0,80)
|
|
ndig=1
|
|
CALL GTCHARX(IJNK,NDIG,5.0,7.6)
|
|
CALL Quit_Pgm
|
|
STOP
|
|
|
|
120 CONTINUE
|
|
NP=N1
|
|
NE=M1
|
|
ELSE
|
|
IF(IGFG .EQ. 0 .AND. ITRIAN .EQ. 0) THEN
|
|
READ(IIN,5000) TITLE
|
|
write(90,5000) title
|
|
5000 FORMAT( A80)
|
|
READ(IIN,5010) ISLP,IPRT,IPNN,IPEN,IPO,IRO,IPP,IRFN &
|
|
& ,IGEN,NXZL,NITST,ISCTXT,IFILL,IALTGM,NLAYD,xadded,yadded,ntempin
|
|
write(90,5010) ISLP,IPRT,IPNN,IPEN,IPO,IRO,IPP,IRFN &
|
|
& ,IGEN,NXZL,NITST,ISCTXT,IFILL,IALTGM,NLAYD,xadded,yadded,ntempin
|
|
5010 FORMAT( 15I5,2f10.1,i10)
|
|
READ(IIN,5011) HORIZ,VERT,XSALE,YSALE,XFACT,YFACT,AR,ANG
|
|
5011 FORMAT( 2F10.0,4F10.4,2F10.0 )
|
|
IF(IPP .GT. 0) READ(IIN,5012) ALINE
|
|
5012 FORMAT(A80)
|
|
ELSEIF(IGFG .GT. 0 .OR. ITRIAN .EQ. 1) THEN
|
|
write(90,*) 'reading gfg/TRIAN title'
|
|
IPRT=1
|
|
IPNN=1
|
|
IPEN=1
|
|
IPO=1
|
|
IRO=1
|
|
IPP=0
|
|
IRFN=0
|
|
IGEN=0
|
|
NXZL=0
|
|
NITST=1
|
|
ISCTXT=0
|
|
IFILL=0
|
|
IALTGM=1
|
|
NLAYD=0
|
|
HORIZ=10.
|
|
VERT=8.
|
|
XSALE=0.
|
|
YSALE=0.
|
|
XFACT=0.
|
|
YFACT=0.
|
|
AR=0.
|
|
ANG=0.
|
|
xadded=0.
|
|
yadded=0.
|
|
ntempin=0.
|
|
IF(IGFG .EQ. 1) THEN
|
|
DO I=1,10000
|
|
READ(IIN,'(A3,A77)') ID,DLIN
|
|
IF(ID .EQ. 'T1 ') THEN
|
|
TITLE(1:77)=DLIN
|
|
GO TO 140
|
|
ENDIF
|
|
ENDDO
|
|
ELSEIF(IGFG .EQ. 3) THEN
|
|
DO I=1,10000
|
|
READ(IIN,'(A8,A77)') ID8,DLIN
|
|
IF(ID8 .EQ. 'MESHNAME' .OR. ID8(1:8) .EQ. 'MESH2D') THEN
|
|
TITLE(1:77)=DLIN
|
|
GO TO 140
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
140 CONTINUE
|
|
REWIND IIN
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF(IUNIT .EQ. 0 ) THEN
|
|
IF(IPNN .NE. 1) THEN
|
|
ISLP=0
|
|
IPRT=1
|
|
IPNN=1
|
|
IPEN=1
|
|
IPO=1
|
|
IRO=1
|
|
IPP=0
|
|
IRFN=0
|
|
IGEN=0
|
|
NXZL=0
|
|
NITST=1
|
|
ISCTXT=0
|
|
IFILL=0
|
|
IALTGM=1
|
|
NLAYD=0
|
|
HORIZ=10.
|
|
VERT=8.
|
|
XSALE=0.
|
|
YSALE=0.
|
|
XFACT=0.
|
|
YFACT=0.
|
|
AR=0.
|
|
ANG=0.
|
|
xadded=0.
|
|
yadded=0.
|
|
ntempin=0
|
|
ENDIF
|
|
REWIND IBAK
|
|
WRITE(IBAK) TITLE,NP,NE
|
|
WRITE(IBAK) ISLP,IPRT,IPNN,IPEN,IPO,IRO,IPP,IRFN &
|
|
& ,IGEN,NXZL,NITST,ISCTXT,IFILL,IALTGM,NLAYD,xadded,yadded,ntempin
|
|
WRITE(IBAK) HORIZ,VERT,XSALE,YSALE,XFACT,YFACT,AR,ANG
|
|
IF(IPP .GT. 0) WRITE(IBAK) ALINE
|
|
ELSEIF(IUNIT .EQ. 1) THEN
|
|
IOF=IOT
|
|
REWIND IOF
|
|
!ipk nov02
|
|
!IPK MAR04
|
|
! if(ne .gt. 99999) then
|
|
if(np .gt. 99999) then
|
|
if(ntempin .eq. 0) then
|
|
ntempin=1
|
|
else
|
|
ntempin=3
|
|
endif
|
|
endif
|
|
ISLP=0
|
|
IPRT=1
|
|
IPO=1
|
|
IRO=1
|
|
IPP=0
|
|
IRFN=0
|
|
IGEN=0
|
|
NXZL=0
|
|
NITST=1
|
|
ISCTXT=0
|
|
IFILL=0
|
|
IALTGM=1
|
|
NLAYD=0
|
|
HORIZ=0
|
|
VERT=0
|
|
XSALE=0
|
|
YSALE=0
|
|
XFACT=0
|
|
YFACT=0
|
|
AR=0
|
|
ANG=0
|
|
WRITE(IOF,5000) TITLE
|
|
WRITE(IOF,5010) ISLP,IPRT,IPNN,IPEN,IPO,IRO,IPP,IRFN &
|
|
& ,IGEN,NXZL,NITST,ISCTXT,IFILL,IALTGM,NLAYD,xadded,yadded,ntempin
|
|
WRITE(IOF,5011) HORIZ,VERT,XSALE,YSALE,XFACT,YFACT,AR,ANG
|
|
IF(IPP .GT. 0) WRITE(IOF,5012) ALINE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN
|
|
END
|
|
!
|
|
SUBROUTINE RDCORD(IUNIT)
|
|
!
|
|
! Read in coordinates
|
|
!
|
|
!IPK MAY02
|
|
USE WINTERACTER
|
|
USE BLK1MOD
|
|
|
|
include 'd.inc'
|
|
|
|
REAL*8 CX,CY,VALS(7)
|
|
|
|
|
|
DIMENSION IRLINE(16)
|
|
CHARACTER*1 IJNK,ans
|
|
character*30 blank
|
|
CHARACTER*32 ANS32
|
|
CHARACTER*77 DLIN2
|
|
CHARACTER*28 MESG
|
|
CHARACTER*3 ID
|
|
character*80 dlin
|
|
!ipk feb02 expand to 110
|
|
character*150 dlin1,DLIN1OUT
|
|
! INCLUDE 'BLK1.COM'
|
|
DATA IFIRST / 0 /
|
|
data blank/' '/
|
|
!
|
|
IF (IFIRST .EQ. 0) THEN
|
|
IF(IIN .EQ. 10) THEN
|
|
NP = 0
|
|
ENDIF
|
|
VOID = - 1.0E+10
|
|
VDX = -1.E+9
|
|
IFIRST = 1
|
|
ENDIF
|
|
ISTART=0
|
|
JZ=0
|
|
!
|
|
!
|
|
IF(IUNIT .EQ. 0) RETURN
|
|
IF(IUNIT .EQ. 10) THEN
|
|
IF(IGFG .gt. 0) REWIND IUNIT
|
|
!ipk oct96 upgrade to model limits
|
|
20 continue
|
|
IF(IGFG .EQ. 0 .AND. ITRIAN .EQ. 0) THEN
|
|
!IPK JUL98 read(iunit,'(a80)',end=98) dlin
|
|
!ipk feb02 expand to 110
|
|
!ipk may02 expand to 150
|
|
read(iunit,'(a150)',end=98) dlin1
|
|
if(dlin1(11:30) .eq. blank) go to 98
|
|
!IPK JUL98 READ(dlin,'(I10,7F10.0)') J, CX, CY, BELEV,
|
|
!ipk feb02 add lock and BS1
|
|
if(ntempin .lt. 2) then
|
|
READ(dlin1,'(I10,9F10.0,I10,F10.0)') J, CX, CY, BELEV, &
|
|
& WDTHX,SS1X,SS2X,WDSX,WEL,SSSO,LOCK1,BS11
|
|
else
|
|
READ(dlin1,'(I10,2f20.0,7F10.0,I10,F10.0)',err=8888) J, CX, CY, BELEV, &
|
|
& WDTHX,SS1X,SS2X,WDSX,WEL,SSSO,LOCK1,BS11
|
|
go to 8889
|
|
8888 do kcl=61,140
|
|
dlin1(kcl:kcl)=' '
|
|
enddo
|
|
READ(DLIN1,'(I10,2F20.0,7F10.0,I10,F10.0)') J, CX, CY, BELEV,&
|
|
WDTHX,SS1X,SS2X,WDSX,WEL,SSSO,LOCK1,BS11
|
|
8889 continue
|
|
|
|
|
|
endif
|
|
ELSEIF(ITRIAN .EQ. 1) THEN
|
|
IF(ISTART .EQ. 0) THEN
|
|
READ(IUNIT,*) NPPP,NDUM,NATTR
|
|
ISTART=1
|
|
ENDIF
|
|
READ(IUNIT,*) J,CX,CY,(VALS(K),K=1,NATTR)
|
|
IF(J .EQ. 0) THEN
|
|
J=NPPP
|
|
JZ=1
|
|
ENDIF
|
|
BELEV=-9999.
|
|
WDTHX=0.
|
|
SS1X=0.
|
|
SS2X=0.
|
|
WDSX=0.
|
|
WEL=0.
|
|
SSSO=0.
|
|
LOCK1=0
|
|
BS11=0.
|
|
IF(NATTR .GT. 0) BELEV=VALS(1)
|
|
IF(NATTR .GT. 1) WDTHX=VALS(2)
|
|
IF(NATTR .GT. 2) SS1X=VALS(3)
|
|
IF(NATTR .GT. 3) SS2X=VALS(4)
|
|
|
|
ELSE
|
|
|
|
!ipk jun02 Allow for GFGEN input
|
|
DO ICOUNTC=1,1000000
|
|
IF(ICOUNTC .EQ. 1 .and. ID(1:2) .EQ. 'NS') THEN
|
|
NLST=0
|
|
ILIST=0
|
|
KST=1
|
|
ENDIF
|
|
DO JJ=1,150
|
|
DLIN1(JJ:JJ)=' '
|
|
ENDDO
|
|
70 CONTINUE
|
|
READ(IUNIT,'(A3,A150)', END=400) ID,DLIN1
|
|
if(ID(1:2) .NE. 'ND' .AND. IGFG .EQ. 3) GO TO 70
|
|
IF(ID .EQ. 'GNN' .OR. ID .EQ. 'GWN') THEN
|
|
! Count the number of variables
|
|
I=0
|
|
ICOUNT=0
|
|
75 CONTINUE
|
|
IF(DLIN1(I+1:I+1) .NE. ' ') THEN
|
|
GO TO 80
|
|
ELSE
|
|
I=I+1
|
|
GO TO 75
|
|
ENDIF
|
|
80 I=I+1
|
|
IF(I .EQ. 151) THEN
|
|
ICOUNT =ICOUNT+1
|
|
GO TO 90
|
|
ENDIF
|
|
IF(DLIN1(I:I) .EQ. ' ' .OR. DLIN1(I:I) .EQ. ',') THEN
|
|
ICOUNT=ICOUNT+1
|
|
85 CONTINUE
|
|
IF(I+1 .EQ. 151) GO TO 90
|
|
IF(DLIN1(I+1:I+1) .EQ. ' ') THEN
|
|
I=I+1
|
|
GO TO 85
|
|
ELSE
|
|
GO TO 80
|
|
ENDIF
|
|
ELSE
|
|
GO TO 80
|
|
ENDIF
|
|
ELSEIF(ID(1:2) .EQ. 'ND') THEN
|
|
ICOUNT=4
|
|
go to 90
|
|
ELSEIF(ID(1:2) .EQ. 'NS') THEN
|
|
CALL PARSELIN(DLIN1,DLIN1OUT,ICLON,NCHARBL)
|
|
READ(DLIN1OUT,*) (ILIST(NLST+1,KK),KK=KST,KST+NCHARBL-1)
|
|
IF(ILIST(NLST+1,KST+NCHARBL-1) .LT. 0) THEN
|
|
NLST=NLST+1
|
|
LLIST(NLST)=NST+NCHARBL-1
|
|
DO K=1,LLIST(NLST)
|
|
ICCLN(NLST,K)=ABS(ILIST(NLST,K))
|
|
ENDDO
|
|
NCLM=MAX(NLST,NCLM)
|
|
KST=1
|
|
ELSEIF(ILIST(NLST+1,KST+NCHARBL-2) .LT. 0) THEN
|
|
LTD=ILIST(NLST+1,KST+NCHARBL-1)
|
|
NLST=NLST+1
|
|
LLIST(NLST)=KST+NCHARBL-2
|
|
DO K=1,KST+NCHARBL-2
|
|
ICCLN(LTD,K)=ABS(ILIST(NLST,K))
|
|
ENDDO
|
|
NCLM=MAX(LTD,NCLM)
|
|
KST=1
|
|
ELSE
|
|
KST=KST+NCHARBL
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDDO
|
|
90 CONTINUE
|
|
DO K=1,7
|
|
VALS(K)=0.
|
|
ENDDO
|
|
READ(DLIN1,*) J,(VALS(K),K=1,ICOUNT-1)
|
|
! WRITE(109,'(A8,I8,10F15.6)') ID,J,(VALS(K),K=1,ICOUNT-1)
|
|
IF(ID .EQ. 'GNN' .OR. ID .EQ. 'ND ') THEN
|
|
CX=VALS(1)
|
|
CY=VALS(2)
|
|
BELEV=VALS(3)
|
|
NP = MAX(NP,J)
|
|
CORD(J,1) = CX
|
|
CORD(J,2) = CY
|
|
XUSR(J) = CX
|
|
YUSR(J) = CY
|
|
WD(J) = BELEV
|
|
INSKP(J)=0
|
|
INEW(J) = 1
|
|
GO TO 20
|
|
ELSE
|
|
WDTHX=VALS(1)
|
|
SS1X=VALS(2)
|
|
SS2X=VALS(3)
|
|
WDSX=VALS(4)
|
|
WIDTH(J)=WDTHX
|
|
SS1(J)=SS1X
|
|
SS2(J)=SS2X
|
|
WIDS(J)=WDSX
|
|
GO TO 20
|
|
ENDIF
|
|
ENDIF
|
|
!c IF (J .GT. 9000) GOTO 98
|
|
IF (J .GE. MAXP) THEN
|
|
!ipk jan98 CALL SETD(23)
|
|
call clscrn()
|
|
WRITE(dlin,*) ' Node number exceeds MAXP in RDCORD',j
|
|
call symbl &
|
|
& (1.1,3.3,0.20,dlin,0.0,80)
|
|
WRITE(90,*) ' Node number exceeds MAXP in RDCORD'
|
|
WRITE(DLIN,*) ' Press enter to exit'
|
|
call symbl &
|
|
& (1.1,3.0,0.20,dlin,0.0,80)
|
|
ndig=1
|
|
CALL GTCHARX(ANS32,ndig,5.0,4.0)
|
|
!ipk jan98 READ(*,'(A)') IJNK
|
|
CALL Quit_Pgm
|
|
STOP
|
|
ENDIF
|
|
NP = MAX(NP,J)
|
|
CORD(J,1) = CX
|
|
CORD(J,2) = CY
|
|
XUSR(J) = CX
|
|
YUSR(J) = CY
|
|
WD(J) = BELEV
|
|
WIDTH(J)=WDTHX
|
|
SS1(J)=SS1X
|
|
SS2(J)=SS2X
|
|
WIDS(J)=WDSX
|
|
!IPK JUL98
|
|
WIDBS(J)=WEL
|
|
SSO(J)=SSSO
|
|
INSKP(J)=0
|
|
INEW(J) = 1
|
|
!IPK FEB02 ADD LOCK
|
|
LOCK(J)=LOCK1
|
|
BS1(J)=BS11
|
|
IF(ITRIAN .EQ. 1) THEN
|
|
IF((JZ .EQ. 0 .AND. J .EQ. NPPP) .OR. (JZ .EQ. 1 .AND. J .EQ. NPPP-1)) GO TO 400
|
|
ENDIF
|
|
!
|
|
GOTO 20
|
|
!
|
|
98 CONTINUE
|
|
NLST=0
|
|
KK=0
|
|
102 continue
|
|
if(np .gt. 99999) then
|
|
READ(IUNIT,'(16I6)') IRLINE
|
|
else
|
|
READ(IUNIT,'(16I5)') IRLINE
|
|
endif
|
|
IF(IRLINE(1) .EQ. 9999 .or. IRLINE(1) .EQ. 99999) GO TO 300
|
|
IF(KK .EQ. 0) NLST=NLST+1
|
|
104 DO 105 K=1,16
|
|
IF(IRLINE(K) .EQ. 0) GO TO 106
|
|
KK=KK+1
|
|
ILIST(NLST,KK)=IRLINE(K)
|
|
105 CONTINUE
|
|
GO TO 102
|
|
106 CONTINUE
|
|
LLIST(NLST)=KK
|
|
KK=0
|
|
GO TO 102
|
|
300 CONTINUE
|
|
! IF(NLAYD .GT. 0) THEN
|
|
! DO 320 L=1,NP
|
|
! READ(IUNIT,'(2I5)') I,LAY(I)
|
|
! IF(I .GT. 9000) GO TO 325
|
|
! 320 CONTINUE
|
|
! 325 CONTINUE
|
|
! ENDIF
|
|
!IPK JAN01
|
|
READ(IUNIT,'(I5)',end=375) NENTRY
|
|
IF(NENTRY .GT. 0) THEN
|
|
READ(IUNIT,'(15I5)') (NEF(I,1),NEF(I,2),NEF(I,3),I=1,NENTRY)
|
|
ENDIF
|
|
READ(IUNIT,'(I5)', end=375) NCLM
|
|
write(90,*) 'INOUT-695 NCLM',nclm
|
|
IF(NCLM .GT. 0) THEN
|
|
READ(IUNIT,'(A3,A77)') ID,DLIN2
|
|
WRITE(90,'(''INOUT-698'',A3,A77)'),ID,DLIN
|
|
IF(ID .EQ. 'CC1') THEN
|
|
330 READ(DLIN2,'(I5,9I8)') I,(ICCLN(I,J),J=1,9)
|
|
WRITE(90,'(I5,9I8)') I,(ICCLN(I,J),J=1,9)
|
|
NL=1
|
|
340 NL=NL+9
|
|
READ(IUNIT,'(A3,A77)',end=375) ID,DLIN2
|
|
WRITE(90,'(''INOUT-705'',A3,A77)'),ID,DLIN
|
|
IF(ID .EQ. 'CC2') THEN
|
|
READ(DLIN2,'(5X,9I8)') (ICCLN(I,J),J=NL,NL+8)
|
|
ELSEIF(ID .EQ. 'CC1') THEN
|
|
GO TO 330
|
|
ELSEIF(ID .EQ. 'END') THEN
|
|
GO TO 375
|
|
ENDIF
|
|
GO TO 340
|
|
ENDIF
|
|
ENDIF
|
|
|
|
375 CONTINUE
|
|
WRITE(90,*) 'INOUT-718 NCLM',NCLM
|
|
ELSE
|
|
IF(IUNIT .EQ. 11) THEN
|
|
!IPK FEB03 READ(IUNIT) &
|
|
!IPK FEB03 & (XUSR(J),YUSR(J),WD(J),WIDTH(J),SS1(J),SS2(J),WIDS(J), &
|
|
!IPK FEB03 & WIDBS(J),SSO(J),BS1(J),J=1,NP)
|
|
!IPK FEB03!ipk jan99 + (XUSR(J),YUSR(J),WD(J),WIDTH(J),SS1(J),SS2(J),WIDS(J)
|
|
!IPK FEB03 DO 350 J=1,NP
|
|
!IPK FEB03 CORD(J,1) = XUSR(J)
|
|
!IPK FEB03 CORD(J,2) = YUSR(J)
|
|
!IPK FEB03 INSKP(J)=0
|
|
!IPK FEB03 IF (CORD(J,1) .GT. VDX) THEN
|
|
!IPK FEB03 INEW(J) = 1
|
|
!IPK FEB03 ENDIF
|
|
!IPK FEB03 350 CONTINUE
|
|
!IPK FEB03 READ(IUNIT) NLST
|
|
!IPK FEB03 IF(NLST .GT. 0) THEN
|
|
!IPK FEB03 READ(IUNIT) (LLIST(J),J=1,NLST), &
|
|
!IPK FEB03 ((ILIST(J,I),I=1,LLIST(J)),J=1,NLST)
|
|
!IPK FEB03 ENDIF
|
|
|
|
!IPK FEB03 READ(IUNIT) NENTRY,NLAYD,NCLM
|
|
!IPK FEB03 IF(NENTRY .GT. 0) THEN
|
|
!IPK FEB03 READ(IUNIT) ((NEF(I,J),J=1,3),I=1,NENTRY)
|
|
!IPK FEB03 ENDIF
|
|
!IPK FEB03 IF(NLAYD .GT. 0) THEN
|
|
!IPK FEB03 READ(IUNIT) (LAY(I),I=1,NP)
|
|
!IPK FEB03 ENDIF
|
|
!IPK FEB03 IF(NCLM .GT. 0) THEN
|
|
!IPK FEB03 READ(IUNIT) ((ICCLN(I,J),J=1,350),I=1,NCLM)
|
|
!IPK FEB03 ENDIF
|
|
|
|
CALL RDRST(3,IUNIT)
|
|
|
|
ELSE
|
|
DO 360 J=1,NP
|
|
XUSR(J) = CORD(J,1)
|
|
YUSR(J) = CORD(J,2)
|
|
!!apr99 INSKP(J)=0
|
|
IF (CORD(J,1) .GT. VDX) THEN
|
|
INSKP(J)=0
|
|
INEW(J) = 1
|
|
ENDIF
|
|
360 CONTINUE
|
|
ENDIF
|
|
ENDIF
|
|
400 CONTINUE
|
|
WRITE(90,*) 'INOUT-762 NCLM',NCLM
|
|
|
|
!
|
|
!ipk jun02 look for nodes that do not have coordinates but are defined in NOP
|
|
|
|
do n=1,ne
|
|
if(imat(n) .gt. 0) then
|
|
ncn=ncorn(n)
|
|
if(ncn .eq. 3) then
|
|
n1=nop(n,2)
|
|
if(n1 .ne. 0) then
|
|
if(inew(n1) .ne. 1) then
|
|
cord(n1,1)=(cord(nop(n,1),1)+cord(nop(n,3),1))/2.
|
|
cord(n1,2)=(cord(nop(n,1),2)+cord(nop(n,3),2))/2.
|
|
XUSR(n1) = CORD(n1,1)
|
|
YUSR(n1) = CORD(n1,2)
|
|
INSKP(n1)=0
|
|
INEW(n1) = 1
|
|
endif
|
|
endif
|
|
elseif(ncn .gt. 5) then
|
|
do k=2,ncn,2
|
|
n1=nop(n,k)
|
|
IF(N1 .NE. 0) THEN
|
|
if(inew(n1) .ne. 1) then
|
|
kk=mod(k+1,ncn)
|
|
cord(n1,1)=(cord(nop(n,k-1),1)+cord(nop(n,kk),1))/2.
|
|
cord(n1,2)=(cord(nop(n,k-1),2)+cord(nop(n,kk),2))/2.
|
|
XUSR(n1) = CORD(n1,1)
|
|
YUSR(n1) = CORD(n1,2)
|
|
INSKP(n1)=0
|
|
INEW(n1) = 1
|
|
NP = MAX(NP,n1)
|
|
endif
|
|
ENDIF
|
|
if(inew(nop(n,k-1)) .eq. 0) then
|
|
CALL EltERRDisp(n,ims)
|
|
if(ims .eq. 1) CALL DELTEL(n)
|
|
go to 120
|
|
endif
|
|
enddo
|
|
120 continue
|
|
endif
|
|
endif
|
|
enddo
|
|
WRITE(90,*) 'INOUT-797 NCLM',NCLM
|
|
|
|
WRITE(MESG,6010) NE
|
|
6010 FORMAT(I7,' Nodes read from file')
|
|
CALL SYMBL(1.1,3.3,0.25,mesg,0.0,28)
|
|
|
|
RETURN
|
|
!
|
|
END
|
|
!
|
|
!****************************************************************
|
|
!
|
|
SUBROUTINE RDMAP(IFIRST,IMPP,JSTT,KSTT)
|
|
!
|
|
! Read in coordinates of map lines
|
|
!
|
|
USE WINTERACTER
|
|
USE BLKMAP
|
|
USE BLK1MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
DIMENSION NTMP(9)
|
|
DIMENSION VALS(2000)
|
|
INTEGER*8 II
|
|
|
|
!
|
|
|
|
INCLUDE 'TXFRM.COM'
|
|
!IPK MAY02 COMMON /TXFRM/ XS, YS, TXSCAL
|
|
!
|
|
CHARACTER*80 ALIN,lind
|
|
!ipk jan98 CHARACTER*1 IJNK
|
|
CHARACTER*1 ans
|
|
CHARACTER*32 ANS32
|
|
CHARACTER*5 LAB1
|
|
CHARACTER*9 LAB2
|
|
CHARACTER*8 LAB3
|
|
CHARACTER*12 LAB4
|
|
CHARACTER*4 HEDR
|
|
!
|
|
5 continue
|
|
|
|
! IGUNIT=0
|
|
ielvsw=0
|
|
! IF (IFIRST .EQ. 0) THEN
|
|
IF(IFIRST .EQ. 2) THEN
|
|
IMP=IMPP
|
|
JSTT=JLINT
|
|
KSTT=KLINT
|
|
ENDIF
|
|
VOID = - 1.0E+10
|
|
VDX = -1.0E+9
|
|
CXO=VDX
|
|
CYO=VDX
|
|
DO 10 J=JSTT+1,MAXPL
|
|
CMAP(J,1) = VOID
|
|
CMAP(J,2) = VOID
|
|
XMAP(J) = VOID
|
|
YMAP(J) = VOID
|
|
9 CONTINUE
|
|
10 CONTINUE
|
|
write(90,*) 'maxpl in rdmap - 1 ',maxpl
|
|
!ipk jan98
|
|
ylv=7.9
|
|
call clscrn
|
|
! ENDIF
|
|
!
|
|
!ipkfeb94 added logic
|
|
if(imp .eq. 9) then
|
|
!
|
|
I=0
|
|
J=0
|
|
K=1
|
|
20 READ(IMP,'(A80)') ALIN
|
|
if(alin(1:5) .eq. 'NCOLS') THEN
|
|
CALL RDESRI(alin,j,k)
|
|
GO TO 98
|
|
ENDIF
|
|
!ipk oct96 addition to identify first point
|
|
KFIRST=0
|
|
I=I+1
|
|
IF(MOD(I,25) .EQ. 0) REWIND 90
|
|
WRITE(90,'(2i5,A65)') I,K,ALIN
|
|
!ipk oct94 3 lines added
|
|
if(mod(i,2000) .eq. 0) then
|
|
!ipk jan98 write(*,*) i,' map lines now processed'
|
|
ylv=ylv-0.3
|
|
if(ylv .lt. 0.1) then
|
|
ylv=7.9
|
|
call clscrn
|
|
endif
|
|
write(lind,6010) i
|
|
call symbl &
|
|
& (1.1,ylv,0.20,LIND,0.0,80)
|
|
endif
|
|
DO KC=1,5
|
|
IF(ALIN(KC:KC) .EQ. 'E' .OR. ALIN(KC:KC) .EQ. 'e') THEN
|
|
GO TO 98
|
|
ENDIF
|
|
ENDDO
|
|
READ(ALIN,*) LINTYP(K),VALL
|
|
valkp=vall
|
|
IF(K .GT. MAXLIN) THEN
|
|
!ipk dec09 CALL SETD(23)
|
|
!ipk jan98
|
|
!ipk dec09 WRITE(lind,*) 'Too many map lines. increase maxlin in common'
|
|
!ipk dec09 ylv=ylv-0.6
|
|
!ipk dec09 if(ylv .lt. 0.1) then
|
|
!ipk dec09 ylv=7.9
|
|
!ipk dec09 call clscrn
|
|
!ipk dec09 endif
|
|
!ipk dec09 call symbl &
|
|
!ipk dec09 & (1.1,ylv,0.20,LIND,0.0,80)
|
|
!ipk dec09 WRITE(90,*) 'Too many map lines. increase maxlin in common'
|
|
!ipk jan98 WRITE(*,*) ' Press enter to exit'
|
|
!ipk jan98 READ(*,'(A)') IJNK
|
|
!ipk dec09 WRITE(LIND,*) ' Press enter to exit'
|
|
!ipk dec09 call symbl &
|
|
!ipk dec09 & (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
!ipk dec09 ndig=1
|
|
!ipk dec09 CALL GTCHARX(ANS,IJNK,5.0,4.0)
|
|
!ipk dec09 CALL Quit_Pgm
|
|
|
|
MAXPLL=MAXPL
|
|
call ADJUSTMAP(MAXPLL)
|
|
MAXPL=MAXPLL
|
|
deallocate (CMAP,XMAP,YMAP,VAL,imap,NCRS)
|
|
|
|
allocate (CMAP(MAXPL,2),XMAP(MAXPL),YMAP(MAXPL),VAL(MAXPL))
|
|
|
|
ALLOCATE (imap(maxpl),NCRS(MAXPL))
|
|
|
|
maxpts=maxpl
|
|
ifirst=0
|
|
rewind imp
|
|
go to 5
|
|
|
|
ENDIF
|
|
21 CONTINUE
|
|
READ(IMP,'(A80)') ALIN
|
|
|
|
!ipk sep05
|
|
|
|
do jjj=1,80
|
|
if(alin(jjj:jjj) .eq. char(9)) then
|
|
alin(jjj:jjj)=','
|
|
endif
|
|
enddo
|
|
|
|
I=I+1
|
|
IF(MOD(I,25) .EQ. 0) REWIND 90
|
|
WRITE(90,'(2i5,A65)') I,K,ALIN
|
|
!ipk oct94 3 lines added
|
|
if(mod(i,10000) .eq. 0) then
|
|
!ipk jan98 write(*,*) i,' map lines now processed'
|
|
ylv=ylv-0.3
|
|
if(ylv .lt. 0.1) then
|
|
ylv=7.9
|
|
call clscrn
|
|
endif
|
|
write(lind,6010) i
|
|
6010 format(i8,' map points processed')
|
|
call symbl &
|
|
& (1.1,ylv,0.20,LIND,0.0,80)
|
|
endif
|
|
DO KC=1,5
|
|
IF(ALIN(KC:KC) .EQ. 'E' .OR. ALIN(KC:KC) .EQ. 'e') THEN
|
|
GO TO 97
|
|
ENDIF
|
|
ENDDO
|
|
!ipk oct96 change to permit more line types
|
|
!ipk jan01 IF(LINTYP(K) .NE. 2 .and. valkp .lt. -9998.) THEN
|
|
!IPK APR03 IF(LINTYP(K) .NE. 2 .and. valkp .ne. 0.) THEN
|
|
!IPK APR03 READ(ALIN,*) CX, CY
|
|
!IPK APR03 vall=valkp
|
|
!IPK APR03 ELSE
|
|
!IPK APR03 READ(ALIN,*) CX, CY, VALL
|
|
!IPK APR03 ENDIF
|
|
IF(LINTYP(K) .EQ. 2) THEN
|
|
READ(ALIN,*) CX, CY, VALL
|
|
ELSEIF(VALKP .LT. 9999.) THEN
|
|
READ(ALIN,*) CX, CY
|
|
vall=valkp
|
|
ELSEIF(VALKP .EQ. 9999.) THEN
|
|
READ(ALIN,*) CX, CY, VALL
|
|
ENDIF
|
|
!ipk oct96 addition to prevent test on first point
|
|
if(kfirst .ne. 0) then
|
|
IF(CX .EQ. CXO .AND. CY .EQ. CYO) GO TO 21
|
|
else
|
|
kfirst=1
|
|
endif
|
|
IF(J .EQ. MAXPL) THEN
|
|
CALL SETD(23)
|
|
!ipk jan98 WRITE(*,*) 'Too many map points. increase maxpl in co
|
|
!ipk jan98 WRITE(90,*) 'Too many map points. increase maxpl in c
|
|
!ipk jan98 WRITE(*,*) ' Press enter to exit'
|
|
!ipk jan98 READ(*,'(A)') IJNK
|
|
!ipk jan98
|
|
!ipk dec09 WRITE(lind,6030) maxpl
|
|
!ipk dec09 6030 format ('Map point exceed',i10,' increase maxpl in common' )
|
|
!ipk dec09 ylv=ylv-0.6
|
|
!ipk dec09 if(ylv .lt. 0.1) then
|
|
!ipk dec09 ylv=7.9
|
|
!ipk dec09 call clscrn
|
|
!ipk dec09 endif
|
|
!ipk dec09 call symbl &
|
|
!ipk dec09 & (1.1,ylv,0.20,LIND,0.0,80)
|
|
!ipk dec09 WRITE(90,6030) maxpl
|
|
!ipk jan98 WRITE(*,*) ' Press enter to exit'
|
|
!ipk jan98 READ(*,'(A)') IJNK
|
|
!ipk dec09 WRITE(LIND,*) ' Press enter to exit'
|
|
!ipk dec09 call symbl &
|
|
!ipk dec09 & (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
!ipk dec09 ndig=1
|
|
!ipk dec09 CALL GTCHARX(ANS,IJNK,5.0,4.0)
|
|
!ipk dec09 CALL Quit_Pgm
|
|
|
|
call ADJUSTMAP(MAXPL)
|
|
deallocate (CMAP,XMAP,YMAP,VAL,imap,NCRS)
|
|
|
|
allocate (CMAP(MAXPL,2),XMAP(MAXPL),YMAP(MAXPL),VAL(MAXPL))
|
|
|
|
ALLOCATE (imap(maxpl),NCRS(MAXPL))
|
|
|
|
maxpts=maxpl
|
|
|
|
rewind imp
|
|
go to 5
|
|
|
|
|
|
|
|
|
|
ENDIF
|
|
J=J+1
|
|
CMAP(J,1) = CX
|
|
CMAP(J,2) = CY
|
|
XMAP(J) = CX
|
|
YMAP(J) = CY
|
|
VAL(J) = VALL
|
|
CXO=CX
|
|
CYO=CY
|
|
!
|
|
GOTO 21
|
|
!
|
|
97 CONTINUE
|
|
J=J+1
|
|
K=K+1
|
|
GO TO 20
|
|
98 CONTINUE
|
|
!ipk feb94
|
|
klint=k-1
|
|
jlint=j
|
|
!ipk feb94 end change
|
|
J=J+1
|
|
|
|
!IPK FEB03
|
|
|
|
MAXPTS=J-2
|
|
|
|
write(90,*) 'maxpts in rdmap - 2 ',maxpts,xmap(908)
|
|
|
|
!IPK FEB02 SCLAE NEW VALUES
|
|
|
|
IF(IFIRST .EQ. 2) THEN
|
|
IF(CMAP(MAXPTS,1) .GE. VDX) MAXPTS=MAXPTS+1
|
|
DO K=1,MAXPTS
|
|
IF (CMAP(K,1) .GT. VDX) THEN
|
|
CMAP(K,1) = (CMAP(K,1)+XS)/TXSCAL
|
|
CMAP(K,2) = (CMAP(K,2)+YS)/TXSCAL
|
|
ENDIF
|
|
END DO
|
|
ENDIF
|
|
write(90,*) 'maxpts',maxpts
|
|
CLOSE(IMP)
|
|
! do k=1,maxpts
|
|
! write(90,*) cmap(k,1),cmap(k,2),xmap(k),ymap(k),val(k)
|
|
! enddo
|
|
RETURN
|
|
ELSEIF(IMP .EQ. 113) THEN
|
|
CALL READSHP
|
|
!
|
|
!
|
|
!ipkfeb94 logic to add binary read of map
|
|
!
|
|
elseif(imp .eq. 92 .OR. IMP .GT. 94) then
|
|
|
|
|
|
!ipk jan98 test for max lines
|
|
read(imp) klint,jlint
|
|
rewind imp
|
|
if(klint+KSTT .gt. maxlin .or. jlint +JSTT .gt. maxpl) then
|
|
call clscrn
|
|
write(lind,6310)
|
|
6310 format(' Compilation limits exceeded')
|
|
call symbl &
|
|
& (0.5,3.5,0.20,LIND,0.0,80)
|
|
write(lind,6311) maxpl,jlint
|
|
6311 FORMAT(' Maximum map points =',2i8,' points requested')
|
|
call symbl &
|
|
& (0.5,3.2,0.20,LIND,0.0,80)
|
|
write(lind,6312) maxlin,klint
|
|
6312 FORMAT( ' Maximum lines =',2i8,' lines requested')
|
|
call symbl &
|
|
& (0.5,2.9,0.20,LIND,0.0,80)
|
|
WRITE(LIND,*) ' Press enter to exit'
|
|
call symbl &
|
|
& (0.5,2.0,0.20,lind,0.0,80)
|
|
ndig=1
|
|
CALL GTCHARX(ANS32,IJNK,5.0,4.0)
|
|
CALL Quit_Pgm
|
|
STOP
|
|
endif
|
|
read(imp) klint,jlint,(xmap(j),ymap(j),val(j),j=JSTT+1,JSTT+jlint) &
|
|
& ,(lintyp(k),k=KSTT+1,KSTT+klint)
|
|
read(imp,end=200) nelts ,((nopel(j,k),k=1,3),j=1,nelts)
|
|
maxpts=jlint+JSTT
|
|
go to 220
|
|
200 continue
|
|
MAXPTS=JLINT+JSTT
|
|
nelts=0
|
|
220 continue
|
|
do j=JSTT+1,JSTT+jlint
|
|
cmap(j,1)=xmap(j)
|
|
cmap(j,2)=ymap(j)
|
|
enddo
|
|
JLINT=MAXPTS
|
|
KLINT=KSTT+klint
|
|
ELSEIF(IMP .EQ. 94) THEN
|
|
READ(IMP,'(A4)') HEDR
|
|
IF(HEDR .EQ. 'DSAA') THEN
|
|
NGRTYP=1
|
|
READ(IMP,*) NCOLS1,NROWS1
|
|
NSQ=MAX(NCOLS1,NROWS1)
|
|
IF(NSQ .GT. MAXLIN) THEN
|
|
MAXLIN=NSQ+10
|
|
DEALLOCATE (VALLIN,XCOL,YCOL)
|
|
ALLOCATE (VALLIN(MAXLIN),XCOL(MAXLIN),YCOL(MAXLIN))
|
|
ENDIF
|
|
READ(IMP,*) XXORG,XXTOP,YYORG,YYTOP
|
|
READ(IMP,*) DD1,DD2
|
|
CELLSIZX=(XXTOP-XXORG)/(NCOLS1-1)
|
|
CELLSIZY=(YYTOP-YYORG)/(NROWS1-1)
|
|
ANODAT=1.E36
|
|
II=0
|
|
jj=0
|
|
IGUNIT=203
|
|
XXORG=XXORG+CELLSIZX/2.
|
|
YYORG=YYORG+CELLSIZY/2.
|
|
DO J=1,NROWS1
|
|
YCOL(J)=CELLSIZY*(J-1)+YYORG
|
|
ENDDO
|
|
DO I=1,NCOLS1
|
|
XCOL(J)=CELLSIZX*(I-1)+XXORG
|
|
ENDDO
|
|
OPEN(IGUNIT,STATUS='UNKNOWN',FORM='BINARY',ACCESS='STREAM')
|
|
DO J=1,NROWS1
|
|
READ(IMP,*) (VALLIN(I),I=1,NCOLS1)
|
|
do i=1,ncols1
|
|
if(vallin(i) .gt. anodat) vallin(i)=-9999.
|
|
enddo
|
|
WRITE(203) (VALLIN(I),I=1,NCOLS1)
|
|
if(j .gt. 1 .AND. J .LT. NROWS1) cycle
|
|
!jun06 IF(MOD(J,INTV) .NE. 0) CYCLE
|
|
DO I=1,NCOLS1
|
|
!jun06 DO I=1,NCOLS1,INTV
|
|
! II=II+1
|
|
! IF(VALLIN(I) .EQ. ANODAT) CYCLE
|
|
JJ=JJ+1
|
|
XMAP(JJ)=CELLSIZX*(I-1)+XXORG
|
|
YMAP(JJ)=CELLSIZY*(J-1)+YYORG
|
|
CMAP(JJ,1)=XMAP(JJ)
|
|
CMAP(JJ,2)=YMAP(JJ)
|
|
val(jj)=0.
|
|
if(vallin(i) .lt. anodat/10.) VAL(JJ)=VALLIN(I)
|
|
ENDDO
|
|
ENDDO
|
|
! READ(IMP,*) NCOLS1,NROWS1
|
|
! maxpts=ncols1*nrows1
|
|
! if(maxpts .gt. maxpl) then
|
|
! maxpl=maxpts+1
|
|
! deallocate (CMAP,XMAP,YMAP,VAL,imap,NCRS)
|
|
!
|
|
!allocate (CMAP(MAXPL,2),XMAP(MAXPL),YMAP(MAXPL),VAL(MAXPL))
|
|
!
|
|
!ALLOCATE (imap(maxpl),NCRS(MAXPL))
|
|
!
|
|
! endif
|
|
! READ(IMP,*) XXORG,XXTOP,YYORG,YYTOP
|
|
! READ(IMP,*) DD1,DD2
|
|
! DXINT=(XXTOP-XXORG)/(NCOLS1-1)
|
|
! DYINT=(YYTOP-YYORG)/(NROWS1-1)
|
|
! JJ=0
|
|
! II=0
|
|
! ANODAT=1.E36
|
|
! READ(IMP,*) (VAL(I),I=1,MAXPTS)
|
|
! DO J=NROWS1,1,-1
|
|
! DO I=1,NCOLS1
|
|
! II=II+1
|
|
! IF(VAL(II) .GT. ANODAT) CYCLE
|
|
! JJ=JJ+1
|
|
! XMAP(JJ)=DXINT*(I-1)+XXORG
|
|
! YMAP(JJ)=DYINT*(NROWS1+1-J)+YYORG
|
|
! CMAP(JJ,1)=XMAP(JJ)
|
|
! CMAP(JJ,2)=YMAP(JJ)
|
|
! VAL(JJ)=VAL(II)
|
|
! ENDDO
|
|
! ENDDO
|
|
!
|
|
ELSE
|
|
REWIND IMP
|
|
NGRTYP=2
|
|
READ(IMP,*) LAB1,NCOLS1
|
|
READ(IMP,*) LAB1,NROWS1
|
|
! INTV=1
|
|
! maxpts=ncols1*nrows1
|
|
! IF(MAXPTS .GT. 10000000) THEN
|
|
! CALL WMessageBox(OKOnly,ExclamationIcon,CommonOK,'Displayed Map Points reduced','EXCESSIVE MAP POINTS')
|
|
! INTVS=(MAXPTS/10000000)+1
|
|
! INTV=SQRT(FLOAT(INTVS))
|
|
! IF(INTV*INTV .LT. INTVS) THEN
|
|
! INTV=INTV+1
|
|
! ENDIF
|
|
! MAXPTS=MAXPTS/INTVS+INTVS
|
|
! ENDIF
|
|
! if(maxpts .gt. maxpl) then
|
|
! maxpl=maxpts+1
|
|
! deallocate (CMAP,XMAP,YMAP,VAL,imap,NCRS)
|
|
!
|
|
!allocate (CMAP(MAXPL,2),XMAP(MAXPL),YMAP(MAXPL),VAL(MAXPL))
|
|
!
|
|
!ALLOCATE (imap(maxpl),NCRS(MAXPL))
|
|
!
|
|
! endif
|
|
NSQ=MAX(NCOLS1,NROWS1)
|
|
IF(NSQ .GT. MAXLIN) THEN
|
|
MAXLIN=NSQ+10
|
|
DEALLOCATE (VALLIN,XCOL,YCOL)
|
|
ALLOCATE (VALLIN(MAXLIN),XCOL(MAXLIN),YCOL(MAXLIN))
|
|
ENDIF
|
|
READ(IMP,*) LAB2,XXORG
|
|
READ(IMP,*) LAB2,YYORG
|
|
READ(IMP,*) LAB3,CELLSIZX
|
|
READ(IMP,*) LAB3,CELLSIZY
|
|
IF(LAB3(1:6) .NE. 'NODATA' .and. LAB3(1:6) .NE. 'nodata') THEN
|
|
READ(IMP,*) LAB4,ANODAT
|
|
ELSE
|
|
ANODAT=CELLSIZY
|
|
CELLSIZY=CELLSIZX
|
|
ENDIF
|
|
II=0
|
|
jj=0
|
|
IGUNIT=203
|
|
XXORG=XXORG+CELLSIZX/2.
|
|
YYORG=YYORG+CELLSIZY/2.
|
|
DO J=1,NROWS1
|
|
YCOL(J)=CELLSIZY*(NROWS1+1-J)+YYORG
|
|
ENDDO
|
|
DO I=1,NCOLS1
|
|
XCOL(J)=CELLSIZX*(I-1)+XXORG
|
|
ENDDO
|
|
OPEN(IGUNIT,STATUS='UNKNOWN',FORM='BINARY',ACCESS='STREAM')
|
|
DO J=1,NROWS1
|
|
READ(IMP,*) (VALLIN(I),I=1,NCOLS1)
|
|
do i=1,ncols1
|
|
if(anodat .gt. 0) then
|
|
if(vallin(i) .gt. anodat/10.) vallin(i)=-9999.
|
|
else
|
|
if(vallin(i) .le. anodat+100.) vallin(i)=-9999.
|
|
endif
|
|
enddo
|
|
WRITE(203) (VALLIN(I),I=1,NCOLS1)
|
|
if(j .gt. 1 .AND. J .LT. NROWS1) cycle
|
|
!jun06 IF(MOD(J,INTV) .NE. 0) CYCLE
|
|
DO I=1,NCOLS1
|
|
!jun06 DO I=1,NCOLS1,INTV
|
|
! II=II+1
|
|
! IF(VALLIN(I) .EQ. ANODAT) CYCLE
|
|
JJ=JJ+1
|
|
XMAP(JJ)=CELLSIZX*(I-1)+XXORG
|
|
YMAP(JJ)=CELLSIZY*(NROWS1+1-J)+YYORG
|
|
CMAP(JJ,1)=XMAP(JJ)
|
|
CMAP(JJ,2)=YMAP(JJ)
|
|
val(jj)=0.
|
|
if(vallin(i) .lt. anodat/10.) VAL(JJ)=VALLIN(I)
|
|
ENDDO
|
|
ENDDO
|
|
ENDIF
|
|
REWIND(IGUNIT)
|
|
MAXPTS=JJ+1
|
|
XMAP(MAXPTS+1)= VOID
|
|
jlint=jj+1
|
|
KLINT=1
|
|
LINTYP(1)=2
|
|
else
|
|
|
|
! READ AN RM1 FILE AS A MAP FILE
|
|
|
|
! first headers
|
|
jlint=0
|
|
READ(IMP,'(a80)') alin
|
|
READ(IMP,5010) IPP,nnrl8
|
|
5010 FORMAT( 30x,i5,60x,i10)
|
|
READ(IMP,'(a80)') alin
|
|
IF(IPP .GT. 0) READ(IMP,'(a80)') ALIN
|
|
|
|
! next elements
|
|
|
|
230 CONTINUE
|
|
read(imp,'(a80)',end=300) ALIN
|
|
|
|
IF(ALIN(6:20) .EQ. ' ') GO TO 250
|
|
if(mod(nnrl8,2) .eq. 0) then
|
|
READ(ALIN,'(10I5)',END=250) J, (NTMP(K),K=1,9)
|
|
else
|
|
READ(ALIN,'(10I6)',END=250) J, (NTMP(K),K=1,9)
|
|
endif
|
|
NOPEL(J,1)=NTMP(1)
|
|
NOPEL(J,2)=NTMP(3)
|
|
NOPEL(J,3)=NTMP(5)
|
|
NELTS=MAX(J,NELTS)
|
|
GO TO 230
|
|
|
|
! finally nodes
|
|
250 CONTINUE
|
|
read(imp,'(a80)',end=300) ALIN
|
|
if(ALIN(11:30) .eq. ' ') go to 300
|
|
if(nnrl8 .lt. 2) then
|
|
READ(alin,'(I10,3F10.0)') J, CX, CY,BELEV
|
|
|
|
else
|
|
READ(alin,'(I10,2f20.0,F10.0)') J, CX, CY, BELEV
|
|
|
|
endif
|
|
xmap(j)=cx
|
|
CMAP(J,1)=CX
|
|
ymap(j)=cy
|
|
CMAP(J,2)=CY
|
|
val(j)=belev
|
|
jlint=max(j,jlint)
|
|
|
|
GO TO 250
|
|
|
|
300 maxpts=jlint
|
|
klint=1
|
|
lintyp(1)=2
|
|
ENDIF
|
|
|
|
!IPK FEB02 SCALE NEW VALUES
|
|
|
|
IF(IFIRST .EQ. 2 .and. IMP .NE. 113) THEN
|
|
DO K=JSTT+1,MAXPTS
|
|
IF (CMAP(K,1) .GT. VDX) THEN
|
|
CMAP(K,1) = (CMAP(K,1)+XS)/TXSCAL
|
|
CMAP(K,2) = (CMAP(K,2)+YS)/TXSCAL
|
|
ENDIF
|
|
END DO
|
|
ENDIF
|
|
CLOSE(IMP)
|
|
return
|
|
END
|
|
!
|
|
!***********************************************************************
|
|
!
|
|
SUBROUTINE RDELEM(IUNIT)
|
|
!
|
|
USE BLK1MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
INCLUDE 'BFILES.I90'
|
|
CHARACTER*1 AA,ANS
|
|
CHARACTER*32 ANS32
|
|
CHARACTER*81 DLIN
|
|
CHARACTER*150 DLIN1
|
|
CHARACTER*3 ID
|
|
!cipk aug00
|
|
CHARACTER*80 LIND
|
|
CHARACTER*25 BLANK
|
|
CHARACTER*31 MESG
|
|
DIMENSION NTMP(9),ATT(9)
|
|
!
|
|
DATA IFIRST / 0 /
|
|
DATA IERRL /0/
|
|
DATA BLANK /' '/
|
|
!ipk jul94 add a line
|
|
MEL=MAXE
|
|
!cipk aug00
|
|
ylv=7.5
|
|
!
|
|
! Read in existing elements
|
|
!
|
|
IF (IFIRST .EQ. 0) THEN
|
|
!
|
|
! Initialize arrays
|
|
!
|
|
VOID = - 1.0E+10
|
|
VDX = -1.E+9
|
|
IF(IIN .EQ. 10) NE = 0
|
|
IFIRST = 1
|
|
ENDIF
|
|
ISTART=0
|
|
NTMP=0
|
|
ATT=0.
|
|
!
|
|
IF(IUNIT .EQ. 0) RETURN
|
|
IF(IUNIT .EQ. 10) THEN
|
|
|
|
IF(IGFG .GT. 0) REWIND IUNIT
|
|
JZ=0
|
|
!ipk oct96 move around login to allow long length files
|
|
10 CONTINUE
|
|
IF(IGFG .EQ. 0 .AND. ITRIAN .EQ. 0) THEN
|
|
READ(IUNIT,'(A81)',END=98) DLIN
|
|
!ipk mar04 IF(DLIN(6:20) .EQ. BLANK .AND. IERRL .EQ. 0) THEN
|
|
IF(DLIN(7:20) .EQ. BLANK .AND. IERRL .EQ. 0) THEN
|
|
GO TO 175
|
|
!ipk dec97 generalize to allow multiple errors
|
|
!ipk dec97 ELSEIF(IERRL .EQ. 1) THEN
|
|
ELSEIF(IERRL .EQ. 1 .and. dlin(6:20) .eq. blank) THEN
|
|
CALL SETD(23)
|
|
!cipk aug00
|
|
WRITE(lind,6000)
|
|
6000 FORMAT(' Press enter to exit')
|
|
call symbl &
|
|
& (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
ndig=1
|
|
CALL GTCHARX(ANS32,IJNK,5.0,4.0)
|
|
CALL Quit_Pgm
|
|
STOP
|
|
|
|
ENDIF
|
|
ifree=1
|
|
do j=1,10
|
|
if(dlin(j:j) .eq. ',') then
|
|
ifree=0
|
|
endif
|
|
enddo
|
|
if(ifree .eq. 1) then
|
|
if(mod(ntempin,2) .eq. 0) then
|
|
READ(DLIN,'(10I5,F10.3,I5)',END=98) J, (NTMP(K),K=1,9),THT &
|
|
& ,NTEMP
|
|
else
|
|
READ(DLIN,'(10I6,F10.3,I6)',END=98) J, (NTMP(K),K=1,9),THT &
|
|
& ,NTEMP
|
|
endif
|
|
else
|
|
READ(DLIN,*,END=98) J, (NTMP(K),K=1,9),THT &
|
|
& ,NTEMP
|
|
endif
|
|
ELSEIF(ITRIAN .EQ. 1) THEN
|
|
IF(ISTART .EQ. 0) THEN
|
|
REWIND(IUNIT)
|
|
READ(IUNIT,*) NE,NCNTR,NATTR
|
|
ISTART=1
|
|
NMESS=2
|
|
INATTR=1
|
|
call GETINT(INATTR)
|
|
NMESS=0
|
|
ENDIF
|
|
READ(IUNIT,*) J,(NTMP(K),K=1,NCNTR),(ATT(K),K=1,NATTR)
|
|
IF(J .EQ. 0) THEN
|
|
JZ=1
|
|
J=NE
|
|
ENDIF
|
|
ELSE
|
|
!ipk jun02 Allow for GFGEN input
|
|
NUMMAT=0
|
|
DO ICOUNTC=1,700000
|
|
DO JJ=1,150
|
|
DLIN1(JJ:JJ)=' '
|
|
ENDDO
|
|
READ(IUNIT,'(A3,A150)', END=175) ID,DLIN1
|
|
IF(ID(1:3) .EQ. 'NUM') THEN
|
|
READ(DLIN1(20:40),*) NUMMAT
|
|
NUMMAT=NUMMAT-1
|
|
ENDIF
|
|
IF(ID(1:2) .EQ. 'ND') CYCLE
|
|
IF(ID .EQ. 'GE ') THEN
|
|
! Count the number of variables
|
|
I=0
|
|
ICOUNT=0
|
|
75 CONTINUE
|
|
IF(DLIN1(I+1:I+1) .NE. ' ') THEN
|
|
GO TO 80
|
|
ELSE
|
|
I=I+1
|
|
GO TO 75
|
|
ENDIF
|
|
80 I=I+1
|
|
IF(I .EQ. 151) THEN
|
|
ICOUNT =ICOUNT+1
|
|
GO TO 90
|
|
ENDIF
|
|
IF(DLIN1(I:I) .EQ. ' ' .OR. DLIN1(I:I) .EQ. ',') THEN
|
|
ICOUNT=ICOUNT+1
|
|
85 CONTINUE
|
|
IF(I+1 .EQ. 151) GO TO 90
|
|
IF(DLIN1(I+1:I+1) .EQ. ' ') THEN
|
|
I=I+1
|
|
GO TO 85
|
|
ELSE
|
|
GO TO 80
|
|
ENDIF
|
|
ELSE
|
|
GO TO 80
|
|
ENDIF
|
|
ELSEIF(ID .EQ. 'E3T') THEN
|
|
ICOUNT=4+NUMMAT
|
|
GO TO 90
|
|
ELSEIF(ID .EQ. 'E4Q') THEN
|
|
ICOUNT=5+NUMMAT
|
|
GO TO 90
|
|
ELSEIF(ID .EQ. 'E6T') THEN
|
|
ICOUNT=7+NUMMAT
|
|
GO TO 90
|
|
ELSEIF(ID .EQ. 'E8Q') THEN
|
|
ICOUNT=9+NUMMAT
|
|
GO TO 90
|
|
ENDIF
|
|
ENDDO
|
|
90 CONTINUE
|
|
IF(ICOUNT .GT. 10) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,9),THT
|
|
ELSEIF(IGFG .EQ. 3) THEN
|
|
IF(ICOUNT .EQ. 3) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,5,2)
|
|
NTMP(9)=1
|
|
NTMP(2)=0
|
|
NTMP(4)=0
|
|
NTMP(6)=0
|
|
NTMP(7)=0
|
|
NTMP(8)=0
|
|
ELSEIF(ICOUNT .EQ. 4 .AND. NUMMAT .EQ. 0) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,7,2)
|
|
IF(NTMP(7) .EQ. 0) then
|
|
NTMP(9)=1
|
|
else
|
|
ntmp(9)=ntmp(7)
|
|
endif
|
|
NTMP(2)=0
|
|
NTMP(4)=0
|
|
NTMP(6)=0
|
|
NTMP(7)=0
|
|
NTMP(8)=0
|
|
ELSEIF(ICOUNT .EQ. 4 .AND. NUMMAT .LT. 0) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,7,2)
|
|
NTMP(9)=1
|
|
NTMP(2)=0
|
|
NTMP(4)=0
|
|
NTMP(6)=0
|
|
NTMP(7)=0
|
|
NTMP(8)=0
|
|
ELSEIF(ICOUNT .EQ. 5) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,9,2)
|
|
IF(NTMP(9) .EQ. 0) NTMP(9)=1
|
|
NTMP(2)=0
|
|
NTMP(4)=0
|
|
NTMP(6)=0
|
|
NTMP(8)=0
|
|
ELSEIF(ICOUNT .EQ. 7) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,6),NTMP(9)
|
|
IF(NTMP(9) .EQ. 0) NTMP(9)=1
|
|
NTMP(7)=0
|
|
NTMP(8)=0
|
|
ELSEIF(ICOUNT .EQ. 9) THEN
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,9)
|
|
IF(NTMP(9) .EQ. 0) NTMP(9)=1
|
|
ENDIF
|
|
ELSE
|
|
READ(DLIN1,*) J, (NTMP(K),K=1,9)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
!c IF (J .GT. 9000 .AND. IERRL .EQ. 0) THEN
|
|
!c GO TO 175
|
|
!IPK OCT96 END CHANGES
|
|
IF (J .GE. MEL) THEN
|
|
CALL SETD(23)
|
|
!cipk aug00
|
|
WRITE(lind,*) ' Element number exceeds MAXE in RDELEM'
|
|
call symbl &
|
|
& (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
ndig=1
|
|
WRITE(90,*) ' Element number exceeds MAXE in RDELEM'
|
|
WRITE(lind,6000)
|
|
CALL GTCHARX(ANS32,IJNK,5.0,4.0)
|
|
CALL Quit_Pgm
|
|
STOP
|
|
ENDIF
|
|
!
|
|
! Check to ensure there are no duplicate numbers in input stream
|
|
! of element connections
|
|
!
|
|
DO 12 K=1,7
|
|
IF(NTMP(K) .EQ. 0) GO TO 12
|
|
DO 11 L=K+1,8
|
|
IF(NTMP(K) .EQ. NTMP(L)) THEN
|
|
CALL SETD(23)
|
|
!cipk aug00
|
|
! WRITE(90,5000) J
|
|
! write(90,5001) (NTMP(MM),MM=1,8)
|
|
! WRITE(lind,5000) J
|
|
! call symbl &
|
|
! & (1.1,ylv-0.3,0.25,lind,0.0,80)
|
|
! ylv=ylv-0.3
|
|
! if(ylv .lt. 0.4) then
|
|
! call clscrn
|
|
! ylv=7.5
|
|
! endif
|
|
! write(lind,5001) (NTMP(MM),MM=1,8)
|
|
! call symbl &
|
|
! & (1.1,ylv-0.3,0.25,lind,0.0,80)
|
|
! ylv=ylv-0.3
|
|
! if(ylv .lt. 0.4) then
|
|
! call clscrn
|
|
! ylv=7.5
|
|
! endif
|
|
5000 FORMAT(' **ERROR** Nodes at element number',i5,' are duplicated')
|
|
5001 FORMAT(' node list as follows ',8i5)
|
|
! IERRL=1
|
|
DO KK=1,8
|
|
NOP(J,KK) = NTMP(KK)
|
|
ENDDO
|
|
IMAT(J)=NTMP(9)
|
|
call eltdisp(j)
|
|
DO KK=1,8
|
|
NTMP(KK) = NOP(J,KK)
|
|
ENDDO
|
|
NTMP(9)=IMAT(J)
|
|
GO TO 13
|
|
ENDIF
|
|
11 CONTINUE
|
|
12 CONTINUE
|
|
13 CONTINUE
|
|
IF(ITRIAN .EQ. 0) THEN
|
|
DO 15 K=1,8
|
|
NOP(J,K) = NTMP(K)
|
|
ND = NTMP(K)
|
|
IF (ND .GT. 0) THEN
|
|
INEW(ND) = 2
|
|
NP = MAX(NP,ND)
|
|
ENDIF
|
|
15 CONTINUE
|
|
IMAT(J) = NTMP(9)
|
|
THTA(J)=0
|
|
IEM(J) = j
|
|
ELSE
|
|
DO K=1,3
|
|
NOP(J,2*K-1)=NTMP(K)
|
|
IF(NCNTR .EQ. 3) THEN
|
|
NOP(J,2*K)=0
|
|
ELSEIF(NCNTR .EQ. 6) THEN
|
|
NOP(J,2*K)=NTMP(K+3)
|
|
ENDIF
|
|
ND = NTMP(K)
|
|
IF (ND .GT. 0) THEN
|
|
INEW(ND) = 2
|
|
NP = MAX(NP,ND)
|
|
ENDIF
|
|
ENDDO
|
|
NOP(J,7)=0
|
|
NOP(J,8)=0
|
|
IF(NATTR .GT. 0) THEN
|
|
IMAT(J)=ATT(1)+0.5
|
|
IF(NATTR .GT. 1) THEN
|
|
THTA(J)=ATT(2)
|
|
IF(NATTR .GT. 2) THEN
|
|
IEM(J)=ATT(3)
|
|
ELSE
|
|
IEM(J)=0
|
|
ENDIF
|
|
ELSE
|
|
THTA(J)=0.
|
|
IEM(J)=0
|
|
ENDIF
|
|
ELSE
|
|
IMAT(J)=INATTR
|
|
THTA(J)=0.
|
|
IEM(J)=0
|
|
ENDIF
|
|
ENDIF
|
|
NCN = 2
|
|
IF (NOP(J,3) .NE. 0) NCN = 3
|
|
IF (NOP(J,4) .NE. 0) NCN = 4
|
|
IF (NOP(J,5) .NE. 0 .AND. NOP(J,4) .NE. 0) NCN = 5
|
|
IF (NOP(J,5) .NE. 0 .AND. NOP(J,4) .EQ. 0) NCN = 6
|
|
IF (NOP(J,6) .NE. 0) NCN = 6
|
|
IF (NOP(J,7) .NE. 0) NCN = 8
|
|
NCORN(J) = NCN
|
|
IESKP(J) = 0
|
|
DO 25 K=2,NCN,2
|
|
ND = NTMP(K)
|
|
IF (ND .GT. 0) THEN
|
|
IF(NCN .EQ. 5 .AND. K .EQ. 4) GO TO 25
|
|
WD(ND)=0.
|
|
ENDIF
|
|
25 CONTINUE
|
|
IF(ITRIAN .EQ. 1) THEN
|
|
IF((JZ .EQ. 0 .AND. J .EQ. NE) .OR. (JZ .EQ. 1 .AND. J .EQ. NE-1)) THEN
|
|
CLOSE(IUNIT)
|
|
DO L=255,1,-1
|
|
IF(FNAMKEP(L:L) .EQ. '.') THEN
|
|
FNAMKEP(L+1:L+1)='n'
|
|
FNAMKEP(L+2:L+2)='o'
|
|
FNAMKEP(L+3:L+3)='d'
|
|
FNAMKEP(L+4:L+4)='e'
|
|
OPEN(IUNIT,FILE=FNAMKEP,STATUS='OLD',ACTION='READ')
|
|
IF(JZ .EQ. 1) THEN
|
|
READ(IUNIT,*) NPPP,NDUM,NATTR
|
|
REWIND(IUNIT)
|
|
DO J=1,NE
|
|
DO K=1,5,2
|
|
IF(NOP(J,K) .EQ. 0) NOP(J,K)=NPPP
|
|
ENDDO
|
|
ENDDO
|
|
ENDIF
|
|
GO TO 175
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
ENDIF
|
|
NE = MAX(J,NE)
|
|
!
|
|
GOTO 10
|
|
!
|
|
98 CONTINUE
|
|
ELSE
|
|
IF(IUNIT .EQ. 11) THEN
|
|
!IPK FEB03 READ(IUNIT) ((NOP(J,K),K=1,8),IMAT(J),THTA(J),J=1,NE)
|
|
|
|
CALL RDRST(2,IUNIT)
|
|
ENDIF
|
|
DO 140 J=1,NE
|
|
IF(IMAT(J) .EQ. 0) GO TO 140
|
|
NCN = 2
|
|
IF (NOP(J,3) .NE. 0) NCN = 3
|
|
IF (NOP(J,4) .NE. 0) NCN = 4
|
|
IF (NOP(J,5) .NE. 0 .AND. NOP(J,4) .NE. 0) NCN = 5
|
|
IF (NOP(J,5) .NE. 0 .AND. NOP(J,4) .EQ. 0) NCN = 6
|
|
IF (NOP(J,6) .NE. 0) NCN = 6
|
|
IF (NOP(J,7) .NE. 0) NCN = 8
|
|
NCORN(J) = NCN
|
|
IESKP(J) = 0
|
|
! DO 125 K=2,NCN,2
|
|
! ND = NOP(J,K)
|
|
! IF (ND .GT. 0) THEN
|
|
! IF(NCN .EQ. 5 .AND. K .EQ. 4) GO TO 125
|
|
! WD(ND)=0.
|
|
! ENDIF
|
|
! 125 CONTINUE
|
|
140 CONTINUE
|
|
ENDIF
|
|
!
|
|
! Set up junction counter array
|
|
!
|
|
175 CONTINUE
|
|
DO 180 N=1,NP
|
|
IJUN(N)=0
|
|
180 END DO
|
|
DO 200 N=1,NE
|
|
!ipkoct93 IF(IMAT(N) .GT. 900) THEN
|
|
IF(IMAT(N) .GT. 900 .AND. IMAT(N) .LT. 904) THEN
|
|
DO 190 K=1,NCORN(N)
|
|
IF(NOP(N,K) .GT. 0) THEN
|
|
IJUN(NOP(N,K))=K
|
|
ENDIF
|
|
190 CONTINUE
|
|
ENDIF
|
|
200 END DO
|
|
WRITE(MESG,6010) NE
|
|
6010 FORMAT(I7,' Elements read from file')
|
|
CALL SYMBL(1.1,4.3,0.25,mesg,0.0,31)
|
|
RETURN
|
|
END
|
|
SUBROUTINE CHKCON(IREP)
|
|
USE WINTERACTER
|
|
!
|
|
! Check connectivity of grid
|
|
!
|
|
!-
|
|
USE BLK1MOD
|
|
USE BLK2MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
! INCLUDE 'BLK2.COM'
|
|
CHARACTER*80 LIND
|
|
!
|
|
CHARACTER*1 ANS
|
|
! CHARACTER*60 STRELS
|
|
! DATA STRELS/' You have tried to save before executing "FILL"'/
|
|
!
|
|
! Test to make sure fill has been executed.
|
|
!
|
|
IF(IREP .EQ. 1) GO TO 100
|
|
ylv=7.5
|
|
IREP = 1
|
|
DO 70 N=1,NE
|
|
IF(IMAT(N) .GT. 0) THEN
|
|
DO 60 M=2,NCORN(N),2
|
|
IF(NOP(N,M) .EQ. 0 .AND. IMAT(N) .NE. 999) THEN
|
|
CALL GETSVPN(ANS)
|
|
IF(ANS .EQ. 'T' .OR. ANS .EQ. 't') THEN
|
|
IREP = 0
|
|
!ipk nov97 add 0
|
|
CALL PLOTOT(0)
|
|
CALL HEDR
|
|
RETURN
|
|
ELSEIF(ANS .EQ. 'S' .OR. ANS .EQ. 's') THEN
|
|
!ipk nov97 add (0)
|
|
CALL PLOTOT(0)
|
|
CALL HEDR
|
|
IREP = 1
|
|
return
|
|
! go to 100
|
|
!ipk jun04 RETURN
|
|
ELSEIF(ANS .EQ. 'F' .OR. ANS .EQ. 'f') THEN
|
|
!ipk aug02
|
|
CALL FILM(0)
|
|
IREP = 1
|
|
ELSE
|
|
IREP = 2
|
|
ENDIF
|
|
ENDIF
|
|
60 CONTINUE
|
|
ENDIF
|
|
70 END DO
|
|
100 CONTINUE
|
|
|
|
|
|
IDUP=0
|
|
ISWW=1
|
|
CALL KCON(ISWW)
|
|
call kcon(1)
|
|
do n=1,ne
|
|
if(imat(n) .lt. 900 .and. imat(n) .gt. 0) then
|
|
ndup=0
|
|
do j=2,ncorn(n),2
|
|
if(nop(n,j) .eq. 0) go to 120
|
|
if(ndelm(nop(n,j)) .gt. 2) then
|
|
ndup=ndup+1
|
|
endif
|
|
enddo
|
|
if(ndup .eq. ncorn(n)/2) then
|
|
IDUP=1
|
|
write(90,*) ' DUPLICATE ELEMENT',n
|
|
endif
|
|
endif
|
|
enddo
|
|
|
|
120 continue
|
|
|
|
IF(IDUP .EQ. 1) THEN
|
|
!cipk aug00
|
|
|
|
Call WMessageBox(1,3,0,'Duplicate elements have been found'//Char(13)//&
|
|
'See file MESSGEN.OUT for details'//'Press OK to continue save',&
|
|
'ERROR IN NETWORK!!')
|
|
IF(WinfoDialog(ExitButtonCommon) .eq. CommonOK) then
|
|
CALL HEDR
|
|
CALL PLOTOT(0)
|
|
IREP = 1
|
|
ELSE
|
|
IREP = 0
|
|
CALL HEDR
|
|
!ipk nov97 add (0)
|
|
CALL PLOTOT(0)
|
|
RETURN
|
|
ENDIF
|
|
endif
|
|
|
|
!
|
|
! Test for areas of each element
|
|
!
|
|
INEG = 0
|
|
DO 250 N=1,NE
|
|
IF(IMAT(N) .GT. 0 .AND. NCORN(N) .GT. 5) THEN
|
|
J1=NOP(N,1)
|
|
J2=NOP(N,3)
|
|
J3=NOP(N,5)
|
|
AREA=(CORD(J2,1)-CORD(J1,1))*(CORD(J3,2)-CORD(J1,2))- &
|
|
& (CORD(J3,1)-CORD(J1,1))*(CORD(J2,2)-CORD(J1,2))
|
|
IF(AREA .LT. 0.) THEN
|
|
! IF(INEG .EQ. 0) CALL CLSCRN
|
|
! CALL SETD(23)
|
|
!cipk aug00
|
|
! WRITE(lind,*) 'Negative area for element number',N
|
|
WRITE(90,*) ' NEGATIVE AREA FOR ELEMENT NUMBER',N
|
|
! if(ylv .lt. 0.4) then
|
|
! ylv=7.5
|
|
! call clscrn
|
|
! endif
|
|
! call symbl &
|
|
! & (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
! ylv=ylv-0.3
|
|
! ndig=1
|
|
INEG = 1
|
|
GO TO 250
|
|
ENDIF
|
|
IF(NCORN(N) .EQ. 8) THEN
|
|
J1=NOP(N,3)
|
|
J2=NOP(N,5)
|
|
J3=NOP(N,7)
|
|
AREA=(CORD(J2,1)-CORD(J1,1))*(CORD(J3,2)-CORD(J1,2))- &
|
|
& (CORD(J3,1)-CORD(J1,1))*(CORD(J2,2)-CORD(J1,2))
|
|
IF(AREA .LT. 0.) THEN
|
|
! IF(INEG .EQ. 0) CALL CLSCRN
|
|
! CALL SETD(23)
|
|
!cipk aug00
|
|
! WRITE(lind,*) 'Negative area for element number',N
|
|
WRITE(90,*) 'Negative area for element number',N
|
|
! if(ylv .lt. 0.4) then
|
|
! ylv=7.5
|
|
! call clscrn
|
|
! endif
|
|
! call symbl &
|
|
! & (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
! ylv=ylv-0.3
|
|
! ndig=1
|
|
INEG = 1
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
250 END DO
|
|
|
|
IF(INEG .EQ. 1) THEN
|
|
!cipk aug00
|
|
|
|
Call WMessageBox(1,3,0,'Negative Areas have been found'//Char(13)//&
|
|
'See file MESSGEN.OUT for details'//'Press OK to continue save',&
|
|
'ERROR IN NETWORK!!')
|
|
|
|
! WRITE(lind,*) 'If you wish to terminate save enter (t)'
|
|
! if(ylv .lt. 0.7) then
|
|
! ylv=7.5
|
|
! call clscrn
|
|
! endif
|
|
! call symbl &
|
|
! & (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
! ylv=ylv-0.3
|
|
! WRITE(lind,*) 'If you still wish to save enter (s)'
|
|
! call symbl &
|
|
! & (1.1,ylv-0.3,0.20,lind,0.0,80)
|
|
|
|
!ipk jun96 change * to (a)
|
|
|
|
!cipkaug00 READ(*,'(A)') ANS
|
|
! READ(*,*) ANS
|
|
! CALL GTCHARX(ANS,IJNK,5.0,4.0)
|
|
|
|
! CALL SETD(2)
|
|
! IF(ANS .EQ. 'T' .OR. ANS .EQ. 't') THEN
|
|
IF(WinfoDialog(ExitButtonCommon) .eq. CommonOK) then
|
|
CALL HEDR
|
|
CALL PLOTOT(0)
|
|
IREP = 1
|
|
RETURN
|
|
ELSE
|
|
IREP = 0
|
|
CALL HEDR
|
|
!ipk nov97 add (0)
|
|
CALL PLOTOT(0)
|
|
RETURN
|
|
ENDIF
|
|
! ELSEIF(ANS .EQ. 'S' .OR. ANS .EQ. 's') THEN
|
|
! CALL HEDR
|
|
!ipknov97 add (0)
|
|
! CALL PLOTOT(0)
|
|
! IREP = 1
|
|
! RETURN
|
|
! ENDIF
|
|
ENDIF
|
|
|
|
RETURN
|
|
END
|
|
!ipk oct98 update call
|
|
SUBROUTINE WRTMAP(isw)
|
|
!
|
|
! Write map file in binary format
|
|
!
|
|
USE BLKMAP
|
|
USE BLK1MOD
|
|
USE BLK2MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
! INCLUDE 'BLK2.COM'
|
|
character*3 ends
|
|
!
|
|
!
|
|
! Open binary map file
|
|
!
|
|
IF(ISW .GT. 90) THEN
|
|
IMPF=ISW
|
|
ELSE
|
|
impf=93
|
|
ENDIF
|
|
|
|
!ipk oct98
|
|
if(isw .eq. 0) then
|
|
OPEN(IMPF ,FILE=mpnam,STATUS='unknown',form='unformatted')
|
|
!IPK FRB03
|
|
else
|
|
rewind impf
|
|
endif
|
|
|
|
if(isw .eq. 2) then
|
|
impf=94
|
|
aninin=-9999.
|
|
zero=0.
|
|
ends='END'
|
|
if(lintyp(1) .eq. 0 .or. lintyp(1) .eq. 1) then
|
|
write(impf,*) lintyp(1),aninin
|
|
ifm=1
|
|
elseif(lintyp(1) .eq. 2) then
|
|
write(impf,*) lintyp(1),zero
|
|
ifm=2
|
|
else
|
|
write(impf,*) lintyp(1),val(1)
|
|
ifm=1
|
|
endif
|
|
ilin=1
|
|
do J=1,maxpts
|
|
if(xmap(J) .gt. vdx) then
|
|
if(ifm .eq. 1) then
|
|
write(impf,*) xmap(j),ymap(j)
|
|
else
|
|
write(impf,*) xmap(j),ymap(j),val(j)
|
|
endif
|
|
if(j .eq. maxpts) write(impf,'(a3)') ends
|
|
else
|
|
write(impf,'(a3)') ends
|
|
ilin=ilin+1
|
|
if(j .eq. maxpts) go to 200
|
|
if(lintyp(ilin) .eq. 0 .or. lintyp(ilin) .eq. 1) then
|
|
write(impf,*) lintyp(ilin),aninin
|
|
ifm=1
|
|
elseif(lintyp(ilin) .eq. 2) then
|
|
write(impf,*) lintyp(ilin),zero
|
|
ifm=2
|
|
else
|
|
write(impf,*) lintyp(ilin),val(j+1)
|
|
ifm=1
|
|
endif
|
|
endif
|
|
|
|
enddo
|
|
200 continue
|
|
write(impf,'(a3)') ends
|
|
return
|
|
endif
|
|
jlint=maxpts
|
|
write(impf) klint,jlint,(xmap(j),ymap(j),val(j),j=1,jlint) &
|
|
& ,(lintyp(k),k=1,klint)
|
|
! write(156,8888) klint,jlint,(j,xmap(j),ymap(j),val(j),j=1,jlint)
|
|
! write(156,8887)&
|
|
! & ,(k,lintyp(k),k=1,klint)
|
|
!8888 format('start',2i5/(i6,3e15.6))
|
|
!8887 format('lin'/(2i8))
|
|
|
|
if(nelts .gt. 0) then
|
|
write(impf) nelts,((nopel(j,k),k=1,3),j=1,nelts)
|
|
endif
|
|
return
|
|
END
|
|
|
|
SUBROUTINE GETSVPN(ANS)
|
|
|
|
use winteracter
|
|
|
|
implicit none
|
|
|
|
include 'D.inc'
|
|
|
|
!
|
|
! Declare window-type and message variables
|
|
!
|
|
TYPE(WIN_STYLE) :: WINDOW
|
|
|
|
TYPE(WIN_MESSAGE) :: MESSAGE
|
|
INTEGER :: IPOS
|
|
INTEGER :: JNK,ierr
|
|
CHARACTER*1 :: ANS,CDAT(4)
|
|
DATA CDAT/'s','t','f','c'/
|
|
call wdialogload(IDD_DIALOG07)
|
|
ierr=infoerror(1)
|
|
|
|
|
|
call wdialogputRadioButton(idf_radio1)
|
|
|
|
|
|
CALL WDialogSelect(IDD_DIALOG07)
|
|
ierr=infoerror(1)
|
|
|
|
CALL WDialogShow(-1,-1,0,Modal)
|
|
ierr=infoerror(1)
|
|
|
|
|
|
do
|
|
IF (WInfoDialog(ExitButton) .EQ. IDOK) THEN
|
|
|
|
call wdialoggetradiobutton(idf_radio1,ipos)
|
|
ans=cdat(ipos)
|
|
return
|
|
endif
|
|
!IPK SEP02
|
|
ans=cdat(1)
|
|
return
|
|
enddo
|
|
RETURN
|
|
END
|
|
|
|
!***************************************************************************************
|
|
|
|
subroutine wrtgfg(IOF)
|
|
|
|
USE BLK1MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
|
|
IOF=IOT
|
|
WRITE(IOF,5000) TITLE
|
|
5000 format('T1'/'T2'/'T3 ',A80)
|
|
WRITE(IOF,5001)
|
|
5001 FORMAT('SI 1')
|
|
WRITE(IOF,5002)
|
|
5002 FORMAT('$L 3 0 6 0')
|
|
!
|
|
! CURRENTLY DISABLED
|
|
!
|
|
! IF(NLST .GT. 0) THEN
|
|
! DO J=1,NLST
|
|
! IF(LLIST(J) .GT. 0) THEN
|
|
! IF(J .EQ. 1) THEN
|
|
! ILIST(J,LLIST(J))=-ABS(ILIST(J,LLIST(J)))
|
|
! ENDIF
|
|
! WRITE(IOF,5003) (ILIST(J,I),I=1,LLIST(J))
|
|
! 5003 FORMAT('GO 2',11I6/('GO',12I6))
|
|
! ENDIF
|
|
! ENDDO
|
|
! ENDIF
|
|
DO J=1,NE
|
|
IF (IMAT(J) .NE. 0) THEN
|
|
IF(IECHG .EQ. 0) IEM(J)=J
|
|
WRITE(IOF,5004) &
|
|
& J, (NOP(J,K),K=1,8), IMAT(J),THTA(J)
|
|
5004 FORMAT('GE',10(1X,I6),F17.4)
|
|
ENDIF
|
|
ENDDO
|
|
DO J=1,NP
|
|
IF (INEW(J) .EQ. 1) THEN
|
|
WRITE(IOF, 5005) &
|
|
& J,XUSR(J),YUSR(J),WD(J)
|
|
5005 FORMAT('GNN',I6,2F14.3,F10.3)
|
|
ENDIF
|
|
ENDDO
|
|
DO J=1,NP
|
|
IF (INEW(J) .EQ. 1) THEN
|
|
IF(WIDTH(J) .GT. 0.) THEN
|
|
WRITE(IOF, 5006) &
|
|
& J, &
|
|
& WIDTH(J),SS1(J),SS2(J),WIDS(J)
|
|
5006 FORMAT('GWN',I6,1X,F9.1,1X,2F6.2,1X,F9.1)
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
|
|
|
|
return
|
|
end
|
|
|
|
subroutine wrtele(IOF,itr)
|
|
|
|
USE BLK1MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
|
|
IOF=IOT
|
|
NVRT=2
|
|
if(itr .eq. 1) then
|
|
NEL=NE
|
|
NATT=2
|
|
IF(NOP(1,2) .EQ. 0) THEN
|
|
NVRT=3
|
|
ELSE
|
|
NVRT=6
|
|
ENDIF
|
|
write(IOF,6001) NEL,NVRT,NATT
|
|
DO N=1,NE
|
|
IF(NVRT .EQ. 3) THEN
|
|
WRITE(IOF,6002) N,(NOP(N,J),J=1,5,2),IMAT(N),THTA(N)
|
|
ELSE
|
|
WRITE(IOF,6003) N,(NOP(N,J),J=1,5,2),(NOP(N,J),J=2,6,2),IMAT(N),THTA(N)
|
|
ENDIF
|
|
ENDDO
|
|
else
|
|
NPL=NP
|
|
NATT=1
|
|
write(IOF,6001) NPL,NVRT,NATT
|
|
DO N=1,NPL
|
|
WRITE(IOF,6004) N,XUSR(N),YUSR(N),WD(N)
|
|
ENDDO
|
|
|
|
endif
|
|
6001 FORMAT(I6,I2,I2,I2)
|
|
6002 FORMAT(I6,3(' ',I6),I5,' ',F6.2)
|
|
6003 FORMAT(I6,6(' ',I6),I5,' ',F6.2)
|
|
6004 FORMAT(I6,2F16.6,F11.4)
|
|
return
|
|
end
|
|
|
|
|
|
SUBROUTINE RDRST(IENT,IUNIT)
|
|
|
|
USE BLK1MOD
|
|
! INCLUDE 'BLK1.COM'
|
|
CHARACTER*80 ALINE
|
|
|
|
IF(IENT .EQ. 1) THEN
|
|
! READ(IUNIT) IDUMMY1
|
|
READ(IUNIT) TITLE,NP,NE
|
|
! READ(IUNIT) IDUMMY1,IDUMMY2
|
|
READ(IUNIT) ISLP,IPRT,IPNN,IPEN,IPO,IRO,IPP,IRFN &
|
|
& ,IGEN,NXZL,NITST,ISCTXT,IFILL,IALTGM,NLAYD,xadded,yadded,ntempin
|
|
! READ(IUNIT) ,IDUMMY2,IDUMMY3
|
|
READ(IUNIT) HORIZ,VERT,XSALE,YSALE,XFACT,YFACT,AR,ANG
|
|
IPP=0
|
|
NTEMPIN=2
|
|
IF(IPP .GT. 0) THEN
|
|
! READ(IIN) IDUMMY3,IDUMMY4
|
|
READ(IIN) ALINE
|
|
ENDIF
|
|
|
|
ELSEIF(IENT .EQ. 2) THEN
|
|
! READ(IUNIT) IDUMMY4,IDUMMY5
|
|
READ(IUNIT) ((NOP(J,K),K=1,8),IMAT(J),THTA(J),J=1,NE)
|
|
DO J=1,NE
|
|
IF(IMAT(J) .NE. 0) THEN
|
|
NCN = 2
|
|
IF (NOP(J,3) .NE. 0) NCN = 3
|
|
IF (NOP(J,4) .NE. 0) NCN = 4
|
|
IF (NOP(J,5) .NE. 0 .AND. NOP(J,4) .NE. 0) NCN = 5
|
|
IF (NOP(J,5) .NE. 0 .AND. NOP(J,4) .EQ. 0) NCN = 6
|
|
IF (NOP(J,6) .NE. 0) NCN = 6
|
|
IF (NOP(J,7) .NE. 0) NCN = 8
|
|
NCORN(J) = NCN
|
|
IESKP(J) = 0
|
|
ENDIF
|
|
ENDDO
|
|
ELSE
|
|
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
READ(IUNIT) &
|
|
& (XUSR(J),YUSR(J),WD(J),WIDTH(J),SS1(J),SS2(J),WIDS(J), &
|
|
& WIDBS(J),SSO(J),BS1(J),J=1,NP)
|
|
DO J=1,NP
|
|
CORD(J,1) = XUSR(J)
|
|
CORD(J,2) = YUSR(J)
|
|
INSKP(J)=0
|
|
INEW(J)=0
|
|
IF (CORD(J,1) .GT. VDX) THEN
|
|
INEW(J) = 1
|
|
ENDIF
|
|
ENDDO
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
READ(IUNIT) NLST
|
|
IF(NLST .GT. 0) THEN
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
READ(IUNIT) (LLIST(J),J=1,NLST), &
|
|
((ILIST(J,I),I=1,LLIST(J)),J=1,NLST)
|
|
ENDIF
|
|
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
READ(IUNIT) NENTRY,NLAYD,NCLM
|
|
if(nentry .eq. 0 .and. nlayd .eq. 0 .and. nclm .eq. 0) return
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
IF(NENTRY .GT. 0) THEN
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
READ(IUNIT) ((NEF(I,J),J=1,3),I=1,NENTRY)
|
|
ENDIF
|
|
IF(NLAYD .GT. 0) THEN
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
READ(IUNIT) (LAY(I),I=1,NP),((WTLAY(I,J),J=1,9),I=0,NP)
|
|
ENDIF
|
|
IF(NCLM .GT. 0) THEN
|
|
! READ(IUNIT) IDUMMY5,IDUMMY6
|
|
! NCLM=11
|
|
READ(IUNIT) ((ICCLN(I,J),J=1,350),I=1,NCLM)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN
|
|
END
|
|
|
|
SUBROUTINE ADJUSTMAP(MAXPLL)
|
|
!
|
|
! Generate continuity lines
|
|
!
|
|
|
|
USE WINTERACTER
|
|
USE BLKMAP
|
|
include 'd.inc'
|
|
|
|
!
|
|
! Declare window-type and message variables
|
|
!
|
|
TYPE(WIN_STYLE) :: WINDOW
|
|
|
|
TYPE(WIN_MESSAGE) :: MESSAGE
|
|
|
|
integer :: NTYP,NLOCC
|
|
|
|
|
|
call wdialogload(IDD_SETMAXMAP)
|
|
ierr=infoerror(1)
|
|
|
|
CALL WDialogSelect(IDD_SETMAXMAP)
|
|
ierr=infoerror(1)
|
|
|
|
CALL WDialogPutINTEGER(IDF_INTEGER1,MAXPLL)
|
|
|
|
CALL WDialogShow(-1,-1,0,Modal)
|
|
ierr=infoerror(1)
|
|
|
|
do
|
|
!
|
|
IF (WInfoDialog(ExitButton) .EQ. IDOK) THEN
|
|
|
|
CALL WDialogGetINTEGER(IDF_INTEGER1,MAXPLL)
|
|
|
|
GO TO 100
|
|
ENDIF
|
|
|
|
enddo
|
|
|
|
100 CONTINUE
|
|
return
|
|
end
|
|
|
|
SUBROUTINE RDESRI(alin,k,j)
|
|
use blkmap
|
|
use blk1mod
|
|
real*8 xorig,yorig,cellsize
|
|
character*80 alin
|
|
! READ HEADERS
|
|
read(alin(6:80),*) ncols
|
|
READ(IMP,'(A80)') ALIN
|
|
read(alin(6:80),*) nrows
|
|
READ(IMP,'(A80)') ALIN
|
|
read(alin(10:80),*) xorig
|
|
READ(IMP,'(A80)') ALIN
|
|
read(alin(10:80),*) yorig
|
|
READ(IMP,'(A80)') ALIN
|
|
read(alin(9:80),*) cellsize
|
|
READ(IMP,'(A80)') ALIN
|
|
read(alin(13:80),*) xnodat
|
|
ntot=ncols*nrows
|
|
read(imp,'(10f12.0)') (val(i),i=1,ntot)
|
|
ict=0
|
|
ikp=0
|
|
do n=1,nrows
|
|
ytemp=cellsize*(n-1)+yorig
|
|
do m=1,ncols
|
|
ict=ict+1
|
|
if(val(ict) .ne. xnodat) then
|
|
xtemp=cellsize*(m-1)+xorig
|
|
ikp=ikp+1
|
|
xmap(ikp)=xtemp
|
|
ymap(ikp)=ytemp
|
|
cmap(ikp,1)=xtemp
|
|
cmap(ikp,2)=ytemp
|
|
val(ikp)=val(ict)
|
|
endif
|
|
enddo
|
|
LINTYP(1)=2
|
|
k=2
|
|
j=ikp
|
|
enddo
|
|
RETURN
|
|
END
|
|
|
|
|
|
SUBROUTINE PARSELIN(DLININ,DLIN,ICLON,NCHARBL)
|
|
CHARACTER*150 DLIN,DLININ
|
|
CHARACTER*1 CTYPE(6)
|
|
INTEGER ICLON
|
|
DATA CTYPE/' ',',','\',':','/','&'/
|
|
IBAS=0
|
|
IPREV=1
|
|
ICLON=0
|
|
NCHARBL=0
|
|
DO K=1,75
|
|
DLIN(K:K)=CTYPE(1)
|
|
ENDDO
|
|
DO K=1,75
|
|
! IF DLININ = '&' RETURN
|
|
|
|
IF(DLININ(K:K) .EQ. CTYPE(6)) THEN
|
|
IF(IBAS .EQ. 0) RETURN
|
|
IF(DLIN(IBAS:IBAS) .EQ. CTYPE(2)) THEN
|
|
DLIN(IBAS:IBAS)= CTYPE(1)
|
|
ELSE
|
|
IBAS=IBAS+1
|
|
DLIN(IBAS:IBAS) =CTYPE(1)
|
|
NCHARBL=NCHARBL+1
|
|
ENDIF
|
|
|
|
RETURN
|
|
ENDIF
|
|
! IF(DLININ = BLANK
|
|
|
|
IF(DLININ(K:K) .EQ. CTYPE(1)) THEN
|
|
|
|
! TEST FOR PREVIOUS BLANK IF SO MOVE ON
|
|
|
|
IF(IPREV .EQ. 1) GO TO 200
|
|
|
|
! IF NO PREVIOUS THEN WE HAVE AN END OF CHARACTER STREAM ADD A COMMA TO DLIN
|
|
IPREV=1
|
|
IF(DLIN(IBAS:IBAS) .NE. CTYPE(2)) THEN
|
|
IBAS=IBAS+1
|
|
DLIN(IBAS:IBAS)=CTYPE(2)
|
|
NCHARBL=NCHARBL+1
|
|
ENDIF
|
|
ELSE
|
|
|
|
! WE HAVE NUMBER OR A COMMA OR \ OR / CHARACTER
|
|
|
|
DO J=2,5
|
|
IF(DLININ(K:K) .EQ. CTYPE(J)) THEN
|
|
|
|
! FOUND SOMETHING ADD A COMMA
|
|
|
|
IPREV=0
|
|
IBAS=IBAS+1
|
|
IF(J .EQ. 4) THEN
|
|
ICLON=1
|
|
ENDIF
|
|
DLIN(IBAS:IBAS)=CTYPE(2)
|
|
NCHARBL=NCHARBL+1
|
|
GO TO 100
|
|
ENDIF
|
|
ENDDO
|
|
|
|
! NOTHING FOUND MUST BE LETTER OR NUMBER COPY IT OVER
|
|
|
|
IPREV=0
|
|
IBAS=IBAS+1
|
|
DLIN(IBAS:IBAS)=DLININ(K:K)
|
|
! MOVE ON TO NEXT CHARACTER
|
|
|
|
100 CONTINUE
|
|
ENDIF
|
|
200 ENDDO
|
|
RETURN
|
|
END
|
|
|