Graphical User Interface

Choix de langage

Historiquement, les développements graphiques de la suite logicielle WOLF ont été réalisés en Visual Basic 6. De nombreux outils existent sous cette forme et, malgré le fait que le langage ne soit plus officiellement supporté, sont toujours pleinement fonctionnels.

Cependant, il est nécessaire de faire évoluer les outils vers des solutions plus pérennes. Dès lors, après analyse approfondie des possibilités, les choix posés pour les nouveaux développements de l’interface graphique de WOLF sont les suivants :

  • Langages de programmation : Python (3.10)

  • OpenGL

  • Widgets WX et plus spécifiquement son portage sous Python

Ces choix rendent normalement l’interface graphique indépendante du système d’exploitation, « cross-platform GUI », tout en assurant une qualité graphique propre à chaque OS. Les développements quotidiens se réalisent cependant sous Windows. Les tests sous d’autres plateformes ne sont pas réalisés.

Pour l’affichage de données matricielles, le recours aux instructions OpenGL permet de bénéficier de la puissance de la carte graphique même pour des visualisation 2D. Actuellement, il est fait recours aux listes d’affichage pour les rendus 2D. Des techniques plus modernes telles que les shaders, les Vertex Buffer Objects (VBO) ou les Vertex Array Objects (VAO) sont quant à eux utilisés pour le viewer interne 3D.

