Modello numerico di un`equazione di diffusione
Transcript
Modello numerico di un`equazione di diffusione
Modello numerico di un’equazione di diffusione-reazione in 3D Antonello Cirulli, Fabio Durastante 11 Aprile 2013 Sommario Modello numerico di un’equazione di diffusione-reazione basato sulle differenze finite. Indice 1 Il Modello Continuo 2 2 Il Modello Discreto 2.1 Approssimazione con il Metodo delle Linee (MOL) 2.2 Analisi di Stabilità . . . . . . . . . . . . . . . . . . 2.3 Discretizzazione con Crank–Nicolson . . . . . . . . 2.4 Discretizzazione con BDF6 . . . . . . . . . . . . . 2 2 3 4 6 Riferimenti bibliografici . . . . . . . . . . . . . . . . . . . . . . . . 10 1 1 Il Modello Continuo Il problema continuo [1] che vogliamo risolvere è: t ∈ [Ti , Tf ] ut (x, t) = D∇2 u(x, t) + γu(x, t) x ∈ [0, 1]3 u(x, 0) = h0 (x) x ∈ [0, 1]3 u(x, t) = g0 (t) x ∈ ∂[0, 1]3 t ∈ [Ti , Tf ] (1) Dove D, γ ∈ R+ sono, rispettivamente, il coefficiente di diffusione e il coefficiente di reazione. Considereremo, normalmente, per la costanti fisiche i valori D = 2/3, γ = 2.5. 2 Il Modello Discreto 2.1 Approssimazione con il Metodo delle Linee (MOL) In prima istanza procediamo a risolvere il problema descritto da (1) con il metodo delle linee, ovvero procediamo ad una semi-discretizzazione in spazio del problema per concludere poi utilizzando dei pacchetti per l’integrazione di ODE. Questo approccio ha il vantaggio di essere relativamente semplice da applicare, tuttavia il metodo che ne risulta spesso non è efficiente quanto quelli concepiti appositamente per le PDE. Vedremo esempi di tali metodi in seguito. Per discretizzare il laplaciano in 3D utilizziamo lo schema classico a 7 punti, su una griglia equispaziata con passo di ampiezza h = 1/(m−1), dove m è il numero di punti su ogni spigolo. Ci riconduciamo quindi al sistema di m3 equazioni differenziali ordinarie in t: 0 U (t) = D∇27,h U (t) + γU (t) − hD2 + γ G0 t ∈ [Ti , Tf ] (2) U (Ti ) = H0 dove H0 è la valutazione su tutti i punti della griglia spaziale del dato iniziale e G0 la valutazione delle condizioni al bordo. Il termine − hD2 + γ G0 deriva dalla scelta di condizioni al bordo di Dirichlet costanti nel tempo1 . Inoltre, volendo fissare condizioni al bordo di Dirichlet costanti nel tempo, la matrice LAP:= h2 ∇27,h risulta essere implementata in MATLAB come: e = ones (m ,1) ; I = speye ( m ) ; Tk = spdiags ([ e -2* e e ] ,[ -1 0 1] ,m , m ) ; LAP = kron ( kron ( Tk , I ) ,I ) + kron ( kron (I , Tk ) ,I ) + ... kron ( kron (I , I ) , Tk ) ; PAT = spones ( BC ) ; 1 Ciò infatti richiede che nei punti della discretizzazione posizionati sulla frontiera del dominio l’equazione da risolvere sia U 0 (t) = 0. 2 LAP = spdiags (1 - PAT ,0 , m ^3 , m ^3) * LAP + ... spdiags ( PAT ,0 , m ^3 , m ^3) ; utilizzando la memorizzazione per matrici sparse ed il prodotto di Kronecker, avendo riordinato le equazioni seguendo l’ordinamento lessicografico. Implementiamo ora la dinamica del sistema 2 come: odefun = @ (t , u ) ( D / h ^2) * LAP * u + gamma * u - ... ( D / h ^2+ gamma ) * BC ; Poiché ci troviamo in presenza di un problema stiff, sarà auspicabile utilizzare un integratore basato su metodi impliciti, come ode15s (metodi BDF) o ode23s: option = odeset ( ’ AbsTol ’ ,1.e -3) ; [T , U ] = ode15s ( @ (t , u ) odefun (t , u ) ,[0 1] , IC , option ) ; Scegliamo tuttavia di utilizzare integratori basati anche su metodi espiliciti in modo da poter confrontare i risultati. Riportiamo in tabella le cputime di integrazione2 in secondi al variare di metodo e di m, con i parametri fissati a D = 2/3 e γ = 2.5 per un errore assoluto di 10−3 (vedi tab. 1). m=5 m = 10 m = 15 m = 20 m = 25 ode23 ode45 ode23s ode15s 0.26 0.39 3.120 10.34 31.98 0.31 0.90 5.47 19.17 - 1.15 15.65 300.88 - 0.67 2.93 53.99 - Tabella 1: Integrazione in tempo per il Metodo delle Linee Nonostante la maggiore velocità di esecuzione degli integratori ode23 e ode45, basati sui metodi di Runge-Kutta espliciti, la stiffness del problema li obbliga a selezionare time-step inferiori a quelli necessari per l’ode15s e l’ode23s. Ad esempio si consideri che, per m = 15, l’ode45 divide l’intervallo temporale [0, 1] in 32 passi, mentre l’ode23s in soli 19 passi. Notiamo inoltre che utilizzando l’ode23 o l’ode45 si osservano dei fenomeni oscillatori minori e localizzati della soluzione imputabili alla stiffness del problema. 2.2 Analisi di Stabilità Utilizziamo ora il metodo delle linee per investigare la stabilità del nostro problema. Per prima cosa, notiamo che la matrice A = D∇27,h + γI ha m3 2 TM R Core Risultati relativi ad un Intel 2 Duo CPU T7500 @ 2.20GHz × 2 con sistema operativo Ubuntu 12.04.01 LTS 3 autovettori che indicizzeremo con la terna (p, q, r) con p, q, r = 1, ...m. Si può facilmente provare direttamente che il (p, q, r)-esimo autovettore ha le m3 componenti: (p,q,r) vi,j,l = sin(pπih) sin(qπjh) sin(rπlh) per i, j, k = 1, ..., m (3) mentre il (p, q, r)-esimo autovalore è: λ(p,q,r) = 2D [cos(pπh) + cos(qπh) + sin(rπh) − 3] + γ h2 Notiamo allora che, fissato il multiindice (p, q, r), per h → 0: λ(p,q,r) = γ − D p2 + q 2 + r2 π 2 + O h2 (4) (5) Dunque, se γ − 3Dπ 2 < 0, condizione ampiamente soddisfatta nel caso di nostro interesse (D = 2/3, γ = 2.5), gli autovalori della matrice A risultano negativi, almeno definitivamente. Questo ci obbliga ad optare per una classe di metodi per l’integrazione temporale che contengano nella loro regione di assoluta stabilità tutto il semiasse R− . Ovvero, per la Seconda barriera di Dahlquist, classi di metodi impliciti. Notiamo che questo caso è compatibile con la fisica del problema, il termine diffusivo, cioè quello stiff, risulta dominante rispetto a quello reattivo non stiff. Se si impostano i parametri in modo che γ − 3Dπ 2 > 0, alcuni autovalori saranno negativi ed altri positivi, anche se sempre reali. Per questi casi sarà dunque necessario uno studio ad-hoc. Concludiamo notando che il numero di condizionamento in norma 2 di A è tale che: λ(m,m,m) 1 K2 (A) = (1,1,1) = O (6) h2 λ cioè la matrice diventa molto malcondizionata quando viene raffinata la griglia di discretizzazione, il che comporterà, inevitabilmente, un rallentamento nei metodi iterativi3 che verranno utilizzati per risolvere i nostri sistemi lineari. 2.3 Discretizzazione con Crank–Nicolson Ripartiamo dal problema nella forma 2 e costruiamo la discretizzazione in tempo, di passo k, col metodo di Crank–Nicolson, che è compatibile con la condizione di stabilità essendo un metodo A-stabile di ordine 2: k U n+1 = U n + (f (U n ) + f (U n+1 )) 2 3 (7) Un numero di condizionamento più elevato aumenta il numero di iterazioni, interne ed esterne, necessarie a raggiungere la precisione voluta. 4 Con il quale otteniamo: kγ kD 2 1− I− ∇7,h U n+1 = 2 2 D kγ kD 2 n U −k = 1+ I+ ∇ + γ G0 2 2 7,h h2 Implementiamo le matrici necessarie come: LEFT =(1 - gamma * k /2) * speye ( m ^3) -( k * D /(2* h ^2) ) * LAP ; RIGHT =(1+ gamma * k /2) * speye ( m ^3) +( k * D /(2* h ^2) ) * LAP ; Tnot = - k *( D /( h ^2) + gamma ) * BC ; Per quanto riguarda la scelta del passo di integrazione temporale k, poiché la regione di assoluta stabilità del metodo (7) è tutto il semipiano negativo, possiamo prendere un qualsiasi k ≥ 0. Per mantenere la simmetria nelle discretizzazioni, ovvero per avere errori nei due sensi dello stesso ordine, poniamo k = O(h). Inoltre, per semplicità, da ora in poi supporremo Ti = 0, Tf = 1: k=h; Ti = 0; Tf = 1; T = Ti : k : Tf ; n = length ( T ) ; Possiamo a questo punto procedere a risolvere gli n sistemi lineari per ottenere la soluzione come: U = eye ( m ^3 , n ) ; U (: ,1) = LEFT \( RIGHT * IC + Tnot ) ; for i =2: n U (: , i ) = LEFT \( RIGHT * U (: ,i -1) + Tnot ) ; end oppure facendo uso, in luogo del \di MATLAB, il BICGSTAB, con tolleranza di 1.e − 10: U (: ,1) = bicgstab ( LEFT , RIGHT * IC + Tnot , tol ,60) ; for i =2: n U (: , i ) = bicgstab ( LEFT , RIGHT * U (: ,i -1) + Tnot , tol ,60) ; end o il GMRES precondizionato con tolleranza di 1.e − 10 con una fattorizzazione LU incompleta[2], con threshold di 1.e − 6 e pivoting, della matrice di iterazione: 5 [L , Ul ]= ilu ( LEFT , struct ( ’ type ’ , ’ ilutp ’ , ’ droptol ’ ,1.e -6) ) ; U = eye ( m ^3 , n ) ; U (: ,1) = gmres ( LEFT , RIGHT * IC + Tnot ,[] , tol ,60 , L , Ul ) ; for i =2: n U (: , i ) = gmres ( LEFT , RIGHT * U (: ,i -1) + Tnot ,[] , tol ,60 , L , Ul ) ; end Riportiamo in tabella le cputime di integrazione in secondi al variare di m, con i parametri fissati a D = 2/3 e γ = 2.5 relative ai tre metodi per risolvere i sistemi lineari fin qui illustrati (vedi tab. 2). m=5 m = 10 m = 15 m = 20 m = 25 m = 30 m = 35 m = 40 m = 45 m = 50 m = 55 m = 60 \ bicgstab ilu gmres 0.01 0.10 1.03 5.71 23.26 85.26 149.32 253.25 595.00 1.7933e+03 - 0.09 0.23 2.00 6.28 11.01 20.90 28.08 34.45 58.63 97.26 206.03 294.77 0 0.02 0.35 2.45 10.42 34.18 86.65 208.91 417.85 - 0.11 0.24 2.35 9.23 31.06 64.00 122.19 237.19 1106.2 - Tabella 2: Crank-Nicolson al variare dei risolutori per sistemi lineari Riportiamo i dati in tabella nel grafico 1. 2.4 Discretizzazione con BDF6 Poiché ci troviamo in presenza di un problema stiff ad autovalori reali e negativi usiamo per integrare il metodo BDF6[3], che è A(18)-stable e, in particolare, è quello con ordine di convergenza più alto possibile compatibile con la condizioni di stabilità,4 : 147U n+6 − 360U n+5 +450U n+4 − 400U n+3 + +225U n+2 − 72U n+1 + 10U n = 60kf (U n+6 ) 4 Ordine 6. I metodi BDF per r > 6 non sono 0-stabili. 6 (8) dove la f è di nuovo la dinamica del sistema di ODE (2), sostituendo e raccogliendo si ottiene la famiglia di sistemi lineari: 147I − 60kD∇27,h − 60kγ U n+6 =360U n+5 − 450U n+4 + 400U n+3 + −225U n+2 + 72U n+1 − 10U n + D −60k + γ G0 h2 (9) poiché abbiamo scelto un metodo a sei passi abbiamo bisogno di possedere in partenza i valori in 6 punti della griglia temporale, mentre ne abbiamo solo uno. Utilizziamo allora il metodo di Crank-Nicolson per ottenere i primi sei valori e poi avviamo il BDF6: LEFT =(1 - gamma * k /2) * speye ( m ^3) -( k * D /(2* h ^2) ) * LAP ; RIGHT =(1+ gamma * k /2) * speye ( m ^3) +( k * D /(2* h ^2) ) * LAP ; Tnot = - k *( D /( h ^2) + gamma ) * BC ; U = eye ( m ^3 , n ) ; U (: ,1) = LEFT \( RIGHT * IC + Tnot ) ; for i =2:6 U (: , i ) = LEFT \( RIGHT * U (: ,i -1) + Tnot ) ; end LEFT6 =(1 -(60/147) * k * gamma ) * speye ( m ^3) - ... ((60/147) * k * D /( h ^2) ) * LAP ; Tnot6 = -(60/147) * k *( D /( h ^2) + gamma ) * BC ; for i =7: n RIGHT6 =((360/147) * U (: ,i -1) -(450/147) * U (: ,i -2) +... (400/147) * U (: ,i -3) -(225/147) * U (: ,i -4) +... (72/147) * U (: ,i -5) -(10/147) * U (: ,i -6) + Tnot6 ); U (: , i ) = LEFT6 \ RIGHT6 ; end Analogamente a quanto fatto precedentemente ricostruiamo il codice sostituendo alla left division di MATLAB il BICGSTAB e il GMRES con precondizionamento LU -incompleto con gli stessi parametri. Riportiamo in tabella le cputime di integrazione in secondi al variare di m, con i parametri fissati a D = 2/3 e γ = 2.5 relative ai tre metodi per risolvere i sistemi lineari fin qui illustrati (vedi tab. 3). Riportiamo i dati in tabella nel grafico 2. Si fa presente che nell’utilizzare la discretizzazione con il metodo BDF6 si è scelto, per semplicità, di porre k = O(h). Tuttavia, poiché per tale metodo l’errore globale è √ O(h2 + k 6 ) risulta più corretto fissare il passo di 3 integrazione come k = O( h). In questo modo l’approssimazione in spazio e quella in tempo danno luogo ad un errore comparabile. Scelta che permette di sfruttare a pieno l’ordine di convergenza del BDF6. Tuttavia se k > 7, 7 m=5 m = 10 m = 15 m = 20 m = 25 m = 30 m = 35 m = 40 m = 45 m = 50 m = 55 m = 60 \ bicgstab ilu gmres 0.02 0.10 0.90 5.21 21.38 78.99 241.06 564.78 1689.2 - 0.12 0.16 1.49 4.31 9.31 19.32 36.92 71.52 107.84 164.35 246.45 350.83 0.01 0.03 0.35 2.39 10.13 32.80 86.27 197.48 397.14 - 0.11 0.24 2.62 11.30 33.89 88.42 202.96 414.42 808.15 - Tabella 3: BDF6 al variare dei risolutori per sistemi lineari cioè se m < 343, i punti della discretizzazione temporale sono al più 6, dunque viene utilizzato solo il metodo di Crank-Nicolson, per il quale invece la scelta ottimale è k = O(h). Sulle macchine a nostra disposizione non è però possibile scegliere m ≥ 343 per un problema di memoria insufficente. 8 Figura 1: Grafico relativo alla tabella 2 Figura 2: Grafico relativo alla tabella 3 9 Riferimenti bibliografici [1] Salsa, S. (2010), Equazioni a Derivate Parziali: Metodi, Modelli E Applicazioni, 9788847016460, Springer-Verlag, CAP 2.7. [2] Saad, Yousef (1996), Iterative methods for sparse linear systems (2nd ed.), by the Society for Industrial and Applied Mathematics. CAP 10.3. [3] LeVeque, R. (2007), Finite Difference Methods for Ordinary and Partial Differential Equations: Steady-State and Time-dependent Problems, 9780898716290, Society for Industrial and Applied Mathematics, CAP. 8.4. 10