domain changing and creation of a custom mesh for the resolution of partial differential equations...

18
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

Upload: emanuele-zappia

Post on 06-Aug-2015

31 views

Category:

Engineering


0 download

TRANSCRIPT

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

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

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

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 puo

essere effettuata anche dalla linea di comando.

In particolare si vuole affrontare la problematica del dominio personalizzato, cioe

lavorare con PDE Tool, sempre senza intervenire tramite GUI, su domini dalle geo-

metrie personalizzate, avendo quindi la possibilita di realizzare anche domini piu

complessi di quelli ottenibili tramite interfaccia GUI.

A tale proposito verranno presentati i programmi Pde geometry.m e Geome-

try.m.

Inoltre verra 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; comaptibilita verificata 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

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

22 %Rifinisce la mesh , possiamo fare un ciclo per rifinire piu 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 %Andro 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 affrontato nei programmi esemplificativi Pde geometry.m e Geome-

try.m e quello relativo alla risoluzione dell’equazione di Laplace con condizioni di

tipo Dirichlet; Pde Tool affronta 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, cioe 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 definizione 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

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

Pde geometry.m si suddivide in quattro parti:

• Generazione della mesh

• Imposizione delle condizioni a bordo

• Risoluzione dell’equazione differenziale

• Rappresentazione grafica dei risultati ottenuti

Nella prima parte inizialmente definisco nl, che rappresenta il numero di segmen-

ti in cui suddivido il bordo del mio dominio, quale variabile globale; tale espediente

mi servira 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 sara proprio

il nostro programma Geometry. Tale funzione inizializzera una mesh triangolare nel

domino definito dalla funzione Geometry ; la triangolazione usata e del tipo Delau-

nay e, se non aggiunte specifiche a tale comando, la grandezza della mesh dipendera

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 finali 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

finali 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 identificativo 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 piu 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, infine la

quarta riga contiene il numero identificativo del sottodominio di appartenenza dei

vari triangoli.

Tali matrici sono necessarie per risolvere l’equazione differenziale attraverso il co-

mando assempde di PDE toolbox.

3

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

E’ possibile aggiungere opzioni al comando initmesh per incorporare specifiche ri-

guardo alla creazione della mesh, e inoltre possibile rifinire la mesh attraverso il

comando refinemesh; 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 riferira ad un segmento specifico 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.

Soffermiamo 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

differenziali 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 coefficiente q per la terza e del coefficiente

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 fine

di indicare successivamente che tali coefficienti saranno uguali a zero). Successiva-

mente, rispetto anche al numero di caratteri indicati nelle righe precedenti necessari

per descrivere i vari coefficienti, 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

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

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)

Bisognera 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 infine i coefficienti

dell’equazione differenziale da risolvere c,a e f (in riferimento all’equazione 6).

La funzione assempde puo essere richiamata inoltre con sintassi diverse per ottenere

ulteriori informazioni sulla equazione differenziale 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.

Infine, per stampare i risultati della soluzione, mi sono avvalso del comando pde-

plot.

E’ stato verificato che, utilizzando questi comandi, si otterra lo stesso risultato

utilizzando PDE Tool tramite GUI.

Ovviamente l’utilizzo della command line porta con se innumerevoli vantaggi apren-

do un piu vasto ventaglio di possibilita e offrendo un approccio piu rigoroso ai

problemi risolvibili mediante PDE Tool.

5

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

−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 definito in Geometry.m tramite ilcomando initimesh.

6

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

−1−0.5

00.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

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

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

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

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 specifiche 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; pero 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

modificata 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 piu complesse

Alla variabile nbs all’inizio del programma va assegnato il numero di segmenti

di bordo, bisogna poi costruire la matrice dl ed effettuare 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 fine 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 fitta 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 piu uniforme, ma dipende dal parametro s che viene passato alla funzione.

9

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

Anche questo comando e necessario perche tutte le funzioni del Toolbox gestiscano

bene Geometry.m, in generale bisognera modificare gli ultimi due parametri passati

a pdearcl, che sono l’estremo sinistro e quello destro dell’intervallo su cui varia t.

Dopodiche si ricalcolano a e b nei nodi cosı ottenuti, e si possono finalmente 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 perche il tutto funzioni

bene in quanto l’uscita [x,y] della funzione deve essere correttamente interpretata

da initmesh, in virtu di cio 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 nonbanale di forma ’orbitale’ definito in Geometry.m.

10

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

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 perche 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

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

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 %perche e ordinato in ordine crescente columnwise

50 p(2,N(i,j)) = Ly - k*(i-1)+d;

51 %Ly - k perche 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

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

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 possibilita di traslare dall’origine tale dominio nello

spazio secondo un fattore d (opzione utile ad esempio per studiare il comportamento

di soluzioni di equazioni differenziali intorno o lontano da punti di criticita).

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 affidata 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 definire o dare come variabili n,Lx,Ly e d.

Successivamente generero la matrice N di dimensioni [nxn], questa sara costruita

attraverso il comando numgrid(’S’,n+2) il quale dara come uscita una matrice qua-

drata (la specifica ’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ı

siffatta 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.

Definiamo 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

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

antiorario e della scrittura della quarta riga contenente il numero identificativo 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 virtu della particolare simmetria di N.

La generazione della matrice e avviene per le prime due righe seguendo un pre-

ciso verso di parametrizzazione, cioe, partendo dal primo elemento della matrice, in

senso antiorario.

Successivamente le altre righe vengono scritte impostando il coefficiente di parame-

trizzazione s = 1/(n− 1).

A fine programma viene anche visualizzata la mesh creata.

1 1.2 1.4 1.6 1.8 21

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

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

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 definite all’interno di Pde meshing.m.

Il continuo di tale programma e analogo a Pde geometry.m ma qui non vi e necessita

di richiamare initmesh in quanto abbiamo noi stessi effettuato 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 %Andro 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

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

11.1

1.21.3

1.41.5

1.61.7

1.81.9

2

11.1

1.21.3

1.41.5

1.61.7

1.81.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 definita in meshing.m.

16

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

Bibliografia

[1] B. D’Acunto (2012), Computational Partial Differential Equations for

Engineering Science, Nova Science Publishers, New York.

[2] L. Cerone (2006), Matlab PDE Toolbox - Risoluzione di equazioni alle derivate

parziali utilizzando Matlab, Tesi di laurea in Matematica, Universita di Roma La

Sapienza.

17