Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
C**********************************************************************
SUBROUTINE HU1(XV,C,D)
C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1
C Inputs:
C C: time constant
C D: exponent
C Outputs:
C XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION XV(3*NPX+5*NH)
DOUBLEPRECISION C,D,SS1
INTEGER I
DO I=1,NH
XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D)
ENDDO
ENDSUBROUTINE
C**********************************************************************
SUBROUTINE HU2(XV,C,D)
C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2
C Inputs:
C C: time constant
C D: exponent
C Outputs:
C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION XV(3*NPX+5*NH)
DOUBLEPRECISION C,D,SS2
INTEGER I
DO I =1,2*NH
XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D)
ENDDO
ENDSUBROUTINE
C**********************************************************************
SUBROUTINE HU4(XV,ALPHA,BETA)
C Computation of ordinates of MOHYSE unit hydrograph
C Inputs:
C Alpha: parameter
C Beta: parameter
C Outputs:
C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH)
DOUBLEPRECISION ALPHA,BETA,SU
INTEGER K
SU=0.
c IF(ALPHA.LT.1.)THEN
c WRITE(*,*)' Pb ALPHA'
c STOP
c ENDIF
IF(ALPHA.EQ.1.)THEN
U(1)=1.
SU=1.
DO 1 K=2,3*NH
U(K)=0.
1 CONTINUE
ELSE
DO 11 K=1,3*NH
U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA)
SU=SU+U(K)
11 CONTINUE
ENDIF
c IF(SU.LT.0.0000000001)THEN
c WRITE(*,*)' Pb HU4',ALPHA, BETA
c STOP
c ENDIF
DO 2 K=1,3*NH
XV(3*NPX+K)=U(K)/SU
2 CONTINUE
ENDSUBROUTINE
C**********************************************************************
SUBROUTINE HU(XV,C)
C Computation of ordinates of GRP unit hydrograph
C Inputs:
C C: time constant
C Alpha: parameter
C Beta: parameter
C Outputs:
C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION XV(3*NPX+5*NH)
DOUBLEPRECISION C
DOUBLEPRECISION SH
INTEGER I
DO 10 I=1,2*NH
XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C)
10 CONTINUE
RETURN
ENDSUBROUTINE
C**********************************************************************
FUNCTION SH(I,C)
C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU
C Inputs:
C C: time constant
C I: time-step
C Outputs:
C SH: Values of the S curve for I
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION C
DOUBLEPRECISION SH,FI
INTEGER I
FI=I
IF(FI.LE.0.)THEN
SH=0.
RETURN
ENDIF
IF(FI.GE.C)THEN
SH=1.
RETURN
ENDIF
SH=FI**2.5/(FI**2.5+(C-FI)**2.5)
RETURN
ENDFUNCTION
C**********************************************************************
FUNCTION SS1(I,C,D)
C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1
C Inputs:
C C: time constant
C D: exponent
C I: time-step
C Outputs:
C SS1: Values of the S curve for I
C**********************************************************************
Implicit None
DOUBLEPRECISION C,D,SS1
INTEGER I,FI
FI=I
IF(FI.LE.0.) THEN
SS1=0.
RETURN
ENDIF
IF(FI.LT.C) THEN
SS1=(FI/C)**D
RETURN
ENDIF
SS1=1.
ENDFUNCTION
C**********************************************************************
FUNCTION SS2(I,C,D)
C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2
C Inputs:
C C: time constant
C D: exponent
C I: time-step
C Outputs:
C SS2: Values of the S curve for I
C**********************************************************************
Implicit None
DOUBLEPRECISION C,D,SS2
INTEGER I,FI
FI=I
IF(FI.LE.0.) THEN
SS2=0.
RETURN
ENDIF
IF(FI.LE.C) THEN
SS2=0.5*(FI/C)**D
RETURN
ENDIF
IF(FI.LT.2.*C) THEN
SS2=1.-0.5*(2.-FI/C)**D
RETURN
ENDIF
SS2=1.
ENDFUNCTION
C**********************************************************************
SUBROUTINE DEL(XV,C)
C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
C (all ordinates are nul except 2 at max)
C Inputs:
C C: time constant
C Outputs:
C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION XV(3*NPX+5*NH)
DOUBLEPRECISION C,F
INTEGER I,K
I=INT(C)
F=C-INT(C)
DO 1 K=3*NPX+1,3*NPX+3*NH
XV(K)=0.
1 CONTINUE
XV(3*NPX+I)=1.-F
XV(3*NPX+I+1)=F
ENDSUBROUTINE
C**********************************************************************
SUBROUTINE DEL2(XV,C)
C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps
C (all ordinates are nul except 2 at max)
C Inputs:
C C: time constant
C Outputs:
C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph
C**********************************************************************
Implicit None
INTEGER NPX,NH
PARAMETER (NPX=14,NH=20)
DOUBLEPRECISION XV(3*NPX+5*NH)
DOUBLEPRECISION C,F
INTEGER K,I
IF(C.GT.FLOAT(NH)) C=FLOAT(NH)
I=INT(C)
F=C-INT(C)
DO 1 K=3*NPX+1,3*NPX+NH
XV(K)=0.
1 CONTINUE
XV(3*NPX+I)=1.-F
XV(3*NPX+I+1)=F
ENDSUBROUTINE
C**********************************************************************
FUNCTION tanHyp(Val)
C Computation of hyperbolic tangent
C**********************************************************************
Implicit None
DOUBLEPRECISION Val,ValExp,tanHyp
ValExp=EXP(Val)
tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp)
RETURN
ENDFUNCTION