Я намагаюся вирішити рівняння адвекції, але у рішенні виникають дивні коливання, коли хвиля відбивається від меж. Якщо хтось бачив цей артефакт раніше, мені було б цікаво дізнатися причину та як її уникнути!
Це анімований gif, відкритий у окремому вікні для перегляду анімації (він буде грати лише один раз чи не відразу, коли він був кешований!)
Зауважте, що розповсюдження здається дуже стабільним, поки хвиля не почне відбиватися від першої межі. Як ви думаєте, що може статися тут? Я провів кілька днів, перевіряючи свій код, і не можу знайти жодних помилок. Це дивно, оскільки, здається, є два пропагуючих рішення: одне позитивне та одне негативне; після відображення від першої межі. Здається, рішення подорожують по сусідніх точках сітки.
Деталі щодо впровадження наступні.
Рівняння адвекції,
де - швидкість поширення.
Crank-Nicolson - це безумовна (pdf-посилання) стабільна дискретизація рівняння адвекції, якщо повільно змінюється в просторі (містить лише компоненти низької частоти при перетворенні Фур'є).
Я застосував дискретизацію,
Поставлення невідомих праворуч дозволяє записати це у лінійній формі,
де (прийняти середній час рівномірно зваженого між теперішньою та майбутнім точкою) і .
Ці множини рівнянь мають матричну форму , де,
Вектори і - це відома і невідома кількість, яку ми хочемо вирішити.
Потім я застосовую закриті граничні умови Неймана на лівій і правій межі. Під закритими межами я маю на увазі на обох інтерфейсах. Для замкнутих меж виявляється, що (я не буду показувати свою роботу тут) нам просто потрібно вирішити вищевказане матричне рівняння. Як вказував @DavidKetcheson, наведені вище матричні рівняння фактично описують граничні умови Діріхле . Для граничних умов Неймана
Оновлення
Поведінка здається досить незалежною від вибору констант, які я використовую, але це значення для графіку, який ви бачите вище:
- = 2
- dx = 0,2
- dt = 0,005
- = 2 (гауссова hwhm)
- = 0,5
Оновлення II
Моделювання з ненульовим коефіцієнтом дифузії, (див. Коментарі нижче), коливання минає, але хвиля вже не відбивається! Я не розумію, чому?