FAS-мультисетка повільніше, ніж лінійна корекція дефектів?


9

Я реалізував багаторешітку V-Cycle, використовуючи як лінійну корекцію дефектів (LDC), так і повну схему наближення (FAS).

Моя проблема полягає в наступному: Використання LDC залишків зменшується на коефіцієнт ~ 0,03 за цикл. Реалізація FAS теж збігається з лінійним коефіцієнтом, але коефіцієнт становить лише ~ 0,58. Таким чином, FAS потребує приблизно 20 разів більше циклів.

Більшість кодів є загальним, різницею є лише розрахунки вниз / вгору, які використовує LDC

вниз:уН: =0,бН: =ЯгодН(бгод-Lгодугод)

вгору:угод: =угод+ЯНгодуН

і FAS використовує

вниз:уН: =ЯгодНугод,бН: =ЯгодНбгод+LНЯгодНугод-ЯгодНLгодугод

вгору:угод: =угод+ЯНгод(уН-ЯгодНугод)

Мій тестовий параметр - з "Мультирешітного підручника, друге видання" Брігга, стор. 64, має аналітичне рішення

у(х,у)=(х2-х4)(у4-у2) зх,у[0,1]2

і рівняння з використанням типової лінійної 5-точковий трафарет в якості оператора Лапласа- . Початкова здогадка .Lv=Δу=:бLv=0

Зміна налаштувань тесту, наприклад, на тривіальне використовуючи початкові здогадки призводить до майже однакових коефіцієнтів конвергенції.у(х,у)=0v=1

Оскільки відрізняється лише код вниз / вгору, результати LDC відповідають книзі, і FAS, принаймні, здається, теж працює, я не маю ідеї, чому це так повільніше в тих же лінійних налаштуваннях.

І в LDC, і в FAS є одна дивна поведінка, яку я не можу пояснити, але це відбувається лише в тому випадку, якщо початкова здогадка погана (наприклад, але також у моїх повних мультисередовищних експериментах, коли інтерполяція до нової тонкої сітки збільшує залишкову з до ): Якщо я збільшую кількість релаксацій після корекції до дуже високого числа, таким чином, що рішення вирішується на машинній точності на грубій сітці, воно втрачає майже всі цифри, коли йдеш на один крок вгору до наступної тонкої сітки.=010-1510-1

Оскільки картинка говорить більше, ніж слова:

// first cycle, levels 0-4
// DOWN
VCycle top 4, start               res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)

Я не впевнений, чи може бути лише кілька цифр, отриманих за цикл, або якщо це вказує на помилку під час інтерполяції до тонкої сітки. Якщо це останній випадок, як НРС може досягти залишкового коефіцієнта залишкового значення ~ 0,03 при використанні завжди 2 релаксацій?

Відповіді:


7

Я не знаю прямо вашої відповіді, оскільки я в основному використовую FAS замість виправлення, оскільки я роблю мультисетку для нелінійних проблем, але деякі думки ви можете вивчити:

  • Ви застосовуєте лінійну корекційну схему до лінійної задачі, тож не шокуюче, що це дуже добре.

  • Розгляньте свої граничні умови: переконайтеся, що ви робите їх правильно, а також зауважте, що складні БК можуть виглядати зовсім по-іншому на грубій сітці, і виправлення там не так корисні.

  • Двічі перевірте трактування вихідного терміна; Я пригадую, що викручували щось на стадії продовження, пов'язане з цим терміном, коли я писав це за пуассон.

  • Я ніколи не бачив необхідності повторювати конвергенцію на найбільш грубій сітці. Рішення там залежить від правильності залишків тонкої сітки, чого це не так. Ви намагаєтесь витіснити ці помилки з домену / згладити їх. Якщо ви повністю сходилися на найбільш грубій сітці на ранній ітерації, ваше рішення, природно, досить далеко від правильного рішення тонкої сітки, оскільки ваші залишки там не актуальні. Це майже напевно причина, чому ви бачите, як залишки стрибають на стадії продовження.

  • Також спробуйте коефіцієнт релаксації як для операторів обмеження, так і для продовження, скажімо, 0,75.

Якщо це допомагає, саме так виглядала моя залишкова історія FAS для проблеми з пуассоном за допомогою єдиної сітки через повний цикл 7В. Я вважаю, що коефіцієнт релаксації становив 0,75, і я використовував 3-ступінкову схему РК як плавнішу з єдиною ітерацією на кожному рівні сітки.

res історія


Дякуємо за вашу відповідь, лінійний регістр та простий BC (квадратна межа = 0) - це лише перший крок, тестування реальних випадків буде зроблено після роботи «легких» налаштувань. Я не впевнений, чи розумію, що ви маєте на увазі під фактором релаксації для обмеження та подовження. В даний час я використовую білінеарну інтерполяцію для подовження та половинну вагу для обмеження.
Сільпіон

