Quali precondizionatori (e risolutore) in PETSc per sistemi simmetrici indefiniti dovrei usare?


12

Il mio sistema è un problema FE simmetrico con moltiplicatori di lagrange (ad es. Flusso di Stokes incomprimibile):

(ABTBC)

dove è il caso tipico (mi sono anche assicurato che le equazioni siano numerate in modo tale che i moltiplicatori di Lagrange appaiano per ultimi). Il sistema è abbastanza grande (+ 100k linee).C=0

Dopo aver letto la risposta a questa domanda , mi è stata data l'impressione che esistano precondizionatori adatti che possono essere utilizzati per problemi di FE misti.

Usando PETSc, sono riuscito a risolvere il sistema con MINRES ( -ksp_type minres -pc_type none -mat_type sbaij), sebbene la precisione non sia eccezionale (causando diverse iterazioni di Newton per un problema lineare). Nessun'altra combinazione di precondizionatore e ksp-solver sembra funzionare.

Esiste una combinazione di flag per PETSc che risolverà questo sistema più velocemente rispetto a MINRES?


1
Benvenuti in SciComp SE! La tua domanda è ben posta in termini di chiarezza e generalità. Solo una frase è in qualche modo poco chiara o incompleta: cosa vuoi dire è causato da calcoli inesatti?
Jan

1
Ho dimenticato di finire la frase! Spero sia chiaro adesso.
Mikael Öhman,

Risposte:


13

avvertimento

La risoluzione dei problemi relativi al punto di sella comporta molte più scelte rispetto a problemi definiti e ci sono molte più cose che possono andare storte. Utilizzare i monitor per tutti i livelli per eseguire il debug della convergenza, per assicurarsi che gli spazi null siano gestiti correttamente quando gli operatori ausiliari sono singolari (di solito solo uno spazio null costante) e per garantire che i precondizionatori siano stabili. Queste tecniche sono discusse in questa domanda .

Risoluzione dei problemi relativi al punto di sella

È possibile iniziare con la sezione sulla risoluzione delle matrici di blocchi nel Manuale dell'utente . Per problemi simili a quelli di Stokes, puoi creare un precondizionatore per complementi Schur usando PCFIELDSPLIT .

-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point

Questo può essere combinato con un precondizionatore commutatore dei minimi quadrati per il complemento di Schur ( -fieldsplit_1_pc_type lsc). È comune -fieldsplit_1_ksp_type preonlye lasciare che l'iterazione esterna faccia gran parte del lavoro. Le varianti triangolari a blocchi sono popolari se utilizzate in questo modo, ad es -pc_fieldsplit_schur_fact_type upper.

Puoi trovare ulteriori dettagli sulla composizione del solutore usando le opzioni opzioni nel nostro documento (prestampa) , che discute anche del pendolarismo multigrid con la decomposizione dei blocchi (mettendo il fieldplit all'interno del multigrid).

Per molti problemi, ti consigliamo di personalizzare la decomposizione del campo e i precondizionatori del complemento Schur, molti dei quali coinvolgono operatori ausiliari. Ad esempio, il metodo "pressione convezione-diffusione" (PCD) di Elman et al richiede la discretizzazione di un operatore ausiliario nello spazio di pressione. Vedere esempi di PCSHELL e la sezione del manuale dell'utente per questo scopo.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.