51
FEM -3 FEM -3 G. Puppo

FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Embed Size (px)

Citation preview

Page 1: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

FEM -3FEM -3

G. Puppo

Page 2: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

RiassuntoRiassunto

Autovalori e aliasingProblema di convezione-diffusione agli

elementi finitiProblema di convezione-diffusione alle

differenze finiteStabilizzazione

Page 3: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Autovalori esatti e Autovalori esatti e approssimatiapprossimati

Per studiare l’andamento degli autovalori esatti del problema del filo elastico e degli autovalori approssimati, uso questa function:

function [landa_exa,landa_disc]=autovalori_1d(n)% Calcola i primi autovalori esatti del problema del % filo elastico, e i corrispondenti % autovalori del problema discretoh=1/(n+1);for l=1:n landa_exa(l)=l^2*pi^2; landa_disc(l)=(2-2*cos(l*pi*h));endlanda_disc=landa_disc/h^2;

Page 4: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Ottengo questi risultatiN = 19

N è il numero di nodi interni

Page 5: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

N = 49

N. B.: Solo i primi autovalori sono approssimati con precisione

Page 6: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

In due dimensioni l’andamento degli autovalori è simile

N = 9

N è il numero di nodi interni per lato

Page 7: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

AliasingAliasingIn questa sezione vorrei illustrare la rappresentazione delle autofunzioni del problema del filo elastico su una griglia.Considereremo il caso di una funzione che può essere risolta su una determinata griglia e il caso di una autofunzione troppo oscillante per essere individuata correttamente sulla griglia assegnata.

Su una griglia con 9 nodi interni, quindi con 9 autovettori linearmente indipendenti, consideriamo le seguenti funzioni:u(x) = sin(7 π x)u(x) = sin(10 π x)u(x) = sin(11 π x)

Page 8: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

u(x) = sin(7 π x)

Il grafico di u(x) è:La griglia “vede” questi dati:

Questi punti individuano l’autovettore sin( 7 π x j ), j = 1,…,9

Page 9: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

u(x) = sin(10 π x)

Il grafico di questa funzione è:

La griglia “vede” questi dati:Quindi, su questa griglia, la funzione u(x) = sin(10 π x)è equivalente alla funzione nulla

Page 10: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Il grafico di questa funzione è:

u(x) = sin(11 π x)

La griglia “vede” questi valori:

Questi valori però sono gli stessi che ottengo su questa griglia con la funzione u(x) = -sin(9 π x):

La griglia quindi non distingue fra queste due funzioni

La nostra griglia “vede” la funzione verde, più “lenta”, al posto della funzione blu

Page 11: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

u(x) = sin(14 π x)

La funzione blu ha gli stessi valori sulla griglia della funzione verde, u(x) = -sin(6 π x). Il sistema “vede” solo la funzione verde.

Page 12: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Problema di convezione -Problema di convezione -diffusionediffusione

Vogliamo risolvere il problema:

Nel seguito considereremo sempre un carico uniforme, f(x,y)=1.

Qui β e’ il vettore velocita’, che considereremo costante.

Page 13: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Metodo agli elementi finitiMetodo agli elementi finitiSe uso elementi finiti, con elementi P1 su una triangolazione uniforme, ottengo una matrice con questa struttura:

Page 14: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Matrice di rigiditàMatrice di rigidità

Costruisco la matrice di rigidità come matrice tridiagonale a blocchi

Se N è il numero di punti interni di ogni lato, allora la matrice A h è una matrice N 2 per N 2, e i singoli blocchi sono N per N.

Page 15: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

I blocchi G sono tridiagonali ed hanno la seguente struttura:

I numeri di Peclet sono definiti dalle relazioni

e:

dove:

Page 16: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

I blocchi B sono bidiagonali ed hanno la seguente struttura.Sopra la diagonale principale i blocchi sono:

mentre sotto la diagonale principale abbiamo:

Page 17: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

functionfunction mat_cd2d

function a=mat_cd2d(n,nu,beta)% A=MAT_CD2D(N,NU,[A,B]) calcola la matrice FEM % di convezione-diffusione sul quadrato, % con N nodi interni su ogni lato.% Nu e' la diffusione, BETA e' il vettore velocita'.betax=beta(1); betay=beta(2);h=1/(n+1); %ampiezza di grigliapex=betax*h/(2*nu) %numero di Peclet lungo xpey=betay*h/(2*nu) %numero di Peclet lungo ypex=pex/3; pey=pey/3;

