Prétraitement
Prétraitement convertit la description du cas dans les fichiers qu’un code de simulation lit. Aucune simulation n’est amorcée pendant le prétraitement. Son résultat est un modèle complet qui peut être inspecté avant le temps de calcul est passé.
flux de travail aXqua
aXqua construit un modèle en cinq étapes, chacune utilisant le résultat de la précédente :
Terrain. Le modèle numérique de terrain est transformé en système de coordonnées de référence du cas et découpé en zone d’étude.
Maillage. La zone d’étude est divisée en triangles selon les zones de maillage, et chaque nœud du maillage reçoit sa cote du fond du modèle de terrain et sa zone de rugosité.
Frontières. Les nœuds sur les contours du maillage sont comparés aux lignes d’entrée et de sortie. Nœuds sur une ligne deviennent ouvertes frontières, et tous les autres contours nœuds deviennent parois fermées.
Paramètres de simulation. Le fichier de contrôle de TELEMAC (le fichier de paramètres) et le table de rugosité sont écrits à partir des paramètres du fichier de cas.
Mesures Les mesures de terrain sont compilées dans le tableau que le calage lit.
Parce que tous les fichiers proviennent d’un fichier de cas, ils sont cohérents. Par exemple, l’ordre des frontière nœuds dans le fichier frontière correspond toujours au maillage.
Pour commencer prétraitement dans le extension, sélectionnez le cas sur l’onglet Case Setup et cliquez sur Build sur l’onglet Preprocessing. La table Preprocessing checkup sur cet onglet indique ensuite pour chaque simulation de la cas si la fichier de cas le demande, si elle est construite, et si elle a été exécutée. Dans un terminal, la commande est :
axqua <case-file>
L’onglet Preprocessing. (1) Build commence le prétraitement en tant que tâche. (2) Le tableau Preprocessing checkup du cas active. (3) La liste tâche, qui est visible sous chaque onglet.
Le modèle est écrit à dossier axqua-case/simulation/. Il se compose de maillage avec élévations de lit (geometry.slf), conditions aux limites (boundaries.cli), table de rugosité (friction.tbl) et fichier de paramètres (steady2d.cas). Le fichier journal axqua.log dans le même dossier enregistre chaque étape avec sa durée.
Mèche
Le maillage est créé une fois puis réutilisé par toutes les simulations TELEMAC ultérieures du cas, y compris les simulations avec un débit et des simulations 3D variables, qui utilisent le même maillage en vue du plan. La seule exception est l’étude de convergence en maillage, qui crée délibérément plusieurs maillages de résolution différente (Convergence en maillage).
aXqua génère le maillage triangulaire avec le générateur maillage open-source Gmsh (Geuzaine et Remacle 2009), qu’il contrôle directement, de sorte que ni SALOME ni un autre programme graphique n’est nécessaire. Deux propriétés de la génération maillage sont pertinentes dans la pratique :
Les longueurs de bord dans les zones de maillage sont des valeurs cibles. Les triangles réalisés s’écartent légèrement d’eux, en particulier à la transition entre le chenal et le lit majeur, où la taille du triangle change progressivement.
Deux constructions à partir d’entrées identiques produisent des maillages légèrement différents, avec des différences de moins de 1 % dans le nombre de nœuds. Les deux maillages sont valides. Un résultat doit donc toujours être rapporté avec le maillage sur lequel il a été calculé, et le fichier maillage doit être conservé.
Après maillage, aXqua évalue le maillage et écrit un rapport de qualité dans le fichier journal. Le rapport énumère les angles et l’allongement des triangles, le rapport de taille des triangles voisins et le bord le plus court. Le bord le plus court compte le plus, car il limite le pas de temps de la simulation : un très petit triangle peut ralentir le calcul entier.
OpenFOAM nécessite un maillage tridimensionnel. aXqua dérive de la même zone d’étude dans une étape séparée (Choix OpenFOAM).
Contrôle préalable au traitement
Trois vérifications montrent si un cas est complet et plausible avant le début d’une simulation.
Vérifier les entrées avant de construire. La commande suivante lit le fichier de cas, vérifie que tous les fichiers d’entrée existent et que TELEMAC peut être atteint, puis s’arrête. Ça prend environ une seconde.
axqua <case-file> --check
Vérifiez ce qui a été construit. rapports aXqua pour chaque code et chaque type de simulation si elle est disponible, si le cas le demande, et si ses fichiers existent :
axqua status <case-file>
Colonne |
Signification |
|---|---|
|
aXqua propose ce type de simulation pour ce code ( |
|
Le fichier de cas demande ce type de simulation. |
|
Les fichiers d’entrée de la simulation existent. |
|
Un fichier de résultats existe. |
L’extension utilise les mêmes informations pour activer et désactiver ses onglets et boutons. aXqua le stocke également dans deux fichiers texte dans le dossier cas, dont les noms indiquent si le cas utilise un code (par exemple MODEL=TELEMAC_ENABLED et MODEL=OPENFOAM_DISABLED).
Lire le fichier journal de la construction. Vérifier trois éléments axqua-case/simulation/axqua.log:
le rapport de qualité maillage ne contient aucun avertissement pour le lit majeur et un bord plus court plausible ;
Nœuds ont été assignés à chaque ligne d’entrée et de sortie. Un avertissement apparaît lorsque l’espacement de nœud à l’entrée et à la sortie diffère de plus de 10 %, ce qui peut entraîner une simulation instable ;
les points de mesure se trouvent à l’intérieur du modèle. La commande
axqua check-gt <case-file>compare en outre les élévations des points de mesure avec le modèle de terrain.
La vérification finale est la première simulation elle-même, qui montre si l’entrée et la sortie tronçon un solde (TELEMAC à sec 2D/3D).
TELEMAC choix
Deux choix du bloc hydrodynamics affectent la façon dont TELEMAC résout les équations de flux. Les deux ont des défauts qui conviennent à la plupart des rivières, lacs et réservoirs.
Méthode numérique Par défaut, TELEMAC utilise des éléments finis. Avec finite_volumes: true, il utilise plutôt des volumes finis, ce qui est plus robuste pour les flux qui changent entre les conditions subcritiques et supercritiques, par exemple lors d’un saut hydraulique. La méthode du volume fini ne supporte qu’une viscosité turbulente constante.
Modèle de turbulence. Avec turbulence_model: auto, aXqua compare la taille de maille dans le chenal avec la hauteur d’eau et sélectionne le modèle qui convient au maillage : un modèle de simulation grand eddy (Smagorinsky) sur les maillages fins, le modèle k-epsilon sur les maillages de résolution intermédiaire, et le modèle Spalart-Allmaras sur les maillages grossiers. Un nombre sélectionne plutôt un modèle TELEMAC particulier.
Échanger avec un corps poreux. Certaines rivières perdent de l’eau dans une barre de gravier et la retrouvent plus en aval. Un modèle en moyenne de profondeur n’a pas d’écoulement souterrain, de sorte que aXqua représente cet échange en retirant l’eau où elle s’infiltre et en ajoutant la même quantité où elle revient. Le bloc gain_lose active cette fonction. zone nomme une couche de polygones du corps poreux, et conductivity est sa conductivité hydraulique en m/s. Sans ce bloc, aXqua n’échange pas, aussi si la frontière liquide couche contient des lignes d’échange internes (int-...). Le journal de construction nomme alors ces lignes.
gain_lose:
enabled: true
zone: user-sources/geodata/porous-body.gpkg
conductivity: 3.0e-4
Les emplacements d’infiltration et de retour suivent le niveaux d’eau du chenal aux deux extrémités du corps poreux et ne doivent donc pas être dessinés. La conductivité hydraulique d’un lit de la rivière varie sur plusieurs ordres de grandeur et doit être étalonnée (Calage et validation).
Les structures qui ne sont jamais surmontées, comme les murs et les bâtiments, sont représentées dans le modèle TELEMAC par un lit surélevé : aXqua soulève le lit à ces structures jusqu’à l’élévation de la crête plus 2 m (structures.solid_freeboard_2d). Avec structures.solid_mode: cut, leur empreinte est retirée du maillage.
Choix OpenFOAM
Le bloc openfoam active et contrôle le modèle tridimensionnel. Son maillage se compose de colonnes de cellules en forme de boîte qui suivent le lit de la rivière au bas. Le haut du maillage, appelé couvercle, se trouve juste au-dessus de la surface libre de l’échauffement TELEMAC (aXqua concept d’échauffement), de sorte que le maillage contient peu d’air.
openfoam:
mode: vof # vof | rigid-lid
cell_size: 0.5 # [m] horizontal cell size
n_layers: 14 # number of cells over the height
n_processors: 16
end_time: 300 # [s] simulated time
mode est le choix le plus important :
vof(volume de fluide)L’eau et l’air sont simulés, et la position de la surface libre en est un résultat. Ce mode répond à des questions sur la forme de la surface libre, par exemple à un déversoir ou à un virage. C’est le type de simulation le plus cher en aXqua.
rigid-lidLe couvercle est placé exactement sur la surface libre de l’échauffement TELEMAC, et seule l’eau est simulée. La surface libre ne peut pas bouger. Une course grossière de ce type prend des minutes où une course
vofprend des heures à des jours. Il est adapté pour détecter les erreurs dans le maillage, les frontières et la rugosité avant le début d’une coursevof. Il n’est pas applicable lorsque la surface libre tombe par étapes, par exemple dans un passe de poisson avec des piscines. aXqua détecte cette situation et refuse de construire un tel modèle.
Au lieu de cell_size, l’entrée cell_size_factor définit l’horizontale taille de maille comme un multiple de la longueur de bord chenal du TELEMAC maillage. Pour obtenir le nombre de cellules sans construire le modèle, utilisez :
axqua openfoam <case-file> --check
Pour construire le modèle OpenFOAM dans l’extension, cliquez sur Build dans la boîte Free surface (VOF) sur le sous-tab OpenFOAM de l’onglet Simulations. La compilation rapporte le pas de temps que la simulation utilisera et le nombre résultant de pas de temps, qui indique le temps de calcul. L’échauffement TELEMAC est actif par défaut (openfoam.pre_run.enabled). Avec openfoam.pre_run.dimension: 3d, l’échauffement continue avec une course TELEMAC-3D, de sorte que le modèle OpenFOAM commence également par une distribution verticale de vitesse. Cette option nécessite une hauteur d’eau de plusieurs tailles de maille horizontales et est doublée d’un message en tronçons peu profonds.
Entrée et sortie. Le modèle OpenFOAM prend l’eau dans les mêmes lignes que le modèle TELEMAC. À chaque ligne d’entrée, le débit de cette ligne entre dans le modèle, et le niveau d’eau il y a un résultat du débit. À la sortie, le modèle tient le niveau d’eau que le modèle TELEMAC prescrit là (boundaries.outflow_condition), ou openfoam.outlet_stage où le cas en fixe un. Au-dessus de ce niveau plus outlet_air_margin (0.25 m par défaut), la sortie est une paroi fermée, de sorte que l’air entre et ne quitte le modèle que par son sommet. Un écoulement qui s’ouvre sur toute sa hauteur permet à l’air de circuler à travers le modèle, qui, dans un poisson, a finalement attiré l’eau à travers l’écoulement. Sur l’exemple d’Isar avec des cellules de 2 m, le mur a changé les niveaux d’eau aux entrées et à la sortie de 2 mm au maximum, et la vitesse d’écoulement dans les colonnes du maillage ne varie pas plus qu’au cours d’une course sur 100 s.
Sortie avec une relation hauteur-débit. Par défaut, la sortie détient un niveau d’eau pour toute la course, le niveau que la condition de sortie donne au débit du cas. Avec openfoam.outflow_boundary: rating-curve, la sortie suit plutôt une relation hauteur-débit : à chaque pas de temps, elle tient le niveau d’eau que la relation donne au débit qui quitte réellement le modèle. Il s’agit de la condition aux limites waterLevel_alpha_prgh de l’Institut fédéral d’ingénierie et de recherche sur les voies navigables (BAW ; Thorenz 2024), que l’installation OpenFOAM de constructions aXqua (Ouvrir). La relation est la table boundaries.stage_discharge où elle a au moins deux débits. Sinon, aXqua en tire un du terrain à la ligne de sortie avec boundaries.rating_method, pour neuf débits entre 0,1 et 3 fois le débit du cas, et l’écrit comme rating-curve-openfoam.csv dans le dossier du modèle OpenFOAM ; la condition aux limites n’extrapole pas au-delà de la table. La course commence au niveau de la relation au débit du cas, et la sortie est murée de outlet_air_margin au-dessus de ce niveau. L’option nécessite une surface libre (mode: vof) et ne peut pas être combinée avec outlet_stage. Lorsqu’un modèle a plusieurs lignes de sortie, chacune suit la même relation avec son propre débit. Dans les paramètres cas, l’option est Outflow boundary sur la page OpenFOAM. Sur l’exemple d’Isar avec des cellules de 2,7 m, le cas a été construit avec la relation du profil en travers à la sortie, et interFoam a chargé la condition aux limites et a couru à travers les deux étapes.
Temps de calcul. Le pas de temps d’une course vof est choisi par OpenFOAM à partir de deux limites : le numéro du Courant à la surface libre (max_courant, 0.9 par défaut) et le numéro du Courant du flux dans toutes les cellules, qui est le même nombre à moins que max_flow_courant n’en fixe un plus grand. Dans une rivière peu profonde, les cellules que tronçon la deuxième limite d’abord sont les cellules d’air à côté de la ligne de flottaison, où les cellules sont quelques centimètres d’épaisseur. L’air n’a pas besoin de précision, donc une valeur de 3 est raisonnable ; la surface libre conserve sa propre limite. Chaque pas de temps résout la pression plusieurs fois. pressure_correctors (3 par défaut) et non_orthogonal_correctors (2 par défaut) définissent la fréquence, et les valeurs de 2 et 1 réduisent le coût d’une étape d’environ 40 %. Les paramètres suivants ont été utilisés pour l’exemple Isar et ont donné le même résultat que les valeurs par défaut dans une comparaison sur 40 s de temps simulé :
openfoam:
max_courant: 0.9
max_flow_courant: 3.0
pressure_correctors: 2
non_orthogonal_correctors: 1
Sharpness of the surface libre. Dans une rivière peu profonde, la surface libre d’une course vof s’étend sur plusieurs cellules. Les Couchs du maillage suivent le lit, et la surface les traverse partout où le lit est incliné. Sur l’exemple d’Isar avec 1 m de cellules et 14 couches, environ un tiers de l’eau était dans des cellules complètement remplies, et la transition de l’eau à l’air était environ aussi élevée que l’eau était profonde. Le paramètre interface_compression (1 par défaut) définit la manière dont OpenFOAM maintient la surface ensemble. Avec 2, la transition sur l’exemple d’Isar était de moitié aussi haute avec 2 m cellules et un quart aussi haute avec 1 m cellules, et la course avait besoin d’environ un tiers plus pas de temps. Avec des cellules de 1 m, les moyennes sur le tronçon n’ont guère changé : là où l’eau était plus profonde que 5 cm, la hauteur d’eau a changé de 3 mm et la vitesse moyenne de profondeur de moins de 0,01 m/s en moyenne, et les niveaux d’eau aux entrées et les sorties ont changé de moins de 5 mm. Toutefois, en colonne par colonne, la vitesse moyenne de la profondeur a changé de 0,09 m/s (carré moyen de la racine), cinq fois plus qu’au cours d’une seule course de plus de 100 s, et la moyenne de contrainte de cisaillement au fond est passée de 8,7 à 9,7 Pa. Les vitesses locales et les contraintes de cisaillement du lit d’une course vof dans un tronçon peu profond dépendent donc de ce réglage ; cette valeur donne les valeurs les plus précises n’ont pas été testées en fonction des mesures. Des traces d’eau dans une surface frottée laissent également le modèle avec l’air à travers son sommet. aXqua rapporte cette perte après chaque sortie en part du débit et l’inclut dans le solde du débit. Sur l’exemple d’Isar avec des cellules de 1 m, la perte était de 0,8 % du débit avec compression 1 et 1,3 à 1,6 % avec compression 2.
Le temps simulé qu’un modèle a besoin de tronçon un régime permanent dépend de la quantité d’eau que le tronçon doit entreposer ou libérer avant l’entrée et la sortie d’eau. Un modèle 3D a une résistance différente de celle du modèle 2D à partir duquel il commence, et la différence dans l’eau stockée s’écoule lentement à travers les piscines et chenaux secondaires. Dans l’exemple d’Isar, le modèle à cellules de 2 m avait besoin d’environ 3000 s de temps simulé jusqu’à ce que la sortie dépasse l’entrée de moins de 1 %.
Références
Geuzaine, C., Remacle, J.-F., 2009. Gmsh: A 3-D finite element mesh generator with built-in pre- and post-processing facilities. International Journal for Numerical Methods in Engineering 79, 1309–1331. https://doi.org/10.1002/nme.2579
Thorenz, C., 2024. Boundary conditions for hydraulic structures modelling with OpenFOAM. 10th International Symposium on Hydraulic Structures, Zurich. https://doi.org/10.3929/ethz-b-000675949