Comment puis-je vérifier l'exactitude de mon résultat de simulation de fluide?

9

J'ai écrit un programme de simulation de fluide à base de particules. Il est difficile de dire si j'obtiens le bon résultat. Le résultat visualisé semble raisonnable, mais une partie semble étrange. Je ne sais pas si c'est une caractéristique du fluide. Existe-t-il une méthode précise pour vérifier si mon programme est correct?

Modification de certains détails:

Mon programme est un programme de simulation basé sur des particules 2D. Le fluide est compressible. L'implémentation est presque basée sur un papier classique:

Müller, Matthias, David Charypar et Markus Gross. "Simulation de fluide à base de particules pour des applications interactives." Actes du ACM SIGGRAPH 2003

J'ai résolu l'équation de Navier-Stokes avec la méthode d'itération. Il ne tenait compte que de la pression, de la gravité, de la viscosité et de la tension superficielle.

Yyao
la source
Vous pouvez peut-être recalculer les termes de l'équation NS avec une différenciation numérique et vérifier comment ils s'annulent.
Yves Daoust

Réponses:

2

Comparez-le avec le logiciel de quelqu'un d'autre. Exécutez un test standardisé et découvrez si vous obtenez à peu près la même réponse que les autres. Si vous obtenez la même réponse, la probabilité d'avoir votre bon code est assez élevée.

Quelques tests:

  1. Débordez le cylindre. En 2d, prenez le domaine rectangulaire, cylindre au milieu, afflux à gauche, sortie sur le combat et calculez la force sur le cylindre. Voici une référence comparant une poignée de codes.

  2. Débit de flottabilité. Boîte fermée, plaque chauffante en bas, plaque froide en haut, le fluide chaud commence à monter en raison de la force de flottabilité. Voici la référence .

  3. Bulle montante, référence .

Mais malheureusement, il pourrait être assez difficile de comparer votre code aux codes scientifiques dans ces benchmarks. Je suppose que vous avez implémenté quelque chose comme SPH ou fluides stables qui ne sont pas faits pour la précision mais pour la stabilité.

Prenons par exemple le flux devant un cylindre. Je commencerais le test avec un très petit nombre de Reynolds, puis mesurerais la force sur le cylindre à mesure que vous augmentez la précision de votre simulation (pas de temps inférieur, augmentation de la subdivision ou augmentation du nombre de particules). La force converge-t-elle vers un certain nombre? Si non, vous avez un problème, si oui, jetez un œil au document de référence et comparez vos résultats avec ceux des autres.


Cette méthode est une technique très similaire à celle que j'utilise pour tester mon raytracer. Je rend juste la scène de test avec le rendu de quelqu'un d'autre et je la compare avec mon résultat. Convergent-ils vers le même résultat? Si oui, j'ai raison, sinon, je me trompe.

à M
la source
Au lieu d'un logiciel pour tester contre Yest contre des mesures connues du monde réel et des points de repère de dynamique des fluides. Sinon, votre erreur est entachée. J'ai vu la même question postée ailleurs sur le réseau stackexhange btw
joojaa
1
Je pense que les tests par rapport aux mesures du monde réel sont bons pour les tests si vous avez la bonne physique. Si vous voulez seulement déboguer votre programme, mieux vaut tester contre du code d'autres. De plus, dans la simulation informatique, vous pouvez mesurer n'importe quoi sans affecter l'expérience. Par exemple, mesurer la vitesse d'un fluide à n'importe quel point est tout simplement impossible dans une expérience du monde réel, mais trivial dans la simulation informatique.
tom
Oui mais vous héritez également des problèmes de leurs solveurs. J'admets que j'ai fait cela plusieurs fois en développant un simulateur à corps multiples et en vérifiant les résultats du formulaire MSC Adams, mais avec le recul, cela n'était pas vraiment utile
joojaa
Comparer avec l'expérience du monde réel était mieux? J'en doute, mais je me trompe peut-être. La situation avec la physique à corps multiples est très différente de la physique des fluides. Même quelque chose d'aussi simple que le billard a un comportement chaotique. De plus la dynamique du corps rigide avec les contacts n'est même pas bien posé problème mathématique, connaissez-vous le paradoxe de Painlevé? La simulation numérique de la physique à corps multiples est donc vouée à l'échec en général. Quelques références: plus.maths.org/content/chaos-billiard-table en.wikipedia.org/wiki/Painlev%C3%A9_paradox
tom
1
Oui, je sais comment fonctionne la dynamique multi-corps, je l'enseigne (et l'ai brièvement recherchée pendant un an ou deux). Mais aucune vérification par rapport aux solutions analytiques connues n'a été plus facile. Mais un véritable fluide est tout aussi chaotique qu'une dynamique multi-corps. Il faut donc être en mesure de vérifier les situations d'écoulement laminaire, etc.
joojaa