Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... ·...

25
Isacco Perin Isacco Perin University of Verona University of Verona Master's Degree in Mathematics and Applications Master's Degree in Mathematics and Applications Isacco Perin (University of Verona) 13/05/2013 Un paio d'esempi completi con Un paio d'esempi completi con FreeFem++ FreeFem++ Un paio d'esempi completi con Un paio d'esempi completi con FreeFem++ FreeFem++

Transcript of Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... ·...

Page 1: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco PerinIsacco Perin

University of VeronaUniversity of VeronaMaster's Degree in Mathematics and ApplicationsMaster's Degree in Mathematics and Applications

Isacco Perin (University of Verona) 13/05/2013

Un paio d'esempi completi con Un paio d'esempi completi con FreeFem++ FreeFem++

Un paio d'esempi completi con Un paio d'esempi completi con FreeFem++ FreeFem++

Page 2: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

FreeFem++FreeFem++IntroduzioneIntroduzione

FreeFem++FreeFem++ è un codice per la risoluzione di PDE mediante il è un codice per la risoluzione di PDE mediante il metodo degli elementi finiti. metodo degli elementi finiti. FreeFem++FreeFem++ è un codice per la risoluzione di PDE mediante il è un codice per la risoluzione di PDE mediante il metodo degli elementi finiti. metodo degli elementi finiti.

L'obiettivo di tale presentazione è di fornire, mediante un paio d'esempi, le linee guida per programmare in FreeFem++.

Come linguaggio di programmazione, esso ha una sintassi di base simile al C++, pertanto è possibile dichiarare variabili e funzioni all'interno di uno script FreeFem++, eseguire operazioni aritmetiche, utilizzare cicli o istruzioni condizionali.

Page 3: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

FreeFem++FreeFem++IntroduzioneIntroduzione

Codice e software sono stati sviluppati da O. Pìronneau, F. Hecht, e A. Le Hyaric.

Il software e il manuale d'uso sono scaricabili gratuitamente da internet al link http://www.freefem.org

Page 4: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Membrana ElasticaMembrana ElasticaDefinizione del ProblemaDefinizione del Problema

Mediante la definizione di opportune PDE è possibile esprimere in termini matematici situazioni fisiche. Dunque, al fine di mostrare l'applicabilità di un algoritmo scritto in FreeFem++ alla realtà, gli esempi trattati in seguito si baseranno su di una specifica situazione fisica.

Come reagisce una membrana elastica attaccata ad un supporto rigido se sottoposta ad un carico? Dal punto di vista matematico possiamo esprimere tale situazione nel modo seguente:

Problema: Membrana ElasticaProblema: Membrana ElasticaProblema: Membrana ElasticaProblema: Membrana Elastica

Page 5: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Definizione dal punto di vista MatematicoDefinizione dal punto di vista MatematicoDefinizione del ProblemaDefinizione del Problema

Consideriamo una membrana elastica attaccata ad un supporto rigido dunque si ha che

Consideriamo una forza esercitata su ogni elemento della superficie

Per ottenere lo spostamento verticale della membrana si deve risolvere la seguente equazione di Laplace

dx=dx1dx2 .

∂Ω=Γ .

, f (x)dx ,

,φ(x) ,

−Δφ( x)= f ( x) , x∈Ω .

ΩΓ ,

Page 6: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Condizioni al BordoCondizioni al BordoDefinizione del ProblemaDefinizione del Problema

Per quanto riguarda le condizioni da imporre al bordo, esse dipendono dalla situazione fisica trattata. Di seguito presentiamo delle situazioni in cui possiamo adottare condizioni di Dirichlet o di Neumann omogenee.

- La membrana è fissata al supporto planare. Allora, la condizione al bordo da adottare è di Dirichlet omogenea ed è la seguente:

- Il supporto non è planare, ma è un elevazione che si esprime formalmente con Allora, la condizione al bordo da adottare è di Dirichlet non omogenea ed è la seguente:

φ( x)=0, x∈Γ .

φ( x)=z( x) , x∈Γ .

z( x) .

Condizioni al bordoCondizioni al bordoCondizioni al bordoCondizioni al bordo

Page 7: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Condizioni al BordoCondizioni al BordoDefinizione del ProblemaDefinizione del Problema

- La membrana è fissata ad una parte del supporto mentre è lasciata semplicemente appesa nella parte restante, Allora, per la rigidità della membrana, le condizioni al bordo da adottare sono di Neumann omogenee lungo e di Dirichlet omogenee lungo

