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


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

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

Ці множини рівнянь мають матричну форму , де,Aun+1=Mun

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

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
  • dx = 0,2
  • dt = 0,005
  • σ = 2 (гауссова hwhm)
  • β = 0,5

Оновлення II

Моделювання з ненульовим коефіцієнтом дифузії, (див. Коментарі нижче), коливання минає, але хвиля вже не відбивається! Я не розумію, чому?D=1

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


що ти взяв за ? v
chris

v=2 у цих симуляціях. Я оновлю з налаштуванням моделювання. Гарна ідея.
boyfarrell

Тоді я б очікував, що початкова умова буде усунена праворуч і зникне через праву межу. Все, що спадає на думку, полягає в тому, що центральна схема може створювати помилкові коливання, якщо їх не застосовувати до рівняння адвекційно-дифузійної форми з номером комірки Пеклета нижче 2. Можливо, спробувати схему вітру?
chris

Як ви думаєте, може бути помилка знаку з рівнянням. Власне, моя кінцева мета - застосувати це за допомогою рівняння адвекції-дифузії. Зараз я тестую різні обмежуючі випадки. У наведеному вище прикладі коефіцієнт дифузії був встановлений на нуль. Я включив нову анімацію вище. Я не розумію, чому пік не відображається, коли коефіцієнт дифузії ненульовий? Це робиться саме так, як ви згадали (крім напряму).
boyfarrell

Я думав про , тому знак нормально. Другий сюжет мені виглядає нормально. Чому ви очікували, що щось відобразить? Це може статися лише в тому випадку, коли змінить знак якось. Спробуйте зі схемою висвітлення для адвекції замість центральної схеми, тоді ви повинні побачити щось подібне для . tu+vxu=0vD=0
chris

Відповіді:


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, і схема є схемою Crank-Nicholson, як зазначено в питанні тут.

Я все ще бореться зі схемою шуму після того, як хвиля потрапляє на перший (правий) кордон.


1
Я не міг бачити анімацію на своєму мобільному телефоні, але я вважаю, що ваша схема шуму викликана відсутністю числової точності. Поглинання працює лише тому, що ви нав’язуєте точне рішення на межі. Згідно з цим точним рішенням, числовий розчин, що надходить на праву межу, трохи відрізняється за частотою та фазою. Це знову призводить до роздумів і, отже, втручання.
davidhigh

@davidhigh: Дякую за вашу інформацію. Я це перевірю. Мені шкода, що анімація не працює у вашому телефоні. Не працює і в моєму телефоні (Samsung). Це може бути якесь програмне забезпечення, яке відсутнє в телефонах. Він повинен працювати в комп’ютері. Знову дякую.
Герман Джарамілло

Ласкаво просимо. Сама анімація не так важлива, я просто хотів побачити, наскільки великі помилки. Btw, накладаючи точне рішення на межу, ви уникаєте "невмілості" задумом. Тобто у вас ще є два рівняння для одного значення на межі, але використовуючи точний результат, ви змушуєте їх бути послідовними. Але це працює лише приблизно, оскільки числовий результат не зовсім точний.
davidhigh

І ще один коментар: загальне аналітичне рішення хвильового рівняння - це суперпозиція імпульсу, що рухається ліворуч та одного, що рухається праворуч. У вашому випадку ви враховуєте лише імпульс, що рухається правою стороною, тому ви вже застосували початкові умови - на відміну від того, що ви заявляєте в тексті.
Давидхіг

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