Gérer avec OpenFOAM le passage d'une sous-simulation à la suivante

 

Avant d'expliquer plus en détails la structure et les commandes introduites dans le script, revenons à la façon dont OpenFOAM est capable d'appliquer une solution (connue, calculée avec un maillage donné) sur un autre maillage en interpolant toutes les valeurs sur les nouveaux points de calcul.

Cette procédure est très bien détaillée dans un tutoriel disponible sur le site d'OpenFOAM (ici, section 3.1.5.3), mais expliquons comment cela fonctionne.

Pour cela, il faut disposer d'une ancienne simulation déjà réalisée, contenant tous les résultats dont la solution finale correspondant à la date $t=t_0$. Dans le fichier controlDict de cette ancienne simulation, l'utilisateur avait indiqué que le temps final de la simulation était bien $t_0$.

Il faut également créer un deuxième dossier, comme s'il s'agissait d'une nouvelle simulation. Ce dossier contient alors classiquement les dossiers constant, system, et également un dossier de condition initiale qui doit être dénommé $t_0$ au lieu de 0.

Dans ce deuxième dossier, il faut également introduire un fichier mapFieldsDict. Ce fichier indique quelles zones de l'ancien maillage doivent être interpolées sur quelles zones du nouveau maillage. Cela se fait par les noms de patch du domaine. Voici, dans notre cas, notre fichier mapFieldsDict :

La section cuttingPatches est utile dans le cas où les domaines des deux simulations sont différents. Les zones absentes sur le nouveau maillage, par le nom de certains patches, sont indiquées dans ce paragraphe ; ce qui n'est pas le cas pour notre étude, les deux domaines sont parfaitement identiques.

Une fois ce fichier créé dans le dossier system, il faut d'abord générer le maillage sur la nouvelle simulation, avec la commande blockMesh suivi de snappyHexMesh.
Puis on indique que la condition initiale de cette nouvelle sous-simulation est la solution finale de l'ancienne grâce à la commande mapFields ../simulation_précédente.
Enfin, on lance l'exécutable avec la commande classique pimpleDyMFoam si on veut un calcul en séquentiel.