Których warunków wstępnych (i solvera) w PETSc dla nieokreślonych systemów symetrycznych należy użyć?

12

Mój system to symetryczny problem FE z mnożnikami lagrange (np. Nieściśliwy przepływ Stokesa):

(ABTBC)

gdzie jest typowym przypadkiem (upewniłem się nawet, że równania są ponumerowane, aby mnożniki Lagrange'a pojawiały się na końcu). System jest dość duży (+ 100 tys. Linii).C=0

Po przeczytaniu odpowiedzi na to pytanie miałem wrażenie, że istnieją odpowiednie warunki wstępne, które można zastosować w przypadku mieszanych problemów z FE.

Korzystając z PETSc, udało mi się rozwiązać system za pomocą MINRES ( -ksp_type minres -pc_type none -mat_type sbaij), chociaż precyzja nie jest duża (powoduje kilka iteracji Newtona dla problemu liniowego). Wydaje się, że nie działa żadna inna kombinacja warunków wstępnych i ksp-solver.

Czy jest jakaś kombinacja flag dla PETSc, która rozwiąże ten system szybciej niż za pomocą MINRES?

Mikael Öhman
źródło
1
Witamy w SciComp SE! Twoje pytanie jest dobrze postawione pod względem jasności i ogólności. Tylko jedno zdanie jest niejasne lub niekompletne: Co masz na myśli przez niedokładne obliczenia?
stycznia 13
1
Zapomniałem dokończyć zdanie! Mam nadzieję, że teraz jest jasne.
Mikael Öhman

Odpowiedzi:

13

Ostrzeżenie

Rozwiązywanie problemów związanych z siodłem wiąże się ze znacznie większym wyborem niż określone problemy, a jest o wiele więcej rzeczy, które mogą pójść nie tak. Użyj monitorów dla wszystkich poziomów do debugowania zbieżności, aby upewnić się, że spacje zerowe są obsługiwane poprawnie, gdy operatory pomocnicze są pojedyncze (zwykle tylko stała spacja pusta), oraz aby zapewnić stabilność warunków wstępnych. Te techniki są omówione w tym pytaniu .

Rozwiązywanie problemów z siodłem

Możesz zacząć od rozdziału dotyczącego rozwiązywania macierzy blokowych w Podręczniku użytkownika . W przypadku problemów podobnych do Stokesa można zbudować warunek wstępny dopełniacza Schur za pomocą PCFIELDSPLIT .

-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point

Można to połączyć z warunkiem wstępnym Leut Squares Commutator dla uzupełnienia Schur ( -fieldsplit_1_pc_type lsc). To jest wspólne -fieldsplit_1_ksp_type preonlyi niech zewnętrzna iteracja wykona większość pracy. Warianty bloku trójkątnego są popularne, gdy są używane w ten sposób, np -pc_fieldsplit_schur_fact_type upper.

Możesz znaleźć dalsze szczegóły na temat składu solvera, korzystając z opcji opcji w naszym artykule (preprint) , który omawia także dojazdy do wielu sieci z rozkładem bloków (umieszczenie podświetlonego pola wewnątrz wielosiatki).

W przypadku wielu problemów będziesz chciał dostosować rozkład pola i warunki wstępne uzupełniania Schur, z których wiele obejmuje operatorów pomocniczych. Na przykład metoda „dyfuzji konwekcyjno-ciśnieniowej” (PCD) Elmana i in. Wymaga dyskretyzacji operatora pomocniczego w przestrzeni ciśnieniowej. Zobacz przykłady PCSHELL i rozdział instrukcji użytkownika w tym celu.

Jed Brown
źródło
3

Potrzebujesz warunku wstępnego, a jego budowę omówiono tutaj: http://www.math.tamu.edu/~bangerth/videos.676.38.html

Wolfgang Bangerth
źródło
Wykład był bardzo interesujący, ale szukałem konkretnych przykładów wykorzystania PETSc do jego rozwiązania.
Mikael Öhman