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,
-------
------- |