Я пытаюсь решить уравнение адвекции, но странное колебание появляется в решении, когда волна отражается от границ. Если кто-то видел этот артефакт раньше, мне было бы интересно узнать причину и как ее избежать!
Это анимированный GIF-файл, открываемый в отдельном окне для просмотра анимации (он будет воспроизводиться только один раз или не сразу после того, как был кэширован!)
Обратите внимание, что распространение кажется очень устойчивым, пока волна не начнет отражаться от первой границы. Как вы думаете, что здесь может происходить? Я провел несколько дней, дважды проверяя мой код, и не могу найти никаких ошибок. Это странно, потому что кажется, что есть два распространяющихся решения: одно положительное и одно отрицательное; после отражения от первой границы. Решения, кажется, путешествуют вдоль соседних точек сетки.
Детали реализации приведены ниже.
Уравнение адвекции,
где - скорость распространения.
Crank-Nicolson - это безусловная (pdf ссылка) стабильная дискретизация для уравнения адвекции, при условии, что медленно изменяется в пространстве (содержит только низкочастотные компоненты при преобразовании Фурье).
Дискретность, которую я применил,
Помещение неизвестных в правую часть позволяет записать это в линейной форме,
где (чтобы взять среднее по времени, равномерно взвешенное между настоящей и будущей точкой) и .г = v Δ т
Эти системы уравнений имеют вид матрицы , где,
Векторы и являются известными и неизвестными для величины, для которой мы хотим найти.
Затем я применяю замкнутые граничные условия Неймана на левой и правой границах. Под замкнутыми границами я подразумеваю на обоих интерфейсах. Для закрытых границ получается, что (я не буду здесь показывать свою работу) нам просто нужно решить вышеприведенное матричное уравнение. Как указывает @DavidKetcheson, вышеприведенные матричные уравнения фактически описывают граничные условия Дирихле . Для граничных условий Неймана
Обновить
Поведение кажется довольно независимым от выбора констант, которые я использую, но это значения для графика, который вы видите выше:
- = 2
- дх = 0,2
- дт = 0,005
- = 2 (гауссовский ччм)
- = 0,5
Обновление II
Симуляция с ненулевым коэффициентом диффузии, (см. Комментарии ниже), колебание исчезает, но волна больше не отражает !? Я не понимаю почему?