FAS-multigrid медленнее, чем линейная коррекция дефектов?

9

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

Моя проблема заключается в следующем: при использовании LDC остаток уменьшается в ~ 0,03 раза за цикл. Реализация FAS тоже сходится с линейным коэффициентом, но коэффициент составляет всего ~ 0,58. Таким образом, ФАС нужно примерно в 20 раз больше количества циклов.

Большая часть кода используется совместно, единственное отличие - вычисления вниз / вверх, используемые НРС

вниз: uH:=0,bH:=IhH(bhLhuh)

до: uh:=uh+IHhuH

и ФАС использует

вниз:uH:=IhHuh,bH:=IhHbh+LHIhHuhIhHLhuh

вверх:uh:=uh+IHh(uHIhHuh)

Мои тестовые настройки взяты из "Учебника по многосеточным сеткам, второе издание" Бригга, стр. 64, имеет аналитическое решение

u(x,y)=(x2x4)(y4y2) сx,y[0,1]2

и уравнение с использованием типичной линейной 5-точечный трафарет в качестве оператора Лапласа- . Первоначальное предположение .Lv=Δu=:bLv=0

Изменение настройки теста, например, на тривиальное с использованием первоначального предположения приводит к почти одинаковым коэффициентам сходимости.u(x,y)=0v=1

Так как отличается только код «вниз / вверх», результаты НРС соответствуют книге, и, по крайней мере, FAS, похоже, тоже работает, я понятия не имею, почему он намного медленнее при той же линейной настройке.

В LDC и FAS есть одно странное поведение, которое я пока не могу объяснить, это происходит только в том случае, если первоначальное предположение неверно (например, но также и в моих полносеточных экспериментах, где интерполяция в новую точную сетку увеличивает остаток от до ): если я увеличу число посткорреспондентских релаксаций до очень большого числа, так что решение будет решено с точностью станка на грубой сетке, оно потеряет почти все цифры при переходе на один шаг вверх к следующей мелкой сетке.=01015101

Поскольку картинка говорит больше, чем слова:

// 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 релаксаций?

Silpion
источник

Ответы:

7

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

  • Вы применяете схему линейной коррекции к линейной задаче, поэтому не удивительно, что она работает очень хорошо.

  • Рассмотрите ваши граничные условия: убедитесь, что вы делаете их правильно, а также обратите внимание, что сложные BC могут выглядеть совершенно по-другому на грубой сетке, делая исправления там не столь полезными.

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

  • Я никогда не видел необходимости повторять сходимость на самой грубой сетке. Решение в этом случае зависит от того, является ли точный остаток сетки правильным, а это не так. Вы пытаетесь вытолкнуть эти ошибки из домена / сгладить их. Если вы полностью сошлись на самой грубой сетке на ранней итерации, ваше решение, естественно, довольно далеко от правильного решения с точной сеткой, потому что ваши остатки там не актуальны. Это почти наверняка причина того, почему вы видите, что остатки подпрыгивают на стадии пролонгации.

  • Кроме того, попробуйте фактор релаксации для операторов ограничения и продолжения, скажем, 0,75.

Если это помогает, то именно так выглядела моя остаточная история FAS для проблемы Пуассона, использующей одиночную сетку через полные 7В циклы. Я полагаю, что коэффициент релаксации составлял 0,75, и я использовал трехступенчатую схему РК в качестве сглаживателя с одной итерацией на каждом уровне сетки.

Res History

