StageInformatique Industrielle
Hauts-de-Seine
entre février et mai 2027
6 mois
IFP Energies nouvelles (IFPEN) est un acteur majeur de la recherche et de la formation dans les domaines de l’énergie, du transport et de l’environnement. Depuis les concepts scientifiques en recherche fondamentale jusqu’aux solutions technologiques en recherche appliquée, l’innovation est au cœur de son action, articulée autour de quatre orientations stratégiques : climat, environnement et économie circulaire ; énergies renouvelables ; mobilité durable ; hydrocarbures responsables.
Dans le cadre de la mission d’intérêt général confiée par les pouvoirs publics, IFPEN concentre ses efforts sur l’apport de solutions aux défis sociétaux et industriels de l’énergie et du climat, au service de la transition écologique. Partie intégrante d’IFPEN, IFP School, son école d’ingénieurs, prépare les générations futures à relever ces défis.
Framework C++17 de génération de microstructures et IHM Python de test pour la construction de datasets
La caractérisation et la modélisation des microstructures de matériaux (sols, roches, matériaux composites) est un enjeu central en sciences des matériaux et en mécanique. Une librairie C++ existante permet déjà de générer des microstructures 3D par schéma booléen (placement aléatoire d'objets géométriques) et par modèle d'agrégation (sphères, ellipsoïdes, plaquettes). Ces microstructures simulées servent de données d'entrée à des codes de calcul de propriétés physico-chimiques (perméabilité, conductivité thermique, propriétés élastiques, etc.).
En pratique, générer et paramétrer ces microstructures « à l'aveugle » rend leur réglage et leur validation difficiles : il faut pouvoir visualiser, contrôler et rejouer interactivement les réalisations produites. IFPEN dispose par ailleurs d'une application interne en Python (PySide6) dédiée à l'analyse d'images scientifiques de milieux poreux, qui constitue une base naturelle pour un banc de test interactif.
L'objectif du stage est de structurer et d'étendre cette librairie afin de constituer un pipeline complet et automatisé en s'appuyant sur un gestionnaire de plan d’expérience (plex) existant capable de générer des datasets de microstructures et de leurs propriétés associées à grande échelle, en explorant un espace de paramètres défini.
Le stage comporte ainsi deux volets complémentaires : d'une part la consolidation de la librairie C++ et l'extension d'un pipeline plex existant (code Python autour d'un DAG) ; d'autre part le développement d'une IHM de test en Python, greffée sur l'application existante, permettant de configurer la génération, de lancer les exécutables du framework et de visualiser les microstructures obtenues.
Missions et objectifs
1. Mise en forme et modernisation de la librairie
Audit et refactoring du code C++ existant vers le standard C++17
Définition d'interfaces claires et d'une architecture modulaire (séparation .h / .cpp, namespaces)
Mise en place d'un système de build portable avec CMake (Linux / Windows)
Intégration dans un dépôt GitLab avec CI/CD de base
2. Reprise et extension du pipeline plex
Prise en main du gestionnaire de plan d'expérience existant, écrit en Python et structuré autour d'un graphe orienté acyclique (DAG), à réutiliser, adapter et étendre à la génération de microstructures
Interfaçage avec les codes de calcul aval pour récupérer les propriétés physiques calculées
Gestion des sorties : format binaire des microstructures, fichiers de métadonnées (JSON ou CSV)
3. IHM Python de test et de visualisation
Pilotage et définition du plex depuis l’application Python/PySide6 interne : génération des fichiers de configuration, lancement du plex, suivi de l'exécution, lecture des sorties (volumes .fda, métadonnées JSON/CSV)
Intégration dans l'architecture existante de cette application (arbre de contexte, processus, renderers) avec exécution asynchrone pour garder l'interface réactive
Contrôle visuel des microstructures générées pour un jeu de paramètres de la campagne plex
4. Tests et validation
Écriture de cas unitaires fonctionnels pour chaque brique du pipeline avec Google Test
Tests de non-régression et de reproductibilité (graine aléatoire fixée)
Intégration des tests dans la CI GitLab
Vérification du fonctionnement de l'IHM de test (lancement des exécutables, génération et affichage bout en bout)
5. Documentation
Documentation de l'API (Doxygen ou équivalent)
Guide d'utilisation du plex et des options de l'espace de paramètres
Notice d'installation et d'utilisation de l'IHM Python de test
Manuel de contribution (conventions de code, procédure de merge request)
Profil recherché
Compétences requises
Maîtrise du C++ (C++11/14/17) : templates, gestion mémoire, POO
Pratique de CMake pour la configuration de projets multi-plateformes
Connaissance de Git et de GitLab (branches, merge requests, CI/CD)
Capacité à lire et comprendre du code scientifique existant
Bonnes bases en Python (POO, environnement scientifique) et goût pour le développement d'interfaces
Compétences appréciées
Expérience avec Google Test ou un framework de test équivalent
Notions de simulation stochastique ou de traitement d'images 3D
Intérêt pour les applications scientifiques et les matériaux
Expérience Linux (compilation, scripting bash)
Expérience du développement d'interfaces graphiques avec Qt / PySide6 (ou PyQt)
Notions de visualisation scientifique 2D/3D et d'orchestration de tâches (DAG, sous-processus)
Livrables attendus
Code source versionné sur GitLab, documenté et testé
Suite de tests Google Test avec rapport de couverture
Pipeline plex fonctionnel capable de produire un dataset de N microstructures
Module IHM Python (PySide6) de test et de visualisation des microstructures, pilotant les exécutables du framework C++
Documentation technique (API + guide utilisateur)
Rapport de stage et soutenance
Ce que nous offrons
Immersion dans un projet de recherche appliquée en simulation de matériaux
Code existant non trivial : travail réel sur une base de code scientifique
Encadrement technique par des ingénieurs/chercheurs expérimentés
Développement « full-stack » scientifique : calcul C++ haute performance et interface Python/Qt