CBP/TRS 63/91
                                April 1991
       Watershed Model Application
           to Calculate Bay Nutrient
                          Loadings

                Final Findings and
                  Recommendations

        Appendix D Meterologic and
                 Precipitation Data
                      Development
EPA
903
CBP/
TRS
63/91
Chesapeake
  ^_ Ba^
  Program

-------

-------
  Watershed Model Application to Calculate
               B ay Nutrient Loadings:
               Final Findings and Recommendations

    Appendix D Meterologic and Precipitation Data Development
                          Lewis C. Linker
                          Diana Y. Alegre
                     Chesapeake Bay Program Office
                      Annapolis, Maryland 21403

                        &ER&
O>
O)
h-
C\i

a
co
                  CHESAPEAKE BAY PROGRAM OFFICE
               U.S. ENVIRONMENTAL PROTECTION AGENCY
                           REGION m
                      ANNAPOLIS, MD 21403
Printed by the U.S. Environmental Protection Agency for the Chesapeake Bay Program

                     HEADQUARTERS LIBRARY
                          . PROTECTION AGENCY

-------


-------
                            APPENDIX D




         Meteorologic  and  Precipitation Data Development






D.I  Data Formats Used in Met Data Development




D.2  Program TMPDIS (Air Temperature Data)




D.3  Program WNDDIS (Wind Data)




D.4  Subroutines RADCLC and RADDST (Solar Radiation Data)




D.5  Subroutine PANEVP (Evaporation Data)




D.6  Observed Precipitation Data Base Development




D.7  Thiessen Network Development




D.8  PRECIP Program

-------

-------
APPENDIX D.I   DATA FORMATS USED IN MET DATA DEVELOPMENT
The HYDDAY  format  is described on page  723  of the HSPF User's  Manual.
record contains ten (or eleven) daily values formatted as follows :
                                                                           Each
     where-.  Field 1 is a 7 -character  identifier  (not read by HSPF);
             Field 2 is the last two digits of the calendar year,
             Field 3 is the month
             Field 4 is 1 for days 1-10,
                        2 for days 11-20,
                        3 for days 21-31
             Fields 5-15 are the daily values.
The HYDSDY format consists  of ten or  eleven daily pairs  of integer max-min
temperatures on each record.  The data are formatted as follows:

           7X,12,12,II,2213

     where   Field 1 is a 7-character identifier  (not read by HSPF);
             Field 2 is the.last two digits of the calendar year,
             Field 3 is the  month
             Field 4 is 1 for days 1-10,
                        2 for days 11-20,
                        3 for days 21-31
             Fields 5-26 are the semi-daily values arranged in pairs,
               i.e., maxl mini max2 min2 max3 min3 etc.
The HYDHR format is described on page 723 of the HSFF User's Manual.  Each record
contains 12 hours  of data formatted as  follows:
            9X,I3,I3II3,I2,12F5.0

    where   Field 1 is a nine-character identifier  (not read by HSPF);
            Field 2 is the  last  two digits of the calendar year,
            Field 3 is the  month
            Field 4 is the  day
            Field 5 is 1 for a.m. hours and 2 for p.m. hours
            Fields 6-17 are the  twelve hourly values.

-------
APPENDIX  D.2    PROGRAM  TMPDIS  
 CHARACTER*80  CARD

 + + + DATA INITIALIZATIONS + +  +
 DATA  TRMIN,TRMOUT,INFIL,OUTFIL/5,6,10.1M
 DATA  DAYMON/31,28.31,30,31,30,31,31,30,31,30,3V

 * + + READ FORMATS + + +
 FORMAT (7X.212,1X,20I3,/,12X,20I3,/,12X,22I3)
 FORMAT (A80)

 * * + WRITE FORMATS + •» *
 FORMAT C PROGRAM TO CONVERT DAILY  HAX-MIN TEMP TO HOURLY.1)
 FORMAT C ENTER OBSERVATION TIME:  ')
 FORMAT (< BAD OBSERVATION TIME:  ',15)
 FORMAT C BAD INPUT CARD: '.ABO)
 FORMAT (' END OF FILE ON INPUT  UNIT.  PROCESSING COMPLETED.1)
10

20
C
C
 WRITE (TRMOUT,2000)

 get observation time (default  = 24)
 WRITE (TRMOUT.2010)
 READ  (T8MIH,*,END=10) OBTIME
   GO TO 20
 CONTINUE
   OBTIME = 24
 CONTINUE

 read first data record and set initial values
 READ (INFIL,1000,END=700,ERR=800)
1         YRCNT .MNCNT , (DATMX( I), DATMN( I), I »1,31)
 DYCNT = 1
 TNXB = DATMX(I)
 TNNN = DATHN(1)
 TMXN = DATMX(1)
 TMNF = DATMN(I)

 OPT = 0
 IF (OBTIME .GT.  0 .AND.  OBTIME -LE.  6) OPT = 1
 IF (OBTIME .GT.  6 .AND.  OBTIME .LE.  16) OPT * 2
 IF (OBTIME .GT. 16 .AND.  OBTIME .LE.  24) OPT * 3

-------
APPENDIX D.2     (continued)
c
40
50
C
100
C
C
200
C
c
300
C
C
400
 IF (OPT .EQ.  0} THEN
   bad observation time
   MITE (TRMOUT,2020)  OBTIME
   STOP
 END If

 CONTINUE
   CONTINUE
   IF (DYCNT.LE.31.AND.(DATMX(DYCNT).NE.O.OR.DATNN(DYCNT).NE.O))
1        THEN
     CO TO (100,200,300),OPT

     CONTINUE
       case 1  -  early morning observations
       TMNF  =  DATNN(DYCNT)
       IF (DYCNTL .NE.  0  .AND. DYCNTL  .NE. 1) THEN
         DAY=  DYCNTL -  1
         CALL  DISTRB
I                   (TMXB,TMNN,THXN,TMNF,
I                   YRCNTL,MNCNTL,DAY,OUTFIL)
       END IF
       THXB  =  TNXN
       TMNN  =  TNNF
       TMXN  =  DATMX(DYCNT)
       GO TO 400

     CONTINUE
       case 2  -  mid day observations
       TMXN  =  DATHX(DYCNT)
       TMNF  =  DATHN(DYCNT)
       IF (DYCNTL.NE.O) THEN
         CALL  DISTRB
I                   CTMXB,TMNN,TMXN,TMNF,
1                   YRCHTL.MNCNTL,DYCNTL,OUTF1L)
       END IF
       TMXB  =  TMXN
       TNNN  =  THNF
       GO TO 400

     CONTINUE
       case 3  -  evening observations
       TNNF  =  DATNN(DYCNT)
       IF (DYCNTL.NE.O) THEN
         CALL  DISTRB
I                   (TMXB,TMNN,TMXN,TMNF,
I                  YRCNTL.MNCNTL,DYCNTL,OUTFIL)
       END IF
       TMXB  =  TNXN
       TMNN  =  TMNF
       TMXN  =  DATMX(DYCNT)
       GO TO 400

     CONTINUE
     DYCNTL  =  DYCNT
     MNCNTL  =  MNCNT
     YRCNTL  =  YRCNT
     DYCNT = DYCNT + 1
   GO TO 50
   END IF

   DYCNTL *  DYCNT -  1
   READ (INF!L,1000,END=700.ERR=800>
1        YRCNT.MNCNT,(DATMX(I),DATMN(I),1=1,31)

-------
APPENDIX D.2     (continued)
C
700
c
c
c
c

800
C
900
C
   DYCNT = 1
 GO TO 40

 CONTINUE
 clear out last day's values (assures last day of
 month in non-leap year)
 DAY= DAYHON(NNCHTL)
 CALL DISTRB
I       .  (TMXB,TMNN,THXN,TMNF,YRCNTL,MNCNTL,DAY,CIJTF1L)
 GO TO 900
   CONTINUE
   error  reading card
   BACKSPACE  (INFIL)
   READ (IMFIL.1010) CARD
   WRITE  {TRNOUT.2030) CARD
   READ (INFIL,1010) CARD
   WRITE  (TRMOUT.2030) CARD
 CONTINUE

 WRITE (TRMOUT,2040>


C
c
c
STOP
END








SUBROUTINE DISTRB

C
C
C
C
C
C
C
C
C
c
c
c
c
c
c
I


(THXB,TMNN,TMXN,TMMF, YEAR, HOHTH, DAY, OUTFIL)


This routine distributes daily max-min temperatures to hourly values

+ + +
TNXB
TNNN
TNXN
TNNF
YEAR
MONTH
DAY
OUTFIL

+ + +

ARGUMENT DEFINITIONS + + +
- previous max temperature
- current min temperature
- current max temperature
- next min temperature
- year e.g. 87
- month (1-12)
• day of month (1-31)
- output file unit number

ARGUMENTS + + +
INTEGER TMXB,TMNH.THXN,TfWF,YEAR,MONTH,DAY,OUTFlL
C
C

+ •«••*

LOCAL VARIABLES + + +
INTEGER DIF1,DIF2.DIF3,I,C1,C2

C
C
2000
C
REAL

*• + +
FORMAT

HRTEMPC24)

FORMATS + + +
(10X,3(I2,1X),I1,12F5.1>

      C1    = 1
      C2    - 2
      DIF1  = TNXB - TMNN
      D1F2  - TNNN - TNXN
      DIF3  = TNXN - TNNF
      HRTEMP(1>  - TMNN * DIF1 *
      HRTEMP(2)  = TMNN + DIF1 *
                          0.15
                          0.10

-------
APPENDIX  D.2     (continued)
HRTEMPC3) =
HRTEHPC4) =
HRTENPC5) =
HRTENPC6) =
KRTENP(7> «
HRTEMP(S) =
HRTEMP(9> =
HRTEHPC10)
HRTEHPd 1)
HRTEHPd?)
HRTEMPC13)
HRTENP(U)
HRTENPdS)
HRTEHPd 6)
HRTEHPd 7)
HRTEHPdS)
HRTEMP(19)
HRTEMPC20)
HRTEHP<21)
HRTEHP<22)
HRTEHP<23>
HRTENPC24)
: THNN + DIF1 * 0.06
• THNN + DIF1 * 0.03
•• THNN + DIF1 * 0.01
•• THNN
: THNN - DIF2 * 0.16
= TNNN - DIF2 * 0.31
= TNNN •
S
=
S
9
«.
=
S
=
a
s
=
=
&
s
S
TMNN
TMNN
TNNN
TNNN
THNN
TNNN
THXN
THNF
THNF
THNF
THNF
THNF
THNF
THNF
THNF
• 01F2 * 0.45
- DIF2
- DIF2
- D1F2
- DIF2
- DIF2
- DIF2

