Je développe actuellement une méthode de décomposition de domaine pour la solution du problème de diffusion. Fondamentalement, je résous un système de BVP Helmholtz de manière itérative. Je discrétise les équations en utilisant la méthode des éléments finis sur des maillages triangulaires ou tétraédriques. Je développe le code vers ma thèse de doctorat. Je connais certaines des bibliothèques d'éléments finis existantes telles que deal.ii ou DUNE et bien que je pense qu'elles sont excellentes, avec une conception inspirante et une API, à des fins d'apprentissage, je voulais développer ma propre petite application à partir de zéro.
J'en suis à un point où je fais tourner mes versions série et maintenant je veux les paralléliser. Après tout, c'est l'un des points forts du cadre de décomposition de domaine de formuler des algorithmes faciles à paralléliser, du moins en principe. En pratique cependant, il y a de nombreux détails à considérer. La gestion du maillage en fait partie. Si les applications doivent atteindre une résolution élevée tout en s'adaptant bien à de nombreux processeurs, la réplication d'un maillage entier sur chaque processeur est inefficace.
Je voulais demander aux développeurs qui travaillent sur des applications similaires dans des environnements informatiques à haute performance comment ils traitent ce problème.
Il existe une bibliothèque p4est pour la gestion distribuée du maillage. Je n'ai pas besoin d'AMR, donc cela pourrait être exagéré car je ne suis intéressé que par l'utilisation de maillages uniformes et je ne suis pas sûr qu'il puisse affiner les maillages triangulaires. Je pourrais également simplement créer un maillage uniforme, puis l'introduire dans l'un des séparateurs de maillage et effectuer un post-traitement de la sortie.
L'approche la plus simple semble créer un fichier séparé pour chaque partition contenant des informations de maillage pertinentes uniquement pour cette partition particulière. Ce fichier serait lu par une seule CPU qui serait responsable de l'assemblage du système discret sur cette portion du maillage. Bien sûr, certaines informations de connectivité / voisinage de partition globale devraient également être stockées dans un fichier lu par tous les processeurs pour la communication inter-processus.
Quelles autres approches existe-t-il? Si certains d'entre vous pourraient partager, quelles sont certaines des méthodologies couramment utilisées dans l'industrie ou les institutions de recherche gouvernementales liées au traitement de ce problème? Je suis assez nouveau dans la programmation d'un solveur par éléments finis parallèle et je voulais savoir si je pense correctement à ce problème et comment les autres l'abordent. Tout conseil ou pointeur vers des articles de recherche pertinents serait grandement apprécié!
Merci d'avance!