Я реалізував багаторешітку V-Cycle, використовуючи як лінійну корекцію дефектів (LDC), так і повну схему наближення (FAS).
Моя проблема полягає в наступному: Використання LDC залишків зменшується на коефіцієнт ~ 0,03 за цикл. Реалізація FAS теж збігається з лінійним коефіцієнтом, але коефіцієнт становить лише ~ 0,58. Таким чином, FAS потребує приблизно 20 разів більше циклів.
Більшість кодів є загальним, різницею є лише розрахунки вниз / вгору, які використовує LDC
вниз:
вгору:
і FAS використовує
вниз:
вгору:
Мій тестовий параметр - з "Мультирешітного підручника, друге видання" Брігга, стор. 64, має аналітичне рішення
з
і рівняння з використанням типової лінійної 5-точковий трафарет в якості оператора Лапласа- . Початкова здогадка .
Зміна налаштувань тесту, наприклад, на тривіальне використовуючи початкові здогадки призводить до майже однакових коефіцієнтів конвергенції.
Оскільки відрізняється лише код вниз / вгору, результати LDC відповідають книзі, і FAS, принаймні, здається, теж працює, я не маю ідеї, чому це так повільніше в тих же лінійних налаштуваннях.
І в LDC, і в FAS є одна дивна поведінка, яку я не можу пояснити, але це відбувається лише в тому випадку, якщо початкова здогадка погана (наприклад, але також у моїх повних мультисередовищних експериментах, коли інтерполяція до нової тонкої сітки збільшує залишкову з до ): Якщо я збільшую кількість релаксацій після корекції до дуже високого числа, таким чином, що рішення вирішується на машинній точності на грубій сітці, воно втрачає майже всі цифри, коли йдеш на один крок вгору до наступної тонкої сітки.
Оскільки картинка говорить більше, ніж слова:
// 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 релаксацій?