+ DIF3
* DIF3
+ DIF3
+ DIF3
* DIF3
+ DIF3
+ DIF3
+ DIF3
*
*
*
*
*
*

*
*
*
*
*
*
*
*
0
0
0
0
0
0

0
0
0
0
0
.59
.71
.81
.89
.95
.99

.89
.78
.67
.57
.47
0.38
0
0
.29
.22
      WRITE  (OUTFIL.2000)  YEAR,MONTK,t>AY,C1 ,CJ),1=13,24}

      RETURN
      END

-------
APPENDIX  D.3    PROGRAM WNDDIS  (WIND  DATA)
C
C
C

C
C
C
C
C
C
C
C
C
C
C
C
C
C
1000
1010
C
C
2000
2010
2020
2030
C
C

C
C
C
 PROGRAM WNDDIS

 program to distribute daily wind movement  (miles/day) to
 hourly (miles/day) assumes constant  diurnal variation

 + + + VARIABLE DEFINITIONS + + +
 TRMOUT -•terminal output (unit no. 6)
 INFIL  - input file containing the daily wind data
          in HSPF HYDDAY format (unit no. 10)
 OUTFIL * output file that receives the hourly card images
          in HSPF HYDHR format (unit  no. 11)

 + + + LOCAL VARIABLES + + +
 INTEGER       YEAR,MONTH.DAY,TRMOUT.IKFIL,OUTFIL,I,C1,C2
 REAL          DAYUND(31),HRUND(24),D1STUD(24)
 CHARACTER*80  CARD

 + + + DATA INITIALIZATIONS + + +
 DATA  TRMOUT,INFIL, OUTFIL,C1,C2/6,10.11,1,27
 DATA  DISTUD/0.034.0.034,0.034,0.034,0.034,0.034,0.034,0.035,
1             0.037,0.041,0.046,0.050,0.053,0.054,0.058,0.057.
2             0.056,0.050,0.043,0.040,0.038,0.056,0.036,0.035/

 + + + READ FORMATS + + +
 FORMAT (7X,2I2,1X,10F6.0.7.12X,10F6.0,/,12X,11F6.0)
 FORMAT (ABO)

 + + + WRITE FORMATS + + +
 FORMAT {'  PROGRAM TO CONVERT DAILY WIND TO HOURLY.  PLEASE WAIT.')
 FORMAT (10X,3(I2,1X),I1,12F5.1>
 FORMAT (<  BAD INPUT CARD: ',A80)
 FORMAT C  END OF FILE OK INPUT UNIT.   PROCESSING COMPLETED.')
C
C
10
C

20
30
C
 WRITE (TRMOUT,2000)

 read first month of daily wind data  (3  records)
 assumes 1) first record is days 1-10, and 2) no missing data
 READ (INFtL.1000,END=50,ERR=40)
1         YEAR,MONTH,
-------
APPENDIX D.3    (continued)
C
C
40
C
50
C
        read data for subsequent months
        READ (INF1L,1000,ENO»50,ERR=AO>
     1        YEAR, MONTH, (DAYWHDU), 1=1,31)
      GO TO 10
CONTINUE
  error reading  input data
  BACKSPACE  (INF!L)
  READ (I'MFIL.1010) CARD
  WRITE  CARD
  READ (INF1L.1010) CARD
  WRITE 
-------
APPENDIX D.A     SUBROUTINES  RADCLC  AND RADDST  (SOLAR  RADIATION DATA)
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
      SUBROUTINE RADCLC
     I
     0
                  (DEGLAT,CLOUD,HONTH,DAY,
                   DAtRAD)
 This routine computes  the total daily solar radiation
 based on*the HSPIl  (Hydrocomp, 1978) RADIATION procedure,
 which is based on empirical curves of radiation as a function
 of latitude (Hamon  et  al, 1954, Monthly Weather Review 82(6):141-146.
 + + + ARGUMENT DEFINITIONS + + +


 DEGLAT - latitude  (degrees)
 CLOUD  - cloud cover  (tenths) (1.-10.)
 MONTH  - month of  the year (1-12)
 DAY    - day of  the month (1-31)
 DAYRAD - output  daily radiation (langleys)


 * + + ARGUMENTS  +  + +


 INTEGER  MONTH,DAY
 REAL     CLOUD,DEGLAT,DAYRAD


 + + + LOCAL  VARIABLES + * *


 INTEGER      ILAT,II,CEIL,I,J
 REAL'S       LAT.LAT1,LAT2,LAT3,LAT4,EXP1,EXP2,A,B,AO,A1.A2,
1             A3,B1>B2,FRAC>XLAX(S1,6)>C(10,12),X,SS,CLDDP,
2             X1(12),YRD,t100,r


 * * + INITIALIZATIONS + + +


 DATA X1/10.00028,41.00030, 69.22113, 100.5259, 130.8852, 161.2853,
1        191.7178,222.1775, 253.6600, 281.1629, 309.6838, 341.2210/
DATA C/ 4.0,
1
2
3
4
5
6
7
8
9
X
1
2
3
4
5
6
7
8
9
-5
3
-4
3
-3
3
-2
3
-1
3
-0
3
0
2
1
2
2
1
1
-0,
.5,
.0.
.0,
.0.
•o,
•0,
•0,
.0.
•0.
-5.
.0,
.0,
.5,
.0,
-0,
.0,
-o.
.0,
3
-4
2
•3
2
-3
2
-2
3
-1
2
0
3
1
2
1
2
2
1
1
• 0,
-0,
•5,
•5,
•0,
•0.
•5,
•0,
•0,
•0,
.0,
-0.
.0,
•0,
•5.
•5,
•0.
• 0,
-o.
.0.
0
-2
0
-1
1
-1
1
-0
1
0
1
0
2
1
2
1
2
2
1
1
• 0,
-0.
•5.
•5.
•o.
•0,
•o.
.5,
.0,
.0,
•5,
-5,
•0,
•0,
.0,
•5,
•0,
•0,
-0.
.0,
-2.0,
o.o.
-1.5,
0.0,
-1.0,
0.0,
-0.5,
0.5,
0.0,
1.0,
0.5,
1.5,
1.0,
2.0,
1-5,
2.0,
2.0,
2.0,
1.0,
1.0,
-4.
2.
-3.
1.
-3.
1.
-2.
1.
-1.
2.
0.
2.
1.
3.
1.
2.
2.
2.
1.
1.
0,
0,
5,
5.
o,
0,
0,
5,
0,
0.
o.
5,
0,
0,
5.
5.
0,
0,
0.
0,
-5
4
-4
3
-4
3
-2
3
-1
3
•0
3
0
3
1
2
2
2
1
1
.0,
.0.
-5,
.5.
.0,
.0,
.5,
.0,
.0,
•0,
.5,
-0,
•0,
•0,
.0,
.5,
•0,
.0,
-0,
.O/
      DATA 
-------
APPENDIX  D.4   (continued)













c
















c
c
c
DATA
1
2
3
4
5
6
7
8
9
X
1
2

DATA
1
2
3
4
5
6
7
8
9
X
1
2
3
4
5


((XLAX(1,
/616.
609.
603.
597.
590.
584.
577.
570.
563.
556.
549.
542.

(CXLAXCI,
/535.
527.
520.
512.
J),
17,
97,
69,
29,
81,
21.
53.
73.
85.
85.
77,
57.

J).
30,
90.
44,
84,
505.19,
497.
489.
481.
473.
465.
456.
448.
440.
431.
431.


assign values
40,
52,
53.
«,
27,
99,
61,
14.
55,
55,


to
J=1,6>, 1=25,36}
-147.83,
-154.71,
-161.55,
-168.33.
-175.05,
-181.72,
-188.34,
-194.91,
-201.42,
-207.29,
-214.29,
-220.65.

-27.
-27.
-27.
•27.
-27.
-27.
-27.
-26.
-26.
-25.
-24.
-24.

17,
49,
69,
78,
74.
57,
29,
89,
37,
72,
96,
07,

-3
-2
-2
-2
-2
-2
-2
-2
-1
-1
-1
-1

.17.
.97,
.78,
.60.
• 43.
-28,
.1*.
.02,
.91,
.81.
-72.
.64.

11
12
12
12
12
12
12
.84,
.04,
.22,
.38.
.53,
-67.
.80,
12.92,
13
13
13
13

.03,
.13,
.22,
.30.

2.02,
1.30,
0.64,
0.02,
-0.56,-
-1.10,
• 1 .60,
-2.05,
-2.45,
-2.80,
-3.10.
-3.3S/

•1=1.6). 1=37,51)
-226.96,
-233.22,
-239.43,
-245.59,
-251.69,
-257.74,
-263.74,
-269.70,
-275.60,
-281 .45,
-287.25,
-292.99,
-298.68,
-304.32,
-304.32,


-23.
-21.
-20.
-19.
-17.
-16.
07,
95,
70.
33,
83.
22.
-14.49,
-12.
-10.
- 8.
- 6.
- 3.
- 1.
1.
1.


63.
65.
55,
33,
98,
51.
08,
08.


-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
•1
-1
-2
-2
-2


local variables LAT
.59,
.55,
-52,
.51,
.51,
-52,
.54,
.57,
-63,
.71,
.80,
.90,
.01,
.13.
.13,


and
13
13
13
13
13
13
13
13
13
13
13
13
13
12
12


.36,
.40.
.42.
.42.
.41,
.39,
.36,
.32,
.27,
.21.
.14,
.07,
.00,
•92,
.92,


-3.58.
-3.77,
-3.92.
-4.03,
-4.10,
-4.13,
-4.12,
-4.07,
-3.98,
-3.85.
-3.68,
-3.47,
-3.30,
-3.17,
-3.17/


CLDDP (double [
      LAT   = DEGLAT
      CLDDP = CLOUD

      integer part of latitude
      ILAT = INT(LAT)

      fractional part of  latitude
      FRAC s LAT - FLOAT(ILAT)
      IF (FRAC .LE. 1.0E-4) FRAC * 0.0
AO •
A1
A2
A3
B1
B2
B
A '
EXP1
EXP;
LAT1
LAT;
LAT2
LAT'
* )
)
)
1
)
)
1
= 1
1
>
1
»
5
,
(LAXdLAT
(LAXdLAT
(LAXdLAT
(LAXdLAT
(LAXdLAT
(LAXdLAT
.AT - 44.
.AT - 25.
0.7575
0.7250
2.139
30.0
2.9
18.0
.1)
,2)
,3)
,4)
,5)
,6)


