Python: calculez la profondeur d'écoulement constante d'une section rectangulaire à l'aide de la méthode Brent

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 $ débit (connu)
$ b $ largeur de canal (connue)
$ n $ Facteur de rugosité d'occupation (connu)
$ i $ Gradient de plancher de canal (connu)
$ h $ (inconnue) profondeur d'écoulement constante

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

Python: calculez la profondeur d'écoulement constante d'une section rectangulaire à l'aide de la méthode Brent
Découpez une partie de la chaîne à l'aide d'une tranche Python
Une implémentation Python simple de la méthode k-voisinage (k-NN)
Une fonction qui mesure le temps de traitement d'une méthode en python
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Calculez la probabilité d'être une pièce de calmar avec le théorème de Bayes [python]
Hit une méthode d'une instance de classe avec l'API Web Python Bottle
[python] [meta] Le type de python est-il un type?
L'histoire du traitement A du blackjack (python)
Laisser Python mesurer le score moyen d'une page à l'aide de l'API PageSpeed Insights
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Comment calculer la volatilité d'une marque
Récupérer l'appelant d'une fonction en Python
Calculez le nombre total de combinaisons avec python
Copiez la liste en Python
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
Essayez d'utiliser le module de collections (ChainMap) de python3
Prise en compte des forces et faiblesses de Python
Approximer une courbe de Bézier à travers un point spécifié en utilisant la méthode des moindres carrés en Python
Calcul de l'itinéraire le plus court selon la méthode de Monte Carlo
[Python] Un programme qui compte le nombre de vallées
Calculer le volume à partir de la structure bidimensionnelle d'un composé
[Python] Calculez la valeur moyenne de la valeur de pixel RVB de l'objet
Détruire l'expression intermédiaire de la méthode sweep avec Python
Déterminer le seuil à l'aide de la méthode P-tile en python
Implémentation python de la classe de régression linéaire bayésienne
Calculer le coefficient de régression d'une analyse de régression simple avec python
Explication du concept d'analyse de régression à l'aide de Python Partie 1
Étapes pour calculer la probabilité d'une distribution normale
[Python] Résumé de la méthode de création de table utilisant DataFrame (pandas)
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 2 ~
[Python] Masquez l'image dans un cercle à l'aide de Pillow
Tâches au démarrage d'un nouveau projet python
Explication du concept d'analyse de régression à l'aide de Python Extra 1
Étude de Python Hour8: Utilisation de packages
Un mémorandum sur la mise en œuvre des recommandations en Python
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
[Python] Un programme qui compare les positions des kangourous.
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 3 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 4 ~
Calculer le produit des matrices avec une expression de caractère?
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 5 ~
Note Python: Le mystère de l'attribution d'une variable à une variable