Page 18: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

% blocco diagonaleb1=(-1+pex+2*pey)*ones(n-1,1);b2=(-1-pex-2*pey)*ones(n-1,1);g=4*eye(n)+diag(b2,-1)+diag(b1,1);% g contiene i blocchi sulla diagonalefor i=1:n inizio=(i-1)*n+1; fine=i*n; a(inizio:fine, inizio:fine)=g;end% costruisce le quattro diagonali lontaneb1=(-1+2*pex+pey)*ones(n^2-n,1);b2=(-1-2*pex-pey)*ones(n^2-n,1);a=a +diag(b1,n) +diag(b2,-n);c=(pex-pey)*ones(n^2-n+1,1); c(1:n:n^2-n+1,1)=0;a=a+diag(c,n-1)-diag(c,-n+1);a=nu*a;

Page 19: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Struttura del programmaStruttura del programma

Costruisce la matrice di rigidità.Costruisce il vettore di carico.Risolve il sistema lineare.Memorizza la soluzione su una matrice per

permetterne la visualizzazione

La function che calcola la soluzione del problema di convezione-diffusione ha la seguente struttura

Page 20: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

FEM e Differenze FiniteFEM e Differenze Finite

FEM : utilizza elementi P1 agli elementi finiti. DIF : utilizza differenze finite centrate UPW : è basato su differenze finite upwind SUP : costruisce il metodo agli elementi finiti

SUPG stabilizzato

Nel caso di carico uniforme e griglia uniforme, il metodo FEM e il metodo alle differenze finite si distinguono solo per la struttura diversa della matrice di rigidità. Uso quindi lo stesso programma per provare metodi diversi. In particolare:

Page 21: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

functionfunction membrana_cd membrana_cd

function uquad=membrana_cd(n,nu,beta,metodo)% UQUAD=membrana(N) trova la soluzione del% problema di convezione diffusione, sul % quadrato unitario, con N nodi interni per % lato, con un carico uniforme.% METODO='FEM' (default) utilizza la matrice % degli elementi finiti% METODO='DIF' utilizza la matrice alle% differenze finite centraliif nargin < 4 metodo='FEM'end Scelta di default

Page 22: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

h = 1/(n+1);

if metodo=='FEM'

%Metodo FEM

a=mat_cd2d(n,nu,beta);

elseif metodo =='DIF'

%Metodo alle differenze finite

a=mat_cd2d_fd(n,nu,beta);

end

Sceglie il metodo da applicare:

Page 23: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

b=h^2*ones(n^2,1);

u=a\b;

% scrive u come array bidimensionale, a partire da (1,1)

for i=1:n

inizio=(i-1)*n+1;

fine=i*n;

uu(:,i)=u(inizio:fine);

end

Risolve il sistema e memorizza la soluzione su un array bidimensionale

Page 24: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

% aggiunge le condizioni al bordo

uquad(2:n+1,2:n+1)=uu; % aggiunge la cornice

for i=1:n+2

uquad(n+2,i)=0;

uquad(i,n+2)=0;

end

Aggiunge le condizioni di Dirichlet omogenee al bordo:

Page 25: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

scriptscript script_2dcd script_2dcdInfine, uso questo script per lanciare il programma:

% Calcola la soluzione del problema di convezione% diffusione e disegna la soluzione% METODO='FEM' (default) utilizza la matrice % degli elementi finiti% METODO='DIF' utilizza la matrice alle% differenze finite centralin=19; nu=0.05; beta=[-1,1];metodo='FEM'uquad=membrana_cd(n,nu,beta,metodo);x=linspace(0,1,n+2);y=linspace(0,1,n+2);mesh(x,y,uquad)

Page 26: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Ottengo questo grafico:

Direzione del vento

Page 27: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Cambiando la direzione del vento:

Page 28: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Diminuendo ν aumenta la ripidità della soluzione nello strato limite

I dati sono: n=19; nu=0.03; beta=[1,-1];

I numeri di Peclet sono:

pex = 0.8333pey = -0.8333

Page 29: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Diminuendo ν ancora, la soluzione comincia ad oscillare:

Page 30: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

EserciziEsercizi

