Per "il più semplice" intendo il più semplice da imparare e implementare da zero. Spero che alla mia domanda si possa più o meno rispondere.
Per "il più semplice" intendo il più semplice da imparare e implementare da zero. Spero che alla mia domanda si possa più o meno rispondere.
Risposte:
In due dimensioni, la formulazione velocità-vorticità è la più semplice da implementare perché le variabili sono collocate, ma le condizioni al contorno possono essere complicate ed è un'affermazione meno diretta del problema. Per le formulazioni variabili primitive, il metodo della differenza finita a griglia sfalsata di Harlow e Welch (1965) è un ottimo punto di partenza.
È possibile trovare una realizzazione completamente documentato di un metodo soluzione molto semplice, ma abbastanza efficace (metodo di splitting del Chorin) qui .
Per una selezione di altri metodi popolari, dai un'occhiata al capitolo 21 di questo libro .
Disclaimer: sono il (co) autore sia del programma demo che del libro. Il libro può essere scaricato gratuitamente.
Il più semplice sarà sempre relativo ai tuoi interessi e bisogni particolari. Concordo con Anders sul fatto che, per un flusso incomprimibile su domini con geometria semplice, sarebbe difficile battere il metodo di proiezione (cioè il metodo di divisione di Chorin) se si sta dando priorità sia alla facilità d'uso che alla precisione.
Per entrare un po 'più in dettaglio, il metodo è domanda è stata introdotta in [1]. Il metodo di proiezione approssimativo più moderno, di secondo ordine, è spiegato bene in [2]. La motivazione è che la risoluzione delle equazioni incomprimibili di Navier-Stokes richiede la risoluzione simultanea del campo di velocità e della pressione, e il sistema lineare risultante è piuttosto mal condizionato. Il metodo di proiezione elimina questo problema suddividendo ogni passaggio temporale in una risoluzione di velocità, usando la pressione del precedente timestep, seguito da un aggiornamento della pressione, che essenzialmente impone che il campo di velocità rimanga incomprimibile.
Per implementarlo, avrai bisogno di alcuni altri componenti, ma tutti possono essere appresi e programmati abbastanza facilmente.
Per risolvere la pressione, supponendo che tu sia interessato a sistemi a densità costante, dovrai risolvere l'equazione di Poisson. Esistono, ovviamente, dozzine di algoritmi per affrontare questo problema, ma di gran lunga il più semplice da implementare - se non forse per non comprendere appieno - è l' algoritmo del gradiente coniugato (CG). Una delle migliori spiegazioni di CG che ho letto è stata scritta da Jonathan Shewchuk e può essere trovata qui . Certamente non è necessario leggere l'intero documento, tuttavia, per poter semplicemente implementare l'algoritmo.
Avrai bisogno di un altro algoritmo per gestire il termine di avanzamento in Navier-Stokes. In diverse dimensioni, programmare solide implementazioni dei metodi più flessibili, ad esempio Godunov, può essere piuttosto impegnativo. Tuttavia, a condizione che tu sia interessato a flussi con un numero di Reynolds relativamente modesto (ovvero, con viscosità non trascurabile), uno dei metodi essenzialmente non oscillatori (ENO) si adatta perfettamente al conto in termini di facilità di implementazione. Esiste un'eccellente panoramica della teoria e dell'implementazione in [3].
Dovrai gestire il termine viscoso usando un metodo implicito, in genere Crank-Nicolson. Questo è spiegato in dettaglio nelle carte del metodo di proiezione e puoi facilmente usare CG per risolvere la matrice a condizione che la viscosità sia costante.
[1] AJ Chorin, soluzione numerica delle equazioni di Navier-Stokes , J. Math. Comput., 22 (1968), pp. 745-762
[2] A. Almgren, JB Bell e W. Szymczak, Un metodo numerico per le incomprimibili equazioni di Navier-Stokes basate su una proiezione approssimativa , SIAM J. Sci. Comput. 17 (1996), pagg. 258-369.
[3] S. Osher e R. Fedkiw, Metodi di impostazione dei livelli e Superfici implicite dinamiche . Springer-Verlag New York ,. Scienze matematiche applicate, 153, 2002
La grafica e i giochi per computer hanno visto una grande esplosione di interesse per la simulazione dei fluidi negli ultimi anni. Ecco un ottimo documento di Jos Stam che discute sull'impianto di un solutore per applicazioni in tempo reale. Viene fornito con un codice sorgente molto facile da capire. Non so quanto sia preciso, ma potrebbe essere quello che stai cercando.
Un altro metodo davvero piacevole e semplice sta usando gli automi cellulari per la discretizzazione. Esistono molti di questi modelli, tra cui LBA, FHP e molti altri. Questi sono davvero belli poiché possono fornire una simulazione in tempo reale su computer moderni e possono anche essere paralizzati e eseguiti su GPU. Hanno anche alcuni svantaggi e i risultati dipendono fortemente dalla forma del reticolo applicato. Il reticolo quadrato non è sufficiente perché manca di libertà di rotazione e cioè i vortici di von kaarman avranno una forma quadrata che non è bello :)