Le langage Python rend également accessible une panoplie de librairies open source additionnelles. Parmi celles-ci, sont utilisées dans les développements actuels : Numpy, Matplotlib, Pandas, Scipy, Owslib, Pillow, Dbfread, Graphviz, Owslib, Requests, Notebook, Beautifoulsoup4, Typing, Ctypes… La liste complète est disponible dans les requirements.txt` et sont installés automatiquement lors de l’installation du paquet.

Les outils Python de WOLF sont donc accessibles via un paquet spécifique wolfhece disponible sur Pypi.org, ce qui facilite grandement le déploiement et les mises à jour.

Le code source est hébergé sur le Gitlab de l’ULiège afin d’assurer un suivi du développement organisé sous forme de branches.

Interaction code de calcul

Le langage Python est un langage interprété pour lequel l’efficacité de calcul n’est pas une priorité. Parmi les nombreuses techniques possibles pour remédier à ce problème, le choix d’une interaction avec un code Fortran compilé a semblé une évidence compte-tenu de l’historique de WOLF.

Ainsi, une librairie Python compilée avec l’outil f2py permet l’interaction de scripts et de routines de calcul plus consommatrices en temps. Cette librairie ne permet toutefois pas une interaction complète. Une approche complémentaire basée sur ctypes a donc été développée notamment afin de fournir une porte vers les paramètres à optimiser des codes de calcul. Cette interaction Fortran/ctypes/Python permet le partage direct de mémoire vive, évitant des lenteurs d’échanges par fichiers. Ceci est fortement exploité dans le code hydrologique lors des phases de calibration/optimisation. Dans la même idée de flexibilité, il est possible de recourir à des fonctionnalités de callbacks permettant la programmation d’une routine en Python et appelée lors des calcul Fortran. Les interactions Python🡪Fotran ou Fortran🡪Python sont donc opérationnelles grâce à l’emploi d’une librairie dynamique DLL. Cette approche est plus générale que l’utilisation de f2py et vient donc la compléter.

Gestion des données

En l’état, l’interface graphique Python actuelle permet d’afficher des informations:

  • matricielles en fausses couleurs (topographie, index de bassin versant, accumulation…)

  • vectorielles (contours, réseau hydrographique…)

  • ponctuelles (stations de mesures, exutoires locaux…)

  • extraites via des webservices WMS (Walonmap - orthophotoplans, réseau aqualim, IGN Français…)

Toutes ces données peuvent être combinées.

Il ne s’agit toutefois pas d’un SIG et ne le sera plus que probablement jamais.

Le système de référence est fixe (Lambert72 par défaut pour la Belgique). Le cas échéant, des conversions de système sont possibles au travers de l’outil GDAL.

Lancement de l’application

Lors de l’installation du paquet wolfhece, un exécutable nommé wolf (et wolf_gui) est créé et ajouté au répertoire Scripts de l’installation Python. Il est donc possible de lancer l’application depuis n’importe quel répertoire en tapant wolf (ou wolf_gui) dans une console si le Python est dans votre PATH.

Note

Pour plus de sécurité et d’isolation, il est recommandé de lancer l’application depuis un environnement virtuel Python. Pour cela, il est nécessaire d’installer le paquet virtualenv via la commande pip install virtualenv. Ensuite, il est possible de créer un environnement virtuel via la commande python -m venv wolfenv (le nom wolfenv est donné à titre d’exemple). Enfin, il est nécessaire d’activer l’environnement virtuel via la commande .wolfenvScriptsactivate sous Windows ou source wolfenv/bin/activate sous Linux. L’application peut alors être lancée via la commande wolf.

Philisophie générale

L’interface graphique est multifenêtres. Chaque fenêtre est indépendante. Il n’est pas actuellement possible de mettre minimiser l’ensemble de l’application en une seule opération.

Les fenêtres sont redimensionnables et peuvent être déplacées. Cette configuation est bien adaptée aux postes de travail à plusieurs écrans.

Durant le chargement, un logo d’application apparaît. Le chargement total peut prendre jusqu’à 30 secondes. Une tentative de connexion au site “hydrometrie.wallonie.be” est réalisée.

Après chargement, trois fenêtres sont ouvertes :

  • La fenêtre principale

  • la fenêtre de propriétés

  • la fenêtre de log

Initial windows

Vidéo : 3 fenêtres principales

Note

La fenêtre de propriétés est liée à la fenêtre principale et se place par défaut à sa droite.

Si la touche Ctrl est maintenue enfoncée, la fenêtre de propriétés se déplace avec la souris de’ l’utilisateur.

Un repositionnement de la fenêtre de propriétés est possible par un simple déplacement via sa barra de titre. Elle doit revenir à sa place dès que la touche CTRL est relâchée.

Si MAJ est maintenue enfoncée, la fenêtre de propriétés est replacée à droite de la fenêtre principale et sa hauteur est ajustée à la même hauteur que la fenêtre principale.

Elle affiche les informations de tous les objets visibles et qui se trouvent sous le curseur de la souris.

Il est possible d’activer un mode multiviewers via le menu File`🡪`Multiviewer. Dans ce mode, des fenêtres principales additionnelles sont créées de même que leur fenêtre de propriétés.

Chaque fenêtre principale dispose de son contexte OpenGL et de ses propres données.

Il est possible de les lier, ce qui signifie que tout redimensionnement sera appliqué aux autres fenêtres. Le niveau de zoom est également appliqué.

La fenêtre de propriétés proposera, si possible, les informations de toutes les données sous la position du curseur. Ceci permet via une seule fenêtre de comparer les informations de plusieurs fenêtres principales.

Note

Il n’y a pas de limite au nombre de fenêtres principales. Cependant, il est recommandé de ne pas en ouvrir trop pour des raisons de performances. Ceci est toutefois à tester en fonction de la puissance de votre machine et de votre carte graphique.

Attention

Il n’y a pas actuellement de barre d’outils. Les actions sont réalisées via le menu contextuel de la fenêtre ou des raccourcis clavier.

La liste des raccourcis clavier est disponible via le menu Help`🡪`Shortcuts.

Il est possible que les raccourcis évoluent en fonction des versions.

Il est possible de créer ou d’ajouter certains éléments via le menu File`🡪`Add ou File`🡪`Create.

Create menu Add menu

Attention

La position des entrées pourra changer sans préavis, de même que les noms associés.

Les données sont chargées en mémoire vive et associées à un ID. En fonction de leur type, elles sont affichées dans l’arbre situé à gauche de la fenêtre principale.

Il est possible de masquer/afficher les données en décochant/cochant l’entrée de l’arbre. Pour les matrices/arrays un message apparaîtra vous demandant s’il faut simplement masquer la donnée ou décharger complètement les données de la mémoire vive. Ceci peut être utile pour libérer de la mémoire vive lors de l’analyse de portion de terrain sans pour autant supprimer la donnée du projet courant. Décocher tout en maintenant la touche Ctrl enfoncée n’affichera pas le message et masquera simplement la donnée sans la décharger.

Attention

La gestion de la mémoire est sous la responsabilité du garbage collector de Python. Il est donc possible que la mémoire ne se libère pas instantanément.

Il faut également noter qu’en cas de déchargement, un temps supplémentaire de lecture est attendu qui dépend de la taille et de votre type de disque dur.

Note

Chaque entrée de l’arbre peut être déployée ou rétractée.

Certaines entrées peuvent être préencodées en fonction de l’app ouverte. Il s’agit par exemple du grid ou des services WMS associé à Walonmap.

Tree

Au fur et à mesure du chargement des données, en arrière-plan, les derniers objets sont mémorisés comme actifs. Il s’agit des objets de type:

  • active_zones: Zones

  • active_zone: zone

  • active_vector: vector

  • active_vertex: wolfvertex

  • active_array: WolfArray

  • active_bc: BcManager

  • active_view: WolfViews

  • active_cs: crosssections

  • active_tri: Triangulation

  • active_tile: Tiles

  • active_particle_system: Particle_system

  • active_viewer3d: Wolf_Viewer3D

Attention

Cet état de fait est extrêmement important à garder en mémoire car cela a un impact direct sur les actions réalisées. Plusieurs actions travaillent en effet sans (re)poser la question à l’utilisateur sur l’objet courant ou sur un groupe d’objets courants.

Afin rendre un objet actif, il “suffit” de double-cliquer sur l’ID dans l’arbre.

Afin de réinitialiser les objets actifs, il faut presser la touche Esc.

Déplacement dans la fenêtre principale

Les actions possible sont les suivantes :

  • zoom avant/arrière
    • via la molette de la souris

    • écran tactile normalement supporté, de même que les trackpad

    • touches z, Z

  • déplacement latéral
    • via le clic gauche de la souris (maintenu enfoncé et déplacé)

    • via les flèches du clavier

  • recentrage sous la position du curseur via double click-gauche

  • Autoscale via F5

  • Refresh via F7

Mémoire de position

Il est possible de mémoriser l’emprise actuelle de la fenêtre principale.

Plusieurs positions sont possibles, chacune avec un nom associé. Cette fonctionnalité permet de se déplacer librement dans le domaine tout en permettant de revenir facilement à des positions spécifiques, y compris avec une taille de viewer différente (via Canvas height, la hauteur de la zone de dessin en pixels). La largeur est quant à elle calculée pour respecter l’emprise spatiale définie par les bornes selon X et Y.

Memorize position

Après avoir choii Tools/Memory views…, une nouvelle fenêtre apparaît qui permet de stocker l’emprise courante de la vue et la taille de la fenêtre.

Memorize position - Frame

Une aide contextuelle est disponible pour chaque boutons.

Description des boutons :

  • + : ajoute une vue sur base de ce qui est dans les champs textuels

  • - : supprime la vue sélectionnée

  • Reset : Efface toutes les vues

  • Zoom on : Applique la vue sélectionnée

  • Get : Remplir les champs texte avec les caractéristiques de la vue courante

  • Apply : Utilise les valeurs des champs pour mettre à jour une vue existante

  • Save : Sauvegarde des vues dans un fihcier texte JSON

  • Load : Récupération des vues depuis un fichier texte JSON

Attention

Apply demande qu’une vue existe et soit sélectionnée.

Il faut donc commencer par ajouter une vue via + même si ces propriétés sont ensuite modifiées.

Presse-papier

Il est possible de copier/coller des données matricielles sélectionnées dans une matrice vers une autre matrice via les raccourcis clavier Ctrl+C et Ctrl+V en activant successivement les 2 objets. certaines données seront également copiées dans le presse-papier pour utilisation externe.

Il est également possible de copier/coller les positions sélectionnées (et non les données) via les raccourcis Ctrl+C` et Ctrl+Alt+V ou AltGr+V.

Certaines lignes de scripts peuvent êtres copiées dans le press-papier par Ctrl+Alt+C ou AltGr+C (par exemple dans un script de définition de zones d’infiltration).

L’entièreté du contenu du canvas OpenGL peut être copié vers le presse-papier via la touche C ou le raccourci Alt+C et collé dans n’importe quelle application supportant les images. C copiera le canvas sans axes tandis que Alt+C copiera le canvas avec axes via la librairie Matplotlib. L’intervalle des ticks est paramétrable dans les options de l’application.

