Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.                  Upcoming SlideShare
×

# Domain changing and creation of a custom mesh for the resolution of partial differential equations through the command line of pde tool

274 views

Published on

Project carried out within the course of Models and numerical methods in engineering. The project proposes a MATLAB code aimed at customization of the geometry and the meshing of the domain for generic partial differential equations problem through the PDE tool from the MATLAB command line.

Published in: Engineering
• Full Name
Comment goes here.

Are you sure you want to Yes No
Your message goes here Are you sure you want to  Yes  No
Your message goes here

Are you sure you want to  Yes  No
Your message goes here

Are you sure you want to  Yes  No
Your message goes here

Are you sure you want to  Yes  No
Your message goes here
• Be the first to like this

### Domain changing and creation of a custom mesh for the resolution of partial differential equations through the command line of pde tool

1. 1. MODIFICA DEL DOMINIO E CREAZIONE DI UNA MESH PERSONALIZZATA PER LA RISOLUZIONE DI EQUAZIONI DIFFERENZIALI ATTRAVERSO LA COMMAND LINE DI PDE TOOL A cura di: Emanuele Zappia
2. 2. Questa relazione ha come scopo quello di illustrare come utilizzare il pacchet- to PDE Tool dalla command line, spiegando come usare alcune funzioni del PDE Toolbox direttamente da essa, in quanto ogni operazione compiuta tramite GUI pu`o essere eﬀettuata anche dalla linea di comando. In particolare si vuole aﬀrontare la problematica del dominio personalizzato, cio`e lavorare con PDE Tool, sempre senza intervenire tramite GUI, su domini dalle geo- metrie personalizzate, avendo quindi la possibilit`a di realizzare anche domini pi`u complessi di quelli ottenibili tramite interfaccia GUI. A tale proposito verranno presentati i programmi Pde geometry.m e Geome- try.m. Inoltre verr`a illustrato il programma meshing.m, tale funzione, consideran- do un domino semplice rettangolare, riesce ad attuare una suddivisione in mesh triangolari di tale dominio, la cui uscita risulta essere perfettamente compatibile con le funzioni del PDE Toolbox; comaptibilit`a veriﬁcata attraverso il programma Pde meshing.m. Pde geometry.m • Mesh generation • Condizioni a bordo • Solving • Plotting 1 %Fem2D con un problema dirichlet per l’equazione di Laplace. 2 %-DU(x,y)=0; x,y su Om 3 %condizioni di dirichlet U(x,y)=x.^2-y.^2 su dOm 4 %Sol esatta: U(x,y)=x.^2-y.^2; 5 %Il problema `e affrontato utilizzando pdetool dalla command line e 6 % considerando un dominio personalizzato , modificabile secondo le esigenze 7 %attraverso la funzione "Geometry.m". 8 function u = Pde_geometry 9 10 11 %{ Mesh generation} 12 global nl 13 nl=4; %Numero dei segmenti in cui divido il bordo del mio dominio 14 15 if nl <=1 16 error(’nl deve essere un numero intero positivio superiore a 2’) 17 end 18 [p,e,t]= initmesh(’Geometry ’); 19 %[p,e,t]= initmesh(’Geometry ’,’Hmax ’,1,’Hgrad ’ ,1.1 ,... 20 % ’Jiggle ’,’mean ’,’JiggleIter ’,5); %Opzioni di jiggle 21 %[p,e,t]= refinemesh(’Geometry ’,p,e,t,’regular ’); 1
3. 3. 22 %Rifinisce la mesh , possiamo fare un ciclo per rifinire pi`u volte la mesh 23 pdegplot(’Geometry ’); axis equal; 24 figure (2) 25 pdemesh(p,e,t), axis equal 26 27 %{ Condizioni a bordo} 28 29 %Andr`o a imporre le condizioni a bordo di tipo dirichlet U(x,y)=x.^2-y.^2 30 %generando la matrice ’C’ delle condizioni a bordo 31 %compatibile con il comando assempde 32 c=[1 1 1 1 1 9 48 48 49 120 46 94 50 45 121 46 94 50] ’; 33 %Linguaggio ascii negli ultimi elementi 34 n=numel(c); 35 C=zeros(n,nl); 36 37 for i=1:nl 38 C(:,i)=c; 39 end 40 41 %{ Solving} 42 u=assempde(C,p,e,t,1,0,0); 43 44 45 %{ Plotting} 46 figure (3) 47 pdeplot(p,e,t,’xydata ’,u,’zdata ’,u,’mesh ’,’on ’) 48 49 50 end Il problema aﬀrontato nei programmi esempliﬁcativi Pde geometry.m e Geome- try.m `e quello relativo alla risoluzione dell’equazione di Laplace con condizioni di tipo Dirichlet; Pde Tool aﬀronta la risoluzione di tale problema con il metodo FEM. − U = 0 x, y ∈ Ω (1) U(x, y) = x2 − y2 x, y ∈ δΩ (2) U(x, y) = x2 − y2 (3) L’equzione 1 `e l’equaizone di Laplace, nella 2 sono scritte le condizioni a con- trono di tipo Dirichlet e nella 3 la soluzione esatta del problema. Il programma Pde geometry.m `e quello principale, cio`e quello dal quale facciamo partire Pde Tool dalla linea di comando ed in cui inizializziamo la mesh, impostiamo le condizioni a contorno e risolviamo il problema; il programma Geometry.m `e relativo unicamente alla deﬁnizione del dominio sul quale risolvere l’equazione, ricordiamo che invece la suddivisione in mesh, per quanto richiamata attraverso la linea di comando, fa sempre capo agli algoritmi utilizzati da Pde Tool. 2
4. 4. Pde geometry.m si suddivide in quattro parti: • Generazione della mesh • Imposizione delle condizioni a bordo • Risoluzione dell’equazione diﬀerenziale • Rappresentazione graﬁca dei risultati ottenuti Nella prima parte inizialmente deﬁnisco nl, che rappresenta il numero di segmen- ti in cui suddivido il bordo del mio dominio, quale variabile globale; tale espediente mi servir`a per poter avere una variabile comune sia in Pde geometry.m che in Geo- metry.m e quindi la stessa suddivisione del bordo del mio dominio per entrambi i programmi. Successivamente richiamiamo la funzione initmesh, il cui argomento sar`a proprio il nostro programma Geometry. Tale funzione inizializzer`a una mesh triangolare nel domino deﬁnito dalla funzione Geometry; la triangolazione usata `e del tipo Delau- nay e, se non aggiunte speciﬁche a tale comando, la grandezza della mesh dipender`a unicamente dalla forma imposta in Geometry. L’uscita di initmesh consta di tre matrici p, e e t. La Point matrix p `e formata da due righe che contengono rispettivamente le ascisse e le ordinate dei nodi della mesh. La Edge matrix e `e invece composta da sette righe: la prima e la seconda contengono gli indici dei nodi iniziali e ﬁnali della mesh presenti sul bordo del dominio nel verso indotto dalla parametrizzaizone del bordo, la terza e la quarta riga sono composte dai valori parametrizzati dei nodi iniziali e ﬁnali della mesh presenti sul bordo del dominio, la quinta riga contiene il numero del segmento del bordo del dominio di riferimento (rispetto al numero nl di nume- ro di segmenti in cui abbiamo suddiviso il nostro dominio), la sesta e settima riga contengono il numero identiﬁcativo dei sottodomini rispettivamente alla sinistra e alla destra del segmento del bordo di dominio di riferimento (questa indicazione ri- sulta banale se si lavora con un unico dominio e non pi`u sottodomini). La Triangle matrix t `e formata da quattro righe, le prime tre contengono gli indici assegnati ai tre vertici dei triangoli che formano la mesh, assegnati in verso antiorario, inﬁne la quarta riga contiene il numero identiﬁcativo del sottodominio di appartenenza dei vari triangoli. Tali matrici sono necessarie per risolvere l’equazione diﬀerenziale attraverso il co- mando assempde di PDE toolbox. 3
5. 5. E’ possibile aggiungere opzioni al comando initmesh per incorporare speciﬁche ri- guardo alla creazione della mesh, `e inoltre possibile riﬁnire la mesh attraverso il comando reﬁnemesh; tali informazioni aggiuntive sono a disposizione nell’help di MATLAB. Per l’imposizione delle condizioni a bordo abbiamo bisogno di costruire una ma- trice, nel nostro caso C, in cui ogni colonna si riferir`a ad un segmento speciﬁco del bordo (alla stessa maniera in cui noi assegniamo tramite GUI le condizioni a bordo su ogni frazione di bordo del nostro dominio). In Pde geometry.m la costruzione di tale matrice `e condizionata dal numero di segmenti in cui ho suddiviso il bordo del mio dominio nl (avremo quindi nl colonne) e inoltre, come da problema, ho imposto le stesse condizioni su tutti i bordi. Soﬀermiamo ora la nostra attenzione sulla costruzione di una colonna tipo di tale matrice, considerando il seguente formalismo per le condizioni a contorno: ˆn · (c u) + qu = g (4) hu = r (5) L’equazione 4 rappresenta una condizione di Neumann generalizzata mentre la 5 quella di Dirichlet. La prima riga contiene la dimensione del sistema di equazioni diﬀerenziali che dobbiamo risolvere, la seconda il numero di condizioni Dirichlet, si devono ora inserire dalla terza alla sesta riga il numero di caratteri che compon- gono le espressioni rispettivamente del coeﬃciente q per la terza e del coeﬃciente g per la quarta nel caso di condizione di tipo Neumann generalizzata facendo (si fa riferimento all’equazione 4), per la quinta e sesta riga dobbiamo invece inserire rispettivamente il numero di caratteri che compongono le espressioni di h ed r in riferimento alla condizione di tipo Dirichlet, equazione 5 (anche in assenza di condi- zioni di tipo Neumann o Dirichlet devo indicare che il numero di caratteri `e 1 al ﬁne di indicare successivamente che tali coeﬃcienti saranno uguali a zero). Successiva- mente, rispetto anche al numero di caratteri indicati nelle righe precedenti necessari per descrivere i vari coeﬃcienti, si inseriranno i valori ASCII che compongono le espressioni di q,g,h ed r, includendo ovviamente anche tutti gli operatori secondo tale standard. Per quanto riguarda la risoluzione dell’equazione dobbiamo scegliere il solver a seconda del tipo di equazione del problema. Per equazioni di tipo ellittico sono a disposizione i solver assempde e adaptmesh, per 4
6. 6. equazioni di tipo iperbolico c’`e il solver hyperbolic e per equazioni di tipo parabolico il solver parabolic. Nel caso in esame l’equazione da risolvere `e quella di Laplace, un caso particolare di equazione ellittica, `e stato quindi utilizzato il solver assempde. Facendo riferimento al seguente formalismo: − · (c u) + au = f (6) Bisogner`a inserire come argomenti di assempde per primo la matrice delle con- dizioni a bordo(nel nostro caso C), poi le matrici p, e e t, ed inﬁne i coeﬃcienti dell’equazione diﬀerenziale da risolvere c,a e f (in riferimento all’equazione 6). La funzione assempde pu`o essere richiamata inoltre con sintassi diverse per ottenere ulteriori informazioni sulla equazione diﬀerenziale in esame. La descrizione completa di tutti i possibili modi di usare assempde esula dallo scopo di questa relazione, ma tutte le informazioni sono disponibili sul manuale del Toolbox. Inﬁne, per stampare i risultati della soluzione, mi sono avvalso del comando pde- plot. E’ stato veriﬁcato che, utilizzando questi comandi, si otterr`a lo stesso risultato utilizzando PDE Tool tramite GUI. Ovviamente l’utilizzo della command line porta con se innumerevoli vantaggi apren- do un pi`u vasto ventaglio di possibilit`a e oﬀrendo un approccio pi`u rigoroso ai problemi risolvibili mediante PDE Tool. 5
7. 7. −1 −0.5 0 0.5 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Figura 1: Il bordo del dominio. −1 −0.5 0 0.5 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Figura 2: Inizializzazione della mesh sul dominio deﬁnito in Geometry.m tramite il comando initimesh. 6
8. 8. −1 −0.5 0 0.5 1 −1−0.8−0.6−0.4−0.200.20.40.60.81 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Figura 3: Soluzione ottenuta tramite l’utilizzo della command line di PDE Tool. 7
9. 9. Geometry.m 1 %File che descrive la geometria del mio dominio secondo le specifiche 2 %adatte per inizializzare la mesh su tale dominio 3 %da pdetool con il comando"initmesh ". 4 %La variabile global nl , mi permette di suddividere 5 % arbitrariamente il bordo del mio dominio in nl segmenti. 6 %La versione in analisi di questo programma `e valida solo per 7 %bordi parametrizzabili secondo una circonferenza . 8 function [x,y]= Geometry(bs ,s) 9 global nl 10 nbs=nl; %Numero dei segmenti in cui divido il bordo del mio dominio 11 12 if nargin ==0 13 x=nbs; 14 return 15 end 16 17 dl=zeros (4,nbs); 18 h=linspace (0 ,2*pi ,nbs +1); 19 20 for i=1: nbs %Matrice dei "nbs" segmenti 21 dl(1,i)=h(1,i); 22 dl(2,i)=h(1,i+1); 23 end 24 dl(3 ,:)=ones(1,nbs); 25 26 %dl=[0 pi/2 pi 3/2* pi; pi/2 pi 3/2* pi 2*pi; 1 1 1 1; 0 0 0 0]; 27 %Matrice dei "nbs" segmenti 28 29 if nargin ==1 30 x=dl(:,bs); 31 return 32 end 33 34 x=zeros(size(s)); 35 y=zeros(size(s)); 36 [m,n]= size(bs); 37 if m==1 & n==1, 38 bs=bs*ones(size(s)); % expand bs 39 elseif m~= size(s,1) | n~= size(s,2), 40 error(’bs must be scalar or of same size as s’); 41 end 42 43 44 n=100; 45 %Imposto il numero di punti sul mio bordo , 46 %ossia quanto voglio discretizzare il mio bordo 47 t=linspace (0 ,2*pi ,n); 48 %r=2*(1+ cos(t)); %Cardioide 49 r=1; %Cerchio 50 %r=cos(t).^2+ sin(t/2); %" Pera in orizzontale" 51 %r=cos(t).^2-sin(t).^2+1; %" Orbitale" 52 xt=r.*cos(t); 53 yt=r.*sin(t); 8
10. 10. 54 t=pdearcl(t,[xt;yt],s,0 ,2*pi); 55 %r=2*(1+ cos(t)); %Cardioide 56 r=1; %Cerchio 57 %r=cos(t).^2+ sin(t/2); %Pera in orizzontale 58 %r=cos(t).^2-sin(t).^2+1; %Orbitale 59 x(:)=r.*cos(t); 60 y(:)=r.*sin(t); 61 end Questa funzione descrive la geometria del mio dominio secondo le speciﬁche adat- te per inizializzare la mesh dalla command line di PDE Tool attraverso il comando initmesh. Per costruire tale funzione ho seguito le istruzioni sulla composizione di pdegeom presenti nell’help di MATLAB; per`o la versione qui presentata `e una variazione di tale funzione. Le caratteristiche principali di Geometry.m sono: • La divisione del bordo del domino `e la stessa di Pde geometry.m grazie alla variabile globale nl • La costruzione della matrice dl `e impostata per ’forme circolari’, va modiﬁcata se si hanno esigenze diverse riguardo la forma del domino • La geometria del dominio proposta `e quella di un cerchio di raggio r, come commenti sono proposte anche forme pi`u complesse Alla variabile nbs all’inizio del programma va assegnato il numero di segmenti di bordo, bisogna poi costruire la matrice dl ed eﬀettuare in maniera corretta la parametrizzazione del bordo. Ogni colonna di dl si riferisce a un segmento del bordo del dominio (quindi nel nostro caso avremo nl colonne), nella prima riga si mette il valore del parametro t da cui inizia il segmento, nella seconda riga il valore di t che segna la ﬁne del segmento. Nella terza riga si deve mettere il numero della regione che si trova a sinistra del segmento, percorrendolo nel verso indotto dalla parametrizzazione, nella quarta il numero della regione che si trova a destra. In generale la matrice dl deve essere costruita seguendo queste direttive. Per quanto riguarda la parametrizzazione del dominio devo prima impostare il nu- mero di punti n del mio bordo per indicare quanto vogliamo che sia ﬁtta la di- scretizzazione dello stesso. In t si memorizzano i valori dei nodi risultanti dalla suddivisione, nelle due variabili di appoggio a e b si memorizzano i valori delle coor- dinate della curva corrispondenti ai valori dei nodi memorizzati in t. Il comando t=pdearcl(t,[xt;yt],s,0,2*pi) serve ad ottenere una suddivisione dell’intervallo che non `e pi`u uniforme, ma dipende dal parametro s che viene passato alla funzione. 9
11. 11. Anche questo comando `e necessario perch´e tutte le funzioni del Toolbox gestiscano bene Geometry.m, in generale bisogner`a modiﬁcare gli ultimi due parametri passati a pdearcl, che sono l’estremo sinistro e quello destro dell’intervallo su cui varia t. Dopodich´e si ricalcolano a e b nei nodi cos`ı ottenuti, e si possono ﬁnalmente asse- gnare tali valori ad x e ad y. I ’:’ nei comandi x(:)=a y(:)=b, servono a mantenere per x ed y la stessa struttura delle variabili a e b, questo `e un accorgimento essenziale perch´e il tutto funzioni bene in quanto l’uscita [x,y] della funzione deve essere correttamente interpretata da initmesh, in virt`u di ci`o il resto del codice che non `e stato commentato in questa sede deve essere scritto nello stesso modo e deve essere necessariamente presente. −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 −1.5 −1 −0.5 0 0.5 1 1.5 Figura 4: Inizializzazione di una mesh tramite il comando initimesh su un dominio non banale di forma ’orbitale’ deﬁnito in Geometry.m. 10
12. 12. meshing.m e Pde meshing.m meshing.m • Inizializzazione • Generazione della matrice t • Generazione della matrice p • Generazione della matrice e 1 function [p,e,t] = meshing(n,Lx ,Ly ,d) 2 3 %{ Inizializzazione } 4 5 %n=4; %n=parametro di infittimento e dal quale dipende la 6 %dimensione della matrice N (nxn) e il numero di nodi (n^2) 7 %Lx=1; Ly =1; d=1; %dimensioni del dominio e posizione nello 8 %spazio rispetto all ’origine 9 if any ([n-1 Lx Ly] <=0) 10 error(’Controllare i parametri del problema ’) 11 end 12 13 N=numgrid(’S’,n+2); 14 N=N(2:end -1 ,2:end -1); 15 %Devo farlo perch`e la matrice numgrid si genera con 0 sui bordi 16 h = Lx/(n-1); 17 k = Ly/(n-1); 18 19 %{ Generazione della matrice t} 20 21 t=ones (4 ,2*(n-1) ^2); 22 %Generazione dei triangoli up 23 count = 1; 24 for i = 1:n-1 25 for j = 1:n-1 26 t(1, count) = N(i,j); 27 t(2, count) = N(i+1,j); 28 t(3, count) = N(i,j+1); 29 count = count +1; 30 end 31 end 32 %Generazione dei triangoli down 33 for i = 2:n 34 for j = 1:n-1 35 t(1, count) = N(i,j); 36 t(2, count) = N(i,j+1); 37 t(3, count) = N(i-1,j+1); 38 count = count +1; 39 end 40 end 41 42 %{ Generazione della matrice p} 43 11
13. 13. 44 p=zeros (2,n^2); 45 for i =1:n 46 for j=1:n 47 p(1,N(i,j)) = h*(j -1)+d; 48 %Il numero di colonne di P corrisponde al valore del nodo in N, 49 %perch`e `e ordinato in ordine crescente columnwise 50 p(2,N(i,j)) = Ly - k*(i -1)+d; 51 %Ly - k perch´e `e decrescente column wise (vedi numgrid) 52 end 53 end 54 55 e=zeros (7 ,4*(n -1)); 56 57 count =1; 58 for i =1:n-1 59 e(1, count) = N(i ,1); 60 e(2, count) = N(i+1 ,1); 61 e(5, count) = count; 62 count = count +1; 63 end 64 65 for j =1:n-1 66 e(1, count) = N(n,j); 67 e(2, count) = N(n,j+1); 68 e(5, count) = count; 69 count = count +1; 70 end 71 72 for i =n: -1:2 %dal basso verso l’alto per preservare l’ordine 73 e(1, count) = N(i,n); 74 e(2, count) = N(i-1,n); 75 e(5, count) = count; 76 count = count +1; 77 end 78 79 for j =n: -1:2 80 e(1, count) = N(1,j); 81 e(2, count) = N(1,j-1); 82 e(5, count) = count; 83 count = count +1; 84 end 85 s=1/(n -1); % parametrizzazione 86 87 r=zeros (1,n -1); 88 for i=0:n-2 89 r(1,i+1)=i*s; 90 end 91 e(3 ,:) =[r r r r]; 92 93 v=zeros (1,n -1); 94 for i=1:n-1 95 v(1,i)=i*s; 96 end 97 e(4 ,:) =[v v v v]; 98 99 l1=ones(1,n-1); l2 =2.* ones(1,n -1); l3 =3.* ones(1,n-1); l4 =4.* ones(1,n-1); 12
14. 14. 100 e(5 ,:)=[l1 l2 l3 l4]; %Lati del dominio rettangolare (1,2,3,4) 101 e(6 ,:) = 1; 102 %Quanti domini e sottodomini ho? (1) ,quindi 6a riga 1, 103 %7a riga 0( domino di dx e sx) 104 105 pdemesh(p,e,t) 106 end Il programma meshing.m `e stato scritto in maniera tale da generare una suddi- visione in mesh di un dominio rettangolare di dimensioni Lx ∗ Ly , su di una griglia avente n nodi per lato e con la possibilit`a di traslare dall’origine tale dominio nello spazio secondo un fattore d (opzione utile ad esempio per studiare il comportamento di soluzioni di equazioni diﬀerenziali intorno o lontano da punti di criticit`a). Le variabili in entrata sono quindi n,Lx,Ly e d ed in uscita abbiamo le tre matrici p, e e t descritte nel paragrafo iniziale, l’uscita di questo programma `e quindi perfettamente compatibile con i comandi di PDE Tool ma la suddivisione in mesh `e aﬃdata al programma stesso e non al comando initmesh. Questo programma si suddivide in: • Inizializzazione del dominio • Generazione della matrice t • Generazione della matrice p • Generazione della matrice e Per inizializzare il dominio dobbiamo deﬁnire o dare come variabili n,Lx,Ly e d. Successivamente generer`o la matrice N di dimensioni [nxn], questa sar`a costruita attraverso il comando numgrid(’S’,n+2) il quale dar`a come uscita una matrice qua- drata (la speciﬁca ’S’ sta per square) di dimensione[n+2xn+2] con prima e ultima riga e prima e ultima colonna formate da zeri e gli n2 elementi disposti columnwise (in ordine crescente dal primo all’ultimo elemento della colonna), dalla matrice cos`ı siﬀatta prenderemo il minore escludendo gli zeri, quindi prima ed ultima colonna e riga, cos`ı da ottenere una matrice con degli elementi numerati in maniera simmetri- ca, ottima base di partenza per la generazione di una mesh triangolare. Deﬁniamo anche i valori h ed k quali distanze che intercorrono tra un nodo e l’altro in direzione x e y. La generazione della matrice t avviene costruendo prima i triangoli con l’ipote- nusa rivolta verso l’alto (up) e successivamente costruendo i triangoli con l’ipotenusa rivolta verso il basso (down), viene tenuto conto della numerazione dei nodi in senso 13
15. 15. antiorario e della scrittura della quarta riga contenente il numero identiﬁcativo del sottodominio di appartenenza dei vari triangoli. La generazione della matrice p, che ricordiamo essere formata da due righe che contengono rispettivamente le ascisse e le ordinate dei nodi, sfrutta il fatto che il numero di colonne di questa matrice `e corrisponde al valore del nodo dell’elemento N(i,j) proprio in virt`u della particolare simmetria di N. La generazione della matrice e avviene per le prime due righe seguendo un pre- ciso verso di parametrizzazione, cio`e, partendo dal primo elemento della matrice, in senso antiorario. Successivamente le altre righe vengono scritte impostando il coeﬃciente di parame- trizzazione s = 1/(n − 1). A ﬁne programma viene anche visualizzata la mesh creata. 1 1.2 1.4 1.6 1.8 2 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 Figura 5: Mesh ottenuta attraverso il programma meshing.m. 14
16. 16. Pde meshing.m La funzione meshing.m viene richiamata in Pde meshing.m per produrre le matrici p, e e t secondo le variabili n, Lx, Ly e d deﬁnite all’interno di Pde meshing.m. Il continuo di tale programma `e analogo a Pde geometry.m ma qui non vi `e necessit`a di richiamare initmesh in quanto abbiamo noi stessi eﬀettuato la suddivisione del dominio in mesh. • Dominio • Mesh generation • Condizioni a bordo • Solving • Plotting 1 %Fem2D con un problema dirichlet per l’equazione di Laplace. 2 %-DU(x,y)=0; x,y su Om 3 % condizioni di dirichlet U(x,y)=x.^2-y.^2 su dOm 4 % Sol esatta: U(x,y)=x.^2-y.^2; 5 %Il problema `e affrontato utilizzando pdetool dalla command line e 6 %utilizzando un programma di generazione della mesh creato ad hoc "Meshing ". 7 function Pde_meshing 8 9 %{ Dominio} 10 11 Lx=1; Ly =1; d=1; 12 13 %{ Mesh generation} 14 15 n=10; 16 [p,e,t] = meshing(n,Lx ,Ly ,d); 17 18 %{ Condizioni a bordo} 19 20 %Andr`o a imporre le condizioni a bordo di tipo dirichlet U(x,y)=x.^2-y.^2 21 %generando la matrice delle condizioni a bordo che legge pdetool "C" 22 c=[1 1 1 1 1 9 48 48 49 120 46 94 50 45 121 46 94 50]; 23 %Linguaggio ascii negli ultimi elementi 24 C=[c;c;c;c]; 25 C=C’; 26 27 %{ Solving} 28 29 u=assempde(C,p,e,t,1,0,0); 30 31 %{ Plotting} 32 33 %figure (2) pdesurf(p,t,u) 34 35 figure (2) 36 pdeplot(p,e,t,’xydata ’,u,’zdata ’,u,’mesh ’,’on ’) 37 38 end 15
17. 17. 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 −3 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 3 Figura 6: Soluzione ottenuta tramite Pde meshing.m sulla mesh deﬁnita in meshing.m. 16
18. 18. Bibliograﬁa  B. D’Acunto (2012), Computational Partial Diﬀerential Equations for Engineering Science, Nova Science Publishers, New York.  L. Cerone (2006), Matlab PDE Toolbox - Risoluzione di equazioni alle derivate parziali utilizzando Matlab, Tesi di laurea in Matematica, Universit`a di Roma La Sapienza. 17