Dans le programme de calcul d'écoulement inégal (calcul d'écoulement normal) introduit précédemment, il est nécessaire de spécifier le niveau d'eau au niveau de l'association d'extrémité aval, et la profondeur d'écoulement égale est utilisée pour cela. En d'autres termes, il est nécessaire de connaître la profondeur d'écoulement uniforme. Pour le moment, vous allez résoudre des équations non linéaires, mais je pense que la bonne chose à propos de Python est que vous pouvez effectuer rapidement de tels calculs.
La formule de base pour calculer la profondeur d'écoulement uniforme d'une section transversale rectangulaire est la suivante.
\begin{gather}
Q=A\cdot v \\
v=\cfrac{1}{n}\cdot R^{2/3}\cdot i^{1/2} \\
R=\cfrac{b\cdot h}{b+2\cdot h}
\end{gather}
$ Q $ td> | débit (connu) td> tr> |
$ b $ td> | largeur de canal (connue) td> tr> |
$ n $ td> | Facteur de rugosité d'occupation (connu) td> tr> |
$ i $ td> | Gradient de plancher de canal (connu) td> tr> |
$ h $ td> | (inconnue) profondeur d'écoulement constante td> tr> |
L'équation suivante, qui est une transformation de l'équation ci-dessus sous la forme $ f = 0 $, est résolue pour $ h $.
\begin{equation}
f=Q-\cfrac{b\cdot h}{n}\cdot \left(\cfrac{b\cdot h}{b+2\cdot h}\right)^{2/3}\cdot i^{1/2}=0
\end{equation}
Dans ce programme, il est résolu en utilisant
scipy.optimize.brentq```.
La valeur initiale de la solution donnée à la méthode Brent est donnée par `` h1 = 0, h2 = 10 ''.
Le calcul de la profondeur critique de l'eau $ h_c $ est un bonus.
Le programme est comme indiqué ci-dessous.
# normal depth and critical depth of rectangular cross section
import numpy as np
from scipy import optimize
def cal_hc(q,b):
# critical depth
g=9.8
hc=(q**2/g/b**2)**(1/3)
return hc
def func(h,q,b,n,i):
f=q-b*h/n*(b*h/(b+2*h))**(2/3)*i**(1/2)
return f
def main():
q=42.0 # discharge
b=4.0 # channel width
n=0.014 # Manning's roughness coefficient
i=0.001 # invert gradient
h1=0.0
h2=10.0
hh=optimize.brentq(func,h1,h2,args=(q,b,n,i))
print('hn=',hh) # normal depth
hc=cal_hc(q,b)
print('hc=',hc) # critical depth
#==============
# Execution
#==============
if __name__ == '__main__': main()
Le résultat du calcul est le suivant.
hn= 3.866645305835682
hc= 2.2407023732785825
That's all. Thank you.
Recommended Posts