Fortran code

WOLF2D is coded in Fortran and compiled as an executable. The code is parallelized using OpenMP.

The code is available on request.

Synthèse des fonctionnalités (Fortran)

  • Schéma de discrétisation en espace : volumes finis

  • Méthode de reconstruction des inconnues : constante ou linéaire par maille

  • Lois de frottement : Manning/Strickler, Barr-Bathurst, Colebrook-White, Bazin, Haaland, Hazen-Williams

  • Discrétisation spatiale : grillage cartésien, potentiellement multi-blocs

  • Discrétisation temporelle : Euler, RK21, RK22, RK31, RK32, RK42

  • Précision de calcul : virgule flottante double précision (64 bits)

  • Conditions aux limites : débits spécifiques, hauteurs d’eau, altitude de surface libre, Froude, conditions internes (type barrage, pont en charge…)

  • Zones d’infiltration/exfiltration : nombre illimité, interpolation linéaire

  • Mise à jour de la topographie en cours de calcul : possible

Note

Le pas de temps est calculé automatiquement par le code en fonction de la vitesse de propagation des ondes de gravité et de la vitesse de l’écoulement. Il est possible de spécifier un nombre de Courant cible pour ajuster la stabilité du calcul.

Ordre de grandeur :

  • vitesse de calcul : 1.5 millions de mailles / seconde en RK31 sur un processeur Intel i7

  • pas de temps : de 0.01 à 0.1 seconde pour des écoulements de type crue sur maillage de 1 mètre

Mise en place d’une modélisation multi-blocs

Il est possible de créer une modélisation multi-blocs via l’interface graphique ou via script (plus flexible).

Afin de créer une telle simulation 2D, les étapes principales sont :
  • créer une instance prev_sim2D en lui passant en argument le chemin d’accès complet et le nom générique de la simulation

  • définir un contour vectoriel/polygone délimitant la zone de travail

  • (optionnel) définir une “grille magnétique” servant d’accroche des vertices des polygones (permet de s’aligner entre différentes modélisations par ex.)

  • définir la résolution spatiale du maillage sur lequel les données (topo, frottrement, inconnues…) seront fournies initialement

  • définir des contours/polygones des blocs et leur résolution spatiale respective

  • appeler le mailleur (appel au code Fortran)

  • créer les matrices obligatoires et les remplir avec les valeurs souhaitées (via script(s) ou GUI)

  • créer les bords potentiels pour les conditons aux limites (.sux, .suy)

  • imposer les conditions aux limites nécessaires (info : rien == imperméable)

  • paramétrer le problème

  • exécuter le calcul

  • traiter les résultats

Un notebook d’exemple 1 est disponible pour illustrer ces étapes. Ce Notebook est assez complet pour expliquer la mise en place, le paramétrage, l’imposition des conditions aux limites, l’exécution et l’affichage des résultats.

Un notebook plus court est également disponible pour une mise en place plus rapide de la même simulation.

Note

Vous disposez déjà d’une modélisation opérationnelle et vous souhaitez en créer une copie en modifiant les paramètres ? Un notebook d’exemple 2 est disponible pour illustrer ces étapes.

Vous disposez déjà d’une modélisation opérationnelle et vous souhaitez la convertir en modélisation GPU ? Un notebook d’exemple 3 est disponible pour illustrer ces étapes.

Afin de créer une modélisation depuis l’interface graphique, il faut ouvrir le code wolf2d ou wolf et cliquer sur “File / Create/Open Multiblock model”.

Création d'une modélisation multi-blocs

Une nouvele fenêtre s’ouvre alors, permettant de choisir le répertoire de stockage de la simulation. Après avoir validé, un viewer spécifique pour le modèle est créé.

Une fenêtre de paramétrage s’ouvre alors, permettant de définir la géométrie et les paramètres de la simulation.

Paramétrage d'une modélisation multi-blocs

Le premier bouton est un Wizard décrivant succinctement les étapes nécessaires à la création d’une simulation multi-blocs.

Il est possible de définir la géométrie :
  • sur base du vecteur/polygone actif

  • sur base de la matrice active (contour extérieur == masque de la matrice)

  • sur base d’une emprise définie par les coordonnées de l’origine, le nombre de mailles selon chaque direction et la résolution spatiale

Définition de la géométrie
Il est ensuite possible de :
  • définir une grille magnétique pour faciliter l’alignement des vertices des polygones entre simulations

  • définir la résolution fine du maillage

  • de forcer la translation des vertices des polygones à la coordonnée (0., 0.) - souvant nécessaire car les opérations de maillage s’effectuent en Float32 côté Fortran et les coordonnées Lambert sont mal adaptées pour conserver la pleine précision de calcul

  • d’ajouter des blocs et de les paramétrer (voir zone centrale de la fenêtre)

  • d’appeler le mailleur

  • de créer des matrices vides (le nombre et le type de matrices dépend du choix du modèle - par ex. pas de .kbin et .epsbin sans modèle de turbulence)

La colonne de droite est dédiée aux opérations de simulations :
  • imposer les conditions aux limites

  • gérer l’infiltration

  • (optionnel) définir les matrices sur base d’une liste de fihciers

  • vérifier d’éventuelles erreurs de paramétrage avant calcul

  • écrire les paramètres sur Disque

  • lancer le calcul (via wolfcli.exe)

  • afficher les résultats

  • convertir les résultats en conditions initiales

  • convertir le modèle en version GPU (voir aussi le Jupyter Notebook dédié)

Pour le paramétrage, il existe des paramètres :
  • globaux

  • de blocs

Il est possible de cliquer sur autant de boutons de blocs que souhaité. Le premier bouton est considéré comme la référence.

Si les autres blocs possèdent le même paramétrage, leur bouton sera vert. Si des paramètres diffèrent, le bouton sera rouge. Une déselection de la référence transfère la référence au deuxième.

La liste des paramètres qui diffèrent est affichée dans la case textuelle en bas de fenêtre

Note

Pensez à aggrendir la fenêtre verticalement si elle n’est pas visible

Un clic sur le bouton “Global” désactivera tous les blocs et activera les paramètres globaux.

En cas de modification simultanée via scipt et GUI, un bouton “Update structure” permet de relire les paramètres en mémoire et remplir les widgets graphiques.

Warning

Si quelque chose ne se passe pas comme prévu, pensez à regarder la fenêtre de logging.

Un problème persiste ? Contactez le support technique.

Note

Envie d’en savoir plus sur le code, explorez les classes suivantes: