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.
136 lines
3.4 KiB
Fortran
136 lines
3.4 KiB
Fortran
SUBROUTINE ADDSLOT
|
|
|
|
! ADD SLOT TO 1-D
|
|
|
|
USE BLK1MOD
|
|
|
|
! GET SLOT PARAMETERS
|
|
|
|
CALL GETSLOTPARAM(ISLTYP,SLDEP,SLRNG,SLPOR)
|
|
IF(ISLTYP .EQ. -1) RETURN
|
|
|
|
! SEARCH FOR CROSS-SECTION REACH/TYPE
|
|
IF(ISLTYP .EQ. 0) THEN
|
|
DO N=1,MCRS
|
|
IF(IVMIL(N) .LT. 1) EXIT
|
|
MM=NRIVL(IVMIL(N))
|
|
IF(MM .GT. 0) THEN
|
|
CALL ADDSLOTDATA(IVMIL(N),MM,SLDEP,SLRNG,SLPOR)
|
|
ENDIF
|
|
NRIVL(IVMIL(N))=MM
|
|
ENDDO
|
|
ELSE
|
|
! SEARCH FOR CROSS-SECTION REACH/TYPE
|
|
!
|
|
! IVMIL = CROSS-SECTION NUMBER
|
|
! NRIVL = NUMBER OF POINTS IN SECTION
|
|
! NOREACH = REACH/TYPE NUMBER
|
|
! CRSDAT 1 = ELEVATION
|
|
! CRSDAT 2 = AREA
|
|
! CRSDAT 3 = WIDTH
|
|
|
|
DO N=1,MCRS
|
|
IF(ISLTYP .EQ. NOREACH(N)) THEN
|
|
MM=NRIVL(IVMIL(N))
|
|
CALL ADDSLOTDATA(IVMIL(N),MM,SLDEP,SLRNG,SLPOR)
|
|
NRIVL(IVMIL(N))=MM
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
! APPLY CHANGE
|
|
|
|
RETURN
|
|
END
|
|
|
|
SUBROUTINE GETSLOTPARAM(ISLTYP,SLDEP,SLRNG,SLPOR)
|
|
use winteracter
|
|
USE BLK1MOD
|
|
|
|
!-
|
|
|
|
include 'd.inc'
|
|
|
|
!
|
|
! Declare window-type and message variables
|
|
!
|
|
TYPE(WIN_STYLE) :: WINDOW
|
|
|
|
TYPE(WIN_MESSAGE) :: MESSAGE
|
|
INTEGER :: IERR,ISET,IBOX
|
|
REAL :: ASET
|
|
CHARACTER*1 :: IFLAG
|
|
|
|
call wdialogload(IDD_ADDSLOT)
|
|
ierr=infoerror(1)
|
|
|
|
CALL WDialogSelect(IDD_ADDSLOT)
|
|
ierr=infoerror(1)
|
|
|
|
ISLTYP=0
|
|
SLDEP=4.
|
|
SLRNG=0.5
|
|
SLPOR=0.1
|
|
100 continue
|
|
|
|
|
|
CALL WDialogPutINTEGER(IDF_INTEGER1,ISLTYP)
|
|
CALL WDialogPutReal(idf_real1,SLDEP)
|
|
CALL WDialogPutReal(idf_real2,SLRNG)
|
|
CALL WDialogPutReal(idf_real3,SLPOR)
|
|
|
|
CALL WDialogShow(-1,-1,0,Modal)
|
|
ierr=infoerror(1)
|
|
|
|
DO
|
|
!
|
|
IF (WInfoDialog(ExitButton) .EQ. IDOK) THEN
|
|
|
|
|
|
CALL WDialogGetINTEGER(IDF_INTEGER1,ISLTYP)
|
|
CALL WDialogGetReal(idf_real1,SLDEP)
|
|
CALL WDialogGetReal(idf_real2,SLRNG)
|
|
CALL WDialogGetReal(idf_real3,SLPOR)
|
|
GO TO 200
|
|
else
|
|
ISLTYP=-1
|
|
RETURN
|
|
endif
|
|
ENDDO
|
|
200 CONTINUE
|
|
RETURN
|
|
END
|
|
SUBROUTINE ADDSLOTDATA(N,M,SLDEP,SLRNG,SLPOR)
|
|
USE BLK1MOD
|
|
BLEVL=CRSDAT(N,1,1)
|
|
BWIDT=CRSDAT(N,1,3)
|
|
IF(BWIDT .LT. 1) THEN
|
|
CRSDAT(N,1,3)=1.0
|
|
CRSDAT(N,0,1)=BLEVL-SLRNG
|
|
CRSDAT(N,0,3)=SLPOR
|
|
CRSDAT(N,-1,1)=CRSDAT(N,0,1)-SLDEP
|
|
CRSDAT(N,-1,3)=SLPOR
|
|
MLT=-1
|
|
ELSE
|
|
CRSDAT(N,0,1)=BLEVL-SLRNG
|
|
CRSDAT(N,0,3)=1.0
|
|
CRSDAT(N,-1,1)=BLEVL-2.*SLRNG
|
|
CRSDAT(N,-1,3)=SLPOR
|
|
CRSDAT(N,-2,1)=CRSDAT(N,0,1)-SLDEP
|
|
CRSDAT(N,-2,3)=SLPOR
|
|
MLT=-2
|
|
ENDIF
|
|
DO I=M,MLT,-1
|
|
DO J=1,3
|
|
CRSDAT(N,I+1-MLT,J)=CRSDAT(N,I,J)
|
|
ENDDO
|
|
ENDDO
|
|
M=M+1-MLT
|
|
DO I=2,M
|
|
if(i .gt. 1) then
|
|
CRSDAT(N,I,2)=CRSDAT(N,I-1,2)+&
|
|
(CRSDAT(N,I,1)-CRSDAT(N,I-1,1))*&
|
|
(CRSDAT(N,I,3)+CRSDAT(N,I-1,3))/2.
|
|
endif
|
|
ENDDO
|
|
RETURN
|
|
END |