Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... ·...
Transcript of Un paio d'esempi completi con FreeFem++profs.scienze.univr.it/~caliari/aa1213/calcolo... ·...
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++
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.
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
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
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∈Ω .
ΩΓ ,
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
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 è
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à
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(Ω))} .
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
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.
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;
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");
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.
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.
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)) .
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
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
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");
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;
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));}
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;
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.
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
Isacco Perin (University of Verona) 13/05/2013
BibliographyBibliography
[1] F.Hecht , FreeFem++
[2] O. Pìronneau, FreeFEM User Manual (2001)