Introduzione al Calcolo Scientifico - A.A. 9- Laboratorio nr.8 Discretizzazione di un problema iperbolico D Si consideri il seguente problema iperbolico lineare D: trovare u = u(x, t) tale che u t + a u = in Q = Ω (, T), x u(, t) = u(, t), u(x, ) = u (x), () dove a R \ {}, Ω = (, ) e T è il tempo finale di integrazione. La soluzione u(x, t) rappresenta un onda viaggiante con velocità costante a.. Si scriva la forma della soluzione esatta del problema (). Per la discretizzazione di () si considerino i seguenti schemi espliciti alle differenze finite, dopo aver introdotto un passo di discretizzazione temporale dt, un passo di discretizzazione spaziale dx e aver definito il parametro = dt dx : UPWIND u n+ j = u n j a(un j+ un j ) + a (un j+ un j + un j ) LAX-FRIEDRICHS LAX-WENDROFF u n+ j = (un j+ + un j ) a(un j+ un j ) u n+ j = u n j a(un j+ un j ) + a (u n j+ un j + un j )
3. Quale è la restrizione su dt imposta dalla condizione di stabilità dei metodi al punto precedente? Si chiami dt cr il valore massimo del passo di discretizzazione temporale per un fissato passo di discretizzazione spaziale 4. Si implementino i metodi upwind, Lax-Friedrichs, Lax-Wendroff nel codice iperbolico.m. Si permetta all utente la scelta del metodo tramite l uso di un istruzione switch. 5. Si testi il codice iperbolico.m considerando il problema con dato iniziale cos(8πx).5 x.5, u (x) = altrove. e i valori a =, T =. Si prenda dx = /. e si considerino, per i tre metodi, i valori dt = [.75dt cr, dt cr,.5dt cr ]. Si confrontino i risultati ottenuti con la soluzione esatta, mostrando la propagazione dell onda esatta e di quelle approssimate in funzione del tempo. 6. Si ripetano i test del punto precedente considerando il problema con gli stessi parametri di sopra e dato iniziale discontinuo u (x) = 3 x 3, altrove, 7. Si consideri ora il problema con dato iniziale costituito da un pacchetto di due onde sinusoidali sin( π x).5 l x.5 + l, u (x) = l altrove, di uguale lunghezza d onda l = dx, con dx =.. Si scelga dt =.75dt cr e si confronti la soluzione esatta con la soluzione numerica ottenuta con i tre metodi in termini di errore di dissipazione (ampiezza dell onda) e di dispersione (angolo di fase) dopo un intervallo di tempo pari a 5adt.
Soluzione - Discretizzazione di un problema iperbolico D. La soluzione del problema iperbolico lineare proposto è del tipo u(x, t) = u (x at), ovvero si tratta di un onda viaggiante con velocità costante a, con ampiezza costante nel tempo. Se a >, l onda si propaga verso destra, se a < verso sinistra.. Scriviamo i metodi di discretizzazione nella forma matriciale u (n+) = u (n) + Au (n), dove u (k) è un vettore di dimensione (nx + ) che rappresenta la soluzione al tempo t = kdt. Avremo, riorganizzando i termini a ( a a) 3 ( a + a)... A UPW = ( a + a) ( a ) ( a a),. 6.. 7 4 5 ( a a) ( a a) a ( a) 3 ( + a)... A LF = ( + a) ( a),. 6.. 7 4 5 ( a) ( + a) ( a ) A LW = 6 4 ( + a) ( + a)... ( + a) ( a ) ( + a)... ( + a) ( + a) ( a ) 3 3, 7 5
dove si osserva che imporre la condizione al bordo periodica significa richiedere che u = u N e in particolare avere le identità u u N, u N+ u. Una possibile versione del codice iperbolico.m è la seguente: clear all close all % velocita di propagazione a = ; % parametri discretizzazione T = 3; xstart=; xend=5; dx=.; nx=ceil((xend-xstart)/dx); dt=.75*dx/a; nt=ceil(t/dt); x=linspace(xstart,xend,nx+); t=linspace(,t,nt+); % condizione iniziale % funzione seno l=; 4
u=and((x>=.5),(x<=.5)).*(-cos(8*pi*x))/; % soluzione esatta % funzione seno uex=inline(.*x+and(((x-a*t)>=.5),((x-a*t)<=.5)).*... (-cos(8*pi*(x-a*t)))/, x, t, a, l ); lambda = dt/dx; x=linspace(xstart,xend,nx+); t=linspace(,t,nt+); u = zeros(nx+,nt+); u(:,) = u; A=sparse(nX+,nX+); method= upwind ; switch (method) %%%%%%%%%%%%%%% UPWIND %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case{ upwind } A= diag((-lambda*abs(a))*ones(nx+,))+... diag(lambda/*(abs(a)+a)*ones(nx,),-)+... diag(lambda/*(abs(a)-a)*ones(nx,),); A(,nX) = lambda/*(abs(a)+a); A(nX+,) =lambda/*(abs(a)-a); %%%%%%%%%%%%%%% LAX-Friedrichs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case{ lf } 5
disp( metodo--> Lax-Friedrichs ) A= diag(/*(+lambda*a)*ones(nx,),-)+... diag(/*(-lambda*a)*ones(nx,),); A(,nX) = /*(+lambda*a); A(nX+,) =/*(-lambda*a); %%%%%%%%%%%%%%% LAX-WENDROFF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case{ lw } disp( metodo--> Lax-Wendroff ) A= diag((-(lambda*a)^)*ones(nx+,))+... diag(lambda/*(+lambda*a)*ones(nx,),-)+... diag(lambda/*(-+lambda*a)*ones(nx,),); A(,nX) = lambda/*(+lambda*a); A(nX+,) =lambda/*(-+lambda*a); end % switch for j = :nt+ u(:,j) = A*u(:,j-); end for j = 5::5 plot(x,u(:,j), - ) hold on plot(x,uex(x,j*dt,a,), r- ) 6
%pause(.5) end 3. Tutti i metodi proposti sono espliciti; pertanto, per garantire la stabilità della soluzione numerica è necessario scegliere (condizione CFL) 4. Consideriamo il dato iniziale dt < dx a. u=and((x>=.5),(x<=.5)).*(-cos(8*pi*x))/; la cui corrispondente soluzione esatta è uex=inline(.*x+and(((x-a*t)>.4),((x-a*t)<.5)).*... (-cos(8*pi*(x-a*t)))/, x, t, a ); In Fig. sono mostrati i risultati ottenuti per i vari metodi con passo di discretizzazione temporale dt = [.75dt ct, dt cr,.5dt cr ] dopo 5 passi di tempo. 5. Imponiamo come condizione iniziale lo scalino u=and((x>=/3),(x<=/3)); la corrispondente soluzione esatta è uex=inline(.*x+and(((x-a*t)>=/3),((x-a*t)<=/3)), x, t, a ); Osserviamo nel caso di Lax-Wendroff la formazione di oscillazioni non fisiche. Tale situazione richiede, in generale, un trattamento più sofisticato (limitatori di pendenza). 6. Imponiamo come condizione iniziale il pacchetto di onde 7
l=*dx; u=and(x>=.5-l,x<=.5+l).*sin(*pi/l*x); la corrispondente soluzione esatta è uex=inline(.*x+and((x-a*t)>=.5-l,(x-a*t)<=.5+l).*... sin(*pi/l*(x-a*t)), x, t, a, l ); I grafici ottenuti con i tre metodi dopo 5 passi di tempo sono rappresentati in Fig.. Si osserva che il metodo di Lax-Wendroff è il meno dissipativo. Inoltre, il metodo di Lax-Friedrichs presenta un errore di dispersione positivo, ovvero l onda numerica tende ad anticipare quella esatta. Per gli altri due metodi vale il contrario. 8
. UPWIND LAX FRIEDRICHS LAX WENDROFF Esatta.8.6.4.....3.4.5.6.7.8.9.9 UPWIND LAX FRIEDRICHS LAX WENDROFF Esatta.8.7.6.5.4.3.....3.4.5.6.7.8.9 5 4 UPWIND LAX FRIEDRICHS LAX WENDROFF Esatta 3 3 4 9 5...3.4.5.6.7.8.9 Figura : Soluzione approssimata del problema iperbolico dopo 5 passi di tempo. Nella figura in alto dt =.75dt cr, nella figura in centro dt = dt cr, nella figura in basso dt =.5dt cr. Per dt = dt cr, i tre metodi forniscono soluzioni praticamente sovrapposte.
UPWIND.8.6.4...4.6.8..4.6.8 LAX FRIEDRICHS.8.6.4...4.6.8..4.6.8 LAX WENDROFF.8.6.4...4.6.8..4.6.8 Figura : Soluzione approssimata del problema iperbolico con condizione iniziale pacchetto di onde dopo 5 passi di tempo. In ciascun grafico, la soluzione esatta è rappresentata in linea tratteggiata, quella approssimata in linea continua.