Studiare il comportamento della soluzione in funzione del numero di Peclet. La comparsa delle oscillazioni spurie dipende dalla direzione del vento? Posso stabilire in base ad un unico parametro Pe = Pe (Pex, Pey) se ci saranno oscillazioni spurie?

Studiare lo spessore dello strato limite in funzione di ν e di h, con β=(-1,0), calcolando la larghezza della regione in cui la soluzione varia dal suo valore massimo a zero.

Page 31: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Differenze FiniteDifferenze Finite

I comandi:

n=19; nu=0.05; beta=[-1,1];metodo=‘DIF'

lanciano la soluzione del problema di convezione-diffusione con il metodo delle differenze finite centrate. Qualitativamente, ottengo la stessa soluzione che avevo calcolato con gli stessi dati ed il metodo FEM.

Page 32: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

La matrice di convezione-diffusione alle differenze finite ha una struttura diversa dalla matrice di rigidità degli elementi finiti:

Infatti i blocchi fuori dalla diagonale principale sono diagonali.

Page 33: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Matrice alle differenze finiteMatrice alle differenze finite

La matrice alle differenze finite ha la stessa struttura tridiagonale a blocchi della matrice di rigidita’ agli elementi finiti:

Page 34: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

I blocchi lungo la diagonale principale sono ancora tridiagonali:

Questa volta i coefficienti sono dati dalle seguenti formule:

Page 35: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

I blocchi sopra e sotto la diagonale principale sono diagonali.I blocchi sopra la diagonale principale sono:

I blocchi sotto la diagonale principale sono:

Page 36: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

functionfunction mat_cd2d_fd mat_cd2d_fd

La function che crea la matrice per il metodo alle differenze finite è:

function a=mat_cd2d_fd(n,nu,beta)% A=MAT_CD2D_FD(N,NU,[A,B]) calcola la matrice % alle differenze finite% di convezione-diffusione sul quadrato, % con N nodi interni su ogni lato.% Nu e' la diffusione beta e' il vettore velocita'.betax=beta(1); betay=beta(2);h=1/(n+1); %ampiezza di grigliapex=betax*h/(2*nu) %numero di Peclet lungo xpey=betay*h/(2*nu) %numero di Peclet lungo y

Page 37: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

b1=(-1+pey)*ones(n-1,1); b2=(-1-pey)*ones(n-1,1); g=4*eye(n)+diag(b2,-1)+diag(b1,1);% g contiene i blocchi sulla diagonalefor i=1:n inizio=(i-1)*n+1; fine=i*n; a(inizio:fine, inizio:fine)=g;end% costruisce le due diagonali lontaneb1=(-1+pex)*ones(n^2-n,1); b2=(-1-pex)*ones(n^2-n,1); a=a +diag(b1,n) +diag(b2,-n);a=nu*a;

Page 38: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Anche con le differenze finite centrate ottengo oscillazioni spurie, se il numero di Peclet è troppo grande:

n=19; nu=0.01; beta=[-1,1];

Page 39: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Metodo UpwindMetodo Upwind

Quando υ è molto piccolo rispetto a β, mi aspetto che il compor-tamento della soluzione del problema di convezione diffusione si avvicinerà a quella del problema iperbolico con υ=0.

I metodi alle differenze finite per problemi iperbolici utilizzano discretizzazioni upwind per la derivata prima. Infatti un metodo basato sulla discretizzazione centrale risulta instabile.

Mi aspetto quindi di poter migliorare la soluzione scegliendo una discretizzazione upwind della derivata prima anche per il problema di convezione diffusione.

Page 40: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Matrice UpwindMatrice UpwindLa matrice alle differenze finite per il problema di convezione-diffusione con metodo upwind ha la stessa struttura della matrice alle differenze finite con differenze centrali

Page 41: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

function a=mat_cd2d_upw(n,nu,beta)% A=MAT_CD2D_UPW(N,NU,[A,B]) calcola la matrice % alle differenze finite con derivate upwind% di convezione-diffusione sul quadrato, % con N nodi interni su ogni lato.% Nu e' la diffusione, beta e' il vettore velocita'.betax=beta(1); betay=beta(2);h=1/(n+1); %ampiezza di grigliapex=betax*h/(2*nu) %numero di Peclet lungo xpey=betay*h/(2*nu) %numero di Peclet lungo ybm=(betay-abs(betay))/2; bp=(betay+abs(betay))/2;am=(betax-abs(betax))/2; ap=(betax+abs(betax))/2;

