Metodo di MacCormack

Da testwiki.
Versione del 20 nov 2023 alle 00:21 di imported>Mess (Annullata la modifica 136461510 di MOscarisDiello (discussione) la voce è orfana perché non è richiamata dalle altre voci, NON perché è priva di collegamenti verso altre voci)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

Template:O Il metodo di MacCormack è un metodo numerico alle differenze finite e viene impiegato per la soluzione di equazioni o sistemi di equazioni differenziali alle derivate parziali iperboliche. Lo schema numerico è utilizzato in fluidodinamica computazionale per la risolvere le leggi di conservazione, ha una precisione del secondo ordine sia nel tempo che nello spazio. Il suo stencil spaziale è di tipo simmetrico, mentre l'avanzamento temporale è di tipo esplicito, essendo la soluzione al tempo nuovo dipendente soltanto dalle proprietà spaziali al tempo vecchio. Il metodo prende il nome dal suo ideatore Robert W. MacCormack, che lo pubblicò per la prima volta nel 1969. Si tratta di un metodo semplice, computazionalmente veloce, ma che introduce non trascurabili errori di dispersione nelle regioni caratterizzate da gradienti elevati (fenomeno di Gibbs).[1]

Formulazione

MacCormack scheme representation

Partendo dall'equazione differenziale alle derivate parziali:

u(x,t)t+f(x,t)x=0,

con f=f(u(x,t)), ovvero che f è una funzione di u(x,t), il metodo numerico di MacCormack ricerca la soluzione in due passi distinti, chiamati dall'inglese predictor step e corrector step per mezzo dell'alternanza di differenze finite in avanti e all'indietro (o viceversa) la cui successione porta alla soluzione esplicita al tempo nuovo. A seconda che si parta con una differenza in avanti e poi all'indietro, o prima all'indietro e poi in avanti il metodo verrà definito forward predictor-backward corrector o backward predictor-forward corrector.

Primo Passo (predictor step)

Partendo dai valori di u e fal tempo tnnei nodi j e j+1, è possibile calcolare una prima approssimazione del vettore un+1, nel punto j al tempo nuovo tn+1, chiamata u~, secondo l’equazione:

u~j=ujnΔtΔx(fj+1nfjn).

La soluzione u~jcosì ottenuta risulta funzione dei soli nodi j e j+1, e pertanto rappresenta una differenza in avanti nello spazio (forward predictor).

Noto il vettore u~j, si possono determinare le approssimazioni f~j=f(u~j) della grandezza f al nodo j allo stesso tempo successivo tn+1.

Secondo Passo (corrector step)

Nel secondo passo, si valuta la soluzione u~ al tempo tn+1 nel nodo j1 introducendo una differenza finita all'indietro nello spazio (backwad corrector):

u~j1=uj1nΔtΔx(fjnfj1n),

da cui si ricava il corrispondente f~j1=f(u~j1).

Infine, eseguendo una semi-differenza in avanti nel tempo:

ujn+1=ujn+1/2Δt2Δx(f~jf~j1),

e approssimando ujn+1/2 con la media dei valori al tempo tne tn+1 della soluzione, calcolati in prima approssimazione durante il predictor step:

ujn+1/2=12(ujnu~jn)

la sostituzione permette di giungere all'espressione finale:

ujn+1=12[ujnu~jnΔtΔx(f~jf~j1)]

Si dimostra che i migliori risultati si ottengono se si inverte l’ordine delle differenze (forward predictor-backward corrector ad un passo, quindi backward predictor-forward corrector al passo successivo) ad ogni passo temporale Δt.

Stabilità

La discretizzazione spaziale in avanti impiegata nel primo passo è instabile quando tutti gli autovalori della matrice Jacobiana associata al problema hanno segno positivo. La discretizzazione all'indietro, al contrario, è instabile se gli autovalori sono tutti negativi. Se per esempio lo schema viene applicato in fluidodinamica la prima condizione si verifica per un regime supersonico, mentre la seconda per regime subsonico.[2] Tuttavia si può dimostrare che la combinazione delle due condizioni rende lo schema completo stabile, purché sia verificato il criterio di stabilità di Courant-Fredrichs-Lewy:

CFL=λΔtΔx<1,

il quale mette in relazione la discretizzazione spaziale Δx con il massimo avanzamento nel tempo Δt, tramite la massima velocità dell'informazione trasportata dall'onda fluida λ. Questa condizione garantisce che durante l'avanzamento temporale l'informazione non sia uscita dal dominio spaziale, e ne preserva la stabilità.

L'alternanza di un passo in avanti ed uno all'indietro consente al metodo di ottenere un'accuratezza del secondo ordine O(Δx2,Δt2), in quanto gli errori di troncamento dei due semi-step si elidono a vicenda.

Quando applicato in fluidodinamica la stabilità dello schema viene influenzata dalla presenza di discontinuità (come un'onda d'urto). Risulta infatti che la variante forward predictor-backwards corrector sia più adatta a rappresentare le discontinuità che viaggiano da sinistra verso destra, e viceversa la variante backwards predictor-forward corrector. Per questo motivo nei problemi caratterizzati da flussi non stazionari, ed in generale dove non è nota a priori la direzione delle discontinuità, risulta conveniente alternare ad ogni step temporale le due varianti.[2]

Note

  1. Anderson J.D., Computational Fluid Dynamics: The Basics with Applications, McGraw Hill, 1994
  2. 2,0 2,1 Winterbone D.E., Theory of Engine Manifold Design: Wave Action Methods for IC Engines, Professional Engineering Publishing, 2000, pp. 96-98

Bibliografia

Voci correlate

Collegamenti esterni