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