Attention

Une seule palette de couleurs sera utilisée lors de cette opération. Dans le options globales, il est possible de choisir de donner la préférence à la palette de la matrice active ou au résultat actif. Si les 2 cases sont cochées, priorité sera donnée à la matrice active.

Global options

Chargement des données/résultats

Il est donc possible de charger/créer des données via les menus File`🡪`Add ou File`🡪`Create.

Il est également possible de charger un fichier de projet via le menu File`🡪`Open project.

Attention

Actuellement, le support des projets est limité. Il est nécessaire de les créer à la main via un éditeur de texte.

La sauvegrade de projet sur base des éléments actuellement chargés n’est pas encore pleinement opérationnel.

L’utilisation d’un projet est cependant nécessaire pour charger efficacement un large set de données ou un tuilage.

Matrices

Les formats de fichiers supportés pour les matrices sont les suivants :

  • .bin : binaire WOLF

  • .top : binaire WOLF associé à une simulation cs-2D

  • .tif : GeoTIFF

  • .flt : Float ESRI

  • .npy : Numpy

  • .npz : Numpy compressé

  • .* : sans spécification de format, le format est équivalent au .bin

Supported array formats

Il est possible de lire une portion d’une grande matrice via Add array and crop. Dans ce cas, une fenêtre s’ouvre pour définir les limites de la portion à extraire.

Chaque matrice dispose de sa propre fenêtre de propriétés (raccourci Ctrl+double-click gauche) permettant de gérer la palette de couleur mais également des opérations de sélection de mailles, d’interpolation, d’opérations mathématiques…

Note

Ces opérations seront décrites ultérieurement

Array properties 1 Array properties 2 Array properties 3 Array properties 4 Array properties 5 Array properties 6 Array properties 7

Chaque matrice dispose en outre de sa propre gestion vectorielle accessible via le bouton Manage vectors du premier onglet. Il est également possible de lire/écrire ces informations vectorielles via les boutons situés en-dessous.

Entre les boutons, se trouve 2 champs textuels qui affichent quel vecteur est actuellement actif ainsi que sa zone parent.

Les méthodes de sélection de mailles sont les suivantes :

  • Select all nodes : sélectionne toutes les mailles

  • by clicks : sélectionne les mailles individuellement (click droit)

  • inside active vector : sélectionne les mailles à l’intérieur du vecteur actif

  • inside active zone : sélectionne les mailles à l’intérieur de la zone active

  • inside temporary vector : sélectionne les mailles à l’intérieur d’un vecteur temporaire stocké dans la zone tmp du gestionnaire de vecteurs

  • along active vector : sélectionne les mailles le long du vecteur actif

  • along active zone : sélectionne les mailles le long de la zone active

  • along temporary vector : sélectionne les mailles le long d’un vecteur temporaire stocké dans la zone tmp du gestionnaire de vecteurs

L’action de sélection est activée par le bouton Actions ! et désactivée par la touche Return du clavier ou un double-click droit (pas adapté à tous les modes).

Les mailles sélectionnées peuvent être transférées vers un dictionnaire spécifique via Move current selection to… ou via les touches 1 à 9 du Numpad (si présent su le PC). Ce transfert est utile pour certaines opérations d’interpolation ou de génération de scripts.

How to create/save/add array in the viewer ?

How to select nodes of an array in the viewer ?

Attention

Description plus détaillée à venir

Palette de couleurs

Comme mentionné plus haut, chaque matrice dispose de sa propre palette de couleurs.

Par défaut, une palette à 16 couleurs est employée. En mode automatique, les sauts de couleurs sont calculés de manière à répartir les couleurs de façon homogène (même nombre de mailles dans chaque intervalle, répartition par quantiles). Les couleurs sont interpolées linéairement entre chaque couple de couleurs sur base de la valeur locale de la matrice.

Exemple de matrice avec interpolation linéaire de couleurs

Il est également possible de représenter les matrices avec des couleurs discrètes. Dans ce cas, il faut cocher la case “Uniform in parts”.

Exemple de matrice avec couleurs discrètes

Les couleurs et leurs répartitions peuvent être changées à volonté. Il suffit pour cela de modifier le tableau de couleurs et de cliquer sur Apply. Les composantes de couleur seront remplies automatiquement sur base de la couleur choisie via Choose color for current value, pour la ligne du tableur sélectionnée.

Il est également possible de sauvegarder la palette de couleurs pour une utilisation ultérieure dans un fichier d’extension .pal (fichier texte ASCII). Il est bien entendu possible de charger une palette depuis un fichier .pal ou depuis une palette préconfigurée via Load precomputed. Les palettes proposées via ce bouton se situent dans le répertoire models`du paquet `wolfhece.

Il est possible de générer une image de la palette de couleurs via le bouton Create image.

Une répartition semi-automatique des valeurs est également possible via Evenly spaced. On peut alors choisir une valeur minimale et opter soit pour une valeur maximale, soit pour une intervalle.

Lors de l’export du canvas sous forme d’image, la palette de couleurs est éventuellement exportée.

Export canvas with linear colormap Export canvas with discrete colormap

Vecteurs

Les formats de fichiers supportés pour les vecteurs sont les suivants :

  • .vec : format 2D WOLF

  • .vecz : format 3D WOLF

  • .shp : ESRI Shapefile

  • .dxf : AutoCAD

  • .* : sans spécification de format, le format est équivalent au .vec

Supported vector formats

Chaque zone vectorielle dispose de sa propre fenêtre de propriétés (raccourci Ctrl+double-click gauche) permettant de gérer le découpage en objet “zone” et “vector”.

Vector properties

La fenêtre de propriétés est décomposée en 2 grande parties:

  • la partie gauche est relative à la composition en “zones” et “vectors” avec un arbre et une série de boutons d’action

  • la partie droite est relative aux données du vecteur actif (Coordonnées X-Y-(Z) et boutons d’action)

La zone tabulaire de droite permet d’obtenir les coordonnées et de les manipuler. Il suffit de double-cliquer sur un vecteur pour le rendre actif (idem pour une zone).

Des opérations de copier/coller sont possibles dans le tableau:

  • depuis/vers Excel ou autre tableur

  • entre cellules (sélection multiple possibles)

