¿Cuáles son las mejores prácticas para algoritmos e implementación de simulaciones multi-físicas?

16

La simulación de física múltiple implica el acoplamiento de múltiples "físicas", a menudo con diferentes escalas de espacio y / o tiempo. Además, los códigos de física única a menudo son escritos por diferentes equipos. La técnica de acoplamiento más utilizada es la división del operador de primer orden, pero tiene propiedades de precisión y estabilidad deficientes. ¿Cómo determino qué algoritmos serán efectivos para un problema de interés y cómo debo estructurar mi software para que estos algoritmos estén disponibles?

Jed Brown
fuente

Respuestas:

5

Recomiendo encarecidamente un conjunto totalmente acoplado, ya que esto puede reproducir fácilmente las versiones divididas por el operador. Específicamente, las rutinas que calculan el residual y el jacobiano para diferentes físicas pueden estar separadas, pero el marco debe poder combinarlas para formar un residual unificado para todo el sistema. Así es como funciona PETSc.

Luego, las soluciones divididas por el operador se pueden usar como preacondicionador para el sistema totalmente acoplado, o como un solucionador por derecho propio, todo desde la línea de comandos. Además, algunos acoplamientos pueden conservarse, mientras que otros pueden descartarse. PETSc maneja esto a través de la interfaz de PC FieldSplit. Esto permite la replicación de esquemas híbridos, como ICE semi-implícito para dinámica de fluidos.

Matt Knepley
fuente
5

Como esta es un área de investigación muy activa, dudo en intentar una respuesta a esto, pero tengo algo de experiencia en lo que no debo intentar.

No :

  • Tome el código de aplicación anterior A y la aplicación B anterior, luego intente acoplarlos
  • Use código arcaico (que implica inutilizable en retrospectiva), en lugar de crear una nueva aplicación
  • Requerir un marco enorme (> 10 dependencias requeridas) en los nuevos usuarios que comienzan a contribuir
  • Suponga que el diseño de datos (mallas, matrices, vectores, etc.) es fácil de escribir usted mismo.

Hacer :

  • Utilice prácticas de programación estándar y, con suerte, buenos patrones de diseño.
  • Lea la literatura sobre la división del operador para comprender las limitaciones de precisión y estabilidad.
Sean Farley
fuente