@@ -68,10 +68,14 @@ subroutine det_pond
68
68
qpnd = dtp_ivol(sb) !m^3
69
69
sedpnd = dtp_ised(sb) !tons
70
70
71
+ ! Storage capacity under addon
72
+ qaddon = (dtp_addon(sb,1 ) / dtp_parm(sb)) ** 3 .
73
+ & / (3 .* ch_s(2 ,sb)) * pi !m3
74
+
71
75
!! iterate for subdaily flow/ sediment routing
72
76
do ii= 1 ,nstep
73
77
74
- qout = 0 .; qovmax = 0
78
+ qout = 0 .; qovmax = 0 ; depaddon = 0 .
75
79
qin = hhvaroute(2 ,ihout,ii) + qpnd !m^3
76
80
sedin = hhvaroute(3 ,ihout,ii) + sedpnd !tons
77
81
if (qin>1e-6 ) then
@@ -86,92 +90,87 @@ subroutine det_pond
86
90
!! skip to next time step if no ponding occurs
87
91
if (qdepth<= 0.0001 ) cycle
88
92
89
- !! Calculate weir outflow
90
- do k= 1 ,dtp_numstage(sb)
93
+ if (dtp_stagdis(sb)==0 ) then
94
+ !! Calculate weir outflow
95
+ do k = 1 , dtp_numstage(sb)
91
96
qstage = 0 .
92
- ! height to the top of addon from bottom
93
- depaddon = depaddon + dtp_addon(sb,k)
94
- if (k>1 ) depaddon = depaddon + dtp_depweir(sb,k-1 )
95
- ! volume below the current stage addon
96
- qaddon = (depaddon / dtp_parm(sb)) ** 3 .
97
- & / (3 .* ch_s(2 ,sb)) * pi !m3
98
-
99
- !! Circular weir ?
100
- if (dtp_weirtype(sb,k)==2 ) then
101
- dtp_depweir(sb,k) = dtp_diaweir(sb,k) + dtp_addon(sb,k)
102
- end if
103
-
104
- !! Fully submerged
105
- if (qdepth>dtp_depweir(sb,k)) then
106
- qdepth = qdepth - dtp_depweir(sb,k)
107
- if (dtp_weirtype(sb,k)==1 ) then
108
- watdepact = qdepth + dtp_depweir(sb,k) / 2
109
- warea = dtp_depweir(sb,k) * dtp_wrwid(sb,k)
110
- else
97
+
98
+ !! calculate weir discharge
99
+
100
+ if (dtp_weirtype(sb,k)==2 ) then
101
+ !! Circular weir
102
+ dtp_depweir(sb,k) = dtp_diaweir(sb,k) + dtp_addon(sb,k)
103
+
104
+ if (qdepth>dtp_depweir(sb,k)) then
105
+ !! Fully submerged
106
+ qdepth = qdepth - dtp_depweir(sb,k)
111
107
watdepact = qdepth + dtp_diaweir(sb,k) / 2
112
108
warea = 3.14159 * dtp_diaweir(sb,k) ** 2 / 4 .
113
- end if
114
-
115
- !! Estimate discharge using orifice equation
116
- qstage = dtp_cdis(sb,k) * 0.6 * warea *
117
- & sqrt (19.6 * watdepact) !m3/ s/ unit
118
- qstage = qstage * dtp_numweir(sb) * 60 . * idt !m^3
119
- !Limit total outflow amount less than available water above addon
120
- if (qin- qstage<qaddon) qstage = qin - qaddon
121
-
122
- !! Flow over the emergency weir
123
- if (k==dtp_numstage(sb)) then
124
- qstage = qstage + dtp_cdis(sb,k) * 1.84 *
125
- & dtp_totwrwid(sb) * (qdepth ** 1.5 ) * 60 . * idt !m3/ s
126
- end if
127
- qout = qout + qstage
128
-
129
- !! Partially submerged
130
- else
131
- watdepact = qdepth - dtp_addon(sb,k) !! look for add on
132
- if (watdepact<0 ) watdepact = 0 . !! created for add on
133
- if (dtp_weirtype(sb,k)==2 ) then
134
- dtp_wrwid(sb,k) = dtp_diaweir(sb,k) * 0.667
135
- end if
136
- !! Estimate weir/ orifice discharge
137
- qstage = dtp_cdis(sb,k) * 1.84 * dtp_wrwid(sb,k) *
109
+
110
+ !! orifice equation
111
+ qstage = dtp_cdis(sb,k) * 0.6 * warea *
112
+ & sqrt (19.6 * watdepact) !m3/ s/ unit
113
+ qstage = qstage * dtp_numweir(sb) * 60 . * idt !m^3
114
+ else
115
+ !! Partially submerged
116
+ watdepact = max (qdepth - dtp_addon(sb,k),0 .)
117
+ dtp_wrwid(sb,k) = dtp_diaweir(sb,k) * 0.667
118
+
119
+ !! weir/ orifice discharge
120
+ qstage = dtp_cdis(sb,k) * 1.84 * dtp_wrwid(sb,k) *
121
+ & watdepact ** 1.5 !m3/ s
122
+ qstage = qstage * dtp_numweir(sb) * 60 . * idt !m^3
123
+ end if
124
+
125
+ else
126
+ !! Rectangular weir
127
+ watdepact = max (qdepth - dtp_addon(sb,k),0 .)
128
+
129
+ !! Estimate weir/ orifice discharge
130
+ qstage = dtp_cdis(sb,k) * 1.84 * dtp_wrwid(sb,k) *
138
131
& watdepact ** 1.5 !m3/ s
139
- qstage = qstage * dtp_numweir(sb) * 60 . * idt !m^3
140
-
141
- !Limit total outflow amount less than available water above addon
142
- if (qin- qstage<qaddon) qstage = qin - qaddon
143
-
144
- ! Limit overflow amount to the volume above add- on level
145
- if (qin>qaddon) qovmax = qin - qaddon
146
- if (qstage>qovmax) qstage = qovmax
147
-
148
- !! Use stage- discharge relationship if available
149
- if (dtp_stagdis(sb)==1 ) then
150
- select case(dtp_reltype(sb))
151
- case(1 ) !! 1 is exponential function
152
- qstage = dtp_coef1(sb) * exp (dtp_expont(sb) * qdepth) +
153
- & dtp_intcept(sb)
154
- case(2 ) !! 2 is Linear function
155
- qstage = dtp_coef1(sb) * qdepth + dtp_intcept(sb)
156
- case(3 ) !! 3 is logarthmic function
157
- qstage = dtp_coef1(sb) * log (qdepth) + dtp_intcept(sb)
158
- case(4 ) !! 4 is power function
159
- qstage = dtp_coef1(sb) * (qdepth** 3 ) + dtp_coef2(sb) *
160
- & (qdepth** 2 ) + dtp_coef3(sb) * qdepth + dtp_intcept(sb)
161
- case(5 )
162
- qstage = dtp_coef1(sb)* (qdepth** dtp_expont(sb))+
163
- & dtp_intcept(sb)
164
- end select
165
- qstage = qstage * 60 . * idt
166
- end if !! end of stage- discharge calculation
167
- qout = qout + qstage
168
- exit
169
- end if
132
+ qstage = qstage * dtp_numweir(sb) * 60 . * idt !m^3
133
+
134
+ end if
170
135
171
-
172
- end do !! End of weir discharge calculations
136
+ qout = qout + qstage
137
+ end do
138
+
139
+ !Limit total outflow amount less than available water above addon
140
+ if (qout>qin- qaddon) qout = max (qin - qaddon,0 .)
141
+
142
+ !! Flow over the emergency weir
143
+ watdepact = qdepth - (dtp_depweir(sb,1 ) + dtp_addon(sb,1 ))
144
+ if (dtp_weirtype(sb,k)==1 .and. watdepact>0 .) then
145
+ qstage = dtp_cdis(sb,k) * 1.84 *
146
+ & dtp_totwrwid(sb) * (watdepact ** 1.5 ) * 60 . * idt !m3/ s
147
+ qout = qout + qstage
148
+ end if
173
149
174
- !! Check mss balance for flow
150
+
151
+ else
152
+ !! Use stage- discharge relationship if available
153
+ if (dtp_stagdis(sb)==1 ) then
154
+ select case(dtp_reltype(sb))
155
+ case(1 ) !! 1 is exponential function
156
+ qout = dtp_coef1(sb) * exp (dtp_expont(sb) * qdepth) +
157
+ & dtp_intcept(sb)
158
+ case(2 ) !! 2 is Linear function
159
+ qout = dtp_coef1(sb) * qdepth + dtp_intcept(sb)
160
+ case(3 ) !! 3 is logarthmic function
161
+ qout = dtp_coef1(sb) * log (qdepth) + dtp_intcept(sb)
162
+ case(4 ) !! 4 is power function
163
+ qout = dtp_coef1(sb) * (qdepth** 3 ) + dtp_coef2(sb) *
164
+ & (qdepth** 2 ) + dtp_coef3(sb) * qdepth + dtp_intcept(sb)
165
+ case(5 )
166
+ qout = dtp_coef1(sb)* (qdepth** dtp_expont(sb))+
167
+ & dtp_intcept(sb)
168
+ end select
169
+ qout = qout * 60 . * idt
170
+ end if !! end of stage- discharge calculation
171
+ end if
172
+
173
+ !! Check mass balance for flow
175
174
if (qout>qin) then !no detention occurs
176
175
qout = qin
177
176
qpnd = 0 .
0 commit comments