La mise à jour des données est réalisée via le bouton Update coordonates. Sans cette opération, les modifications ne sont pas prises en compte.

Via les boutons de la colonne de droite, les actions suivantes sont possibles:

  • Add rows : ajout de lignes au tableau, par exemple en vue de coller des données d’un autre tableur (par défaut 10 lignes sont activées)

  • Add : active l’action d’ajout de points via la viewer ; les points sont ajoutés par click-droit, l’image est mise à jour dynamiquement

  • Add and parallel : active l’action d’ajout de points et création de parallèles via la viewer ; les points sont ajoutés par click-droit, l’image est mise à jour dynamiquement

  • Create parallel : création de parallèles via boîte de dialogue

  • Modify : active l’action de modification de points via la viewer ; le point à modifier est trouvé par recherche du plus proche et replacé par click-droit, l’image est mise à jour dynamiquement

  • Insert : active l’action d’insertion de points via la viewer ; le point à insérer est trouvé par recherche du segment le plus proche et inséré par click-droit, l’image est mise à jour dynamiquement

  • Copy and Split : Crée une copie du vecteur et le divise sr base des informations entrées dans la boîte de dialogue

  • Zoom on active vector : recentre et zoome sur le vecteur actif

  • Zoom on active vertex : recentre et zoome sur le vertex actif (défini par la position choisie dans le tableur)

  • Veify vertices positions : vérifie la position des vertices et les corrige si nécessaire (utile pour interpolation de sections en travers)

  • Evaluate s : calcule la position de chaque vertex selonj la trace de la section (en 2D ou en 3D)

  • Get xy from sz : calcule les coordonnées X-Y des vertices à partir de la trace de la section

  • Interpolate coords : interpolation linéaire de la coordonnée Z de chaque vertex sur base des valeurs non nulles et de la coordonnée S

  • Get values (self or active array) : récupère les valeurs de la matrice active sous les positions X-Y des vertices et les place dans le tableur comme Z

  • Get values (all arrays) : récupère les valeurs de toutes les matrices sous les positions X-Y des vertices et les place dans le tableur dans les colonnes à droite de X-Y

  • Get values (all arrays and remeshing) : récupère les valeurs de toutes les matrices sous les positions X-Y des vertices après redécoupage et les place dans le tableur dans les colonnes à droite de X-Y

Note

Une valeur nulle pour l’opération d’interpolation est soit un vide, soit la valeeur -99999.

Chaque vecteur a également sa fenêtre de propriétés accessible via un click-droit sur le vecteur dans l’arbre. Il est possible d’y définir la couleur, l’épaisseur du trait, une légende attachée et éventuellement une image attachée.

Vector properties

Attention

Description plus détaillée à venir

Nuage de points

Les formats de fichiers supportés pour les nuages de points sont les suivants :

  • .xyz : format XYZ (ACSII) avec attributs éventuels

  • .dxf : AutoCAD

  • .shp : ESRI Shapefile

  • .txt : format XYZ (ACSII)

  • .* : sans spécification de format, le format est équivalent au .xyz

Supported point cloud formats

Données Lidar - XYZ

Les données Lidar sont un type particulier de nuage de points. Elles sont généralement stockées dans des fichiers LAS (texte) ou LAZ (binaire).

Dans Wolf, il est possible de charger un ensemble de données LAZ après un prétraitement qui ne va conserver que les données vraiment utiles:
  • Coordonnées X, Y, Z

  • classe

Lidar from gridinfos

Ces informations sont stockées dans une structure de répertoires spécifique qui permet de charger rapidement les données (habituellement un tuilage de 50 m x 50m).

Cette structure est décrite dans des fichiers “gridinfo.txt”, situé dans chaque sous-répertoire, contenant:
  • l’emprise selon X : Xmin, Xmax

  • l’emprise selon Y : Ymin, Ymax

  • le nombre de sous-tuiles selon X et Y : Nx, NbY

  • La structure du nom de fichier (exemple : 237500_145000_x1_y1_xyz.bin)

  • le format de stocage (exemple : xy_float32)

Le chargement de la donnée via le menu LAZ 🡪 LAZ grid 🡪 Initialize from GridInfos permet au viewer d’analyser les données disponibles.

Cela va ensuite permettre:
  • de restreindre les données selon l’emprise du viewer

  • de créer un viewer 3D pour visualiser les données

  • de tracer les données autour du vecteur actif

  • de tracer les données autour d’un vecteur temporaire

  • de remplir la matrice active avec les données (sur base d’un choix de la classe)

  • de sélectionner les mailles de la matrice active selon les données (sur base d’un choix de la classe)

  • de compter le nombre de points LAZ dans chaque maille de la matrice active (sur base d’un choix de la classe)

Il est également possible de créer un nuage de points selon certaines classe prédéfinies (pont, bâtiments) si la classe existe.

Note

Pour la Région wallonne, il existe un levé LAZ régional datant de 2013-2014 et 2019-2022. La classification n’est pas nécessairement la même.

Pour la Vesdre, un levé LAZ spécifique a eu lieu en 2023 par la société Geofit avec également une classification propre.

Note

Pour gérer les données LAS/LAZ, Wolf exploite le paquet laspy.

Triangulation

Pour rappel, les formats de fichiers supportés pour les triangulations sont les suivants :

  • .tri : format WOLF

  • .dxf : format Autocad (polyface mesh)

  • .gltf : format GLTF (texte, ex : Blender)

  • .glb : format GLB (binaire, ex : Blender)

L’affichage de la triangulation dans le viewer permet de visualiser les triangles et les sommets.

Tuiles

Les tuiles sont des emprises spatiales associées à des données matricielles partagées dans de multiples fichiers.

Elles sont utilisées pour visualiser rapidement l’emprise de l’ensemble de la donnée sans pour autant tout charger en mémoire.

Une fois les tuiles chargées, il est ensuite possible de sélectionner une matrice particulière par simple click-droit à l’intérieur d’une tuile après avoir déclencher l’action Pick tile via le menu correspondant.

Il est possible de créer une matrice spécifique à partir de plusieurs tuiles:
  • sur base de l’emprise du viewer

  • sur base du vecteur actif

  • sur base d’un vecteur temporaire défini par clicks droits

Note

Ceci est utile notamment pour gérer l’ensemble des données d’un bassin versant tel que la Vesdre pour lequel une acquisition d’ensemble a été réalisée en 2023.

