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.

175 lines
5.6 KiB
Fortran

SUBROUTINE SAVESHP
!
! ROUTINE TO SAVE NETWORK AS A SHAPEFILE
!
USE WINTERACTER
USE BLK1MOD
REAL*8 XK(12),YK(12),DEP(12)
! SAVE INFO TO A SCRATCH
VOID = -1.E10
Call WMessageBox(3,2,1,'Do you wish to save as a complex polygon'//Char(13)//&
'shapefile containing all the network data'//'Press YES to accept',&
'CHOOSE SHAPEFILE TYPE -1- !!')
IF(WinfoDialog(ExitButtonCommon) .eq. CommonOK) then
IOPTSV=1
IOPTSVNOD=0
IOPTSVEL=0
ELSE
IOPTSV=2
Call WMessageBox(3,2,1,'Do you wish to save as a polygon'//Char(13)//&
'shapefile containing network outline'//'Press YES to accept',&
'CHOOSE SHAPEFILE TYPE -2- !!')
IF(WinfoDialog(ExitButtonCommon) .eq. CommonOK) then
IOPTSVEL=1
ELSE
IOPTSVEL=0
ENDIF
Call WMessageBox(3,2,1,'Do you wish to save as a point'//Char(13)//&
'shapefile containing bed levels'//'Press YES to accept',&
'CHOOSE SHAPEFILE TYPE -3- !!')
IF(WinfoDialog(ExitButtonCommon) .eq. CommonOK) then
IOPTSVNOD=1
ELSE
IOPTSVNOD=0
ENDIF
ENDIF
IF(IOPTSVEL .EQ. 1 .OR. IOPTSV .EQ. 1) THEN
OPEN(113,FORM='BINARY',STATUS='SCRATCH')
DO N=1,NE
IF(IMAT(N) .GT. 0) THEN
NC=0
IF(NCORN(N) .GT. 5) THEN
DO KK=1,NCORN(N)+1
K=MOD(KK,NCORN(N))
IF(K .EQ. 0) K=NCORN(N)
NODE=NOP(N,K)
IF(NODE .GT. 0) THEN
NC=NC+1
XK(NC)=XUSR(NODE)
YK(NC)=YUSR(NODE)
DEP(NC)=WD(NODE)
ENDIF
ENDDO
IMATT=IMAT(N)
WRITE(113) N,IMATT,NC,(XK(K),YK(K),DEP(K),K=1,NC)
!ELSEIF(NCORN(N) .EQ. 5) THEN
! DO K=1,5
! NODE=NOP(N,K)
! IF(NODE .GT. 0) THEN
! NC=NC+1
! XK(NC)=XUSR(NODE)
! YK(NC)=YUSR(NODE)
! DEP(NC)=WD(NODE)
! ENDIF
! ENDDO
! DO K=3,1,-1
! NODE=NOP(N,K)
! IF(NODE .GT. 0) THEN
! NC=NC+1
! XK(NC)=XUSR(NODE)
! YK(NC)=YUSR(NODE)
! DEP(NC)=WD(NODE)
! ENDIF
! ENDDO
! IMATT=IMAT(N)
! WRITE(113) N,IMATT,NC,(XK(K),YK(K),DEP(K),K=1,NC)
ELSEIF(NCORN(N) .LT. 6 .AND. (IMAT(N) .LT. 900 .OR. IMAT(N) .GT. 903)) THEN
NODE1=NOP(N,1)
DO K=1,3
NODE=NOP(N,K)
IF(NODE .GT. 0) THEN
NC=NC+1
XK(NC)=XUSR(NODE)
YK(NC)=YUSR(NODE)
DEP(NC)=WD(NODE)
ENDIF
ENDDO
IF(WIDTH(NODE) .GT. 0.) THEN
eldir=atan2(YUSR(NOP(N,3))-YUSR(NOP(N,1)),XUSR(NOP(N,3))-XUSR(NOP(N,1)))
elnorm=eldir-1.5708
NC=NC+1
xK(NC)=XK(NC-1)+cos(elnorm)*WIDTH(NODE)/2.
yK(NC)=YK(NC-1)+sin(elnorm)*WIDTH(NODE)/2.
NMID=0
IF(NOP(N,2) .GT. 0) THEN
NMID=1
NC=NC+1
xK(NC)=XK(2)+cos(elnorm)*(WIDTH(NODE)+WIDTH(NODE1))/4.
yK(NC)=YK(2)+sin(elnorm)*(WIDTH(NODE)+WIDTH(NODE1))/4.
ENDIF
NC=NC+1
xK(NC)=XK(1)+cos(elnorm)*WIDTH(NODE1)/2.
yK(NC)=YK(1)+sin(elnorm)*WIDTH(NODE1)/2.
NC=NC+1
xK(NC)=XK(1)-cos(elnorm)*WIDTH(NODE1)/2.
yK(NC)=YK(1)-sin(elnorm)*WIDTH(NODE1)/2.
IF(NMID .GT. 0) THEN
NC=NC+1
xK(NC)=XK(2)-cos(elnorm)*(WIDTH(NODE)+WIDTH(NODE1))/4.
yK(NC)=YK(2)-sin(elnorm)*(WIDTH(NODE)+WIDTH(NODE1))/4.
NC=NC+1
xK(NC)=XK(3)-cos(elnorm)*WIDTH(NODE)/2.
yK(NC)=YK(3)-sin(elnorm)*WIDTH(NODE)/2.
NC=NC+1
XK(NC)=XK(3)
YK(NC)=YK(3)
ELSE
NC=NC+1
xK(NC)=XK(2)-cos(elnorm)*WIDTH(NODE)/2.
yK(NC)=YK(2)-sin(elnorm)*WIDTH(NODE)/2.
NC=NC+1
XK(NC)=XK(2)
YK(NC)=YK(2)
ENDIF
ELSE
DO K=2,1,-1
NODE=NOP(N,K)
IF(NODE .GT. 0) THEN
NC=NC+1
XK(NC)=XUSR(NODE)
YK(NC)=YUSR(NODE)
DEP(NC)=WD(NODE)
ENDIF
ENDDO
ENDIF
IMATT=IMAT(N)
WRITE(113) N,IMATT,NC,(XK(K),YK(K),DEP(K),K=1,NC)
ENDIF
ENDIF
ENDDO
REWIND 113
! CALL FORMSHP TO WRITE OUT SHAPEFILE
IF(IOPTSV .EQ. 1) THEN
ISTYP=25
! ISTYP=25 is saving element list
IVECACT=4
ELSE
! ISTYP=5 is saving element list with polygons?
ISTYP=5
IVECACT=5
ENDIF
CALL FORMSHP2(istyp,ivecact)
CLOSE(113)
ENDIF
IF(IOPTSVNOD .EQ. 1) THEN
OPEN(113,FORM='BINARY',STATUS='SCRATCH')
DO NODE=1,NP
IF(XUSR(NODE) .GT. VOID) THEN
WRITE(113) NODE,XUSR(NODE),YUSR(NODE),WD(NODE)
ENDIF
ENDDO
REWIND 113
! ISTYP=1 is saving of nodal values
ISTYP=1
IVECACT=6
CALL FORMSHP2(istyp,ivecact)
CLOSE (113)
ENDIF
RETURN
END