Actualmente estoy desarrollando un método de descomposición de dominio para la solución del problema de dispersión. Básicamente estoy resolviendo un sistema de Helmholtz BVP de forma iterativa. Discreto las ecuaciones usando el método de elementos finitos sobre mallas triangulares o tetraédricas. Estoy desarrollando el código para mi tesis doctoral. Soy consciente de algunas de las bibliotecas de elementos finitos existentes, como deal.ii o DUNE, y aunque creo que son geniales, con un diseño inspirador y API, para fines de aprendizaje, quería desarrollar mi propia pequeña aplicación desde cero.
Estoy en un punto en el que tengo mis versiones en serie ejecutándose y ahora quiero paralelizarlas. Después de todo, uno de los puntos fuertes del marco de descomposición de dominio es formular algoritmos que sean fáciles de paralelizar, al menos en principio. En la práctica, sin embargo, hay muchos detalles que uno debe considerar. La gestión de la malla es una de ellas. Si las aplicaciones van a lograr una alta resolución mientras se escala bien a muchas CPU, la replicación de una malla completa en cada CPU es ineficiente.
Quería preguntar a los desarrolladores que trabajan en aplicaciones similares en entornos informáticos de alto rendimiento cómo abordan este problema.
Hay una biblioteca p4est para la gestión de mallas distribuidas. No necesito AMR, por lo que podría ser una exageración ya que solo estoy interesado en usar mallas uniformes y no estoy seguro de si puede refinar mallas triangulares. También podría simplemente crear una malla uniforme, luego alimentarla en uno de los divisores de malla y hacer un procesamiento posterior de la salida.
El enfoque más simple parece crear un archivo separado para cada partición que contiene información de malla relevante solo para esa partición en particular. Este archivo sería leído por una sola CPU que sería responsable del ensamblaje del sistema discreto en esa parte de la malla. Por supuesto, alguna información de vecindad / conectividad de partición global también necesitaría ser almacenada en un archivo leído por todas las CPU para la comunicación entre procesos.
¿Qué otros enfoques hay por ahí? Si algunos de ustedes pudieran compartir, ¿cuáles son algunas de las metodologías comúnmente utilizadas en la industria o las instituciones gubernamentales de investigación relacionadas con el manejo de este problema? Soy bastante nuevo en la programación de un solucionador de elementos finitos paralelos y quería tener una idea de si estoy pensando o no en este problema correctamente y cómo otros lo están abordando. Cualquier consejo o sugerencia para artículos de investigación relevantes sería muy apreciado.
¡Gracias por adelantado!