!$Author: fredfox $ !$Date: 2006-02-25 00:21:16 $ !$Revision: 1.2 $ !$Source: /weru/cvs/wepp/wepp.watbal/idat.for,v $ SUBROUTINE IDAT(TR, R, RR, DT, DTC, NR, NF, TRF, RF, DUR) C C + + + PURPOSE + + + C READS IN INITIAL PARAMETERS AND DOES SOME PRELIMINARY C CALCULATIONS. C C CALLED FROM MAIN C AUTHOR(S): D. FLANAGAN, J. ASCOUGH C VERSION: THIS MODULE TAKEN FROM ASCOUGH STANDALONE IRS CODE C DATE CODED: 3-22-2005 C CODED BY: D. FLANAGAN C C C + + + PARAMETER DECLARATIONS + + + C INTEGER MXTIME, MXPOND PARAMETER (MXTIME = 1000, MXPOND = 65) C + + + ARGUMENT DECLARATIONS + + + INTEGER NR, NF REAL TR(MXTIME), R(MXTIME), RR(MXTIME), DT, DTC, TRF(MXTIME), 1 RF(MXTIME), DUR C + + + ARGUMENT DEFINITIONS + + + C C NR - C NF - C TR - C R - C RR - C DT - C DTC - C TRF - C RF - C DUR - C C + + + LOCAL VARIABLES + + + C INTEGER I, J, NDT, IRAIN REAL X, Y, TEST REAL P, DURD, TPD, IP, DDT DOUBLE PRECISION XX REAL PMAX, DMAX PARAMETER (PMAX = 250.0, DMAX = 1440.0) C + + + LOCAL DEFINITIONS + + + C XX - local temporary variable (double precision) C + + + END SPECIFICATIONS + + + C C READ THE RAINFALL FLAG (1 = VARIABLE INTENSITY; 2 = C CONSTANT INTENSITY; 3 = DISAGGREGATION MODEL) C READ (3,*) IRAIN C C VARIABLE INTENSITY INPUT C C 10 WRITE (*,1300) C LB = 1 C UB = 100 C CALL GETI(NR,LB,UB,IEND) C C WRITE (*,1400) C I = 0 IF(IRAIN.EQ.1) THEN C C READ THE NUMBER OF PRECIPITATION INPUT VALUES C READ (3,*) NR DO I = 1, NR C C READ THE PRECIPITATION TIME (MIN) AND AMOUNT (MM) C FIRST TIME MUST EQUAL ZERO; FIRST RATE .NE. TO ZERO C LAST TIME MUST BE GT ZERO; LAST RATE MUST EQUAL ZERO READ (3,*) X,Y C 20 WRITE (*,1500) I C CALL GETRV(XXX,2,IEND) C X = XXX(1) C Y = XXX(2) C IF (I.GT.1) THEN C IF (X.LT.TRF(I-1)) THEN C WRITE (*,1600) C GO TO 20 C END IF C IF (I.EQ.NR.AND.Y.NE.0.) THEN C WRITE (*,2000) C GO TO 20 C END IF C END IF IF (X.GE.0) THEN C CONVERT TIME FROM MINUTES TO HOURS TRF(I) = X / 60. RF(I) = Y END IF END DO END IF C GO TO 90 C CONSTANT INTENSITY INPUT IF (IRAIN.EQ.2) THEN C 40 WRITE (*,2100) C CALL GETR(Y,0.,1000.,IEND) C WRITE (*,2200) C CALL GETR(X,1.,10000.,IEND) C READ THE TOTAL PRECIPITATION AMOUNT (MM) AND THE C STORM DURATION (MIN) READ (3,*) Y,X TRF(1) = 0. C CONVERT TIME FROM MINUTES TO HOURS TRF(2) = X / 60. RF(1) = Y / TRF(2) RF(2) = 0. NR = 2 END IF C GO TO 90 C DISSAGREGATION MODEL IF (IRAIN.EQ.3) THEN NR = 11 C READ AMOUNT OF PRECIPITATION (MM), STORM DURATION (MIN), RATIO C OF TIME TO PEAK TO DURATION (0-1), AND RATIO OF PEAK TO AVERAGE C INTENSITY (0-1) READ (3,*) P, DURD, TPD, IP IF((P.LE.0.0.OR.P.GT.PMAX).OR.(DURD.LE.0.0.OR.DURD.GT.DMAX))THEN WRITE (*,1400) WRITE (*,1500) P, DURD STOP END IF IF (TPD.LE.0.0.OR.IP.LT.1.0) THEN WRITE (*,1600) STOP END IF IF (TPD.GT.1.0) THEN WRITE (*,1600) STOP END IF 1400 FORMAT (//,10X,'PRECIPITATION AMOUNT AND DEPTH MUST BE POSITIVE', 1 //) 1500 FORMAT (//,10X,'PRECIPITATION AMOUNT (MM) = ',F5.2,10X, 1 'DURATION (MIN) = ',F5.0,//) 1600 FORMAT (/,' NOTE: TP MUST BE 0= 1.0 ') C CONVERT FROM MINUTES TO HOURS (CONVERSION REMOVED FROM DISAG) DURD = DURD / 60. CALL DISAG(NR, TRF, RF, P, DURD, TPD, IP) END IF C GO TO 90 C FILE INPUT C 60 WRITE (*,1700) C CALL OPEN(1,2,15,'RAINFALL FILE: ') C NR = 0 C 70 READ (1,*,END=80) X, Y C NR = NR + 1 C TRF(NR) = X / 60.D0 C RF(NR) = Y C GO TO 70 C 80 REWIND 1 C C C----------------------------------------------------------------------- C C GET TIME STEP FOR INFILTRATION C DUR = TRF(NR) C 100 WRITE (*,2300) C CALL GETR(DDT,.01,1000.,IEND) C C READ THE TIME STEP FOR RAINFALL EXCESS CALCULATIONS C (TYPICALLY BETWEEN 1 AND 5 MINUTES) C READ (3,*) DDT NDT = DUR * 60. / DDT C C CHECK FOR POSSIBLE HYDROGRAPH ARRAY OVERFLOW C IF (NDT.GT.120) WRITE (*,1800) DDT, NDT C C READ (*,1900) ANS C IF (ANS.EQ.'Y'.OR.ANS.EQ.'Y') GO TO 100 C END IF C DT = DDT DT = DT / 60.D0 DTC = DT I = 0 C C INSERT USER TIME STEP INTO RAINFALL DATA C XX = 0.D0 I = 2 TR(1) = TRF(1) R(1) = RF(1) C DO 120 J = 2, NR 110 TEST = ABS(DTC-TRF(J)) IF (I.GT.2) THEN XX = XX + R(I-2) * (TR(I-1)-TR(I-2)) RR(I-1) = XX END IF IF (TEST.GT..015D0) THEN C IF (DTC.LT.TRF(J)) THEN R(I) = RF(J-1) TR(I) = DTC DTC = DTC + DT I = I + 1 GO TO 110 ELSE TR(I) = TRF(J) R(I) = RF(J) I = I + 1 END IF C ELSE TR(I) = TRF(J) R(I) = RF(J) I = I + 1 DTC = DTC + DT END IF C 120 CONTINUE C NF = I - 1 RR(NF) = RR(NF-1) + R(NF-1) * (TR(NF)-TR(NF-1)) C RETURN 1800 FORMAT (//' *** A TIME STEP OF ',I3,' MINUTES EQUALS ',I3, 1 ' TIME STEPS.'/ 1 'THIS MAY CAUSE A TRUNCATION OF THE RECESSION HYDROGRAPH.'/) END