Странные колебания при решении уравнения переноса методом конечных разностей с полностью замкнутыми граничными условиями Неймана (отражение на границах)


33

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

Это анимированный GIF-файл, открываемый в отдельном окне для просмотра анимации (он будет воспроизводиться только один раз или не сразу после того, как был кэширован!) Распространение гауссовского импульса

Обратите внимание, что распространение кажется очень устойчивым, пока волна не начнет отражаться от первой границы. Как вы думаете, что здесь может происходить? Я провел несколько дней, дважды проверяя мой код, и не могу найти никаких ошибок. Это странно, потому что кажется, что есть два распространяющихся решения: одно положительное и одно отрицательное; после отражения от первой границы. Решения, кажется, путешествуют вдоль соседних точек сетки.

Детали реализации приведены ниже.

Уравнение адвекции,

ut=vux

где - скорость распространения.v

Crank-Nicolson - это безусловная (pdf ссылка) стабильная дискретизация для уравнения адвекции, при условии, что медленно изменяется в пространстве (содержит только низкочастотные компоненты при преобразовании Фурье).u(x)

Дискретность, которую я применил,

ϕjn+1ϕjnΔt=v[1β2Δx(ϕj+1nϕj1n)+β2Δx(ϕj+1n+1ϕj1n+1)]

Помещение неизвестных в правую часть позволяет записать это в линейной форме,

βrϕj1n+1+ϕjn+1βrϕj+1n+1=(1β)rϕj1n+ϕjn+(1β)rϕj+1n

где (чтобы взять среднее по времени, равномерно взвешенное между настоящей и будущей точкой) и .г = v Δ тβ=0.5r=vΔt2Δx

Эти системы уравнений имеют вид матрицы , где,Aun+1=Mun

Aзнак равно(1-βр0βр1-βрβр1-βр0βр1)

M=(1(1β)r0(1β)r1(1β)r(1β)r1(1β)r0(1β)r1)

Векторы и являются известными и неизвестными для величины, для которой мы хотим найти.unun+1

Затем я применяю замкнутые граничные условия Неймана на левой и правой границах. Под замкнутыми границами я подразумеваю на обоих интерфейсах. Для закрытых границ получается, что (я не буду здесь показывать свою работу) нам просто нужно решить вышеприведенное матричное уравнение. Как указывает @DavidKetcheson, вышеприведенные матричные уравнения фактически описывают граничные условия Дирихле . Для граничных условий Нейманаux=0

A=(100βr1βrβr1βr001)

Обновить

Поведение кажется довольно независимым от выбора констант, которые я использую, но это значения для графика, который вы видите выше:

  • v = 2
  • дх = 0,2
  • дт = 0,005
  • σ = 2 (гауссовский ччм)
  • β = 0,5

Обновление II

Симуляция с ненулевым коэффициентом диффузии, (см. Комментарии ниже), колебание исчезает, но волна больше не отражает !? Я не понимаю почему?D=1

Диффузия и адвекция


что ты взял за ? v
Крис

v=2 в этих симуляциях. Я буду обновлять с настройкой симуляции. Отличная идея.
boyfarrell

Тогда я ожидал бы, что начальное условие будет перенесено вправо и исчезнет через правую границу. Все, что приходит на ум, - это то, что центральная схема может давать паразитные колебания, если только она не применяется к уравнению адвекции-диффузии с числом Пекле ячейки ниже 2. Возможно, попробуйте схему против ветра?
Крис

Как вы думаете, может быть ошибка знака с уравнением. На самом деле, моя конечная цель - применить это к уравнению адвекции-диффузии. В настоящее время я тестирую различные предельные случаи. В приведенном выше примере коэффициент диффузии был установлен на ноль. Я включил новую анимацию выше. Я не понимаю, почему пик не отражается, когда коэффициент диффузии не равен нулю? Это именно так, как вы упомянули (кроме направления).
boyfarrell

tu+vxu=0vD=0

Ответы:


28

Уравнение, которое вы решаете, не допускает правильных решений, поэтому для этого уравнения не существует такого понятия, как отражающее граничное условие . Если вы рассмотрите характеристики, вы поймете, что вы можете наложить только граничное условие на правой границе. Вы пытаетесь наложить однородное граничное условие Дирихле на левую границу, которое математически неверно.

xνt=CC

В отличие от уравнения, ваша численная схема имеет признать правой идущие решения. Правильные моды упоминаются как паразитные моды и включают в себя очень высокие частоты. Обратите внимание, что правая волна - это пилообразный волновой пакет, связанный с самыми высокими частотами, которые могут быть представлены в вашей сетке. Эта волна - просто числовой артефакт, созданный вашей дискретизацией.