Аврелий
источник
Спасибо за ваш ответ, линейный регистр и простой BC (квадратная граница = 0) - это только первый шаг, тестирование реальных случаев будет выполнено после выполнения «простых» настроек. Я не уверен, понимаю ли я, что вы имеете в виду под фактором расслабления для ограничения и пролонгации. В настоящее время я использую билинейную интерполяцию для продолжения и половину взвешивания для ограничения.
Сильпион
Под релаксацией я подразумеваю для вашей стадии продления: uh:=uh+αIHh(uHIhHuh) где 0<α<1является фактором релаксации. Как правило, чем сложнее решение, тем ниже должен быть этот фактор. В решениях с большим количеством разрывов мне иногда приходится опускать это значение до 0,6, но обычно 0,75-0,85 работает.
Аврелий
Хорошо знать. В моем случае это только замедляет коэффициент сходимости на(1α)но я буду помнить об этом при тестировании более сложных данных.
Сильпион
@ Аврелий, ты упоминаешь, что сходиться на грубой сетке не нужно. Я согласен с вашим рассуждением, но доказательства сходимости в литературе (для линейного случая) действительно предполагают, что грубая решетка решает точно. Мне не известны какие-либо ссылки (для линейного или нелинейного случая), в которых указано, что грубая решетка не должна быть точной, и я хотел бы знать, не могли бы вы привести ссылку на это? Мне было бы очень интересно увидеть это самому
Керан Брабазон
@KeeranBrabazon У меня также нет ссылки на это, и я, честно говоря, не очень хорошо знаком с деталями доказательств сходимости для многосеточных. Я бы посоветовал поискать любую раннюю литературу, которая вводит этот фактор релаксации. Этот фактор является общим для всех современных многосеточных реализаций, которые я видел, и интуитивно верно, что он не понадобился бы, если бы точные решения курса были необходимы / желательны. Для наглядного доказательства я просто представляю, как выглядят граничные условия для самой грубой сетки против самой лучшей. Легко представить, что они создают совершенно разные решения.
Аврелий
6

Если вы используете вершинно-центрированную дискретизацию, тогда ограничение состояния должно быть инъекцией, а не полностью взвешенным остаточным ограничением, которое, по вашему мнению, вы используете. То есть заменитьIhH с I^hHпри ограничении состояния. Использование полноценного ограничения для состояния приводит к наложению высокочастотных составляющих состояния, которые после примененияuhuh(uHIhHuh)приводит к появлению нового шума в том же масштабе, что и до грубой коррекции (граничные условия особенно вероятны для этого эффекта). Используйте инъекцию,I^hHuhи эта проблема должна уйти.

Спектрально, для ограничения состояния требуется только высокий вторичный порядок (точное сохранение низких частот), но первичный порядок (наложение высоких частот) не имеет значения. Инъекция имеет первичный порядок 0 и бесконечный вторичный порядок. Между тем остаточное ограничение должно быть как первичным, так и вторичным, чтобы быть положительным (по крайней мере). Смотрите раздел 4.3 многосеточного руководства Ачи Брандта .

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

Джед браун
источник
Хорошие моменты, и я не упомянул что-то подобное. Одним из важных аспектов практического использования мультисети является выбор более гладкого: вам нужен тот, который максимально быстро гасит высокочастотные ошибки, что решает проблему, которую вы описываете.
Аврелий
@Aurelius Из предоставленного журнала видно, что проблема не в сглаживании. Напомним, что Silpion использует тот же сглаживатель, что и для MG исправления дефектов, который сходится правильно.
Джед Браун
Спасибо за ссылку на Руководство по многосетке Брандта, я прочитаю ее полностью после завершения учебника по многосетке Бригга. Я решил проблему сейчас (см. Другой ответ), но в настоящее время я использую полное взвешивание как для состояния, так и для остаточного ограничения. Использование инъекций, кажется, не работает в моих настройках, остаточные отношения меняются на>0.8и как остаточные, так и ошибочные L2-нормы перестают уменьшаться очень скоро. У вас есть идеи, почему инъекция не помогает?
Сильпион
1

Я решил проблему сейчас. Я хранилuoldH=IhHuh при спуске во время V-цикла и использовать его позже в

uhuh+IHh(uHIhHuh)=uh+IHh(uHuoldH),

Проблема была, прежде чем снова спуститься с H в 2H, uoldHбыл расслаблен на месте . Хранение копии до шагов релаксации помогло. посколькуuoldH требовался только в ФАС, он не обнаруживался в линейных расчетах.

Silpion
источник