Γ1

Γ2.

Γ=Γ1∪Γ2.

φ( x)=0, x∈Γ1 ,

∂φ( x)∂n

=0, x∈Γ2 .

Γ2 Γ1 .

Ovviamente, in tal caso, il bordo è

Page 8: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Esistenza e UnicitàEsistenza e UnicitàProblema di LaplaceProblema di Laplace

L'equazione di Laplace precedentemente definita, con opportune ipotesi, ammette un'unica soluzione.

ATTENZIONE:Ricordiamo che FreeFem++ adotta il metodo degli elementi finiti ed esso, per qualsiasi tipo di elementi finiti si scelgano, è basato sulla formulazione debole di una PDE.Infatti, FreeFem++ risolve equazioni alle derivate parziali espresse in formulazione debole.

Dunque, prima di mostrare l'algoritmo adottato per risolvere il problema della membrana elastica, dobbiamo mostrare la formulazione debole di tale problema.

Esistenza e UnicitàEsistenza e UnicitàEsistenza e UnicitàEsistenza e Unicità

Page 9: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Formulazione DeboleFormulazione DeboleProblema di LaplaceProblema di Laplace

La formulazione forte (o classica) del problema della membrana elastica con condizioni al bordo di Dirichlet omogenee è

La formulazione debole di tale PDE è la seguente

dove

−Δφ( x)= f ( x) , x∈Ωφ(x)=0, x∈Γ .

∫Ω∇ φ ∇ v=∫Ω

f v , ∀ v∈H 1(Ω) ,

H 1(Ω)={v∈L2(Ω) , ∇ v∈(L2(Ω))×(L2(Ω))} .

Page 10: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioEquazione di Laplace con condizioni di Dirichlet omogeneeEquazione di Laplace con condizioni di Dirichlet omogenee

Presentiamo, dunque, il primo dei due esempi.

Determinare la soluzione dell'equazione di Laplace in FreeFem++ nel caso in cui è un ellisse avente lunghezza del semiasse maggiore 2 e di quello minore e con condizioni al bordo di Dirichlet omogenee.

L'algoritmo è riportato di seguito, con opportuni commenti.

1, f (x)=1Ω

EsempioEsempioEsempioEsempio

Page 11: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioEquazione di Laplace con condizioni di Dirichlet omogeneeEquazione di Laplace con condizioni di Dirichlet omogenee

// Declaration of some global parametersreal theta=4.*pi/3., a=2., b=1.;

// Force functionfunc f = 1.0;

// Defining the boundary as an ellipseborder gamma1(t=0,2*pi) {x=a*cos(t); y=b*sin(t);}

// Meshmesh M = buildmesh(gamma1(80));plot(M, wait=true, ps="Mesh1.eps");

Osservazione: con il comando 'buildmesh' viene costruita una triangolazione del dominio.

Page 12: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioEquazione di Laplace con condizioni di Dirichlet omogeneeEquazione di Laplace con condizioni di Dirichlet omogenee

// Build the finite element space using P2 elementsfespace Vh(M,P2);

// Define u and w as piecewise-P2 functionVh uh, w;

// Variational Formulation of our equationproblem Laplace(uh,w) =

int2d(M)(dx(uh)*dx(w)+dy(uh)*dy(w))- int2d(M)(f*w) + on(gamma1,uh=0); // Dirichlet boundary condition

Osservazione: la PDE viene discretizzata adottando il metodo degli elementi finiti del secondo ordine sulla triangolazione del dominio.

// Solve the PDELaplace;

Page 13: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioEquazione di Laplace con condizioni di Dirichlet omogeneeEquazione di Laplace con condizioni di Dirichlet omogenee

// Plot of the solutionplot(uh, wait=true, ps="Solution1.eps");

Page 14: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

GraficiGraficiEquazione di Laplace con condizioni di Dirichlet omogeneeEquazione di Laplace con condizioni di Dirichlet omogenee

Di seguito sono riportati i grafici ottenuti.

La figura a sinistra rappresenta la mesh adottata, mentre quella a destra rappresenta le curve di livello relative alla soluzione numerica della PDE data.

Page 15: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

Procedura generaleProcedura generaleProgrammare in FreeFem++Programmare in FreeFem++

La procedura seguita in tale algoritmo, può essere generalizzata nel modo seguente:

