Увага
Вирішення проблем з точкою сідла передбачає набагато більше варіантів, ніж певні проблеми, і є набагато більше речей, які можуть піти не так. Використовуйте монітори на всіх рівнях для налагодження конвергенції, щоб переконатися, що нульові простори обробляються правильно, коли допоміжні оператори є сингулярними (зазвичай це просто постійний нульовий простір) та щоб забезпечити стабільність попередніх кондиціонерів. Ці методи обговорюються в цьому питанні .
Розв’язання задач щодо точки сідла
Почати можна з розділу з розв’язування блокових матриць у Посібнику користувача . Для проблем, схожих на Стокса, ви можете створити допоміжний кондиціонер Schur за допомогою PCFIELDSPLIT .
-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point
Це може поєднуватися з попередньою умовою коммутатора з найменшими квадратами для комплексу Шура ( -fieldsplit_1_pc_type lsc
). Звичайна -fieldsplit_1_ksp_type preonly
і нехай зовнішня ітерація робить більшу частину роботи. Блок-трикутні варіанти популярні при використанні в цьому випадку, наприклад, -pc_fieldsplit_schur_fact_type upper
.
Ви можете знайти більш детальну інформацію про склад розв'язувача, використовуючи параметри опцій у нашому документі (переддрук) , де також обговорюється коммутація мультирешітки з блоковим розкладанням (розміщення поля шліца всередині мультисетки).
У зв'язку з багатьма проблемами, ви хочете налаштувати декомпозицію поля та допоміжні кондиціонери Schur, багато з яких залучають допоміжних операторів. Наприклад, метод "конвекція-дифузія тиску" (PCD) від Elman et al вимагає дискретизації допоміжного оператора в просторі тиску. Дивіться приклади PCSHELL та розділ керівництва користувача для цієї мети.