Tiles

Modélisations 2D

Il est possible de charger des résultats de modélisations 2D (Fortran ou GPU).

Note

Si un résultat de modélisation 2D est chargé, un menu supplémentaire Results 2D apparaît.

Représentations graphiques

Les représentations graphiques possibles sont les suivantes :

  • hauteur d’eau

  • altitude de surface libre

  • topographie

  • débit spécifique selon X

  • débit spécifique selon Y

  • Norme des débits spécifiques

  • Vitesse selon X

  • Vitesse selon Y

  • Norme des vitesses

  • Charge hydraulique

  • Froude

  • Energie cinétique turbulente (si calculée)

  • Taux de dissipation turbulente (si calculé)

  • Viscosité turbulente 2D (si calculée)

  • Viscosité turbulente 3D (si calculée)

  • Champs vectoriel de débits spécifiques

  • Champs vectoriel de vitesses

  • Nombre de Shields (loi de Manning/Strickler)

  • Diamètre critique d’emportement - selon Shields (calcul itératif)

  • Diamètre critique d’emportement - selon Izbach (calcul explicite)

  • Diamètre critique de mise en suyspension (50%)

  • Diamètre critique de mise en suyspension (100%)

  • Vitesse de cisaillement au fond

  • Vue combinée:
    • Norme de débit + champ vectoriel

    • Norme de vitesse + champ vectoriel

    • altitude de surface libre + champ vectoriel de débits

    • hauteur d’eau + champ vectoriel de débits

    • altitude de surface libre + champ vectoriel de vitesses

    • hauteur d’eau + champ vectoriel de vitesses

    • Topographie + hauteur d’eau + champ vectoriel de vitesses

    • Topographie + hauteur d’eau + champ vectoriel de débits

    • Topographie + altitude de surface libre + champ vectoriel de débits

2D views

Certaines représentations graphiques sont associées à des palettes de couleurs spécifiques qui peuvent toutefois être modifiées dans les propriétés.

Note

Lors de la lecture des résultats, les 3 inconnues de calcul pour le pas de temps souhaité sont chargées en mémoire vive. Elles sont alors éventuellement combinées pour fournir l’information demandée.

Il faut noter que le calcul du diamètre critique de Shields est une formule implicite qui nécessite une résolution itérative. Cela peut donc prendre un certain temps pour les grands domaines.

Export de résultats

Après avoir chargé une(plusieurs) résultat(s) de modélisation, il est possible d’extraire le pas courant dans un(des) fichier(s) tif ou shapefile.

Pour ce faire, utiliser Export results as… du menu Results 2D.

Export results

Il sera ensuite demandé :

  • le répertoire de sauvegarde

  • le format de sauvegarde (tif ou shapefile)

  • (si tif) si la sauvegarde doit être en multibandes (1 seul fichier) ou en bandes séparées (autant de fichiers que de bandes)

  • les modèles à sauvegarder (chargés en mémoire)

  • les bandes à utiliser (topgraphie, hauteur d’eau, débits…)

L’export est ensuite réalisé.

Les fichiers sont nommés comme l’id utilisé dans le viewer pour le chargement des résultats, éventuellement suffixé avec le nom de la bande en cas de sauvegarde en fichiers multiples.

Choix du répertoire tif ou shapefile Multibandes ou bandes séparées Choix des modèles Choix des bandes

Note

Il est possible de sauvegarder les résultats via l’API en appelant la méthode export_as d’un objet Wolfresults_2D. Les champs scalaires sont alors à choisir dans l’enum views_2D en évitant les vues complexes VIEWS_COMPLEX.

Attention

La durée totale d’exportation dépend de la taille du domaine et du nombre de bandes à exporter.

Certaines bandes sont nettement plus rapides à exporter que d’autres.

Generating and Exporting Hydrographs

Hydrographs can be generated from the results of a 2D simulation by summing the flow rates of the cells under a vector or multiple vectors in a zone.

The hydrographs, if exported, are saved as .csv files. The first column contains the time values, and the subsequent columns contain the flow rates for each vector (as below).

Time [s]

Vector 1

Vector 2

0

0

0

3600

0

0

7200

3.44E-10

1

10800

2.02

3.2

14400

6.84

5.6

18000

10.4

8.2

To generate hydrographs, use the Analyze 🡪 Integrate Q menu.

You can proceed in two ways:

  1. Plot hydrographs using vector(s).

  2. Export hydrographs using vector(s).

Requirements:

  1. An active vector or an active zone containing one or more vectors.

  2. An active Wolf2D result.

Plot Option: If the plot option is selected, the hydrograph(s) will be displayed in a Matplotlib window after computation. Note that the computation time may increase with the number of recorded timesteps.

Export Option: If the export option is selected, you will be prompted to specify the directory and filename for saving the hydrograph data as a .csv file.

Detailed steps:

  1. Load or create vectors as well as the Wolf2D results to be used for generating hydrographs.

Choix des bandes
  1. Activate the zone or vector (Double LMB).

Choix des bandes
  1. Activate the desired Wolf2D result (Double LMB).

Choix des bandes
  1. Select the desired option (here, export).

Choix des bandes
  1. If the export option is selected, specify the filename and location to save the .csv file.

Choix des bandes
  1. A progress dialog box will display the status of the operation (currently available only for the export option).

Choix des bandes
  1. Upon completion, a confirmation message will indicate the successful export of the hydrograph(s).

Choix des bandes

Gestion et opérations

La plupart des opérations sont réalisées via le menu contextuel de la fenêtre principale ou via les boutons d’action des fenêtres de propriétés.

Matricielles

Pas mal de fonctions sont accessibles via l’interface graphique. Cependant, une palette plus étendue est disponible via l’API (voir le sous-module wolf_array) et l’emploi de Scripts/Jupyter Notebooks.

Travailler avec plusieurs matrices

Il est bien entendu possible de travailler avec plusieurs matrices simultanément.

Au besoin, les matrices peuvent mêmes être ajoutées par glisser-déposer dans la fenêtre principale.

Modification de valeurs ponctuelles

Une tâche courante du viewer est la modification de valeurs ponctuelles dans une matrice.

Plusieurs méthodes sont disponibles pour sélectionner les mailles à traiter.

Interpolation spatiale