- Definisco il bordo del dominio;

- Costruisco la mesh;

- Definisco lo spazio su cui applico il metodo degli elementi finiti;

- Definisco le opportune funzioni su tale spazio;

- Inserisco la formulazione variazionale della PDE che voglio risolvere.

Page 16: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

Nel secondo esempio verifichiamo i risultati ottenuti nel primo.

L'idea è di modificare la situazione precedente in modo tale da considerare una PDE di cui conosciamo la soluzione esatta per poterla confrontare con quella che si ottiene con FreeFem++.

Consideriamo pertanto come bordo il circolo unitario e come forzante la funzione

EsempioEsempioEsempioEsempio

f ( x)=−4(cos(x2+ y2−1)−( x2+ y2)sin (x2+ y2−1)) .

Page 17: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

Come condizioni al bordo consideriamo delle condizioni miste: di Neumann non omogenee lungo una parte del bordo, mentre di Dirichlet omogenee lungo la rimanente parte.

Sotto le ipotesi fatte, la soluzione esatta dell'equazione di Laplace è data da

Dunque, nel seguente algoritmo calcoleremo l'errore in norma tra la soluzione esatta e quella ottenuta in FreeFem++,

φ( x)=sin (x2+ y2−1) .

ε=∥φ−φF∥L2 .

L2

Page 18: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

Inoltre, stimeremo l'ordine di convergenza del metodo calcolando prima l'errore ottenuto con punti di discretizzazione lungo il bordo e poi quello ottenuto con punti.La stima si ottiene calcolando il logaritmo del rapporto di tali errori.

Di seguito è riportato l'algoritmo scritto in FreeFem++.

n2n

Page 19: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

// Declaration of some global parametersreal theta=4.*pi/3., a=1., b=1.;real[int] L2error(2); // an array with 2 values

// Force functionfunc f=-4*(cos(x^2+y^2-1)-(x^2+y^2)*sin(x^2+y^2-1));

// Exact Solutionfunc u=sin(x^2+y^2-1);

// Defining the boundary as an ellipseborder gamma1(t=0,theta) {x=a*cos(t); y=b*sin(t);} border gamma2(t=theta,2*pi) {x=a*cos(t); y=b*sin(t);} plot(gamma1(50)+gamma2(50), wait=true, ps="Border.eps");

Page 20: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

// Evaluate the error between the exact solution and the solution calculated with FreeFem++for(int n=0;n<2;n++){ // Mesh mesh M=buildmesh(gamma1(20*(n+1))+gamma2(10*(n+1))); // Build the finite element space using P2 elements fespace Vh(M,P2);

// Define u and phi as piecewise-P2 function Vh uh, w;

Page 21: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

// Variational Formulation of our equation problem Laplace(uh,w) =

int2d(M)(dx(uh)*dx(w)+dy(uh)*dy(w))- int2d(M)(f*w)- int1d(M,gamma2)(2*w) // Neumann boundary condition+ on(gamma1,uh=0); // Dirichlet boundary condition

// Solve the PDE Laplace;

plot(M, wait=true, ps="Mesh.eps"); plot(uh, wait=true, ps="NumericalSolution.eps");L2error[n]= sqrt(int2d(M)((uh-u)^2));}

Page 22: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

EsempioEsempioVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

// Show the error and the rate convergencefor(int n=0;n<2;n++)cout << " L2error " << n << " = "<< L2error[n] << endl;cout << " convergence rate = "<< log(L2error[0]/L2error[1])/log(2.) << endl;

Page 23: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

GraficiGraficiVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

Di seguito sono riportati i grafici ottenuti.

La figura a sinistra rappresenta la mesh adottata, mentre quella a destra rappresenta le curve di livello relative alla soluzione numerica della PDE data.

Page 24: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

RisultatiRisultatiVerifica dei risultati ottenuti nel primo esempioVerifica dei risultati ottenuti nel primo esempio

In output si ottengono i seguenti risultati: L2error 0 = 0.018358L2error 1 = 0.0046485convergence rate = 1.98157

Page 25: Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... · 2013-05-15 · Isacco Perin (University of Verona) 13/05/2013 FreeFem++ Introduzione FreeFem++

Isacco Perin (University of Verona) 13/05/2013

BibliographyBibliography

[1] F.Hecht , FreeFem++

[2] O. Pìronneau, FreeFEM User Manual (2001)