- 0
+ 0
+ 0
- 0
- 0
+ 0
+ FRAC*(XLAX(ILAT+1
i- FRAC*(XLAX(ILAT+1
+ FRAC*(XLAX
-------
APPENDIX D.4   (continued)
                                                                                                        10
c
c
c
c
      percent sunshine
      SS - 100.  * C1.0 •  (CLODP/10.0)**<1.666667))
      X  = XI(MONTH)  * DAY
      convert  to radians ???
      X  = X * 2.  * 3.14159/360.
      Y100 = AO + A1*DCOS
     1            B1*DS1N(X> * B2*DS1N(2*X>
II  = CEILUSS +  10.)/10.)
      IF (LAT .GT. 43.0) THEN
        YRD = LAT3 * SS**EXP2 + LAT4
      ELSE
        YRD = LAT1 * SS**EXP1 + LAT2
      END IF
      IF (I!  -LT.  11) THEN
        YRD * YRD  *  C{II,MOUTH)
      END IF
      IF (YRD  .GE.  100.) THEN
        Y = Y100
      ELSE
        Y = Y100 *  YRD/100.
      END IF

      assign single precision value of radiation for  return
      DAYRAD=  Y
      RETURN
      END
      INTECER FUNCTION CEIL (X)

      this routine returns the next higher integer from
      the input  double precision argument X

      REAL'S  X
      IF «X-FLOAT(!NT(X»)  .LE. 1.0E-5) THEN
        CEIL = INT(X)
      ELSE
        CEIL » INT(X) +  1
      END IF
      RETURN
      END

-------
                                                                                                          11
APPENDIX D,4    (continued)
c
c
c
c
C
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
      SUBROUTINE RADDST
     !
     0
                  (DEGLAT,YEAR,MONTH,DAY,URFIG,DAYRAD,

                  HRRAD)
C
C
C
c
c
c
2000
C
C
C

c
c
 This  routine computes the hourly distribution of solar
 radiation; based  on a method used in the HSP QUALITY (Hydrocomp,  1976).
 It  uses  the  latitude, year, month, day, and daily radiation.
 This  routine also writes the hourly data to a HSPF-readable
 sequential, formatted file  if WRFLG > 0.
 * + +  ARGUMENT DEFINITIONS + + +


 DEGLAT -  latitude (degrees)
 YEAR   -  year (only needed if WRFLG is nonzero)
 MONTH   -  month of the year (1-12)
 DAY    -  day of  the month (1-31)
 WRFLG   -  write flag  =  0 - do not write data
                      >  0 • write data to unit WRFLG
 DAYRAD *  input daily radiation (langleys)
 HRRAD   -  output  array of hourly radiation (langleys)


 + + +  ARGUMENTS  + + +
 INTEGER  YEAR,MONTH,DAY,WRFLG
 REAL     DEGLAT,DAYRAD,HRRAD(24)


 * + *  LOCAL  VARIABLES +  + +
 INTEGER  J.IIC.CN
 REAL     RK,RDNLAT,JULDAY.PHI,AD,SS,CS,X2fDELT,SUNR,SUNS,
1         DTR2,DTR4,CRAD,SL,TRISE,TR2,TR3,TR«


 + + *  FORMATS +  + +


 THIS OUTPUT  FORMAT IS HSPF-READABLE,  HOURLY SEQUENTIAL FORMAT.
 THE DATA  FOR ONE DAY ARE STORED ON TWO RECORDS OF TWELVE
 VALUES EACH  (SEE RECORD  FORMAT BELOW).
 FORMAT (9X,313,12,12F5.1)
 COMPUTE HSP QUALITY JULIAN DATE
 JULDAY= 30.5*(MONTH -  1)  + DAY


 CHECK LATITUDE AND CONVERT TO RADIANS
 IF (DEGLAT -LT. -66.5  .OR. DEGLAT  -GT. 66.5) THEM
   WRITE (*,*) ' INVALID LATITUDE;  PROGRAM STOP'
   STOP
 END IF
 RDNLAT«DEGLAT*0.0174582


 PHI- RDNLAT
 A0= 0.40928*COS(0.0172141*(172.-JULDAY))
 SS= SIN(PH!)*SIN(AD)
 CS= COS(PHD*COS(AD)
 X2= -SS/CS
 DELT- 7.6394*(1.5708-ATAN(X2/SQRT(1.-X2**2)))
 SUNR= 12.-DELT/2.
 SUNS= 12.+DELT/2.

-------
r
                                                                                                                        12
                APPENDIX D.A   (continued)
100
c
c
c
                      DEVELOP HOURLY  DISTRIBUTION GIVEN SUNRISE,  SUNSET AND LENGTH
                      OF DAY (DELT)
                      OTR2= DELT/2.
                      DTR4« OELT/4.
                      CRAD= .66666667/DTR2
                      SL« CRAD/DTR4
                      TRISE' SUNR
                      TR2= TRISE + DTR4
                      TR3« TR2. * DTR2
                      TR4- TR3 > DTR4

                      HOURLY LOOP
                      DO 100 IK=1, 24
                        RK= IK
                        IF (RK .GT. TRISE) THEN
                          IF (RK .GT. TR2) THEN
                            IF {RK .GT. TR3) THEN
                              IF (RK  .GT. TR4) THEN
                               HRRAD(IK)= 0.0
                              ELSE
                               HRRAD(IK)= (CRAD - (RK - TR3)*SL)*DAYRAD
                              END IF
                            ELSE
                              HRRAD(!K>= CRAD*DAYRAD
                            END IF
                          ELSE
                            KRRAD(IK)= (RK - TRISE)*SL*DAYRAD
                          END  IF
                        ELSE
                          HRRAD(IK)=  0.0
                        END IF
                      CONTINUE
                      IF  (URFLG  .GT. 0) THEN
                       MITE HOURLY DATA TO FILE
                       CN=1
                       WRITE (URFLG.2000) YEAR,MONTH,DAY,CN,(HRRAD(J).J=1,12)
                       CN=2
                       WRITE (WRFLG.2000) YEAR,MONTH,DAY,CN,(HRRAD(J),J=13,24)
                      END IF

                      RETURN
                      END

-------
                                                                                                          13
APPENDIX D.5     SUBROUTINE  PANEVP (EVAPORATION  DATA)
      SUBROUTINE PANEVP
                        (AIRTMP,DEWTMP,WINDSP,SOLRADF
                         EVAP)
      + •«• * PURPOSE + + +
      This routine generates daily pan evaporation (inches)
      using daily average air temperature (F), dewpoint (F), wind movement
      (miles/day), and solar radiation (langleys/day). The computations
      are based on the Penman (1948)  formula and the method of Kohler,
      Nordensen, and Fox (1955).

      «• + + ARGUMENTS + + *
      REAL    AIRTNP,DEWTHP,WINDSP,SOLRAD,EVAP

      + * + LOCAL VARIABLES * + +
      DOUBLE PRECISION DELTA,ESMIEA,EAGAMA,ONDELT

      net radiation exchange * delta
      QHDELT= EXP((AIRTMP-212.)*(0.1024-0.01066*LOG(SOLRAD)))-. 0001

      Vapor pressure deficit between  surface and dewpoint temps(Es-Ea)  IN of  Hg
      ESMIEA* (6413252.*EXP(-7482.6/(AIRTMP+398.36)» -
     1          (6413252.*EXP(-7482.6/(DEWTMP+398.36>»

      pan evaporation assuming air temp  equals water surface temp.

      when vapor pressure deficit turns  negative it is set equal to zero
      IF (ESHIEA .LT. 0.0) THEN
        ESMIEA= 0.0
      END IF

      pan evap * GAMMA, GAMMA = 0.0105 inch Hg/F
      EAGAMA= 0.0105 * (ESMIEA**0.88) *  (0.37 + 0.0041*UINDSP)

      delta = slope of saturation vapor  pressure curve at air temperature
      DELTA = 4.79878E+10 * EXP<-7482.6/(AIRTHP+398.36)) /
     1          ((AIRTMP+398.36)**2)

      pan evaporation rate in inches  per day
      EVAP= (ONOELT + EAGAMA) / (DELTA+0.0105)

      when the estimated pan evaporation is negative the value is set to zero
      IF (EVAP .LT. 0.0) THEN
        EVAP= 0.0
      END IF

      RETURN
      END

-------
APPENDIX D.6   OBSERVED PRECIPITATION DATA BASE DEVELOPMENT
                                                                             14
The data base of observed hourly and daily rainfall was developed.  Stations
included in the data base were selected based on their location within or near
the basin boundaries.  The data were obtained from standard NOAA data tapes,
and were reformatted to Watershed Data Management (WDM) file format.  The
procedures and software utilized to generate- the data base are described
below.  These procedures were followed for each state in the basin, i.e., NY,
PA, WV, DE., MD, and VA.

      1.  Hourly and daily NOAA data files were transferred from tape to disk
          for each state; the format of the data on tape was maintained.

      2.  The INVENT (inventory) program was run for each file.  This
          interactive program requests the name of the data file, and
          generates a listing of the stations contained in the file.  The
          inventory is written to the output file: INVENT.DAT.

      3.  Stations were selected (to extract from tape and reformat) based on
          their latitude and longitude.  The WDM files STAHISTH.WDM (hourly)
          and STAHISTD.WDM (daily) contain the station histories (including
          latitude and longitude) of all stations in the region.  The ANNIE
          program was used to access these WDM files, and to 'select' stations
          having LATDEG and LNGDEG attributes within limits corresponding
          approximately to the basin boundaries.  A file containing the
          selected station ID numbers (4-digit) was written to the output file
          by ANNIE.

      4.  The SPLITH and SPLITD programs were used to read the large data
          files and write new data files (retaining the original tape format)
          that contain only those stations of interest.  The purpose of this
          step is to create smaller data files so that the succeeding step is
          less computer resource intensive.  This program reads the input file
          SPLIT.INP containing the 4-digit station ID numbers, (one number per
          line), and writes the data to the file SPLIT.DAT.

      5.  The NOAA program was used to read the data files and write the
          station data to a WDM file.  An example of the interactive
          questions/responses used for this program is as follows:

          Enter time step for dataset in minutes.              1440

          Do you want a trace of the reformatting process?     NO

          Name of your WDM file?                               PRECIP.WDM

          State code (2-character post office code) ?          MD

          Do you want SOME or ALL of the stations ?            ALL

          Name of your station history file ?                  STAHIST.MD

-------
                                                                             15
APPENDIX D.6  (continued)
          For desired data types, enter dataset number, or 1.  1



          Increment for data set numbers between stations.     1




          Do you want data for entire period- of record ?       NO




          Enter beginning and ending dates.   1984,1,1,0,0,0,1985,12,31,0,0,0




          Enter name of NOAA data file.                        MD_RAIN.DAT

-------
APPENDIX D.7   THIESSEN NETWORK DEVELOPMENT
                                                                              16
                      Development  of Thiessen Network for
                       Hourly  Precipitation Generation
      1.  Each of the observed stations was analyzed using ANNIE to determine
          the percentage of missing data in the 1984-85 period.   Stations
          having greater than 25% missing data were eliminated from further
          consideration.

      2.  A Thiessen analysis of the remaining hourly stations was done.
          Based on these results, any stations that were sufficiently far
          outside of the basin boundaries that they were not used for any
          segments were eliminated from the final list of stations.  Also,
          daily stations were included in the list of stations in order to
          fill in areas where the hourly stations were sparse.

      3.  The final Thiessen analysis was performed with the stations selected
          above.

      4.  An adjustment to the Thiessen network was required because the
          software used to perform the rainfall generation is limited to
          consideration of ten or fewer observed hourly stations and ten or
          fewer daily stations for each model segment.  Therefore, for
          segments having more than ten of either type, stations with very
          small weights were eliminated from that segment and their weights
          assigned to the nearest remaining stations.

      5.  A further adjustment to the Thiessen network was required because
          some model segments did not have sufficient hourly stations to
          ensure the availability of hourly data on every day that rainfall
          occurs.  Therefore, some model segments were combined to produce
          segments with more hourly stations.  This procedure was performed
          manually by combining the total areas associated with each station
          and each segment, and then computing new weights based on the
          combined areas.  Step 4 (above) was repeated if more than ten
          stations of either type resulted from this combination of segments.
          The final Thiessen network for the 1984-85 period, consisting of 32
          rainfall segments, is'listed in Appendix D.7.

      6.  The data for 1986-1987 were processed separately.  When the observed
          data for this period were analyzed, it was discovered that several
          stations included in the 1984-85 Thiessen network had been
          discontinued or had significant missing data.  Therefore, these
          stations were removed from the network and their Thiessen weightings
          were added to the nearest station in the set of stations for that
          segment.  The differences between the 1984-85 and 1986-87 Thiessen
          networks are included in Appendix D.7.

-------
APPENDIX D.7  (continued)




                Final Thiessen Networks for 1984-85 and 1986-87
                                                                              17
SEGMENT (S)
10










20










30











40








WDM
DATASET
1
9
10
18
20
108
142
152
160
179
336
2
3
5
6
11
15
16
17
19
22
300
108
117
130
141
142
147
170
173
181
187
300
315
117
124
149
166
177
187
240
284
315
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
STATION
NY 270
NY3979
NY3983
NY8498
NY9229
PA1212
PA5731
PA6627
PA7310
PA8868
PA9408
NY 687
NY1987
NY2454
NY2526
NY4070
NY5682
NY6685
NY7830
NY8625
NY9522
PA7029
PA1212
PA2325
PA3521
PA5601
PA5731
PA5915
PA8275
PA8491
PA8905
PA9705
PA7029
PA8057
PA2325
PAS 01 8
PA6004
PA7931
PA8763
PA9705
PA3056
PA5817
PA8057
84-85
WEIGHT
0.0497
0.1667
0.1528
0.1355
0.1002
0.0389
0.0739
0.1014
0.0164
0.1320
0.0325
0.0929
0.1200
0.1049
0.1700
0.0657
0.0722
0.1099
0.0905
0.0716
0.0920
0.0103
0.0934
0.1060
0.0030
0.0224
0.0590
0.1901
0.0405
0.0767
0.1833
0.1772
0.0236
0.0248
0.0360
0.0322
0.1645
0.0958
0.0750
0.0208
0.0902
0.1861
0.2994
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
.
-
-
-
-
-
.
•
-
-
7
_
-
.
-
-
-
-
-
-
-
8
_
.
-
.
-
-
-
-
-
-
8
7

-
-
-
-
.
8
7
7

-------
                                                                                           18
             APPENDIX D.7  (continued)
SEGMENT(S)
50

.








60

















70







WDM
DATASET
113
114
116
133
134
155
159
175
176
184
333
101
108
110
114
120
155
160
168
169
184
268
274
283
306
323
333
336
342
108
117
166
101
268
274
284
342
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
STATION
PA1961
PA2245
PA2298
PA4001
PA4027
PA6916
PA7217
PA8589
PA8612
PA9385
PA9022
PA 147
PA1212
PA1400
PA2245
PA2629
PA6916
PA7310
PA8155
PAS 17 5
PA9385
PA4853
PA5109
PA5790
PA7409
PA8469
PA9022
PA9408
PA9728
PA1212
PA2325
PA7931
PA 147
PA4853
PA5109
PA5817
PA9728
84-85
WEIGHT
-0.3687
0 . 0064
0.0017
0.0681
0.0164
0.2061
0.0095
0.1254
0.0663
0 . 0344
0.0970
0.0365
0.0386
0.0824
0.0639
0 . 0499
0.0661
0.0222
0.0424
0.1090
0.0758
0.0093
0.1173
0.0379
0.0784
0.0276
0.0015
0.0856
0.0556
0.0516
0.2472
0.1115
0.0001
0.1037
0.0005
0.1493
0.3361
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
.
-
-
-
-
-
-
.
•
-
7
_
-
-
0.1397
-
-
-
-
-
0 . 0000
17
7
7
8
8
7
7
24
_
•
-
-
17
7
7
24
I

-------
APPENDIX D.7  (continued)
                                                                              19
SEGMENT(S)
80















90





100
















WDM
DATASET
103
104
105
109
123
132
135
146
149
166
196
268
269
281
283
289
608
116
127
133
161
312
104
105
109
116
122
133
146
154
155
161
196
273
281
283
289
312
333
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
STATION
PA 605
PA 725
PA 763
PA1354
PA2838
PA3710
PA4166
PA5825
PA6004
PA7931
PA 482
PA4853
PA4896
PA5662
PAS 790
PA6297
MD4030
PA2298
PA3295
PA4001
PA7312
PA7846
PA 725
PA 763
PA1354
PA2298
PA2721
PA4001
PA5825
PA6852
FA6916
PA7312
PA 482
PA4992
PA5662
PAS 7 90
PA6297
PA7846
PA9022
84-85
WEIGHT
0.1875
0.0543
0.0969
0.0463
0.0266
0.0882
0.0459
0.0284
0.0766
0 . 0448
0.0980
0.0587
0.0010
0.0021
0.0629
0.0818
0.0003
0.1455
0.2855
0.0003
0.0887
0.4797
0.0274
0.0033
0.0111
0.0073
0.0041
0.1231
0.0759
0.1164
0.0186
0.1500
0.0335
0.1282
0.0126
0.0028
0.0735
0.0820
0.1302
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
0.2757
-
-
-
-
0.0000
-
.
•
-
7
17
15
8
7
7
.
-
.
-
-
7
.
-
.
-
.
-
-
-
-
-
7
8
8
7
7
7
7

-------
APPENDIX D.7  (continued)
                                                                              20
SEGHENT(S)
110












120







140



160






170










WDM
DATASET
103
119
123
131
132
135
138
149
189
611
269
320
345
129
137
138
189
253
269
305
345
189
611
253
631
127
503
509
510
516
633
662
503
508
509
510
707
724
516
525
535
633
813
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
HOUR
HOUR
DAY
DAY
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
STATION
PA 605
PA2537
PA2838
PA3633
PA3710
PA4166
PA4778
PA6004
PA9938
MD6844
PA4896
PA8379
PA9950
PA3321
PA4763
PA4778
PA9938
PA4019
PA4896
PA7322
PA9950
PA9938
MD6844
PA4019
MD2060
PA3295
WV1393
WV6163
WV7730
WV 527
MD2282
MD8065
WV1393
WV5739
WV6163
WV7730
VA2208
VA5880
WV 527
WV3215
WV6960
MD2282
VA5595
84-85
WEIGHT
0.0036
0 . 0041
0.0558
0.0232
0.1008
0.0968
0.0195
0.0401
0.0922
0.0088
0.2254
0.1871
0.1426
0.1206
0.2561
0.3010
0.0533
0.1187
0.0528
0.0877
0.0098
0.0778
0.0390
0.6883
0.1949
0.1847
0.0112
0.0630
0.1001
0.1671
0.2189
0.2550
0.0475
0.0253
0.1684
0.1051
0.0026
0.0005
0.0057
0.3803
0.1974
0.0040
0.0632
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
0 . 1044
-
-
0 . 0000
0.0000
0.1200
-
-
0.1010
0 . 0000
15
8
8
_
-
-
-
7
15
7
8
_
-
7
24
-
-
-
-
7
7
8
-
-
-
-
-
-
7
8
8
7
7

-------
APPENDIX D.7  (continued)
                                                                              21
SEGMENT(S)
175










180

















190








WDM
DATASET
127
502
508
509
510
608
737
544
633
856
858
104
109
122
123
154
502
505
605
608
737
281
312
623
640
643
759
818
856
707
722
726
525
760
807
836
842
858
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
STATION
PA3295
WV1323
WV5739
WV6163
WV7730
MD4030
VA8046
WV9281
MD2282
VA9186
VA9263
PA 725
PA1354
PA2721
PA2838
PA6852
WV1323
WV4763
MD1530
MD4030
VA8046
PA5662
PA7846
MD1032
MD3355
MD3975
VA 670
VA5851
VA9186
VA2208
VA5690
VA6178
WV3215
VA 720
VA5096
VA8062
VA8448
VA9263
84-85
WEIGHT
0.0094
0.1987
0.0944
0.0399
0.1269
0.1956
0.0410
0.2023
0.0885
0 . 0010
0.0023
0.0030
0 . 1044
0.0112
0.0206
0.0079
0.0825
0.1628
0.0454
0.0984
0.0106
0.1381
0.0001
0.0102
0.0351
0.1316
0.0174
0.0198
0 . 1009
0.3088
0 . 0534
0 . 0050
0.0113
0.1164
0.1051
0.3385
0.0260
0.0355
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
,
-
-
-
-
-
-
8
7
8
7
_
-
-
-
-
-
-
-
-
-
8
7
18
7
18
0 . 0000 8
0.0372 8
8
_
-
-
8
8
8
8
18
7

-------
r
           APPENDIX D.7   (continued)
                                                                                        22
SEGMENT(S)
200













210







220







230








WDM
DATASET
505
508
707
737
742
525
535
544
759
807
818
842
855
858
119
123
605
611
615
320
623
640
742
747
623
624
630
640
818
849
729
732
733
742
760
776
781
792
807
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
STATION
WV4763
WV5739
VA2208
VA8046
VA8396
WV3215
WV6960
WV9281
VA 670
VA5096
VA5851
VA8448
VA9186
VA9263
PA2537
PA2838
MD1530
HD6844
HD9030
PA8379
MD1032
MD3355
VA8396
VA8906
MD1032
MD1125
MD1995
MD3355
VA5851
VA8903
VA6712
VA7130
VA7164
VA8396
VA 720
VA2009
VA2155
VA3466
VA5096
84-85
WEIGHT
0.0363
0.1148
0.0617
0.1323
0.0346
0.0056
0 . 0046
0.0096
0.0940
0.0088
0.0537
0.2110
0 . 0424
0.1906
0.3340
0.0662
0 . 1414
0.0179
0.1851
0.0075
0.0596
0.1883
0.1368
0.0320
0.2897
0.0212
0.0187
0.0200
0.1798
0.3018
0.1423
0.1093
0.1560
0.1284
0.1417
0.0019
0.2103
0 . 0114
0.0987
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
_
-
-
-
-
8
8
8
0.0000 8
8
0.1477 8
18
8
7
_
-
-
0 . 0000
0.2030
8
18
7
_
-
18
24
9
7
8
24
_
0.2653
0.0000
-
0.3520 8
9
0.0000 7
7
8

-------
APPENDIX D.7  (continued)
                                                                             23
SEGMENT(S)
235,240,250







265





270















280














WDM
DATASET
,260 729
733
757
773
776
780
792
806
513
713
714
724
813
817
506
513
707
713
714
720
722
724
735
778
798
813
817
819
836
843
707
720
722
726
729
756
760
765
773
782
786
792
806
836
843
TIME
STEP
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
STATION
VA6712
VA7164
VA 327
VA1929
VA2009
VA2142
VA3466
VA5050
WV9011
VA3310
VA4128
VA5880
VA5595
VA5756
WV5284
WV9011
VA2208
VA3310
VA4128
VA5120
VA5690
VA5880
VA7285
VA2044
VA4565
VA5595
VA5756
VA6012
VA8062
VA8600
VA2208
VA5120
VA5690
VA6178
VA6712
VA 243
VA 720
VA1136
VA1929
VA2160
VA2941
VA3466
VA5050
VA8062
VA8600
84-85
WEIGHT
0.0705
0.0616
0.2524
0.0067
0.2214
0.0605
0.0658
0.2611
0.0001
0.0959
0.0767
0.2540
0.2626
0.3108
0.0129
0.0249
0.0002
0.0243
0.0591
0.0349
0.0595
0.1017
0.0398
0.1456
0.2643
0.0149
0.0008
0.1684
0.0402
0.0085
0.0030
0.0777
0.0641
0.2338
0 . 0003
0.0528
0.0248
0.1375
0.1169
0 . 0500
0.0102
0.0774
0.0013
0.0022
0.1480
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
.
-
18
0 . 0000 8
9
8
7
0.2678 18
_
-
-
-
7
7
_
-
-
-
-
-
-
-
-
0.3140 17
7
7
7
0 . 0000 7
8
6
.
-
-
-
-
7
8
7
0 . 0000 8
0.1669 7
7
7
18
8
6

-------
APPENDIX D.7  (continued)
SEGMENT(S)
290,300,310












330,340





360-440








450-490












WDM
DATASET
720
734
749
755
756
767
780
782
786
825
830
845
857
604
615
623
624
629
642
401
601
602
612
725
745
409
642
822
129
137
601
602
604
611
615
253
320
409
620
629
631
TIME
STEP
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
STATION
VA5120
VA7201
VA9151
VA 187
VA 243
VA1322
VA2142
VA2160
VA2941
VA6656
VA6906
VA8800
VA9213
MD 700
MD9030
MD1032
MD1125
MD1862
MD3675
DE3570
MD 15
MD 465
MD6915
VA6139
VA8849
DE6410
MD3675
VA6475
PA3321
PA4763
MD 15
MD 465
MD 700
MD6844
MD9030
PA4019
PA8379
DE6410
MD 470
MD1862
MD2060
84-85
WEIGHT
0.0216
0.0976
0 . 1424
0.1061
0.0394
0.0304
0.0803
0.0460
0.1384
0.0821
0.0698
0.0317
0.1142
0.1841
0.0364
0.0045
0.3116
0.3070
0.1564
0.4200
0.1434
0.0468
0.1103
0.0059
0.1661
0.0421
0.0091
0.0563
0.0198
0.0134
0.1119
0.0852
0.0020
0.2518
0.0568
0.0331
0.0030
0.0671
0.1393
0.0687
0.1479
86-87 OBSER-
WEIGHT VATION
(IF DIFFERENT) TIME
-
-
-
7
7
8
8
7
7
0.0000 7
7
7
0.1963 7
.
-
18
24
17
16
.
-
-
-
-
-
17
16
16
_
-
-
-
-
0 . 0000
0.3086
7
8
17
24
17
24

-------
APPENDIX D.7  (continued)
                                                                              25
WDM
SEGMENT(S) DATASET
500-550 602
604
612
732
733
742
747
620
624
630
642
776
849
560-640 612
725
733
734
749
757
776
780
822
825
830
845
857
TIME
STEP
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
HOUR
HOUR
HOUR
HOUR
HOUR
DAY
DAY
DAY
DAY
DAY
DAY
DAY
DAY
STATION
MD 465
MD 700
MD6915
VA7130
VA7164
VA8396
VA8906
MD 470
MD1125
MD1995
MD3675
VA2009
VA8903
MD6915
VA6139
VA7164
VA7201
VA9151
VA 327
VA2009
VA2142
VA6475
VA6656
VA6906
VA8800
VA9213
84-85
WEIGHT
0.0168
0.0142
0.2324
0.0530
0 . 0419
0.0347
0.2241
0 . 0005
0.0163
0.0312
0.1273
0.1147
0.0929
0.0700
0.1146
0.0018
0.1819
0.2814
0.0901
0.1078
0.0012
0.0152
0.0525
0.0038
0.0421
0.0376
86-87
WEIGHT
(IF DIFFERENT)



0.0949
0.0000










"0.0000



0.1096


0 . 0000


0.0901
OBSER-
VATION
TIME
.
-
-
-
-
-
-
24
24
9
16
9
24
_
-
-
-
-
18
9
8
16
8
7
7
7

-------
                                                                             26
APPENDIX D.8   DESCRIPTION OF THE PRECIP PROGRAM
The final step in creating the hourly precipitation was to run the PRECIP
program to generate the data using the Thiessen network and the data base of
observed hourly and daily stations.  The PRECIP program is a FORTRAN program
designed to generate an hourly time series of rainfall that is a weighted
average of several observed .time series.  For each execution of the program,
which generates one hourly time series, the following inputs are required:

    •   Between one and ten observed time series of hourly rainfall
    •   Between zero and ten observed time series of daily rainfall
    •   Weighting factor for each of the above time series (sum of all factors
        must be 1.0)

The program then proceeds daily through the following steps to produce an
hourly time series:

    1.  Computes the daily totals for all input (observed) time series (daily
        and hourly).   (Data are obtained from the WDM file.)

    2.  Computes the weighted daily total rainfall using the weighting factors
        and the daily  totals computed in Step 1.  (Note that any station
        having missing data during the day is eliminated from the computations
        on that day, and the weighting factor for that station is distributed
        among the remaining stations in proportion to their original weights.)

    3.  Compares the weighted daily total with each of the daily totals of the
        observed hourly time series.  Selects the observed hourly station
        having the closest daily total to the weighted daily total.

    4.  Computes the generated hourly time series by distributing the weighted
        daily total using the hourly distribution of the station selected in
        Step 3.

    5.  Stores the resulting hourly time series in the WDM file.

    6.  Writes a summary of the data generation for each day that data were
        generated.  If the program experiences difficulty because of too much
        missing data,  it also writes an explanatory message to the output
        file, and skips the current day.

The PRECIP program, which is invoked interactively, requests the base name of
the input and output files.  The program attempts to open the existing input
file 'base name.INP',  and a new output file 'base name.OUT'.  Detailed
messages and status information about the hourly time series generation are
written to the output  file, so the user can verify that no problems occurred.

The input file contains all information to generate one hourly time series,
including control information, Thiessen weights, WDM file name, WDM data set
numbers containing the observed data, and the WDM data set number to receive
the generated time series.  Table 1 contains all of the information to develop
these input files for  all model segments.  The content and format of the input
file is described in detail in the table below.

-------
APPENDIX D.8   (continued)
                                                                              27
   LINE FORMAT   VARIABLE
1 714






2 A64
3 14
4 2014
5 614

NGAGES
IDAILY
IHRLY
TYPE
COMP
DIS
AVG
WDNAME
DSN(21)
DSN(1 -NGAGES)
SDATE(l-3)
EDATE(l-S)
        1014
lOBST(ll-IDAYT)
    7+  10F8.2   WGT(1-NGAGES)
DEFINITION

Total number of input (observed) stations
Number of daily stations
Number of- hourly stations
Set to 2 (Thiessen method)
Set to 1
Set to 0
Set to 1

WDM file name

WDM data set no. for the output time series

WDM data set nos.  of the input time series
(enter hourly stations first, then daily)

Start date (year.month,day)
End date (year,month,day)

Observation times of the daily stations
(same order as daily stations in Line 4)

Thiessen weights of the observed stations
(enter 10 values per line; same order as
stations in Line 4;  )

-------
APPENDIX D.8     (continued)
                                                                                                          28
c
c
c
c
c
c
c
c
c
 PROGRAM   PRECIP

 fills in missing data or creates  a precip time series
 up to 20 gages can be used to fill in
 «** FROM NVTOC/CBP ****

 «• + «• LOCAL VARIABLES + + *
 REAL      X(21),Y(21),D<21).WGT(21),UGTTMP{21),WGTM1S,
1          DTX<21),SUM1<10>,SUM2(10),TOTAL.OIF,XPDIF,LEFT<21>,
2          KP<11,24),DT<21),DELTP(21),TWGT,TOTUGT,
3          HPX(11,24),DTWOD(11),DT2(21),HP2(11,24),
4          MD1,MD2,HD3,XM,YK,RATIO,RATIOP,C2,D2,DELTA,
5          D!STX,DISTY,fK10),f2<10),dsuniC21),DSICIP
 INTEGER** IYR,1MO,1DAY,IOBST(21),TUO,COMP,DIS.TYPE,AVG,H)MSFL,
1          DATE.DATEX,DATE2fRESPON,N,NGAGES,NT,I,J,K,IOBflHRLY,
2          cntgud.cntbad,
3          IO,I1,l3,l4,l6,SOATE(6),EDATE(6),ajRDAT(6),NVALS,DSN(21)
 CHARACTER*!? BNAM
 CHARACTER*64 UDNAME
c
C + * + FUNCTIONS * + +
REAL Y1
INTEGER TIMCHK
C
C + * + EXTERNALS + * +
EXTERNAL UDBOPN, GETDAT, PUTDAT
C
C DATA INITIALIZATIONS + + *
DATA 10, I 1,13, 14, 16/0, 1.3. 4, 6/
C
C + * + INPUT FORMATS + + *
1000 FORMAT (614)
1010 FORMAT OOFB.2)
1020 FORMAT (I6,2X,20F4.0,10(24F3.0))
1030 FORMAT (A12)
1040 FORMAT (A64)
1050 FORMAT (2014)
C
C * * + OUTPUT FORMATS * * +
2000 FORMAT (
1
2
3
4
2010 FORMAT (
1
2
2015 FORMAT (
2018 FORMAT <
1
2020 FORMAT (
2030 FORMAT (
1
2040 FORMAT (
1
2050 FORMAT (
1
2060 FORMAT (
4






, ZIPI, TIMADO, TIMCHK, COPY!













CBP PRECIP UPDATE/CREATION PROGRAM',/,
URITTEN BY NVPOC 6/81 ',/,
REVISED BY AQUA TERRA CONSULTANTS 11/86', /
ADDED DATA FROM
UDM FILES 1/89', /
REVISED HANDLING OF DAILY DATA 9/89 '//)
ngagesi'.IS,' idail
type r'.lS,1 conp
avg :',I5//)
name of worn file
output dsn
source dsns
daily obs times
distance to gage

X distan to gage

Y distan to gage

calc dis to gage

y:',l5,' ihourly:>.l5,/.
:',I5,' dis :',I5,/,

,a64)
,i4,/,
,20i4)
,8110)
.10F8.2,/,
.10F8.2)
.10F8.2,/,
.10F8.2)
,10F8.2,/.
.10F8.2)
.10F8.2,/,
,10F8.2)

-------
                                                                                                           29
APPENDIX  D.8     (continued)
2070  FORMAT ('    weight factor   :  ',10F8.5,/,
     1        '                      ',10F8.5>
2075  FORMAT (' ***** ERROR TOTAL HEIGHTS MUST TOTAL  1.0,  CALC  TOT:',
     1        F10.2)
2080  FORMAT (1X.I6,' on this data the precip was1,
     1              ' averaged with at least SOX of  the gages having1,
     2              '  missing data,  X area missing=',F8.4)
2090  FORMAT (1x,i3,' gages have missing data,  ',i3,
     1        .' gages have zero precip on this date1,110}
2095  FORMAT («' hourly gages have zero or missing precip',
     1        < on this date',I10,20X,
     2        i*************** ignored value of -,F6.2)
2100  FORMAT ('all surrounding gages missing1,
     1        ' precip, date = ',110)
2110  FORMAT (' ****** two day average starting',110)
2120  FORMAT (10X.I2.1X,12,1X.12,' 1',12F5.0,/,
     1        10X,I2,1X,I2,1X,I2,' 2',12F5.0)
  602
 C
 C
 C
 C
 C
 C
 C
      CALL ERRSET (63,.TRUE...FALSE.,.FALSE.,.FALSE.,15)
      get base name
      WRITEC*,*) 'enter base file name '
      READ (*,1030> BNAM
      open files
      OPEN (UNIT=5,F|LE=BNAM//'.INP',STATUS='OLD')
      OPEN (UNIT=6,FILE=BNAM//'.OUT'>
      OPEN «JNIT*10,FILE*BNAM//'.DTI',STATUS='OLD')
      OPEN (UHIT-13,FILE-BNAM//I.DTOI)

      print out header
      WRITE (6,2000)

      initialize array
      DATE-0
      DSKIP= 0.0

      DO 602 M= 1,21
 603
 607
  X(N>
  DT2(N)  =
  Y(K)
  D(N)    =
  UGT(N)  =
  OT(N)   =
  OELTP(N):
  dsum(n) =
CONTINUE
                  0.0
                  0.0
                  0.0
                  0.0
                  0.0
                  0.0
                  0.0
                  0.0
DO 607 K= 1,24
  DO 603 N- 1,11
    HP(N,K) - 0
    HP2(N,K>= 0
  CONTINUE
CONTINUE

ngages doesn't include fillin gage
if DIS=1 read in distances not weights
if AVG«1 uses 1 day averaging
if TYPE:  1= dist wgt 2-theisen ugt
if COMP: 3= fillin an hourly gage 4= fillin a daily gage

READ (5,1000) NGAGES.IDAILY.IHRLY.TYPE.WMP.DIS.AVG
yRITE(6,2010) NGAGES,1DAILY,IHRLY,TYPE,COMP,DIS.AVG

-------
APPENDIX D.8     (continued)
                                                                                                         30
      read WDM file
      READ (5,1040) UDNAME
      WRITE (6,2015) UDNAME
      read DSN numbers  on WDM  file and output DSN
      READ (5,1050) DSN(21)
      READ (5,1050) (DSN(I),I=1,NGAGES)
      WRITE (6,2018) OSN(21),(DSN(I),I-1,NGAGES)

      open WDM rile
      WDMSFL= 40
      CALL UDBOPN (UDMSFL.WDNAME,
     0             RETCOO)
      IF (RETCOO.NE.O)  THEM
        WDM problems
        WRITE (6,*) 'ERROR:  UNABLE TO OPEN WDM FILED*
        STOP 'ERROR: UNABLE TO OPEN WDM FILE!!1
      END IF

      read starting and ending dates
      READ (5,1050) (SOATEO), 1=1,3),

      IF (IDAILY.NE.O)  THEN
        daily stations  available, read in observation times
        (24 hour clock,  whole  hours)
        IDAYT= IDAILY+10
        READ (5,1050)(IOBST(I),1=11,IOAYT)
        WRITE(6,2020)(IOBST(I),I=11,IDAYT)
        initial daily distribution factores
        do 2 i=1,idaUy
          f1(i)= float(24-iobst(i))/24.
          f2(i)= 1.0- fl(i)
        continue
      ELSE
        no daily stations
        IDAYT= 0
      END IF

      IF (TYPE.EQ.1) THEN
        last X Y value  is centreid of watershed
        IF (DIS.EQ.1) THEN
          use distances to gages
          READ (5,1010)  CD(I>,I=1,NGACES>
          WRITE(6,2030)  (D(I),I=1,NCAGES)
        ELSE
          use gage coordinates
          NT= NGAGES+ 1
          READ (5,1010)  (X(I),I-1,NGAGES)
          WR!TE(6,2040)  
-------
                                                                                                          31
APPENDIX D.8     (continued)
            D(I) = (DISTX**2.0 +  DISTY**2.0>*« 0.5
            WRITE(6,2060)  (D(j),j=1,NGAGES)
          END IF
C         calc weighting factor
          IF (D(I).GT.O.O) THEN
            WGT(I)= 1.0/(D
            DO 812 K=1,24
              HPX(I,K)= HP2(I,K)
 812        CONTINUE
 811      CONTINUE

-------
                                                                                                          32
APPENDIX  D.8    (continued)
c
C         read precip data
C         date, alt daily, then all hourly
C         READ(10,1020,ENO«501) DATE,(DT
          CALL GETDAT (UDMSFL,DSN,CURDAT,IHRLY,IDAILY,iobst(11>,
     m                 f1,f2,
     0                 DT.HP)
          DATE- ((CURDAT(1>-1900>*10000)+ (CURDAT(2)*100)+ CURD AT (3)
C        WRITE •(*,*> 'DATE,DT',DATE,(DT(I),I*1,IHRLY>
C
          IF (IDAILY.GT.10) THEN
C           adjust daily gages using observation times
            DO 810 J= 11,!DAYT
              IF (DTX(J),LT.1.0E-5.0R.DTX(J).GT.9990) GO TO 815
C               find which hourly gage best represents  the daily voli
C               HP=present days values HPX=previous days values
                IOB   = IOBST(J)
                XPDIF = 10000
                JCLOSE= 0
C
                DO 805 K=1,IHRLY
C                 calculate hourly values for pm hours
                  SUM1(K>= 0
                  SUM2(K>= 0
                  IF (IOB.LT.24) THEN
                    DO 806 1=106+1,24
                      SUH2(K)= SUH2(K)+ HPX(K,I)
 806                CONTINUE
                  END IF
C                 calculate hourly values for am hours
                  IF (IOB.GE.1) THEN
                    DO 809 I=1,IOB
                      SUM1(K)= SUM1(K>+ HP(K,I)
 809                CONTINUE
                  END IF
                  TOTAL= SUM1CK)* SUM2(K)
                  IF (TOTAL.GT.O) THEN
                    DIF  - ABS(TOTAL-DTCJ))
                    IF (DIF.LE.XPDIF) THEN
                      XPDIF * DIF
                      1CLOSE= K
                    END IF
                  END IF
 805            CONTINUE
                IF (ICLOSE.EQ.O) THEN
C                 ignorring the daily value
                  WRITE (6,2095) DATE,J-10,DT(J)
C                 quick and ugly get out of here
                  GOTO 16
                END IF
                RATIOP=SUH2+SUM2(ICLOSE>)
                CALL CONSEC(DATE,DATEX,RESPON)
                IF (RESPON.EQ.O) LEFT(J}> 0.0
                DTX{J)= RATIOP*DT(J)*LEFT(J)
                LEFT(J)=(1-RATIOP)*DT(J>
                GO TO 810
 815          CONTINUE
                DTX(J)=LEFT(J)
                LEFT(J)= 0
                IF (DTX(J).GT.9990) LEFT(J>= DTX(J>
 810        CONTINUE

-------
                                                                                                          33
APPENDIX D.8     (continued)
          ELSE
            IF (AVG.EQ.1) GO TO 16
            IF (TWO.NE.1) THEM
              DO 819 I=1,1HRLY
                IF(DT(I).GE.9980.0R.DTX(l).GE.9980)DTUOD1= YKDTX.1HRLY)
C             WRITE(6,8190) HD1,MD2,MD3,DATE,DATEX
C8190         FORNAT(6X,3F10.4,SX,2MO)
            END IF
          END IF
          DO 889 I=11,IDAYT
            DT2(I)= OT(I)
            DT(I) = DTXU)
 889      CONTINUE
          DO 820 1=1,IHRLY
            DT2(I)= DT(I)
            DT(I) = DTX(I)
            DO 821 K= 1,24
              HP2U,K)= HP(I.K)
              HPCI.K) - NPX(1,K)
 821        CONTINUE
 820      CONTINUE
C
          IF (1DAILY.EQ.O) THEN
C
C           decide on daily or storm basis
C
            IF (TUO.E0.1) GO TO 826
              IF (DATEX.EQ.O) GO TO 816
              IF (RESPON.EO.O) GO TO 816
              IF (ND1.LE.HD3.0R.M)2.LE.MD3)  GO TO 816
 826        CONTINUE
            THO= 1+ TUO
            IF (TUO.EQ.1) WRITE (6,2110)DATEX
            DO 823 1= VHRLY
              DT(I)= DTWOD(I)
              DO 824 K= 1,24
                HP(I,K)= HPXd.K)
 824          CONTINUE
 823        CONTINUE
 816        CONTINUE
          END IF
C         changed 10 TO 410
          ibr= 1
          IF (DATEX.EQ.O) GO TO 410
 16       CONTINUE
          CALL CONSEC(DATE.DATEX,RESPON)
          IF(RESPON.NE.O) THEN
C           consectutive days
            DATE2= DATE
            DATE = DATEX
          END IF
          CALL YYMHDD(DATE,IYR,IHO,IDAY)
C
C         for fillin job set array values for DT(21)

-------
                                                                                                         34
APPENDIX  D.8    (continued)
          IF (TUO.LT.2) THEN
            IF (COMP.EQ.3.0R.COMP.EQ.4)  THEN
              IF (COUP.HE.3) THEN
                OT<21)= DT(IDAYT)
              ELSE
                DO 801 101,24
                  HP<11,K> HPCIHRLY.KX
 801            CONTINUE
                DT(21>= OT(IHRLY)
              END IF
C             changed 10 TO 410
              ibr- 2
              IF  1,20
              DT<21>* DT{21)+ WGTTMPCK)*DT(K)
840         CONTINUE
            DTC21)- DT<21>* (1.0/TOTW6T)
            IF .LT.9997> THEN
                OELTP(I>= ABS(OT(21)-DT(I))

-------
                                                                                                         35
APPENDIX D.8     (continued)
501
          write out the desired hourly values
          CALL PUTDAT ,(dsum(i),i=1,ihrly>,
     1              Cdsum(j>,j=11,idayt)
     WRITE<6,3000> DSKIP
3000 FORMAT (IX, 'TOTAL AMOUNT SKIPPED
     STOP
     END
                                        ,F8.2>
 12
     REAL   FUNCTION YKX.NUMG)

     calculate mean deviation X
                           NUMG

     + + + DUMMY ARGUMENTS +  +
     INTEGER   NUMG
     REAL      X(21)
     * + + LOCAL VARIABLES +  + +
     INTEGER   I
     REAL      MEAN,TOT,TOT2.IN.TX

     TOT = 0
     TOT2= 0
     IN  = NUMG

     DO 1 1= 1.NUHG
       IF (X(I).GT.99.8)  THEN
         IN= IN-1
         IF (IN.LE.1.) THEN
           MEAN- TOT
           Y1  = 5.0
           GO TO 12
         END IF
       END IF
       TOT= TOT* X(I)
     CONTINUE
     MEANs TOT/IN
     DO 2 Is 1,NUMG
       IF 
-------
                                                                                                        36
APPENDIX D.8     (continued)
 10


 20

c


 30

 40
      SUBROUTINE
             CONSEC(DATE,DATEX,
                    RESPON)
check to see if two consectutive days

+ * '+ DUMMY ARGUMENTS + »  +
INTEGER** DATE,OATEX,RESPON

+ + + LOCAL VARIABLES + +  +
INTEGER** OMATCH,DIF,IY1,IY2,IM1,IK2,ID1,I02,NDAY

RESPON* 0
DIF   sOATE-DATEX
IF (DIF.EG.1) THEN
  consectutive
  RESPOND 1
ELSE
  CALL YYMMDD(DATE,IY2,IN2,ID2)
  CALL YYMMDD(DATEX,IY1,IH1.1D1)
  IF (IM1.NE.IN2) THEN
    calculate nutter of days per month
    GO TO (10,20,10,30,10,30,10,10,30,10,30,10),IM1
    CONTINUE
      NDAY= 31
      GO TO 40
    CONTINUE
      NDAY= 28
      this is a bug in the original program (fixed here)
      IF (HOO(IYI.A).EQ.O) NDAY= 29
      GO TO 40
    CONTINUE
      HDAY= 30
      GO TO 40
    CONTINUE
    DY= ID1+ 1
    IF (DY.GT.NDAY) THEN
      DY  * 1
      IM1= IM1+ 1
      IF (IM1.GT.12) THEN
        IMO= 1
        IYEARs IYEAR* 1
      END IF
      DMATCH- (IYEAR*10000)+ (IMO*100)+ DY
      IF (DMATCH.EQ.DATE)  RESPOND 1
    END IF
  END IF
END IF


c
c
c


c
c
c
RETURN
END



SUBROUTINE YYMMDD(D,
0 IYR,IMO,IDAY)

calculate year, month and day from









date


-------
APPENDIX D.8     (continued)
                                                                                                          37
      + + + DUMMY ARGUMENTS + ++
      INTEGER*4 D.IYfi,IHO,1DAY

      ITR = D/10000
      IMO = D/100 - , IHRLY, IDAUY.iobsK*)
      REAL       DT(21),HP(11,2«),f1(*>,f2(*)

      + + + ARGUMENT DEFINITIONS + + +
      UDMSFL - Fortran unit number for  UDM  file
      DSN    - array of dataset numbers containing data
      DATE   - current date to retrieve data for
      IHRLY  - number of hourly stations  of data
      IDAILY - number of daily stations of  data
      DT     - daily data buffer
      HP     - hourly data buffer

      + + * LOCAL VARIABLES + + +
      INTEGER    1,J,DELT,DVAL,NVAL,DTRAN,QUALFG,TUNITS,
     1           RETCODtDPOS,DOFF,DLOFF,ic,il
      REAL       RO,DBUFF<12000)

      + + * SAVES + •» *
      SAVE delt,DTRAN,QUALFG,OVAL,DBUFF

      + * + FUNCTIONS + + +
      INTEGER    DAYMON

      + + + EXTERNALS * + +
      EXTERNAL   DAYMON, UDTGET

      + * + DATA INITIALIZATIONS + * *
      DATA DELT,DTRAN,QUALFG/1,0,30/

      + + * END SPECIFICATIONS + + +

      IF (DATES(3).EQ.1> THEN
        set parameters for udmsfl get
        OVAL- DAYMON* NVAL+ 1

-------
                                                                                                          38
APPENDIX  D.8    (continued)
            CALL UDTGET (UDNSFL,DSN(I),DELT,DATES,NVAL,
     I                   DTRAN.QUALFG.TUNITS,
     0                   DBUFF(DOFF),RETCOD)
c          WRITE (*.*) 'DOFF.NVAL.DStKD'.DOFF.NVAL.DSNU^RETCOD
C         WRITE (*,*) 'DBUFF',(DBUFF(J>,J=DOFF,DOFF+Z3)
            IF (RETCOO.NE.O) THEN
C             problem reading wdmsfl  •.
              WRITE {•,*) 'PROBLEMS reading HOURLY  from won  FILE-,
     1                     UDMSFL.DSNCI>,DELT,DATES,NVAL,
     2        '•            DTRAN,QUALFG,TUNITS,DOFF,R£TCOD
            END IF
            ic= doff- 1
            il- doff* nval- 1
  5         continue
              ic= ic+ 1
            if ,DATES(2)
              do 8 ic= doff.il
                dbuff= -999
  8           continue
            end if
 10       CONTINUE
        END IF
C
        IF (IDAILY.GT.O) THEN
C         read daily data
          OLOFF= 24* IHRLY* DVAL+ 1
          00 20 1= 1.1DAILY
            TUNITS= 4
            DOFF  = DLOFF+ (1-1)* DVAL
            CALL UDTGET (UDMSFL,DSN(IHRLY+I),DELT,DATES,OVAL,
     I                   DTRAN.QUALFG.TUNITS,
     0                   DBUFF(DOFF).RETCOD)
c            WRITE (*.*) 'DOFF.MVAL,DSN'fDOFF,DVAL,OSN{IHRLY+I),RETCOD
            IF (RETCOO.NE.O) THEN
C             problem reading winsfI
              WRITE <*,*) 'PROBLEMS reading DAILY from WDM FILE',
     1                     WDHSFL.DSNOKRLY+D.DELT,DATES,NVAL,
     2                     DTRAN,OUALFG,TUNITS,DOFF,RETCOD
            END IF
            ic« doff- 1
            il= doff* nval- 1
 15         continue
              ic» ic+ 1
            if (dbuff(ic).le.O.O .and. ic.lt.il)  go to 15
            if (ic.eq.il .and. dbuff(ic).le.O.O)  then
c             whole month bad
              WRITE (6,*) 'BAD MONTH',DSN(IHRLY+I),DATES(1),DATES(2)
              do 18 ic= doff.it
                dbuff(ic)* -999
 18           continue
            end if
 20       CONTINUE
        END IF
      END IF
C
      1= 20
      CALL 2IPR (I.RO.DT)
      IF (IHRLY.GT.O) THEN

-------
                                                                                                          39
APPENDIX D.8     (continued)
                IF (OELTPCI).LE.DELTA) THEN
                  DELTAS DELTPO)
                  ICAGE= I
                END IF
              END IF
 12         CONTINUE
            D2= OT(21)
          END IF
          IF (IGAGE.EQ.O) THEN
C           other stations  have no precip on this date
            if (totwgt.lt.0.9999) WRITE(6,2095) DATE,DT(21)
            DSKIP= DSKIP+ DTC21)
            DT{21)= 0.0
C           changed 10 TO 410
            ibr= 5
            GO TO 410
          END IF
C
C         proportion 2 day  rain values based on filtin gage
C         RAT 10= ratio of filled in gage to obs. sta.
          IF (AVG.EQ.1)  THEN
            RAT10= DT(21)/OT(IGAGE)
            C2   -1.0
          ELSE
            IF (TUO.EQ.O) THEN
              C2= 1.0
            ELSE
              IF (DT(IGAGE).GT.O.O) THEN
                C2- DTX(IGAGE)/DT(IGAGE)
              ELSE
                C2= 0.0
              END IF
              DT(21)= 02*C2
              DO 831 I=1,NGAGES
                IF (DTUOD(I).GT.O.O) THEM
                  DT{I)= DT(I)*DTX/DTWOD«= RATIO*HP(IGAGE,K)
 13       CONTINUE
          ibr= 6
 410      continue
          wnte<6,2999)  date,dt(2l),(dt(i),i=1,ihrly),(dt(j),j=11,idayt>
2999      format(1x,i6,21(1x,f5.2))
          do 420 i= 1.21
            if (dt(i).gt.O.O  .and. dt(i>.lt.25.0) then
              dsum(i)* dsun(i)+ dt(i)
            end if
420       continue
c          WRITE (*.») >RATIO,DT(21)>igagel,RATIO>DT(21),igage,ibr
-------
 APPENDIX  D.8    (continued)
 C       put hourly data into array
        DO 40 1= 1,IHRLY
          DPOS= 24* «I-1>* DVAL+ DATES<3)-  1)
          DO 30 J= 1,24
            HP(I,J)= DBUFFCDPOS+J)
 C           sura hourly values into first  IHRLY daily positions
            DT* 999.
              DT(I)  = 9999.
            END IF
            IF (DT(I).GT.9999.) DT(I)= 9999.
 30       CONTINUE
 40     CONTINUE
      END IF
 C
      IF (IDAILY.GT.O) THEN
 C       put daily data into array
        dloff= (24* ihrly* dval>+ 1
        DO 50 I- 1.IDAILY
          DPOS= DLOFF+ (1-1)* (DVAD+ DATES(3>- 1
          f2£i)= 1.0
          if (dbuff(dpos).lt.O .or.  dbuff(dpos+1).lt.O .or.
     1        dbuff(dpos).gt.20.or.  dbuff(dpos+1).gt.20) then
            dt(10+i>= 9999
          else
            delp= 100.
            do 45 j> 1,ihrly
              jpos= nval* (j-1)
              JH1F= jpos+ * 24.+  IOBST(I>+ 1
              JHU= jpos+ (DATES(3»* 24.
              JH2F> JHU* 1
              JH2L= JHU+ lOBST(I)
              ht  = 0.
              ibad* 0
              do 42 k* jh1f,Jh2l
                if (dbuff(k).gt.O.O  .and. dbuffdO.lt.25.0) then
c                 valid hourly value
                  ht= ht+ dbuff(k)
                else if CdbuffdO.lt.0.0  .or. dbuff(k).gt.25.0) then
                  ibad= 1
                end if
 42           continue
              if (abs(dbuff(dpos+1)-ht) .It. delp .and. ht.gt.O
     1            .and. ibad.eq.O) then
                h2   > 0.0
                delp = abs(dbuffCdpos+D- ht)
                do 43 k« jh1f,jh1l
                  h2« h2+ dbuff(k)
 43             continue
                f2(i)= h2/ht
              end if
c              «rite(6,*) «j,ht,h2   :',j,ht,h2
 45         continue
            DT(10*I)= D8UFF(DPOS)*(f1(i))+
     1                dbuff(dpos+1)*(f2 •f1.f2,iobst:l,f1(i),f2Ci)liobst(i)
c          urite(6,*) 'd1,d2,dt   :l,dbuff(dpos),dbuff(dpos*1),dt(10*i)
                 1.0- f2(i)

-------
                                                                                                         41
APPENDIX D.8     (continued)
 50
 10
        CONTINUE
      END IF
       write(6,*> 'dt«,dt

      RETURN
      END
      SUBROUTINE   PUTDAT
     I
                     (WDMSFL.OSH,DATES,HP)
 20
 + + + PURPOSE  +  + +
 put corrected  precip data on UDH file

 + + + DUMMY ARGUMENTS + + +
 INTEGER    HDMSFL,DSN,DATES<6>
 REAL       HPC11.24)

 + * * LOCAL VARIABLES + + +
 INTEGER    I.J,DVAL,DLT,NVAL,DTOVWR,QUALFG,TUNITS,
1           OPOS.RETCOD,SPATE(6)
 REAL       OBUFF(744).SUH

 + + + SAWS *  *  +
 SAVE DLT,OTOVUR,OUALFG,TUNITS

 + * + FUNCTIONS  + +  +
 INTEGER    DAYMON

 * * + EXTERNALS  + +  +
 EXTERNAL   DAYMON. UDTPUT

 + + + DATA INITIALIZATIONS + + +
 DATA DLT,DTOVM,MJALFG,TUNITS/1,0,0,3/

 + + * END SPECIFICATIONS + + +

 nunber of days for this month
 DVAL= DAYMON(DATES(1),DATES(2)>

 put current days data into buffer
 DPOS* 24* (DATESC3)- 1>
 SUM- 0.
 DO 10 1= 1,24
   DBUFF(DPOS+I)= HP(11,I)
   SUM= SUM* HPOI.n
   HP(11,I)= 0.
 CONTINUE
  WRITE <*,*) 'DATES(3)tDVAL.OPOS,SUM',DATES(3),DVAL,DPOS,SUM
 IF (DATES(3).E0.1) THEN
   put into starting  date for month
   1= 6
   CALL COPYI (I,DATES,SOATE)
 END IF

 IF (DATES(3).EQ.DVAL) THEN
   end of month,  time to write to wdtns file
   NVAL    = 24*  DVAL
   CONTINUE

-------
                                                                                                        42
APPENDIX  D.8     (continued)
          CALL WDTPUT 
          IF (RETCOO.EO.-9.AND.J.EQ.O) THEN
C           data exists,  delete and try.again
            J= 1
            CALL WTODEL 
-------
  '~	*.<- ~ -"curcos Center
i '
V,

-------

-------