MEF++ a résolu un problème à 4.6 milliards d’inconnues

Voici la petite histoire d’un gros calcul…

Le GIREF a été sollicité comme bêta-testeur par Calcul Canada, afin de tester le superordinateur béluga, qui était en cours d’acceptation et de validation en début d’année 2019. Notre tâche était de lancer un calcul assez imposant pour occuper au moins 5000 coeurs. Ce n’est pas une mince affaire, car il faut avoir un calcul avec assez d’inconnues à résoudre. Ceci exige tout d’abord un maillage pour porter ces inconnues.

La première étape fut donc la création du maillage suffisamment fin pour générer un très grand nombre d’inconnues. Pour ce faire, nous avons utilisé une technique très simple qui consiste à diviser en deux toutes les arêtes d’un maillage, avec notre outil diviseAreteEn2 de MEF++, que l’on peut appeler en parallèle. En démarrant d’un maillage d’un cube avec 18 éléments hexaédriques dans chaque direction (donc 18 x 18 x 18 éléments), nous sommes passés par les différents maillage suivants:

  • cube_18
  • cube_36
  • cube_72
  • cube_144
  • cube_288
  • cube_576
  • cube_1152

Concernant le dernier maillage, cube_1152, il a été généré en 197 secondes, lecture et écriture comprises, avec diviseAreteEn2, sur 256 coeurs répartis dans 64 noeuds de Beluga. Le fichier final occupait 627 Go d’espace disque et le maillage était composé comme suit:

Type de composanteQuantité
Sommet1 532 808 577
Arête4 594 437 504
Face4 590 452 736
Hexaèdre1 528 823 808

Par la suite, ce maillage a été utilisé pour résoudre un problème de mécanique des solides en grandes déformations, donc à 3 inconnues en déplacement (U) par sommet, ce qui fait un total de 4 598 425 731 inconnues. Les conditions aux limites en déplacement (U=[0,0,0.05]) ont été imposées sur la face supérieure du cube par la méthode de Nitsche. Le calcul a par la suite été lancé sur 500 noeuds, avec 12 processus par noeud, totalisant 6 000 processus MPI.

Le calcul non-linéaire a convergé en 6 itérations de Newton en utilisant un la librairie PETSc, configurée avec un solveur FMGRES, préconditionné par GAMG (voir détails complets). Le temps total pour le calcul, incluant la lecture et le partitionnement du maillage ainsi que l’écriture des résultats, a été de 2026 s. Voici un graphique détaillant les différents étapes du calcul:

Pour les détails du temps de calcul, vous pouvez consulter le chronomètre du processus de rang 0.

C’est avec joie et fierté que nous avons pu constater que MEF++ a su montrer sa capacité à s’attaquer à un problème de cette taille, un record et une avancée significative depuis le dernier gros calcul lancé en 2012 qui était de 576 millions d’inconnues avec 512 processus sur 256 noeuds de colosse avec un temps de calcul de 1322 s. Nous tenons à remercier Calcul Canada et son équipe de soutien pour l’excellent support dont nous avons bénéficié lors du lancement de ces tests et nous souhaitons longue vie à béluga!