Il listato della function che calcola la matrice per il metodo upwind é:

Page 42: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

b1=(-1+bm*h/nu)*ones(n-1,1); b2=(-1-bp*h/nu)*ones(n-1,1); g=(4+(abs(betax)+abs(betay))*h/nu)*eye(n)+diag(b2,-1)+diag(b1,1);% g contiene i blocchi sulla diagonalefor i=1:n inizio=(i-1)*n+1; fine=i*n; a(inizio:fine, inizio:fine)=g;end% costruisce le due diagonali lontaneb1=(-1+am*h/nu)*ones(n^2-n,1); b2=(-1-ap*h/nu)*ones(n^2-n,1); a=a +diag(b1,n) +diag(b2,-n);a=nu*a;

Page 43: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Considero il problema: n=19; nu=0.01; beta=[-1,1]

Soluzione alle differenze centrali Soluzione Upwind

n=19; nu=0.01; beta=[-1,1]

Page 44: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Con il metodo upwind, ottengo una soluzione stabile anche se non c’è nessun punto di griglia all’interno dello strato limite.

n=19; nu=0.001; beta=[-1,1];

I due numeri di Peclet valgono circa 25.

Page 45: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Metodo SUPGMetodo SUPG

Il metodo SUPG è derivato dal metodo Upwind.Si inserisce una correzione stabilizzante nella matrice di rigidità, che tiene conto della direzione del vento.

Page 46: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Il listato della function che calcola la matrice di rigidità per il metodo FEM con correzione SUPG é:

function a=mat_cd2d_supg(n,nu,beta)% A=MAT_CD2D(N,NU,[A,B]) calcola la matrice FEM % di convezione-diffusione sul quadrato, % con stabilizzazione SUPG% con N nodi interni su ogni lato.% Nu e' la diffusione, BETA e' il vettore velocita'.betax=beta(1); betay=beta(2);h=1/(n+1); %ampiezza di grigliapex=betax*h/(2*nu) %numero di Peclet lungo xpey=betay*h/(2*nu) %numero di Peclet lungo ypex=pex/3; pey=pey/3;

Page 47: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

% Calcolo del coefficiente taupe= norm(beta)*h/(2*nu)if pe <1 csi=pe;else csi=1;endtau=csi*h/(2*norm(beta)), tau=tau/nu;

Calcolo del coefficiente di stabilizzazione:

Page 48: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

% Calcola le correzioni SUPG alle diagonalisupg0=tau*2*(betax^2+betax*betay+betay^2);supg=-tau*betay*(betax+betay);b1=(-1+pex+2*pey+supg)*ones(n-1,1);b2=(-1-pex-2*pey+supg)*ones(n-1,1);g=(4+supg0)*eye(n)+diag(b2,-1)+diag(b1,1);% g contiene i blocchi sulla diagonalefor i=1:n inizio=(i-1)*n+1; fine=i*n; a(inizio:fine, inizio:fine)=g;end

Calcolo del blocco diagonale della matrice di rigidità

Page 49: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

% costruisce le quattro diagonali lontanesupg=-tau*betax*(betax+betay);b1=(-1+2*pex+pey+supg)*ones(n^2-n,1);b2=(-1-2*pex-pey+supg)*ones(n^2-n,1);a=a +diag(b1,n) +diag(b2,-n);supg=tau*betax*betay;c=(pex-pey)*ones(n^2-n+1,1); cs=supg*ones(n^2-n+1,1); c(1:n:n^2-n+1,1)=0;cs(1:n:n^2-n+1,1)=0;a=a+diag(c+cs,n-1)+diag(-c+cs,-n+1);a=nu*a;

Calcolo dei blocchi fuori della diagonale principale della matrice di rigidità

Page 50: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Considero il problema: n=19; nu=0.01; beta=[-1,1]

Soluzione FEM Soluzione FEM stabilizzato

n=19; nu=0.01; beta=[-1,1]

Page 51: FEM -3 G. Puppo. Riassunto Autovalori e aliasing Problema di convezione-diffusione agli elementi finiti Problema di convezione-diffusione alle differenze

Se abbasso nu: n=19; nu=0.01; beta=[-1,1]

Soluzione FEM Soluzione SUPG

Questa volta, la stabilizzazione SUPG non é sufficiente