Comment déboguez-vous le code numérique, quelle pourrait être la source de cette erreur oscillatoire?

16

Beaucoup de connaissances peuvent être acquises grâce à l'expérience, je me demandais simplement si quelqu'un avait déjà vu quelque chose de similaire. Le tracé montre la condition initiale (vert) pour l'équation d'advection-diffusion, puis la solution à l'itération 200 (bleu) et à nouveau à l'itération 400 (rouge).

Erreur oscillatoire

La solution de l'équation d'advection-diffusion explose après quelques itérations. Le nombre de Péclet , et la condition CFL est satisfaite, C 0,0015 , donc les équations doivent être stables. Je prévois avoir un bug dans le code numérique.μ0,07C0,0015

Contexte. La discrétisation est la différence centrale pour les termes d'advection et de diffusion. Je crois que c'est le premier ordre d'advection et le second ordre de diffusion. J'ai mis cela en œuvre en utilisant une approche à volume fini (pour la première fois) dans laquelle les valeurs des coefficients (vitesse et coefficient de diffusion) aux faces des cellules sont trouvées par interpolation linéaire à partir des moyennes des cellules. J'applique la condition aux limites de Robin sur les surfaces gauche et droite et je mets le flux aux limites à zéro.

Comment déboguez-vous votre code numérique? Quelqu'un a-t-il déjà tourné quelque chose comme ça avant, où serait un bon endroit pour commencer à chercher?

Mise à jour

Mise à jour

La solution ne pourrait pas être plus simple! Je viens de faire une erreur de signe sur le terme de diffusion. C'est étrange, je suis sûr que je n'avais pas posté ça je n'aurais pas trouvé l'erreur! Si quelqu'un veut partager des conseils sur la façon de déboguer son code numérique, je suis toujours intéressé. Je n'ai pas de méthode, c'est un peu hasardeux, je continue d'essayer des trucs pour obtenir des indices, mais ce processus peut prendre des semaines (parfois).

×

Équation d'advection-diffusion avec conditions aux limites fermées via la méthode des volumes finis.

boyfarrell
la source
2
Quelle sorte de discrétisation utilisez-vous? Quelle méthode de commande? Quelles sont vos conditions aux limites?
Geoff Oxberry
Merci @GeoffOxberry, j'ai mis à jour avec plus de détails. Bien que pour vraiment comprendre ce que j'ai fait, vous pouvez lire mes notes de livre de laboratoire sur le lien github ci-dessus.
boyfarrell
2
θ=0,0,5,1
1
une=0<0

Réponses:

9

J'ai rassemblé une partie de mon expérience sur le débogage de codes numériques ici: deal.II FAQ: débogage . Je ne sais pas si cela vous aurait aidé dans ce cas particulier, mais cela pourrait l'être dans d'autres.

Wolfgang Bangerth
la source
Salut, ce lien s'est rompu lorsque le projet a déménagé - est-ce le bon maintenant? github.com/dealii/dealii/wiki/…
hyperpallium
Oui, c'est la bonne. Merci de l'avoir mis à jour dans votre commentaire!
Wolfgang Bangerth,