Как вы отлаживаете числовой код, что может быть источником этой колебательной ошибки?

16

Можно получить много понимания из опыта, мне просто интересно, видел ли кто-нибудь что-то подобное раньше. График показывает начальное условие (зеленый) для уравнения адвекции-диффузии, затем решение на итерации 200 (синий) и затем снова на итерации 400 (красный).

Колебательная ошибка

Решение уравнения адвекции-диффузии взрывается после нескольких итераций. Число Пекле , а условие КЛЛ выполнено, , поэтому уравнения должны быть устойчивыми. Я ожидаю, что у меня есть ошибка в числовом коде.μ0,07С0,0015

Фон. Дискретизация является центральной разницей как для адвекции, так и для диффузии. Я считаю, что это первый порядок адвекции и второй порядок диффузии. Я реализовал это, используя метод конечных объемов (впервые), в котором значения коэффициентов (скорости и коэффициента диффузии) на гранях ячейки находят путем линейной интерполяции от средних значений ячейки. Я применяю граничное условие Робина на левой и правой поверхностях и устанавливаю поток на границах на ноль.

Как вы отлаживаете свой числовой код? Кто-нибудь делал подобные сцены раньше, где было бы хорошее место, чтобы начать искать?

Обновить

Обновить

Решение не может быть более простым! Я только что сделал ошибку в знаке диффузии. Странно, я уверен, что я не опубликовал это, я не нашел бы ошибку! Если кто-то хочет поделиться советами о том, как они отлаживают свой числовой код, я все еще заинтересован. У меня нет метода, он немного ударил, я продолжаю пробовать что-то, чтобы получить подсказки, но этот процесс может занять несколько недель (иногда).

Доказательство он работает ( NB , что с помощью метода конечных объемов все , что вам нужно сделать , чтобы вычислить площадь является суммированием ширины высота для всех ячеек, если вы используете метод интеграции , такие как numpy.trapz ваших результаты включают числовое ошибка метода трапеции). Что здесь происходит? Существует постоянная скорость и коэффициенты диффузии, но с замкнутыми граничными условиями. Поэтому на границе мы видим равновесие между полем скоростей, толкающим вправо, и диффузионным толчком влево.×

Уравнение адвекции-диффузии с замкнутыми граничными условиями методом конечных объемов.

boyfarrell
источник
2
Какую дискретизацию вы используете? Какой способ заказа? Каковы ваши граничные условия?
Джефф Оксберри
Спасибо @GeoffOxberry, я обновился с более подробной информацией. Хотя, чтобы действительно понять, что я сделал, вы можете прочитать заметки из моей лабораторной книги по ссылке выше на github.
boyfarrell
2
θзнак равно0,0,5,1
1
aзнак равно0d<0

Ответы:

9

Я собрал свой опыт отладки числовых кодов здесь: deal.II FAQ: отладка . Я не знаю, помогло бы это вам в данном конкретном случае, но может и в других.

Вольфганг Бангерт
источник
Привет, эта ссылка разорвалась, когда проект был перенесен - сейчас это правильно? github.com/dealii/dealii/wiki/…
гиперпаллиум
Да, это правильно. Спасибо за обновление в вашем комментарии!
Вольфганг Бангерт