Le troisième exemple de cette formation permet le développement d'un module hydrodynamique lagrangienne très simplifié :
- le seul type de maille supporté est l'hexaèdre,
- pas de pseudo viscosité supportée,
- le seul type de calcul de longueur caractéristique supporté est celui utilisant les médianes,
- le seul type de condition aux limites supporté est d'imposer une composante de la vitesse sur une surface,
- la masse nodale est supposée constante et n'est pas recalculée à chaque itération,
- aucun test de cohérence des valeurs (pression positive, volume positif, ...) n'est effectué.
La liste des opérations effectuées par le module est la suivante :
- calcul des forces de pression,
- calcul de l'impulsion,
- prise en compte des conditions aux limites,
- déplacement des noeuds,
- calcul des nouvelles valeurs géométriques : volume des mailles, longueur caractéristique des mailles, resultantes aux sommets de chaque maille,
- calcul de la densité,
- calcul de la pression et de l'énergie par l'équation d'état. Ce calcul est effectué par un service ARCANE. Deux implémentations sont disponibles pour le service : gaz parfait, et "stiffened" gaz.
- calcul du nouveau pas de temps.
La liste des valeurs manipulées par le module est la suivante :
Nom | Elément | Type | Description |
Density | Maille | Réel | Densité par maille |
Pressure | Maille | Réel | Pression par maille |
CellMass | Maille | Réel | Masse par maille |
InternalEnergy | Maille | Réel | Energie interne par maille |
CellVolume | Maille | Réel | Volume de la maille |
OldCellVolume | Maille | Réel | Volume de la maille à l'itération précédente |
Force | Noeud | Coordonnée | Force aux noeuds |
Velocity | Noeud | Coordonnée | Vitesse aux noeuds |
NodeMass | Noeud | Réel | Masse nodale |
AdiabaticCst | Maille | Réel | Constante adiabatique par maille |
CaracteristicLength | Maille | Réel | Longueur caractéristique par maille |
SoundSpeed | Maille | Réel | Vitesse du son dans la maille |
NodeCoord | Noeud | Coordonnée | Coordonnées des noeuds |
CellCQs | Maille | Tableau de coordonnées | Résultante aux sommets |
Conception de l'application
- Prérequis
-
- Actions à réaliser
- A partir de l'énoncé de l'exercice et de la documentation des méthodes de la classe
MicroHydroModule
:
- Ecrire le descripteur du module :
- Fournir la liste des points d'entrée. Chaque opération citée précédemment devient un point d'entrée et un point d'entrée d'initialisation est ajouté,
- Fournir la liste des variables,
- Compléter les options de configuration pour les conditions aux limites conformément au jeu de données
MicroHydro.arc
- Décrire ensuite l'enchainement des points d'entrée dans le fichier de configuration de l'application
MicroHydro.config
.
Service d'équation d'état
- Prérequis
-
- Actions à réaliser
- Faire un service capable de calculer l'équation d'état pour un groupe de mailles donné :
- Regarder l'interface du service dans le fichier
IEquationOfState
et les implémentations perfect gas et stiffened gas,
- Enregistrer les 2 implémentations dans ARCANE à l'aide à la macro,
- Dans le descripteur du module (
MicroHydro.axl
), saisir les options de configuration pour le service d'équation d'état conformément au jeu de données MicroHydro.arc
,
- Ecrire le code pour le service d'équation d'état du gaz parfait dans le fichier
PerfectGasEOSService.cc
. Les formules sont :
\[P = (\gamma - 1) \rho e\]
\[s = \sqrt{\gamma P / \rho} \]
avec \(P\) = pression, \(e\) = énergie interne, \(s\) = vitesse du son, \(\gamma\) = constante adiabatique, et \(\rho\) = densité
- Ecrire le code pour le service d'équation d'état "stiffened gas" dans le fichier
StiffenedGasEOSService.cc
. Les formules sont :
\[P = ((\gamma - 1) \rho e) - (\gamma P_0)\]
\[s = \sqrt{(\gamma / \rho)(P+P_0)} \]
avec \(P\) = pression, \(P_0\) = tension limite, \(e\) = énergie interne, \(s\) = vitesse du son, \(\gamma\) = constante adiabatique, et \(\rho\) = densité
- Compléter les appels au service d'équation d'état dans le fichier
MicroHydroModule.cc
- Compiler
- Choisir le service d'équation d'état voulu dans le jeu de données
MicroHydro.arc
. Ne pas oublier de préciser la tension limite dans le cas du service "stiffened gas".
- Exécuter en séquentiel et en parallèle et regarder les résultats.
Prise en compte des protections/reprises
- Prérequis
- Ce module n'utilisant pas de structure de données interne autre que les variables, il n'a rien à faire pour prendre en compte les protections reprises.
- Actions à réaliser
- Editer le fichier
MicroHydro.config
et ajouter le module ArcaneCheckpoint
permettant d'écrire des protections.
- Exécuter le code pendant 100 itérations : option
-arcane_opt max_iteration 100
.
- Reprendre l'exécution : option
-arcane_opt continue
.
- Ne plus sauvegarder le volume des mailles et ajouter un nouveau point d'entrée d'initialisation de reprise permettant de calculer le volume des mailles à partir de la position des noeuds.