Come posso verificare la correttezza del mio risultato della simulazione dei fluidi?


9

Ho scritto un programma di simulazione di fluidi basato su particelle. È difficile dire se ottengo il risultato giusto. Il risultato visualizzato sembra ragionevole, ma in parte sembra strano. Non so se sia una caratteristica del fluido. Esiste un metodo accurato per verificare se il mio programma è corretto?

Modifica di alcuni dettagli :

Il mio programma è un programma di simulazione 2D basato su particelle. Il fluido è comprimibile. L'implementazione si basa quasi su un documento classico:

Müller, Matthias, David Charypar e Markus Gross. "Simulazione di fluidi basata su particelle per applicazioni interattive." Atti del SIGGRAPH ACM 2003

Ho risolto l'equazione di Navier-Stokes con il metodo di iterazione. Ha considerato solo la pressione, la gravità, la viscosità e la tensione superficiale.


Forse puoi ricalcolare i termini dell'equazione NS con differenziazione numerica e controllare come si annullano.
Yves Daoust,

Risposte:


2

Confrontalo con il software di qualcun altro. Esegui un test standardizzato e scopri se ottieni approssimativamente la stessa risposta di altri. Se ottieni la stessa risposta, la probabilità di avere il codice giusto è abbastanza alta.

Alcuni test:

  1. Flusso passato cilindro. Nel 2d prendere dominio rettangolare, cilindro nel mezzo, afflusso a sinistra, deflusso sul combattimento e calcolare la forza sul cilindro. Ecco un benchmark che confronta una manciata di codici.

  2. Flusso di galleggiamento. Scatola chiusa, piastra calda in basso, piastra fredda in alto, il fluido caldo inizia a salire a causa della forza di galleggiamento. Ecco il punto di riferimento .

  3. Bolla in aumento, punto di riferimento .

Ma sfortunatamente potrebbe essere abbastanza difficile confrontare il tuo codice con i codici scientifici in quei benchmark. Immagino che tu abbia implementato qualcosa come SPH o fluidi stabili che non sono fatti per precisione ma per stabilità.

Prendi ad esempio il flusso oltre un cilindro. Vorrei iniziare il test con un numero di Reynolds molto piccolo e quindi misurare la forza sul cilindro man mano che si aumenta la precisione della simulazione (passo temporale inferiore, aumento della suddivisione o aumento del numero di particelle). La forza converge in qualche numero? Se no, allora hai un problema, se sì, allora dai un'occhiata al documento di riferimento e confronta il tuo risultato con altri.


Questo metodo è una tecnica molto simile a quella che uso per testare il mio raytracer. Rendo solo la scena del test con il renderer di qualcun altro e la confronto con il mio risultato. Convergono allo stesso risultato? Se sì, allora ho ragione, se no, allora ho sbagliato.


Invece di software per testare contro di voi contro misurazioni del mondo reale conosciute e dinamiche fluide perché segni. Altrimenti il ​​tuo errore è contaminato. Ho visto la stessa domanda pubblicata altrove sulla rete di stackexhange tra
joojaa,

1
Penso che il test contro la misurazione del mondo reale sia buono per il test se hai la fisica giusta. Se vuoi solo eseguire il debug del tuo programma, è meglio fare un test con altri codici. Inoltre nella simulazione al computer puoi misurare qualsiasi cosa senza influire sull'esperimento. Ad esempio, misurare la velocità del fluido in qualsiasi momento è impossibile nell'esperimento nel mondo reale, ma banale nella simulazione al computer.
Tom,

Sì, ma erediti anche i problemi dei loro risolutori. Ammetto di averlo fatto un paio di volte sviluppando un simulatore multibody e verificando i risultati da MSC Adams, ma col senno di poi non era molto utile
joojaa

Il confronto con l'esperimento del mondo reale era meglio? Ne dubito, ma potrei sbagliarmi. La situazione con la fisica multibody è abbastanza diversa dalla fisica dei fluidi. Anche qualcosa di semplice come il biliardo ha un comportamento caotico. Inoltre, la dinamica del corpo rigido con i contatti non è nemmeno un problema matematico ben posto, conosci il paradosso di Painlevé? Quindi fare una simulazione numerica della fisica multibody è destinato a fallire in generale. Alcuni riferimenti: plus.maths.org/content/chaos-billiard-table en.wikipedia.org/wiki/Painlev%C3%A9_paradox
tom

1
Sì, sono consapevole di come funzionano le dinamiche multi-corpo, in un certo senso lo insegno (e lo ho brevemente studiato per un anno o due). Ma nessun controllo rispetto a soluzioni analitiche note era più semplice. Ma un fluido reale è allo stesso modo caotico come una dinamica multi-corpo. Quindi si dovrebbe essere in grado di verificare le situazioni di flusso laminare ecc. L'attrito è una cagna però.
joojaa,
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.