Errore peculiare nella risoluzione dell'equazione di Poisson su un metodo a volume finito mesh non uniforme (solo 1D)


9

Ho cercato di eseguire il debug di questo errore negli ultimi giorni, mi chiedevo se qualcuno avesse dei consigli su come procedere.

Sto risolvendo l'equazione di Poisson per una distribuzione della carica a gradino (un problema comune nella fisica elettrostatica / dei semiconduttori) su una maglia a volume finito non uniforme in cui l'ignoto è definito sui centri cellulari e i flussi sulle facce delle cellule.

0=(ϕx)x+ρ(x)

il profilo di addebito (il termine di origine) è dato da,

ρ(x)={1,if 1x01,if 0x10,otherwise

e le condizioni al contorno sono,

ϕ(xL)=0ϕx|xR=0

e il dominio è .[10,10]

Sto usando il codice sviluppato per risolvere l'equazione di reazione-diffusione-reazione (mi sono scritto vedere i miei appunti qui, http://danieljfarrell.github.io/FVM ). L'equazione di reazione-diffusione-reazione è un caso più generale dell'equazione di Poisson. In effetti l'equazione di Poisson può essere recuperata impostando la velocità di avanzamento su zero e rimuovendo il termine transitorio.

Il codice è stato testato per una serie di situazioni per griglie uniformi, non uniformi e casuali e produce sempre soluzioni ragionevoli ( http://danieljfarrell.github.io/FVM/examples.html ) per l'equazione avanzamento-diffusione-reazione.

Per mostrare dove si rompe il codice ho fatto il seguente esempio. Ho impostato una mesh uniforme di 20 celle e quindi la ho resa non uniforme rimuovendo una singola cella. Nella figura a sinistra ho rimosso la cella e nella destra è stato rimosso. La nona cella copre la regione in cui il termine sorgente (ovvero la carica) cambia segno. Il bug appare quando la griglia non è uniforme in una regione in cui il termine di reazione cambia segno . Come puoi vedere di seguito.Ω 9Ω8Ω9

Qualche idea su cosa potrebbe causare questo problema? Fammi sapere se sarebbero utili ulteriori informazioni sulla discretizzazione (non volevo inserire troppi dettagli in questa domanda).

Errore peculiare nella risoluzione dell'equazione di Poisson


Puoi specificare come imporre la condizione di Dirichlet su e cosa intendi per come condizione iniziale (non è l'equazione che hai specificato lo stato stazionario)? x=0ρ=1
Jesse Chan,

Che aspetto ha il termine di reazione?
Jan

Quale schema usi per approssimare gli integrali del termine sorgente? Questo comportamento potrebbe anche essere causato da un campionamento insufficiente della sorgente. (Qual è, probabilmente, lo stesso meccanismo menzionato nella risposta di @JLC.)
Jan

Ho aggiornato la domanda per utilizzare la terminologia standard. Ho un termine sorgente ( ) non un termine di reazione perché, come hai sottolineato, abbiamo solo bisogno del valore di stato stazionario. Viene ora fornita la corretta dipendenza spaziale di (il valore iniziale era errato). ρρ
boyfarrell,

@JLC i Dirichlet BC sono imposti usando un approccio a cellula fantasma (le mie note online non sono aggiornate riguardo a questo dettaglio di implementazione), vedi qui per come lo faccio, scicomp.stackexchange.com/questions/8538/…
boyfarrell

Risposte:


9

A parte questo, la tua documentazione github è fantastica.

Questa è solo un'ipotesi dei metodi DG, che possono avere problemi simili se i flussi numerici non sono scelti con cura (immagino che i metodi FV siano un sottoinsieme dei metodi DG). Se stai usando l'interpolazione dai centri delle cellule per definire i tuoi flussi, questo dovrebbe essere equivalente all'uso della media come flusso numerico in DG e usando una base costante a tratti. Per i metodi DG standard per Poisson, questo porta a soluzioni numericamente non univoche: puoi ottenere uno spazio nullo non banale per l'operatore discreto, che penso sia la causa dei tuoi problemi nel secondo esempio. Vedi questo documento della DG per la loro teoria sul lato DG.

Proverò a simulare un esempio per FV che mostra come questo entra in gioco.

Modifica: ecco un piccolo esempio di ciò che sta succedendo. Considera le celle 1-9 e 11-20 in cui . Dal lato destro (11-20), abbiamo causa della condizione di Neumann, che ci dice dalla conservazione per quella cella che . Poiché il flusso è la media dei valori delle celle, questo ci dice che è costante su tutte queste celle.ρ(x)=0f(x20)=0f(x19)==f(x11)=0ϕ(x)

Dal lato sinistro (1-9), abbiamo . Se e usiamo le celle fantasma, allora . La conservazione nelle prossime celle dà che (cioè pendenza costante). Tuttavia, si noti che questo può essere qualsiasi pendenza, solo costante.f(xi+1)f(xi)=0f(10)=0f(10)=ϕ9.5ϕghost=ϕ9.5f(xi)=f(10)=ϕ9.5

Il problema si presenta nella cella centrale. Come menzionato da Jan, sottocampi la forzatura nella seconda mesh. Questo elimina le equazioni di bilanciamento a quel punto, ti dà un errore in , che poi si propaga all'indietro e incasina sia la pendenza nella metà sinistra del dominio sia il valore di .f(10)ϕ(9.5)

Questa sensibilità agli errori di forzatura è problematica: a differenza dei metodi FEM o FD che applicano esplicitamente la condizione di Dirchlet a , FV la applica debolmente usando nodi fantasma. Intuitivamente, l'imposizione debole del nodo fantasma è come impostare una condizione di Neumann anche al limite sinistro. Se hai due condizioni Neumann per un problema di diffusione, il tuo problema è mal posto e ha una soluzione non univoca (puoi aggiungere qualsiasi costante a quel problema e avere ancora una soluzione). Qui non lo capisci a livello discreto, ma ottieni un comportamento molto sensibile e dipendente dalla mesh come vedi nei tuoi esperimenti.x=10


Dall'esperimento posso dimostrare che il metodo FVM è stabile solo quando le celle ai lati della discontinuità (cambio di segno) della funzione sorgente hanno volumi uguali. La tua analisi sarebbe d'accordo con questo? Ciò significa che devo prestare maggiore attenzione alla generazione di una griglia sensibile dei miei problemi che ho già fatto. Forse dovrei considerare di imparare il metodo FEM dopo?
boyfarrell,

Un articolo pertinente, anche se non seguo del tutto tutti i dettagli, jstor.org/discover/10.2307/2157873
boyfarrell,

Il metodo FVM è stabile in questo caso solo quando la griglia è in qualche modo allineata con la funzione sorgente. Se la tua funzione sorgente cambia, dovrai ottimizzare nuovamente la griglia. Non credo che generare una griglia ragionevole sia l'approccio giusto a questo problema: hai un metodo instabile.
Jesse Chan,

Questa è una buona scoperta. Suli è un solido analista. Direi che imparare FEM potrebbe essere divertente, ma FD dovrebbe anche funzionare per eventuali problemi ellittici 1D. Potresti anche vedere cosa fanno le persone FV (forse aumentare i loro flussi con termini di penalità) per ottenere la convergenza per problemi ellittici del 2 ° ordine su reti generali. La saggezza popolare matematica di solito dice che FV / FD controvento è ottimo per i problemi iperbolici mentre FEM / FD diff centrale è ottimo per l'ellittica.
Jesse Chan,

Sto rivedendo questo problema. Rileggendo la tua risposta, devo dire che è fantastico! Vedo il tuo punto che il metodo dovrebbe cambiare perché questa è la radice del problema (non la griglia). Hai suggerimenti o cose che potrei seguire (che sono accessibili a un non esperto) su come approssimare meglio il flusso in questo caso. Vale a dire in un modo che potrebbe renderlo più stabile. Se possibile, vorrei trovare una FVM migliore per questa equazione.
boyfarrell,

0

La prima cosa da notare sono le condizioni al contorno. Dato che puoi modificare la pendenza e il valore, non hai né le condizioni di Dirichlet, né Neumann.

Quindi, ogni linea retta è una soluzione in cui il lato destro è zero. Hai ottenuto quella parte.

I tuoi flussi probabilmente dipendono da . Usi la corretta dove elimini una cella?hhh


1
No, non è corretto. Il problema è ben posto. Per il caso solo è una soluzione, non v'è alcuna altra funzione lineare che è zero in un punto e ha lo zero pendenza in un secondo punto. ϕ 0ρ0ϕ0
Jan
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.