10.07.2015 Views

Implementazione del metodo Galerkin/Elementi–Finiti in 1d

Implementazione del metodo Galerkin/Elementi–Finiti in 1d

Implementazione del metodo Galerkin/Elementi–Finiti in 1d

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Implementazione</strong> <strong>del</strong> <strong>metodo</strong> <strong>Galerk<strong>in</strong></strong>/Elementi–F<strong>in</strong>iti<strong>in</strong> <strong>1d</strong>Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004


Def<strong>in</strong>izione <strong>del</strong> problemaVogliamo risolvere il problema:{−u ′′ = 1 <strong>in</strong> (0, 1)u(0) = u(1) = 0(1)La soluzione di questo problema è :u(x) = 1 x(1 − x)20.12(1/2)*x*(1-x)0.10.080.060.040.0200 0.2 0.4 0.6 0.8 1xCorso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 1


Formulazione deboleLa forma debole <strong>del</strong> problema 1 è:⎧⎪⎨⎪⎩cercare u ∈ V = H 1 0(0, 1)t.c.∫ 1 ∫ 1− u ′′ ϕ dx = 1 · ϕ dx ∀ϕ ∈ V00(2)Integrando per parti si ottiene:−∫ 1u ′′ ϕ dx =∫ 1∫1u ′ ϕ ′ dx − ϕu ′ | 1 = 0u ′ ϕ ′ dx000Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 2


Il <strong>metodo</strong> di <strong>Galerk<strong>in</strong></strong>V hSia V h ⊂ V un sottospazio di dimensione f<strong>in</strong>ita N h e sia {ϕ i } ⊆ V h una base dicercare u⎧⎪ h ∈ V h t.c.⎨⎪ ⎩∫ 10u ′ hϕ ′ i dx =∫ 101 · ϕ i dx ∀ϕ i ∈ V h(3)Possiamo esprimere u h come comb<strong>in</strong>azione l<strong>in</strong>eare dei vettori <strong>del</strong>la base:u h =N h∑u j ϕ j ⇒ u ′ h =j=1N h∑u j ϕ ′ jj=1In questo modo la 3 2 diventa:N h∑∫u j1j=10ϕ ′ iϕ ′ j dx =∫ 10ϕ i dxi = 1, . . . , N hCorso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 3


doveAbbiamo un sistema l<strong>in</strong>eareA ij =∫ 1Au = fϕ ′ iϕ ′ j dx, f i =∫ 1ϕ i dx0e il vettore <strong>del</strong>le <strong>in</strong>cognite u è formato dalle componenti di u h rispetto alla base {ϕ i }0Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 4


Elementi f<strong>in</strong>iti l<strong>in</strong>earidef<strong>in</strong>iamo una triangolazione di (0, 1)φ ix 0 x 1x 2x 3x i-1 x ix i+1x N h-1 x Nh-1 x Nh+1Scegliamo come sottospazio V h lo spazio <strong>del</strong>le funzioni cont<strong>in</strong>ue <strong>in</strong> (0, 1) e l<strong>in</strong>ear<strong>in</strong>ei sotto<strong>in</strong>tervalli.una base di V h è:{ϕ i } = {ϕ i ∈ V h t.c. ϕ i (x j ) = δ ij }Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 5


<strong>Implementazione</strong> <strong>del</strong> <strong>metodo</strong> degli elementi f<strong>in</strong>itiPer costruire la matrice A, spezziamo gli <strong>in</strong>tegrali <strong>in</strong> (0, 1) <strong>in</strong> <strong>in</strong>tegrali sugli<strong>in</strong>tervalli:A ij =∫ 10ϕ ′ iϕ ′ j dx =N h +1∑k=1∫ x kx k−1ϕ ′ iϕ ′ j dxSfruttando il fatto che ϕ i (x) ≠ 0 solo se x ∈ (x i−1 , x i+1 ) otteniamo cheA ij =⎧⎪⎨⎪⎩0 se |i − j| > 1x∫i+12 se i = jϕ ′ ix i−1∫ x ix i−1ϕ ′ iϕ ′ i−1 se j = i − 1x i+1 ∫x iϕ ′ iϕ ′ i+1 se j = i + 1Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 6


• i term<strong>in</strong>i di matrice diversi da 0 sono N h + 2 ∗ (N h − 1) (la matrice è sparsa etridiagonale)• ciascun term<strong>in</strong>e <strong>del</strong>la matricesotto<strong>in</strong>tervalliè dato dalla somma di pochi <strong>in</strong>tegrali suiPosso utilizzare il seguente algoritmo per costruire la matrice A:1. pongo a 0 tutti gli elementi di A2. calcolo tutti gli <strong>in</strong>tegrali su ciascun sotto<strong>in</strong>tervallo3. costruisco gli elementi di A come somma di <strong>in</strong>tegrali parzialiVantaggi:1. estensione al caso multidimensionale2. calcolo paralleloCorso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 7


In ogni sott<strong>in</strong>tervallo (x k−1 , x k ) ho quattro <strong>in</strong>tegrali ≠ 0, posso organizzarli <strong>in</strong> unamatrice locale:A loc =i = k − 1, j = k − 1 i = k − 1, j = ki = k, j = k − 1 i = k, j = kA loc11 andrà sommato a A k−1,k−1A loc12 andrà sommato a A k−1,k etc...Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 8


<strong>Implementazione</strong> <strong>in</strong> matlaba=0;b=1;L= b-a;Nnodi = 100;Nelementi = Nnodi-1;h = L/Nelementi;nodi = [0:h:L];elementi = [1:Nnodi-1;2:Nnodi];nodidirichlet = [1,Nnodi];% ---------------------------------------------------------------% Costruzione <strong>del</strong>la matrice dei coefficientiA = sparse(zeros(Nnodi));% Ciclo sugli elementi:for iel=1:NelementiCorso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 9


% Costruzione matrice localemloc = zeros(2);% ciclo sulle righe <strong>del</strong>la matrice localefor <strong>in</strong>ode =1:2% calcolo il gradiente <strong>del</strong>la% fdf relativa al nodo <strong>in</strong>odeigrad = (-1)ˆ<strong>in</strong>ode/h;% ciclo sulle colonne <strong>del</strong>la matrice localefor jnode =1:2% calcolo il gradiente <strong>del</strong>la% fdf relativa al nodo jnodejgrad = (-1)ˆjnode/h;% calcolo l’<strong>in</strong>tegrale di igrad*jgrad% sull’elemento iel e lo assegno% all’elemento <strong>in</strong>ode,jnode di mlocmloc(<strong>in</strong>ode,jnode) = igrad*jgrad*h;end % f<strong>in</strong>e ciclo sulle colonne <strong>del</strong>la matrice localeend % f<strong>in</strong>e ciclo sulle righe <strong>del</strong>la matrice locale% Assemblaggio:Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 10


endfor <strong>in</strong>ode =1:2for jnode =1:2A(elementi(<strong>in</strong>ode,iel),elementi(jnode,iel)) = ...A(elementi(<strong>in</strong>ode,iel),elementi(jnode,iel)) + ...mloc(<strong>in</strong>ode,jnode);endend% f<strong>in</strong>e ciclo sugli elementi.% ---------------------------------------------------------------% Costruzione <strong>del</strong> term<strong>in</strong>e notof = zeros(Nnodi,1);% Ciclo sugli elementi:for iel=1:Nelementi% Costruzione term<strong>in</strong>e noto localevloc = zeros(2,1);% ciclo sulle righe <strong>del</strong> term<strong>in</strong>e noto localefor <strong>in</strong>ode =1:2% calcolo l’<strong>in</strong>tegrale <strong>del</strong>la fdf% relativa al nodo <strong>in</strong>ode% sull’elemento iel e lo assegnoCorso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 11


% all’elemento <strong>in</strong>ode di vlocvloc(<strong>in</strong>ode) = h/2;end % f<strong>in</strong>e ciclo sulle righe <strong>del</strong>la matrice localeend% Assemblaggio:for <strong>in</strong>ode =1:2b(elementi(<strong>in</strong>ode,iel)) = ...vloc(<strong>in</strong>ode);end% f<strong>in</strong>e ciclo sugli elementi.% ---------------------------------------------------------------% Imposizione <strong>del</strong>le condizioni al contornoA(nodidirichlet,:)=[];A(:,nodidirichlet)=[];f(nodidirichlet)=[];% ---------------------------------------------------------------% Risoluzione <strong>del</strong> sistema l<strong>in</strong>eareuh = [0; A\f; 0];Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 12


EsercizioDimostrare che, <strong>in</strong> questo caso, il <strong>metodo</strong> fornisce la soluzione esatta nei nodi.Corso di Metodi Numerici per La Microelettronica, 2 o Semestre A.A 2003–2004 13

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!