Подчеркнем: вы не записали полную начально-краевую задачу, которую пытаетесь решить. Если вы это сделаете, будет ясно, что это не математически корректная задача.

Я рад, что вы разместили это здесь, поскольку это прекрасная иллюстрация того, что может произойти, когда вы дискретизируете проблему, которая не является корректной, и явления паразитических форм. Большой +1 за ваш вопрос от меня.


спасибо за обсуждение и исправления. Я не оценил, что матрица не будет иметь те же свойства, что и дифференциальное уравнение. Больше комментариев, чтобы следовать ...
boyfarrell

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

@David Ketcheson: я столкнулся с той же проблемой и опубликовал свою проблему по следующей ссылке scicomp.stackexchange.com/questions/30329/… Не могли бы вы объяснить, почему вы говорите, что проблема не является "математически корректной" ? Спасибо.
Герман Харамильо

@HermanJaramillo Вы пытаетесь наложить значение решения на левую границу, где оно уже определено PDE. Любой учебник, который включает обсуждение адвекции, также будет указывать, каковы действительные граничные условия и почему. Я добавил второй абзац с дополнительными пояснениями; надеюсь, это поможет.
Дэвид Кетчесон

1
@HermanJaramillo: не «математически корректно» в основном означает, что у вас есть два уравнения для одного значения функции на границе, граничного условия, а также самого PDE. В общем, эти два уравнения противоречат друг другу. В более общем смысле, это можно рассматривать как проблему оптимизации, в которой обе цели должны быть выполнены как можно лучше.
Дэвид Хай

0

Я многому научился из ответов выше. Я хочу включить этот ответ, потому что я полагаю, что он предлагает различное понимание проблемы.

uxx+1cutt=0.
c

u(x,t)=f(xct)

u(x,t0)=p(x)x(,)p[xc(tt0)]

x[a,b]ab

t0

u(a,t0)=0,u(b,t0)=p[bc(tt0)].

Это производит импульс, бегущий направо, пока это не исчезает на правом краю.

нажмите здесь для анимации на Дирихле на левой границе

Я до сих пор слышу шум, который не могу понять (кто-нибудь может помочь, пожалуйста?)

Другим вариантом является наложение периодических граничных условий. То есть вместо наложения граничного условия Дирихле слева мы можем наложить волновой пакет, который согласуется с границей слева. То есть:

u(a,t0)=p[ac(tt0)],u(b,t0)=p[bc(tt0)].

ac(tt0)<at>t0c>0[a,b]baac(tt0)+ba=a+b(tt0)u(a,t0)=p[bc(tt0]

Эта ссылка показывает то, что я бы назвал периодическими граничными условиями.

Я сделал анимацию в python, и схема - это схема Кранка-Николсона, как указано в вопросе здесь.

Я все еще борюсь с шумовой картиной после того, как волна достигнет первой (правой) границы.


1
Я не мог видеть анимацию в своем мобильном телефоне, но я считаю, что ваш шум вызван отсутствием точности чисел. Поглощение работает только потому, что вы накладываете точное решение на границу. В этом точном решении численное решение, достигающее правой границы, немного отличается по частоте и фазе. Это снова приводит к размышлениям и, следовательно, к помехам.
Дэвид Хай

@Davidhigh: Спасибо за вашу информацию. Я проверю это. Извините, анимация не работает в вашем телефоне. Это не работает в моем телефоне (Samsung) либо. Это может быть какое-то недостающее программное обеспечение в телефонах. Это должно работать на компьютере. Еще раз спасибо.
Герман Харамильо

Пожалуйста. Сама анимация не так важна, я просто хотел посмотреть, насколько велики ошибки. Кстати, навязывая точное решение на границе, вы избегаете «неправильности» по замыслу. То есть у вас все еще есть два уравнения для одного значения на границе, но, используя точный результат, вы заставляете их быть согласованными. Но это работает только приблизительно, так как численный результат не совсем точен.
Дэвид Хай

И еще один комментарий: общее аналитическое решение волнового уравнения - это суперпозиция импульса, движущегося влево и одного, движущегося вправо. В вашем случае вы учитываете только движущийся вправо импульс, поэтому вы уже применили начальные условия - в отличие от того, что вы указали в тексте.
Дэвид Хай

@ davidhigh: Я немного подумал о твоем понимании шума после того, как пульс достигнет границы. Я полагаю, что вы правы, и есть разница между точным аналитическим решением и числовым распространяемым импульсом. На границе эта небольшая разница создает небольшую картину шума, видимую там. Система адвекции CN, показанная в этом обсуждении, является дисперсионной, и я полагаю, что хотя дисперсия не замечена до того, как импульс достигнет границы, она может вызвать только небольшое возмущение (различие между аналитическим и численным решениями) на границе. Еще раз спасибо.
Герман Харамильо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.