Metodi per risolvere sistemi di diffusione dell'avvocatura non lineari oltre Newton-Raphson?


9

Sto lavorando a un progetto in cui ho due domini accoppiati adv-diff attraverso i rispettivi termini sorgente (un dominio aggiunge massa, l'altro sottrae massa). Per brevità, li sto modellando in stato stazionario. Le equazioni sono le equazioni di trasporto standard di diffusione dell'avvezione con un termine sorgente simile al seguente:

c1t=0=F1+Q1(c1,c2)c2t=0=F2+Q2(c1,c2)

Dove Fi è flusso diffusivo e propizio per le specie i , e Qi è il termine sorgente per le specie i .

Sono stato in grado di scrivere un risolutore per il mio problema utilizzando il metodo Newton-Raphson e ho accoppiato completamente i due domini utilizzando una matrice di massa a blocchi, ovvero:

Fcoupled=[A100A2][c1,ic2,i]xi[b1(c1,i,c2,i)b2(c1,i,c2,i)]

Il termine viene utilizzato per determinare la matrice Jacobiana e aggiornare sia c 1 e c 2 :Fcoupledc1c2

J(xi)[xi+1xi]=Fcoupled

o

xi+1=xi(J(xi))1Fcoupled

Per accelerare le cose, non calcolo il Jacobian ad ogni iterazione - in questo momento sto giocando con ogni cinque iterazioni, che sembra funzionare abbastanza bene e mantenere stabile la soluzione.

Il problema è: mi trasferirò in un sistema più grande in cui entrambi i domini sono in 2D / 2.5D e il calcolo della matrice giacobina sta esaurendo rapidamente le risorse del mio computer disponibili. Sto costruendo questo modello per utilizzarlo in seguito in un'impostazione di ottimizzazione, quindi non posso essere al volante ad ogni iterazione che sintonizza il fattore di smorzamento, ecc.

Ho ragione a cercare altrove un algoritmo e un algoritmo più solido per il mio problema, o è buono come sembra? Ho esaminato un po 'la quasi-linearizzazione, ma non sono sicuro di quanto sia applicabile al mio sistema.

Ci sono altri algoritmi slick che potrei aver perso che possono risolvere un sistema di equazioni non lineari senza ricorrere al ricalcolo del giacobino come offeso?


2
Hai considerato solutori iterativi come i metodi multigrid algebrici AMG. Potrebbe essere necessario trovare buoni precondizionatori basati sulla fisica.
NameRakes

1
Puoi ottenere l'accesso a un cluster informatico in cui puoi distribuire la formazione e la soluzione giacobina usando un pacchetto di algebra lineare parallela?
Bill Barth,

No, non ho considerato AMG, pensavo che fossero solo per sistemi simmetrici e non potevo essere usato in problemi dominati dalla convezione. Guarderò di nuovo in letteratura per AMG.
cbcoutinho,

I calcoli paralleli sono difficili perché questo progetto è stato sviluppato come un'applicazione autonoma per i colleghi che non hanno accesso a quel tipo di risorse. Ho pensato di sviluppare mpi nel progetto per il mio bene, ma ciò avrebbe aumentato la barriera di accesso per gli altri, che era in primo luogo il punto centrale ..
cbcoutinho,

3
Perché calcolare il giacobino è così problematico? Se stai usando differenze / volumi / elementi finiti, dovrebbe avere una parte sparsa che è sempre la stessa e una parte diagonale che cambia ma è banale da calcolare.
David Ketcheson,

Risposte:


4

Suppongo che la limitazione in 2D e 3D stia memorizzando il giacobino.

Un'opzione è quella di mantenere i derivati ​​del tempo e usare un "pseudo" esplicito time-stepping per iterare allo stato stazionario. Normalmente il numero CFL necessario per i sistemi diffusivi e reattivi potrebbe diventare proibitivamente piccolo. È possibile provare il multigrid non lineare (chiamato anche multigrid di archiviazione di approssimazione completa) e il time-stepping locale per accelerare la convergenza.

L'altra opzione è quella di utilizzare uno schema completamente implicito come stai facendo ora, ma non conservare il giacobino globale. È possibile utilizzare uno schema implicito privo di matrice.

DF(un)δun=F(un)
DF
DF(un)δuF(un+ϵδuδu)F(un)ϵ.
AAxx

ϵ107F

Un'altra cosa da notare è che se il tuo sistema è tale da rendere necessario un potente precondizionatore (cioè Jacobi o Block-Jacobi non saranno sufficienti), potresti voler provare a usare il metodo sopra citato come più fluido in uno schema multigrid. Se vuoi provare un precondizionatore Jacobi punto o blocco, puoi calcolare e memorizzare solo gli elementi diagonali o i blocchi diagonali del giacobino, il che non è molto. Vorrei anche menzionare che un precondizionatore Gauss-Seidel o SSOR potrebbe essere possibile implementare senza archiviare esplicitamente un giacobino. Questo documento descrive l'implementazione di un GMRES senza matrice precondizionato con Gauss-Seidel simmetrica senza matrice nel contesto della fluidodinamica computazionale.


1

Dalla mia esperienza con le equazioni di Navier-Stokes, si può fare molto bene senza schemi completamente impliciti.

Se vuoi solo uno schema numerico veloce per la soluzione dell'evoluzione del tempo, dai un'occhiata agli schemi IMEX (implicito-esplicito); vedi ad esempio questo articolo di Ascher, Ruuth, Spiteri Metodi impliciti-espliciti di Runge-Kutta per equazioni differenziali parziali dipendenti dal tempo .

Puoi anche provare a usare solo uno schema esplicito di integrazione temporale di alto ordine con controllo della dimensione del passo (come quello di Matlab ODE45). Tuttavia, potresti riscontrare problemi a causa della rigidità del sistema, che proviene dalla parte diffusiva. Fortunatamente, la parte diffusiva è lineare in modo che possa essere trattata implicitamente (che è l'idea degli schemi IMEX).


0

All'inizio ho considerato di aggiungere solo un'osservazione, ma lo spazio non era sufficiente, quindi aggiungo una breve descrizione delle mie esperienze con questo argomento.

Fcoupledb1b2c1,ic2,iA1A2F1F2ci, ma anche sui valori vicini, ma questa potrebbe essere solo una comprensione errata della tua notazione.

Come commento generale, vorrei aggiungere che l'uso dell'analitico Jacobian sembra essere l'unico modo per ottenere una convergenza quadratica del risolutore iterativo non lineare (ovvero il solutore Newton-Raphson nel tuo caso). L'hai osservato nel tuo caso? È abbastanza importante, perché altrimenti potrebbero esserci dei malintesi nelle approssimazioni (linearizzazione).

In tutte le applicazioni in cui sono stato coinvolto (alcuni includevano calcoli su larga scala) non abbiamo mai avuto problemi con il consumo di tempo nell'assemblaggio del giacobino, il problema che richiedeva più tempo era sempre quello di applicare un risolutore lineare. Il Jacobiano analitico (se disponibile) è sempre stato nelle applicazioni che stavo lavorando sulla scelta preferita a causa della convergenza quadratica. In alcuni casi tale solutore non lineare produce una matrice che causa problemi alla convergenza del risolutore lineare iterativo, quindi abbiamo cercato di utilizzare una linearizzazione più semplice rispetto al Jacobian analitico per aiutare il risolutore lineare. Un tale compromesso tra il comportamento del risolutore algebrico non lineare e lineare a seconda della linearizzazione del sistema algebrico non lineare era sempre complicato e non potevo dare una raccomandazione generale.

Ma hai ragione nel dire che lo svantaggio (o la proprietà) del giacobino analitico per il sistema di PDE è che produce un sistema algebrico accoppiato, quindi se hai disaccoppiato tale sistema in qualche modo, ad esempio risolvendo separatamente l'approssimazione di ogni PDE mediante, diciamo, una divisione iterativa metodo, quindi perdi la convergenza quadratica del risolutore globale. Ma almeno se risolvi separatamente ogni PDE discretizzato (disaccoppiato), puoi accelerare nuovamente la soluzione per questo particolare problema usando il metodo Newton-Raphson.


b1b2c1c2A1A2F1F2sono vettori, quindi sono funzioni di un vettore di variabili di stato, non solo di una variabile. Calcolo numericamente un giacobino usando differenze finite. Finora non ho studiato un giacobino analitico.
cbcoutinho,
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.