DamBreak Simulateur

Projet Librairie de Modélisation Physique C++ Mise au point d’un environnement de programmation scientifique pour valider des schémas numériques sur le problème du bris de barrage unidimensionnel. Présentement, la librairie permet de programmer des schémas numériques explicites.

Motivation

Créer un environnement de programmation pour la solution numérique des équations de St-Venant unidimensionnel. L’emphase est mise sur la facilité et la flexibilité à développer/implémenter des algorithmes physiques avec un minimum d’effort à partir de composantes déjà testés et validés, accélérant ainsi le développement de simulateur physique dans la phase de prototypage. Dans les projets de recherche industriel, le physicien est souvent appelé à tester ou à expérimenter différents scénarios, ce type d’environnement répond à ce besoin.

Approche

L’approche est basée sur la technologie Orientée-Objet Numérique ou de type «Framework», qui consiste à définir une couche de classes de haut niveau qui définissent les concepts du système que l’on veut modéliser et de laisser l’usager compléter ou définir l’application.  Pour cela nous utilisons un concept emprunte au monde de la business appelé COM (Component Object Model) que nous avons renommé POM (Physics Object Model). Dans cette approche une composante défini une fonctionnalité du système qui est généralement sous forme de plug-ins ou DLL (Dynamic Link Library). Un ensemble d’interfaces définissent les différentes composantes (frontières des concepts du système). Celles-ci deviennent la porte d’entrée afin de construire une application. Le développeur qui a l’intention d’utiliser le « Framework » doit fournir une implémentation des interfaces (composantes) qui est un plug-in du système. Cette architecture modulaire ou les composantes peuvent être remplacées facilement procure une grande flexibilité au niveau de l’implémentation. L’utilisation de différents patrons de conception sont utilisés pour la construction de tel système de simulation.

Le diagramme UML ci-dessous montre ces relations:

physics13

Les class au bout des flèches sont des Interfaces. Une interface spécifie un contrat qui doit être remplie par la class qui l’implémente. Par exemple, l’interface IFinalReport spécifie qu’une méthode du nom de report doit être implémentée.

Les quatre interfaces que l’on montre ici sont celles pour lesquelles chaque développeur qui a l’intention d’utiliser le «framework» devra fournir une implémentation.

Le nom de chacune des interfaces parle par lui-même. L’implémentation de la class IPhysicalConfiguration est pour la mise en place de la solution initiale. IPhysicalAlgorithm pour intégrer numériquement les équations du mouvement St-Venant. Dans l’exemple d’application un solveur de Runge-Kutta au deuxième ordre est utilisé pour résoudre l’équation sous-forme semi-discrète. L’implémentation de la class IPhysicalMeasurement nous renseigne sur quelles quantités physiques seront mesurées périodiquement. L’implémentation de la class IFinalReport nous donne un sommaire sur les statistiques et les résultats finaux qui sont fournis à l’utilisateur sous forme d’un simple format texte.

Description du problème (condition initiale)

Ce test classique est considéré comme un banc d’essai pour la comparaison de la performance de schémas numériques pour les écoulements transitionnels discontinus. il est largement considéré comme un cas test pour la validation de schémas numériques. Une membrane sépare une masse d’eau (figure ci-dessous), à un certain moment on enlève la membrane, une onde se propage de gauche vers la droite. Mathématiquement ce phénomène est décrit par un ensemble d’équations mathématique appelées équations de St-Venant. Pour obtenir une solution on doit faire appel à des techniques d’approximation appelées méthode numérique ou les équations sont mise sous forme d’un système algébrique.

Exemples de Code

Modélisation physique du bris de barrage (Simulateur DamBreak++)

Nous allons donner un exemple sur comment programmer un simulateur physique en utilisant notre environnement de programmation ou «framework». Le simulateur physique que nous allons programmer va simuler la propagation d’une onde (écoulement non-linéaire en présence de choc) communément appelé bris de barrage. Nous considérons un cas idéal, canal horizontal avec un fond plat, et sans friction pour des sections d’écoulement rectangulaires de largeur unitaire (solution analytique connue).

DamBreak run method

DamBreak condition initiale

DamBreak algorithme physique

See all

  • Un Exemple d’Implémentation des Angles d’Euler en C++

    Tips and Tricks!

    Le langage C++ offre de nombreuses caractéristiques qui le rende bien adapte pour la programmation scientifique. En particulier la surcharge des opérateurs, permet d'écrire du code qui modélise les types mathématiques de manière naturel. Je présente une class C++ de notre environnement de programmation qui met en évidence cette caractéristique

clients and partners

Autolog