Exemple de modélisation d’ouvrages
Potentiellement en charge et avec surverse (type pont - ponceau)
[1]:
from wolfhece.mesh2d.simple_2d import lake_at_rest, water_line, water_lines, unsteady_without_bedmotion, unsteady_with_bedmotion
Vérification du lac au repos
Pour un lac au repos, la surface libre/pression est identique en toute maille.
Le code ne peut en aucun cas mettre l’eau en mouvement, même en présence du pont. Une mise en mouvement indiquerait un mauvais traitement des termes sources de réaction de fond et/ou de toit.
Ici le fond est horizontal pour simplifier les calculs et ne tester que le toit.
3x2 calculs sont effectués: - 1 sans pont - 1 avec pont - pour 3 hauteurs d’eau différentes
Des tests internes sont effectués pour vérifier la cohérence des résultats.
Le calcul n’est pas démarré immédiatement car certaines routines sont compilées à la première exécution (JIT Numba).
[2]:
fig, axes = lake_at_rest()
0%| | 0.06385508568141009/14400 [00:05<313:18:43, 78.33s/it]
Total time : 0.06385508568141009
Residual : 0.0
0%| | 0.06385508568141009/14400 [00:02<139:42:54, 34.93s/it]
Total time : 0.06385508568141009
Residual : 3.4028825454198546e-16
0%| | 0.05213745913371834/14400 [00:00<?, ?it/s]
Total time : 0.05213745913371834
Residual : 0.0
0%| | 0.05711372491708258/14400 [00:00<04:11, 57.24it/s]
Total time : 0.05711372491708258
Residual : 4.058174235203366e-16
0%| | 0.04515236409857309/14400 [00:00<?, ?it/s]
Total time : 0.04515236409857309
Residual : 0.0
0%| | 0.05213745913371834/14400 [00:00<04:35, 52.28it/s]
Total time : 0.05213745913371834
Residual : 3.704589284845265e-16
Ligne d’eau
Calcul de lignes d’eau : - sans pont - avec pont
Débit de 7 m²/s ; 3 hauteurs d’eau différentes en condition limite aval.
Il est attendu que la mise en charge augmente avec la hauteur d’eau étant donné que la réaction de toit est plus importante (contraction et élargissement brusque).
La charge est évaluée au centre de la maille. Ceci est une approximation étant donné que cela ne tient pas compte du schéma numérique. Il est donc attendu que la charge sur la dernière maille à surface libre présente un léger pic.
[3]:
fig, axes = water_line()
0%| | 0/14400 [00:00<?, ?it/s] 24%|██▎ | 3417.451250213751/14400 [00:06<00:20, 539.60it/s]
Total time : 3417.451250213751
Residual : 9.71667191151937e-13
12%|█▏ | 1663.5841519957594/14400 [00:15<01:59, 106.28it/s]
Total time : 1663.5841519957594
Residual : 9.987488969187552e-08
30%|██▉ | 4299.131225680968/14400 [00:08<00:18, 537.36it/s]
Total time : 4299.131225680968
Residual : 9.894307595459395e-13
13%|█▎ | 1871.5111926845277/14400 [00:18<02:03, 101.45it/s]
Total time : 1871.5111926845277
Residual : 9.870921235943797e-08
35%|███▌ | 5073.704821249482/14400 [00:10<00:18, 501.84it/s]
Total time : 5073.704821249482
Residual : 9.78772618509538e-13
13%|█▎ | 1879.5591458133265/14400 [00:20<02:18, 90.11it/s]
Total time : 1879.5591458133265
Residual : 9.977307602326846e-08
Lignes d’eau et perte de charge
Calcul de plusieurs lignes d’eau et affichage des pertes locales. Comparaison avec les formules de perte de charge par contraction et élargissement brusque.
Contraction :
\[k = 0.5 * \left (1 - \frac {A_{small}}{A_{large}} \right)\]Elargissement :
\[k = \left (1 - \frac {A_{large}}{A_{small}} \right)^2\]
[4]:
fig, axes = water_lines()
17%|█▋ | 2407.2225987113266/14400 [00:20<01:42, 116.87it/s]
Total time : 2407.2225987113266
Residual : 9.984147775199403e-08
13%|█▎ | 1879.0622513026944/14400 [00:18<02:00, 103.65it/s]
Total time : 1879.0622513026944
Residual : 9.86246613265962e-08
13%|█▎ | 1800.0888997438904/14400 [00:19<02:18, 90.94it/s]
Total time : 1800.0888997438904
Residual : 9.962519609274523e-08
13%|█▎ | 1938.5786599444/14400 [00:19<02:07, 97.52it/s]
Total time : 1938.5786599444
Residual : 9.988262306137585e-08
14%|█▍ | 2026.946788946622/14400 [00:21<02:10, 94.94it/s]
Total time : 2026.946788946622
Residual : 9.964045766253093e-08
13%|█▎ | 1833.5207310456774/14400 [00:20<02:17, 91.27it/s]
Total time : 1833.5207310456774
Residual : 9.971565972932694e-08
14%|█▍ | 2083.360058175712/14400 [00:26<02:34, 79.79it/s]
Total time : 2083.360058175712
Residual : 9.998473160521826e-08
17%|█▋ | 2463.8348985320386/14400 [00:31<02:30, 79.41it/s]
Total time : 2463.8348985320386
Residual : 9.992991856222488e-08
14%|█▍ | 2059.280320234197/14400 [00:29<02:56, 70.09it/s]
Total time : 2059.280320234197
Residual : 9.98022926523845e-08
14%|█▍ | 1993.571221531136/14400 [00:30<03:11, 64.66it/s]
Total time : 1993.571221531136
Residual : 9.95092186428792e-08
13%|█▎ | 1937.8066138481925/14400 [00:32<03:26, 60.46it/s]
Total time : 1937.8066138481925
Residual : 9.950031909511381e-08
Problème instationnaire
Calcul d’un problème instationnaire avec un débit constant et une conditions limite aval qui évolue.
Extraction des différentes de charge à intervalle régulier et comparaison avec les formules de perte de charge par contraction et élargissement brusque.
[5]:
fig, axes = unsteady_without_bedmotion()
0%| | 0.04704398960516045/14400 [00:00<05:05, 47.17it/s]
Total time : 0.04704398960516045
Residual : 0.0
100%|█████████▉| 7197.740355728639/7200 [01:13<00:00, 101.37it/s] d:\ProgrammationGitLab\python3.11\Lib\site-packages\tqdm\std.py:636: TqdmWarning: clamping frac to range [0, 1]
full_bar = Bar(frac,
100%|██████████| 7200.0107203398875/7200 [01:13<00:00, 97.69it/s]
Transitoire avec surverse de l’ouvrage
Modification dynamique de la topographie et du toit.
Problème disponibles :
2 : pont recatngulaire de 20 m de long
6 : pont rectangulaire de 60 m de long
7 : pont triangulaire de 20 m de long
8 : pont en U (poutres latérales plus épaisses) de 20 m de long
9 : ponceau de 100 m de long
Sous-problèmes :
x1 : mouvement de la condition limite aval (mise en charge par l’aval)
x2 : mouvement de la condition limite amont (hydrogramme - mise en charge par dépassement de capacité d’écoulement)
x3 : mouvement de la condition limite amont et de l’aval au moment du pic (mix des 2 premières situations)
[6]:
# Nécessaire pour l'animation dans le Jupyter Notebook
%matplotlib widget
anim = unsteady_with_bedmotion([81])
ERROR:root:Manning coefficient or slope cannot be null
WARNING:root:Return 99999.
18%|█▊ | 644.1914056327889/3600 [00:06<00:27, 105.97it/s]
Total time : 644.1914056327889
Residual : 9.988706661800961e-08
unsteady_downstream_bc: 100%|█████████▉| 8999.593022896564/9002.0 [01:38<00:00, 113.36it/s] d:\ProgrammationGitLab\python3.11\Lib\site-packages\tqdm\std.py:636: TqdmWarning: clamping frac to range [0, 1]
full_bar = Bar(frac,
unsteady_downstream_bc: 100%|██████████| 9002.04110447999/9002.0 [01:38<00:00, 91.81it/s]
[7]:
anim = unsteady_with_bedmotion([82])
ERROR:root:Manning coefficient or slope cannot be null
WARNING:root:Return 99999.
18%|█▊ | 644.1914056327889/3600 [00:06<00:28, 103.90it/s]
Total time : 644.1914056327889
Residual : 9.988706661800961e-08
hydrograph: 100%|██████████| 9002.054155884656/9002.0 [01:33<00:00, 96.73it/s]
[8]:
anim = unsteady_with_bedmotion([83])
ERROR:root:Manning coefficient or slope cannot be null
WARNING:root:Return 99999.
18%|█▊ | 644.1914056327889/3600 [00:06<00:28, 105.22it/s]
Total time : 644.1914056327889
Residual : 9.988706661800961e-08
hydrograph_2steps: 100%|██████████| 9002.03964208512/9002.0 [01:31<00:00, 97.96it/s]