Il est souvent utile de pouvoir interpoler une topographie d’une zone sur base de son voisinage. Ceci est notamment facilité par la mise en place de mémoires de sélection.

Utilisation des groupes mémoire pour l’interpolation :

Autres vidéos sans commentaires :

Note

Il est également possible d’interpoler sur base d’un nuage de points et/ou d’une triangulation dans un mode de travail mixte matriciel/vectoriel.

Mémoire de sélection

  • Comment resélectionner des mailles mises en mémoire?

  • Comment dilater/éroder une sélection?

  • Copier les coordonnées/indices dans le presse-papier pour export dans un autre outil (ex. Excel).

Vectorielles

Les données vectorielles permettent notamment:
  • de sauver une série d’images (NDLR : doit encore être amélioré)

  • de créer un canal sur base de 3 vecteurs (utile pour limiter les modifications de la topographie, notamment dans Blender)

  • de créer une triangulation sur base de vecteurs 3D (utile pour interpoler des valeurs de matrices)
    • sur base des vertices existants

    • sur base de nouveaux vertices obtenus par projection d’un vecteur central sur les vecteurs de bord (plus proche d’une notion de sections en travers)

  • de créer des polygones sur base de 3 vecteurs (le plus souvent définis par des parallèles)
    • polygones contigus (polygons from parallels)

    • polygones glissants éventuellement superposés partiellement (sliding polygons)

Au niveau de chaque vecteur, les opérations possibles sont :
  • Définition, Ajout, Suppression, Insertion de vertices
    • de façon interactive via la souris

    • manuellement via la tableur (copier/coller possible depuis Excel ou autre tableur)

  • Inversion de l’ordre des vertices

  • Création de parallèles
    • dynamiquement à la souris (2 parallèles à la fois de part et d’autre du vecteur central)

    • via une boîte de dialogue (1 parallèle à la fois)

  • Copie et subdivision du vecteur

  • Evaluation de la coordonnée curviligne de chaque vertice selon la trace du vecteur

  • Interpolation de la coordonnée Z de chaque vertice sur base des valeurs non nulles et de la coordonnée curviligne
    • permet de positionner les vertices sur base d’une connaissance partielle de la topographie

  • Obtention de valeurs depuis une matrice sous les vertices
    • de la matrice active

    • de toutes les matrices actives

    • de toutes les matrices actives après redécoupage du vecteur (afin de respecter la résolution de la matrice et d’obtenir au moins un point par maille)

Les opérations sur les vecteurs permettent de préparer les données pour des interpolations spatiales par exemple.

De nombreuses fonctionnalités sont accessibles via l’API et plus particulièrement les sous-modules

Note

En interne, Wolf utilise le paquet Shapely pour certaines opérations géométriques 2D.

Shapely est une bibliothèque Python qui permet de manipuler et d’analyser des objets géométriques en 2D et 3D. Elle est basée sur la bibliothèque GEOS (Geometry Engine - Open Source) et est utilisée par de nombreux autres paquets Python dont GeoPandas.

Wolf étend toutefois certaines fonctions non disponibles en 3D, notamment les fonctions d’interpolation afin de permettre le travail sur des vecteurs avec présence de discontinuités (comme des murs verticaux dans certaines sections en travers).

Sections en travers

Les sections en travers sont un cas particulier de vecteurs (voir formats supportés).

Un fichier .vecz peut être lu comme un fichier de sections en travers. Dans ce cas, les fonctionnalités liées à ces sections sont activées via le menu Cross sections (notamment le tracé avec comparaison aux données LAZ et matricielles).

Cross section - Comparison with arrays Cross section - Comparison with arrays Cross section - Comparison with LAZ and arrays Cross section - Comparison with LAZ and arrays Cross section - Comparison with LAZ and arrays

Nuages de points

Une fois chargés, les nuages de points peuvent être utilisés pour :
  • interpoler des valeurs de matrices

  • comparer les valeurs de matrices au levé de terrain que matérialise ce nuage de points

Triangulation

Les triangulations sont des objets vectoriels particuliers qui permettent d’interpoler des valeurs de matrices.

Le format interne est basé sur une énumération de triangles et de leurs sommets.

L’utilisation de la triangulation est utile pour:
  • imposer un mur de protection de façon précise, le cas échéant sur des matrices de différentes résolutions

  • interpoler une zone de topographie sur base de valeurs connues/relevées par un géomètre

  • interpoler le lit mineur, non relevé par Lidar, sur base de sections en travers reliées par des vecteurs de support

Modèle 2D (CPU)

Pour le moment, seules les modélisations Multiblocks (CPU/Fortran) peuvent être chargées en tant que modélisation 2D.

Ce chargement ajoute à l’interface toutes les matrices du modèles disponibles dans le répertoire de simulation ainsi que les informations vectorielles associées (contours de bloc…).

Un menu spécifique est également activé pour la gestion des modèles 2D.

Modèle 2D (GPU)

Attention

Les modèles GPU ne sont pas encore supportés mais cela fera l’objet d’une prochaine mise à jour.

La structure d’un pur modèle GPU est nettement plus simple que celle d’un modèle CPU multiblocks.

En effet, un modèle GPU SimpleSimulation contient :

  • une matrice de topo_bathymétrie : bathymetry.npy (en numpy.float32)

  • une matrice de coefficients de Manning : manning.npy (en numpy.float32)

  • une matrice de domaine de calcul: NAP.npy (en numpy.uint8)

  • une matrice d’infiltration/exfiltration : infiltration_zones.npy (en numpy.int32)

  • 3 matrices de conditions initiales : h.npy, qx.npy, qy.npy (les 3 en numpy.float32)

  • un fichier de configuration : parameters.json (texte ASCII)

Le format des fichiers est donc du pur Numpy (ce qui facilite grandement la lecture et l’écriture depuis un script/Notebook voire un outil externe). Cependant, ce type de fichier ne contient pas de positionnement spatial. Ce dernier est contenu dans le fichier de paramètres via les clés : base_coord_ll_x, base_coord_ll_y, dx, dy. ll pour lower-left. D’autres clés (exemple : nx, ny) sont redondantes avec les dimensions des matrices mais permettent des vérifications internes.

Note

Il est particulièrement recommandés de bien vérifier le typage des matrices lors de leur création via script/Notebook. Des vérifications internes sont effectuées mais il s’agit d’une erreur courante qu’il est possible de commettre.

