Avec BlockMesh

La première idée, a priori la plus simple, est de décrire manuellement les nombreux points composant la géométrie du train au sein même du fichier blockMeshDict. En effet, avec cette méthode, nous serons assurés d'avoir des résultats puisque l'on devra définir la vitesse des points des bords du domaine. Or, comme nous définissons nous même le domaine avec cette méthode, il suffira d'indiquer la vitesse adéquate à chacune des parois du domaine. Toutes les mailles à l'intérieur du domaine auront alors une vitesse en cohérence avec la vitesse des bords du domaine.

Voici pour rappel la géométrie du train qui nous a été fournie par Mr Tekam :

Dans un premier temps, nous allons négliger les congés qui sont censés améliorer l'aérodynamique globale du train. En effet, cela complique la création d'un maillage avec un blockMeshDict puisqu'il faut créer des arcs de cercle avec deux points de base et un troisième point par lequel passera l'arc de cercle. Suite à cette concession, voici à quoi devra ressembler notre géométrie :

Il est par conséquent nécessaire de décrire tout les points qui vont servir à décrire l'ensemble des blocs d'une telle géométrie.

Au lieu des 24 points définis pour définir le rectangle, il est nécessaire d'en introduire 32 supplémentaires pour un total de 56 points. De plus, au lieu des 5 blocs initialement présents, il faudra en définir ici 17. Voici ci-dessous un schéma permettant de définir tous ces blocs.

On peut remarquer que 4 blocs sont des triangles. C'est ici une particularité acceptée par OpenFOAM. En fait, au lieu de décrire une face d'un bloc par 4 points distincts, on peut décrire une face d'un bloc par 4 points dont 2 sont identiques, on aura alors un triangle. Lors de l'étape du maillage, nous aurons des mailles triangulaires dans l'un des sommets de ce triangle.

Concernant l'étape du maillage réalisée dans ce fichier blockMeshDict, il faut simplement faire attention à toujours définir un nombre de mailles identique pour les deux blocs voisins. Avec suffisamment de rigueur, cela est tout à fait faisable.

Voici ce que l'on obtient après avoir exécuté blockMesh dans le terminal et lancé paraFoam pour visualiser le domaine maillé :

Avant de commenter la géométrie finalement obtenue, on peut remarquer une particularité probablement gênante de ce maillage. Cela concerne les mailles triangulaires. Pour assurer un nombre minimum satisfaisant de mailles dans le domaine, il est en effet obligatoire d'imposer un nombre de mailles dans ces blocs triangulaires. Cela a pour conséquence d'avoir des mailles triangulaires extrêmement petites par rapport à ses voisines rectangulaires. Ceci est certainement source de divergence et rend plus contraignant le choix du pas de temps du calcul pour assurer sa convergence.

L'idée est alors d'éviter ces mailles triangulaires en modifiant légèrement la définition des blocs. Au lieu d'introduire des blocs triangulaires, nous pouvons définir 2 points supplémentaires pour chaque côté du train afin d'obtenir un bloc trapézoïdal. Plus ces deux points sont éloignés de la paroi du train, plus la qualité des mailles initialement triangulaires (qui sont évidemment devenues des trapèzes) sera acceptable. Cela se fait par contre au détriment de la qualité des mailles initialement rectangulaires des blocs voisins qui deviennent des trapèzes. Par conséquent, on induit quelques erreurs de calculs puisque ces mailles ne sont plus orthogonales.

Voici finalement ce qu'on peut obtenir en visualisant le maillage après avoir exécuté paraFoam.

Cette méthode permet donc d'obtenir de manière assez simple un maillage correct, mais reste valable uniquement pour des géométries très simples composées de carrés, de triangles ou d'autres polygones réguliers.