Під релаксацією я маю на увазі, що для вашого етапу продовження можна змінити його на: угод: =угод+αЯНгод(уН-ЯгодНугод) де 0<α<1є фактором релаксації. Як правило, чим складніше рішення, тим нижчим буде цей фактор. У рішеннях з великою кількістю розривів мені іноді доводиться стискати це приблизно до 0,6, але, як правило, 0,75-0,85 працює.
Аврелій

Добре знати. У моїх налаштуваннях це лише уповільнює коефіцієнт конвергенції на(1-α)але я пам’ятаю це під час тестування більш складних даних.
Сільпіон

@Aurelius ви згадуєте, що конвергенція по грубій сітці не потрібна. Я згоден з вашими міркуваннями, але докази конвергенції в літературі (для лінійного випадку) припускають, що вирішення грубої сітки є точним. Мені невідома жодна посилання (для лінійного або нелінійного випадку), в якій зазначається, що вирішення грубої сітки не повинно бути точним, і мені було цікаво, чи можете ви навести посилання на це? Мені було б дуже цікаво побачити це сам
Кіран Брабазон

@KeeranBrabazon Я також не маю посилання на це, і я, чесно кажучи, не дуже добре знайомий з деталями доказів конвергенції для мультирешітки. Я б запропонував шукати будь-яку ранню літературу, яка вводить цей фактор релаксації. Цей фактор є загальним для всіх сучасних багатоядерних реалізацій, які я бачив, і це інтуїтивно вірно, що він не знадобиться, якщо точні рішення курсів були необхідні / бажані. Для інтуїтивного доказу я просто уявляю, як виглядають граничні умови для найгрубішої сітки порівняно з найкращими. Неважко уявити їх, створюючи дуже різні рішення.
Аврелій

6

Якщо ви використовуєте дискретизацію, орієнтовану на вершину, обмеження стану має бути ін'єкційним, а не повноцінним залишковим обмеженням, яке, як видається, використовується. Тобто замінитиЯгодН з Я^годНпри обмеженні держави. Використання повномасштабного обмеження для стану виробляє згладжування високочастотних компонентів стану, яке після застосуванняугодугод(уН-ЯгодНугод)призводить до появи нового шуму в тій же шкалі, що і до грубої корекції (граничні умови є особливо ймовірними винуватцями цього ефекту). Використовуйте ін'єкції,Я^годНугод, і ця проблема повинна піти.

Спеціально, державне обмеження потребує лише високого вторинного порядку (точне збереження низьких частот), але первинний порядок (згладжування високих частот) значення не має. Ін'єкція має первинний порядок 0 і нескінченний вторинний порядок. Тим часом, залишкове обмеження потребує як основного, так і вторинного порядку, щоб бути позитивним (принаймні). Дивіться розділ 4.3 Посібника з багаторешітки Ачі Брандта .

При розробці методів MG також добре дивитися на помилки, а не на залишки, і переконайтесь, що ви нормально зважили норму.


Хороші моменти, і я не зміг щось згадати. Одним з важливих аспектів практичного використання мультирешітки є вибір більш гладкого: ви хочете, щоб той, який послаблює помилки високої частоти, як можна швидше, який вирішує питання, яке ви описуєте.
Аврелій

@Aurelius З наданого журналу видно, що більш гладка не проблема. Нагадаємо, що Silpion використовує те саме плавніше, що і для корекції дефектів MG, яке належним чином сходиться.
Джед Браун

Дякуємо за посилання до Посібника з багатогранної мережі Брандта, я прочитав його ретельно, закінчивши навчальний посібник Брігга. Я вирішив проблему зараз (див. Іншу відповідь), але наразі використовую повне зважування як для стану, так і для залишкового обмеження. Використання ін'єкції, здається, не працює в моїх налаштуваннях, залишкові співвідношення змінюються на>0,8і залишкові, і норми помилки L2 перестають скорочуватися дуже скоро. Чи є у вас ідеї, чому ін'єкція не вдається?
Сільпіон

1

Я вирішив проблему зараз. Я зберігавуолгН=ЯгодНугод при зниженні протягом V-циклу та повторному використанні його згодом у

угодугод+ЯНгод(уН-ЯгодНугод)=угод+ЯНгод(уН-уолгН).

Проблема була перед тим, як знову зійти з Н до 2Н, уолгНрозслабився на місці . Збереження копії перед кроками розслаблення допомогло. З тих піруолгН потрібна була лише у FAS, вона не відображалася в лінійних обчисленнях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.