Le fichier de paramètres est au standard JSON et peut être modifié à volonté. Il contient les conditions aux limites et les hydrogrammes.

Tant que l’interface graphique n’est pas adaptée, il est possible de mettre en place rapidement un modèle GPU via un script/Notebook.

Au besoin, les matrices peuvent être ajoutées à l’interface par simple glisser-déposer depuis un explorateur de fichiers.

Une autre voie est de recourir au Gestionnaire de scénarios qui prendra en données de base 3 matrices au format Geotif .tif:

  • topo-bathymétrie : bathymetry.tif (float32)

  • infirltration/exfiltration : infiltration.tif (int32)

  • manning : manning.tif (float32)

Note

Sur base de la seule matrice de topo-bathymetrie, l’interface graphique peut génerer très rapidement les deux autres via la fonction Duplicate du menu contextuel. La fonction Duplicate permet en effet de changer le type de stockage mémoire (passage de float32 vers int32 pour la matrice d’infiltration).

Il faudra également disposer d’un répertoire discharges contenant les hydrogrammes en format .txt.

Etant donné que les matrices sont en Geotif, leur spatialisation est automatique.

Le gestionnaire de scénarios vous permettra ensuite de mettre en place les simulations associées pour différents débits et de modifier graphiquement le fichier de paramètres pour chaque simulation sur base d’un premier paramétrage automatique.

Conditions aux limites

Pour chaque matrice chargée en mémoire, il est possible de lui associer un gestionnaire de conditions aux limites.

Pour ce faire :

  • Activer la matrice (double-clicks) pour laquelle une gestionnaire doit être créé

  • Créer le gestionnaire de conditions aux limites via le menu File`🡪`Create`🡪`Create BC manager Wolf2D

  • Choisir le type de manager entre WOLF prev (code CPU historique), WOLF OO (code CPU orienté-objets) ou GPU (code GPU). Ce choix va particulariser les types de CL en fonction des capacités de chaque code.

  • Une fenêtre s’ouvre, c’est le gestionnaire de conditions aux limites. Il est vide pour le moment.

  • En parallèle, le code va alors déterminer les bords potentiels où vous pourrez imposer des CL. Il s’agit des bords situés entre une maille visible et une maille masquée de la matrice.

  • Les bords sont alors affichés en noir et forment un contour de la matrice active (dessin via un Program Shader OpenGL pour plus de rapidité).

  • Vous pouvez ensuite sélectionner un bord par click droit ou plusieurs bords par click droit maintenu et déplacement de la souris. Ces opérations peuvent être combinées pour une sélection plus fine.

  • Une fois les bords sélectionnés, vous pouvez leur associer une condition limite via la fenêtre spécifique qui a été ouverte.

  • Le stockage des CL est réalisé dans un fichier .cl ou via un copier/coller des lignes de script générées.

Create BC manager Choose BC manager

Attention

Description plus détaillée à venir

Combinées

L’exploitation combinée de données matricielles et vectorielles est bien entendu possible.

Chaque matrice dispose d’ailleurs de sa propre fenêtre de gestion vectorielle (propriétés 🡪 bouton Manage vectors) capable de lire et d’écrire les fichiers vectoriels. Cet objet peut également, le cas échéant, être partagé entre plusieurs viewers dans des opérations de comparaison ou d’analyse de données/résultats.

Il est possible notamment :
  • d’extraire des valeurs de matrices sous les positions des vertices

  • de définir des polygones d’extraction de valeurs via le dessin d’un axe et de parallèles

  • de trianguler une zone vectorielle en vue d’interpoler des valeurs de matrices

Attention

Description plus détaillée à venir

Calculatrice

Une calculatrice est disponible via l’interface graphique. Elle exploite le parser initialement disponible ici.

Elle est accessible via le menu “Tools/Calculator”.

Menu

Outre le fait de pouvoir résoudre des opérations mathématiques (multilignes supporté, nom de variable possible), elle peut également réaliser des opérations sur les matrices chargées dans le viewer en exploitant les “id”.

Par exemple:
  • on dispose/crée une matrice “a” de 10x10 et une matrice “b” de 10x10

  • on ajoute ces matrices au viewer

  • on ouvre la calculatrice

  • on demande “a+b” puis “=”

  • une nouvelle matrice nommée “a+b” est ajoutée au viewer…

Array a Array b Calculator Array a+b

Attention

Pour le moment, c’est à l’utilisateur de s’assurer que les matrices sont “compatibles” en dimensions.

Note

Autre exemple :

  • sto(‘c’, 1+2)

  • c + 10 * 10

La première ligne stocke le résultat dans la variable ‘c’ qui sera utilisé dans la seconde ligne.

Via le code source, il est bien entendu possible d’ajouter des fonctions utilisateurs particulières au parser. Cela ouvre la voie à de nombreuses possibilités : calcul de hauteur uniforme, critique, surface de section en travers… toutes ces fonctions existent déjà et pourarient être rendues accessibles via la calculatrice si le besoin en était exprimé.

Comparaison de matrices

Il est possible de comparer des matrices entre elles via le menu File 🡪 Set comparison.

Attention

Les matrices doivent avoir la même taille, la même résolution et le même type de données (float64, float32, integer8…).

Pour mettre en place une telle comparaison, il faut :
  • activer l’action via le menu File 🡪 Set comparison

  • choisir autant de fichiers que nécessaire (le premier sera la matrice de référence, les différences étant calculées par rapport à celle-ci)

  • terminer l’ajout en cliquant sur ‘Cancel’ de la boîte de dialogue de choix de fichier

  • indiquer via le choix proposé si un viewer différent doit être créé pour chaque matrice et chaque différentiel

Example of 2D comparison

Attention

Dans le cas où des viewers différents sont demandés, ils seront liés entre eux. Cela signifie qu’un zoom dans une fenêtre sera répercuté dans les autres. Les valeurs reprises dans la fenêtre de propriétés contiendra également les valeurs des autres matrices. La première valeur fournie éatnt celle du viewer dans laquelle se trouve le pointeur de la souris.

Note

Par défaut, les palettes de couleurs ne sont pas définies en mode automatique. Afin de faciliter la comparaison, la palette de couleurs des données est partagée entre les différentes versions. Il suffit dès lors de modifier une seule palette pour que toutes les données soient impactées.

