Quelles sont les meilleures pratiques pour les algorithmes et l'implémentation de simulations multi-physiques?

16

La simulation multi-physique implique le couplage de plusieurs "physiques", souvent avec des échelles spatiales et / ou temporelles différentes. De plus, les codes à physique unique sont souvent écrits par différentes équipes. La technique de couplage la plus couramment utilisée est la division par opérateur de premier ordre, mais celle-ci a des propriétés de précision et de stabilité médiocres. Comment puis-je déterminer quels algorithmes seront efficaces pour un problème d'intérêt, et comment dois-je structurer mon logiciel pour rendre ces algorithmes disponibles?

Jed Brown
la source

Réponses:

5

Je préconise fortement un assemblage entièrement couplé car cela peut facilement reproduire les versions fractionnées de l'opérateur. Plus précisément, les routines qui calculent le résiduel et le jacobien pour différentes physiques peuvent être séparées, mais le cadre devrait être capable de les combiner pour former un résidu unifié pour l'ensemble du système. C'est ainsi que PETSc fonctionne.

Ensuite, les solutions dédoublées par l'opérateur peuvent être utilisées comme préconditionneur pour le système entièrement couplé, ou comme solveur à part entière, le tout à partir de la ligne de commande. De plus, certains couplages peuvent être conservés, tandis que d'autres peuvent être supprimés. PETSc gère cela via l'interface PC FieldSplit. Cela permet la réplication de schémas hybrides, tels que l'ICE semi-implicite pour la dynamique des fluides.

Matt Knepley
la source
5

Comme il s'agit d'un domaine de recherche très actif, j'hésite à tenter de répondre à cette question, mais j'ai une certaine expérience sur ce qu'il ne faut pas essayer.

Ne pas :

  • Prenez l'ancien code d'application A et l'ancienne application B, puis essayez de les coupler ensemble
  • Utilisez du code archaïque (impliquant inutilisable avec le recul), au lieu de créer une nouvelle application
  • Exiger un énorme framework (> 10 dépendances requises) sur les nouveaux utilisateurs qui commencent à contribuer
  • Supposons que la disposition des données (maillages, matrices, vecteurs, etc.) est facile à écrire vous-même

À faire :

  • Utiliser des pratiques de programmation standard et, espérons-le, de bons modèles de conception
  • Lisez la documentation sur le fractionnement de l'opérateur pour comprendre les limites de précision et de stabilité
Sean Farley
la source