Come si esegue il debug del codice numerico, quale potrebbe essere la fonte di questo errore oscillatorio?


16

Un sacco di intuizione può essere acquisita dall'esperienza, mi chiedevo solo se qualcuno ha visto qualcosa di simile prima. Il diagramma mostra la condizione iniziale (verde) per l'equazione di avanzamento-diffusione, quindi la soluzione all'iterazione 200 (blu) e quindi nuovamente all'iterazione 400 (rosso).

Errore oscillatorio

La soluzione dell'equazione avanzamento-diffusione esplode dopo alcune iterazioni. Il numero di Péclet e la condizione CFL è soddisfatta, C 0,0015 , quindi le equazioni dovrebbero essere stabili. Prevedo di avere un bug nel codice numerico.μ0,07C0,0015

Sfondo. La discretizzazione è la differenza centrale per entrambi i termini di avanzamento e diffusione. Credo che questo sia il primo ordine di avanzamento e il secondo ordine di diffusione. Ho implementato questo usando un approccio a volume finito (per la prima volta) in cui i valori dei coefficienti (coefficienti di velocità e diffusione) sulle facce delle celle si trovano per interpolazione lineare dalle medie cellulari. Applico la condizione al contorno di Robin sulle superfici sinistra e destra e azzerare il flusso ai limiti.

Come si esegue il debug del codice numerico? Qualcuno ha mai fatto una scena del genere prima d'ora, dove sarebbe un buon posto per iniziare a guardare?

Aggiornare

Aggiornare

La soluzione non potrebbe essere più semplice! Ho appena fatto un errore di segno sul termine di diffusione. È strano, sono sicuro che non l'avrei pubblicato, non avrei trovato l'errore! Se qualcuno vuole condividere suggerimenti su come eseguire il debug del proprio codice numerico, sono ancora interessato. Non ho un metodo, è un po 'incostante, continuo a provare cose per ottenere indizi, ma questo processo può richiedere settimane (a volte).

× condizioni al contorno . Quindi al limite vediamo l'equilibrio tra il campo di velocità che spinge a destra e la diffusione che spinge a sinistra.

Equazione di diffusione-diffusione con condizioni al contorno chiuse mediante metodo a volume finito.


2
Che tipo di discretizzazione stai usando? Quale metodo di ordine? Quali sono le tue condizioni al contorno?
Geoff Oxberry,

Grazie @GeoffOxberry, ho aggiornato con maggiori dettagli. Anche se per capire davvero cosa ho fatto, puoi leggere le mie note del libro di laboratorio sul link github sopra.
boyfarrell,

2
θ=0,0.5,1

1
un'=0d<0

Risposte:


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.