Comparaison de modélisations 2D

Il est possible de comparer des modélisations 2D entre elles via le menu File 🡪 Set comparison.

Attention

Les modélisations doivent avoir la même emprise spatiale et la même résolution.

Pour mettre en place une telle comparaison, il faut suivre la même procédure que pour les matrices :
  • activer l’action via le menu File 🡪 Set comparison

  • choisir autant de modélisations que nécessaire (la première sera la modélisation de référence, les différences étant calculées par rapport à celle-ci)

  • terminer l’ajout en cliquant sur ‘Cancel’ de la boîte de dialogue de choix de fichier

  • indiquer via le choix proposé si un viewer différent doit être créé pour chaque modélisation et chaque différentiel

Le sytème analysera automatiquement les pas de temps disponibles pour chaque modélisation et les mettra en correspondance.

Example of 2D comparison

Il les affichera ensuite dans une fenêtre permettant de choisir le pas de temps à comparer, voire de fixer une modélisation sur un pas de temps spécifique.

Note

Ce système peut également être utilisé avec une seule modélisation afin de faire un différentiel entre deux pas de temps.

Example of 2D comparison

Multiviewers

Il est possible de créer plusieurs viewers depuis la même application.

Cela peut être utile pour comparer des résultats, des données…

Pour créer un nouveau viewer, il suffit de cliquer sur le menu File 🡪 Multiviewer dans la fenêtre principale.

Il vous sera demandé combien de viewers vous souhaitez créer.

Attention

Les données de chaque viewer seront indépendantes mais la zone visible sera la même pour tous les viewers.

Viewer 3D

Deux modes de visualisation 3D sont disponibles: - une vue matricielle - une vue du nuage de points Lidar

Vue matricielle

Un viewer 3D est disponible pour visualiser les matrices 3D. Il exploite la même palette de couleurs que la vue 2D.

La représentation est réalisée via un Program Shader OpenGL pour plus de rapidité.

Les valeurs sont représentées sous la forme de parallélépipèdes, et non de triangles, dont la couleur est définie par la palette de couleurs.

Note

La navigation doit encore être améliorée mais les commandes sont visibles en appuyant sur la touche H depuis le viewer.

Attention

Il est également possible d’utilisre Blender pour visualiser les matrices 3D. Pour ce faire, il suffit d’extraire la portion de matrice à afficher au format glb via le menu File 🡪 Gltf2 🡪 export après avoir défini un polygone d’extraction et activé le vecteur associé.

Blender dispose d’outils de rendu qui ne seront jamais disponibles dans WOLF.

Par contre, les valeurs y sont triangulées et non représentées sous forme de parallélépipèdes, cette dernière vision étant plus proche de la modélisation GPU.

Vue du nuage de points Lidar

Si vous disposez des informations Lidar brutes sous la forme d’un nuage de points 3D classifié, il est possible de les charger dans un viewer 3D spécifique (menu LAZ 🡪 Create LAZ viewer).

Le viewer LAZ est basé sur le paquet pptk qui a été adapté pour les besoins de WOLF.

Au moment de la création du viewer LAZ, il est possible de choisir entre plusieurs modes de colorations:
  • par classe

  • sur base d’une image aérienne (orthophotoplans)

Pour analyser finement les données, il est utile de représenter le nuage de points selon plusieurs modes.

Attention

Description plus détaillée à venir

Données extérieures

Via les services WMS, il est possible de charger des données extérieures.

Actuellement, pour la Région wallonne, il est possible d’afficher les données suivantes en arrière-plan:
  • orthophotoplans 1971

  • orthophotoplans 1994-2000

  • orthophotoplans 2006-2007

  • orthophotoplans 2009-2010

  • orthophotoplans 2012-2013

  • orthophotoplans 2015

  • orthophotoplans 2016

  • orthophotoplans 2017

  • orthophotoplans 2018

  • orthophotoplans 2019

  • orthophotoplans 2020

  • orthophotoplans 2021

  • orthophotoplans 2022 printemps

  • orthophotoplans 2022 été

  • orthophotoplans 2023 été

  • orthophotoplans France

Note

Les orthophotoplans sont chargés directement depuis le site Walonmap pour le zoom et la précision d’affichage courante. Ceci afin de minimiser les échanges réseau et le stockage local/mémoire vive.

Il n’y a pas de rechargement automatique lors d’opérations de translation/zoom. C’est à l’utilisateur de le demander via la touche F7 (chaque appui sur la touche déclenchera l’action de téléchargement depuis Walonmap).

Actuellement, pour la Région wallonne, il est possible d’afficher les données suivantes en avant-plan:
  • réseau aqualim

  • Aléa d’inondation en vigueur

  • Carte Lidaxes

  • Secteurs statistiques

  • Limites administratives

  • Plan parcellaire

Via l’entrée Others, il est possible d’ajouter:
  • la position des stations actives du réseau de mesure du site hydrometrie.wallonie.be (les propriétés de cette couche permet d’afficher une fenêtre de chargement de données)

  • les données du PICC (via extract du fichier .gdb complet – si disponible)

  • les données du cadastre (via extract du fichier .gpkg complet – si disponible)

  • les plans terriers (via affichage des fichiers .tif – si disponibles)

PICC

Activation du PICC dans l’entrée Others 🡪 PICC.

Note

Les données à l’échelle de la Région sont distribuées via Walonmap au format gdb ou shapefile.

PICC

Choix des couches à afficher :

PICC layout

Chargement des données sur l’emprise du viewer et colorisation :

PICC Theux

Cadastre

Activation du cadastre dans l’entrée Others 🡪 Cadaster.

Choix du format gpkg :

Cadaster

Choix de la couche cabu :

Cadaster layout

Résultat de l’import sur la zone affichée :

Cadaster layout

Plans terriers

Chargement des emprises :

Affichage des plans terriers pour la Hoëgende

Activation de l’action de pick sur les plans terriers :

Activation de l'action de pick sur les plans terriers

Affichage du plan contenu dans la zone de pick :

Résultat de l'action de pick sur les plans terriers Zoom -- le plan terrier est dessiné en avant plan de la donnée numérique

Attention

Ces données sont en rapport direct avec le projet MODREC et ne sont pas nécessairement disponibles pour le grand public.