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