Code organization

WOLF est un ensemble de codes numériques écrits principalement en Fortran 90/95. Une attention toute particulière est apportée aux schémas numériques et à la gestion des données.

Les codes de calcul Fortran sont organisés en modules. Deux versions distinctes co-existent : une version “classique” et une version “orientée-objet”. Elles peuvent être accessibles via le même exécutable. La compilation s’effectue sous Windows avec le compilateur One API d’Intel.

A côté de ces codes Fortran, une version GPU du modèle 2D est opérationnelle. Elle est écrite en OpenGL et GLSL (compute shader). Elle est compilée directement sur la carte graphique (dépendant de la marque et de la version du driver).

Une interface graphique historique est écrite en Visual Basic 6.0. Elle est toujours fonctionnelle mais n’est plus améliorée. Elle est remplacée par une interface graphique écrite en Python avec le module wxwidgets et l’appel de fonctions OpenGL pour les tâches lourdes.

L’interface Python fait appel à de nombreux autres paquets pour des tâches spécifiques : numpy, scipy, matplotlib, GDAL, Shapely, GeoPandas, etc. Un choix a été sur des paquets réputés robustes et exploités dans de nombreuses autres applications, notamment SIG. L’interface Python n’est cependant pas un Système d’Information Géographique. Même si des données géolocaliées sont utilisées, elles ne peuvent pas être converties à la volée dans d’autres référentiels (EPSG).

A côté de l’interface graphique, des modules de calcul sont également écrits en Python. Ils permettent d’intargir avec le Fortran en partageant la mémoire vive. Dans ce cadre, il est fait appel au module ctypes pour la gestion des pointeurs et des appels vers la librairie dynamique. Ceci permet par exemple de disposer de calculs relativement simple et facilement éditable en Python (bilan de volume, …) tout en laissant les calculs lourds côté Fortran. Localement il est également fait appel aux capacités JIT de modules comme Numba pour accélérer les calculs.

Les fichiers de paramètres sont majoritairement écrits sous forme de fichiers texte. Des classes Python et Fortran similaires permettent de les lire et de les écrire.

Les données sont majoritairement stockées sous forme binaire. Là aussi, des classes Python et Fortran similaires permettent de les lire et de les écrire. Le Python supporte cependant plus de formats de données que le Fortran.

La complexité du code est croissante et atteint aujourd’hui environ 350.000 lignes et dépasse même les 500.000 lignes avec les commentaires et les espaces.

_images/evolution_2013.png

Ressources nécessaires

Note

Ceci est donné à titre purement informatif.

Il s’agit de codes numériques à haute inetensité de calculs.

Plus la machine sera puissante, plus les calculs seront normalement rapides même si des limitations d’accès mémoire peuvent brider la puissance pure du processeur et/ou de la carte graphique. Des tentatives d’améliorations sont en cours pour optimiser cet accès mémoire.

Les ressources minimales nécessaires sont les suivantes :

  • un ordinateur sous Windows 10 (ou supérieur) avec un processeur Intel (ou compatible) et une carte graphique récente supportant OpenGL4.6 ;

  • 32 Go de mémoire vive rapide (type DDR5) (128 Go recommandés pour la gestion des matrices les plus lourdes ; 68.000 x 15.000 –> 1 Milliard de cellules) ;

  • un processeur Intel i7 ou supérieur (ou équivalent) ;

  • un espace de stockage de 1 To (SSD recommandé) ;

  • Python 3.10 avec paquets requis;

  • (optionel) un compilateur Intel OneAPI pour les codes Fortran ;