62

Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

  • Upload
    buidan

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Politecnico di Milano

Corso di Studi in Ingegneria Matematica

Elementi Finiti Misti-Ibridi-

per Problemi di-

Diusione-Trasporto-Reazione

Progetto di

Analisi Numerica delle Equazioni alle Derivate Parziali 2

e Programmazione Avanzata per il Calcolo Scientifico

Samuele Terragni

Matr. 770420

Anno Accademico 2012-2013

Page 2: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Indice

Introduzione 2

1 I metodi DG misti-ibridi 3

1.1 Il processo di ibridizzazione . . . . . . . . . . . . . . . . . . . 31.2 La struttura generale dei metodi . . . . . . . . . . . . . . . . 51.3 La caratterizzazione della variabile λh . . . . . . . . . . . . . 81.4 La caratterizzazione dei singoli metodi . . . . . . . . . . . . . 131.5 Il metodo LDG-H . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 L'implementazione del metodo LDG-H 19

2.1 L'integrazione sull'elemento di riferimento . . . . . . . . . . . 192.2 La condensazione statica . . . . . . . . . . . . . . . . . . . . . 23

3 La descrizione del codice 25

3.1 Le linee guida dell'implementazione . . . . . . . . . . . . . . . 253.2 Gli strumenti di supporto utilizzati . . . . . . . . . . . . . . . 263.3 Le classi per la gestione delle entità geometriche . . . . . . . . 273.4 La classe per l'integrazione numerica . . . . . . . . . . . . . . 333.5 Le classi per gli spazi nito-dimensionali . . . . . . . . . . . . 363.6 Le classi per la gestione dei problemi

dierenziali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.7 La classe per i metodi DG misti-ibridi . . . . . . . . . . . . . 433.8 L'utilizzo del codice . . . . . . . . . . . . . . . . . . . . . . . 47

4 I risultati numerici 49

4.1 L'analisi di convergenza . . . . . . . . . . . . . . . . . . . . . 494.2 Il trattamento del trasporto dominante . . . . . . . . . . . . . 57

Bibliograa 61

1

Page 3: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Introduzione

Un'ampia categoria di schemi numerici per la risoluzione di equazioni a deri-vate parziali è costituita dai metodi agli elementi niti di tipo DiscontinuousGalerkin (DG). Questo progetto si occupa di una classe particolare di metodiDG, che possono essere indicati come metodi misti-ibridi, per la risoluzionedi problemi ellittici. Essi hanno avuto uno sviluppo relativamente recente egodono di alcune proprietà che li rendono particolarmente interessanti. Duesono gli obiettivi del progetto: da un lato lo svolgimento di un'analisi teoricadegli aspetti più rilevanti della classe di schemi numerici considerata, dall'al-tro l'implementazione in C++ di un particolare metodo della classe, attraversola creazione di un'apposita libreria.

Nel capitolo 1 di questo elaborato, si introducono i metodi DiscontinuousGalerkin misti-ibridi, se ne analizzano le proprietà principali e si descrive ilcaso particolare del metodo LDG-H. Nel capitolo 2, si presentano alcuni det-tagli relativi all'implementazione del metodo LDG-H, utili per comprenderecome la formulazione matematica dello schema numerico sia stata trattatain modo da essere tradotta in codice di calcolo. Nel capitolo 3, si descrivenel dettaglio il codice C++, ponendo particolare attenzione alle scelte im-plementative fatte e alle strutture dati utilizzate. Nel capitolo 4, inne, sipresentano alcuni risultati numerici e si confrontano con quanto noto dallateoria.

2

Page 4: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Capitolo 1

I metodi DG misti-ibridi

1.1 Il processo di ibridizzazione

I metodi Discontinuous Galerkin (DG), poiché forniscono un'approssimazio-ne discontinua della soluzione di una data equazione a derivate parziali, sonospesso introdotti nello studio dei problemi iperbolici, i quali possono presen-tare soluzioni discontinue o nel caso di discontinuità nelle condizioni al bordoo nel dato iniziale o nel caso di problemi non lineari. Tuttavia, tali metodivengono ormai adoperati in una grande varietà di contesti, come ad esempionella risoluzione di problemi ellittici, che sono oggetto del nostro interesse.Rispetto ai metodi continuous Galerkin (CG), i metodi DG presentano al-cuni vantaggi, come la facilità nel gestire triangolazioni non conformi o lapredisposizione alla p-adattività della griglia, ma sono svantaggiosi dal pun-to di vista del costo computazionale. Infatti, nella risoluzione di problemiellittici su griglie composte da triangoli (nel caso bidimensionale) o tetraedri(nel caso tridimensionale), i metodi DG sono caratterizzati, rispetto ai me-todi CG, da un numero maggiore di gradi di libertà e da un livello di sparsitàminore della matrice di stiness.

Il processo di ibridizzazione permette di porre un rimedio a questo svan-taggio di natura computazionale, grazie all'introduzione di una nuova inco-gnita, denita sui bordi degli elementi della triangolazione, i cui gradi dilibertà sono gli unici globalmente accoppiati. Per descrivere nel dettagliotale meccanismo, seguiamo il lavoro di Cockburn et al. ([3]), che presentanouno schema generale per l'ibridizzazione di metodi agli elementi niti perproblemi ellittici, all'interno del quale si collocano numerosi schemi DG.

Consideriamo il problema ellittico

−∇ · (a∇u) + ru = f in Ω,u = g su ∂Ω,

3

Page 5: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

che riscriviamo in forma mista nella maniera seguente:

q + a∇u = 0 in Ω,∇ · q + ru = f in Ω,

u = g su ∂Ω,(1.1)

avendo introdotto la nuova incognita q = −a∇u. Si tratta di un proble-ma misto, in quanto espresso in termini di due incognite: l'incognita scalareu, interpretata sicamente come un potenziale, e l'incognita vettoriale q,interpretata come un usso (in molti problemi l'incognita q risulta più inte-ressante dal punto di vista sico dell'incognita u). In questo senso, gli scheminumerici che arontano il problema a partire dalla riscrittura 1.1 sono ragio-nevolmente chiamati metodi misti. Per semplicità, assumiamo che Ω ⊂ Rn(con n = 2, 3) sia un dominio poliedrico, a sia una funzione matriciale sim-metrica e uniformemente denita positiva su Ω, r sia una funzione scalarenon negativa su Ω, f ∈ L2(Ω) e g sia la restrizione di una funzione liscia su∂Ω.

I metodi riconducibili allo schema generale descritto in [3] sono costrui-ti usando una versione discreta di una proprietà della soluzione esatta delproblema 1.1, corrispondente ad una caratterizzazione della soluzione stessasui bordi degli elementi di una qualsiasi triangolazione Ωh del dominio Ω.Consideriamo la scomposizione della soluzione esatta u = λ+ g, dove

λ =

u su ∂K \ ∂Ω,0 su ∂K ∩ ∂Ω,

g =

0 su ∂K \ ∂Ω,g su ∂K ∩ ∂Ω,

per ogni elemento K della triangolazione Ωh, e introduciamo i cosiddettisolutori locali. Il primo solutore locale associa ad una funzione m ∈ L2(∂K)la coppia (Qm,Um), soluzione del problema

cQm+∇Um = 0 in K,∇ ·Qm+ rUm = 0 in K,

Um = m su ∂K,(1.2)

mentre il secondo solutore locale associa alla funzione f ∈ L2(K) la coppia(Qf, Uf), soluzione del problema

cQf +∇Uf = 0 in K,∇ ·Qf + rUf = f in K,

Uf = 0 su ∂K,(1.3)

dove abbiamo posto c = a−1 per ogni elemento K ∈ Ωh. Grazie alla linearitàdel problema, vale la proprietà per cui

(q, u) = (Qλ+ Qg + Qf, Uλ+ Ug + Uf) in Ω

4

Page 6: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

se e solo se la componente normale di Qλ+Qg+Qf attraverso le interfaccedegli elementi è continua, ovvero se e solo se è soddisfatta la condizione

[[Qλ+ Qg + Qf ]] = 0, (1.4)

avendo indicato con [[·]] il salto della componente normale. Osserviamo chela relazione 1.4 caratterizza completamente la funzione λ.

I metodi DG considerati sono quelli che possono essere espressi come unaversione discreta della proprietà appena descritta. Essi forniscono un'appros-simazione della soluzione del problema 1.1 della forma

(qh, uh) = (Qλh + Qgh + Qf, Uλh + Ugh + Uf),

dove λh e gh indicano le approssimazioni di λ e g in opportuni spazi nito-dimensionali, rispettivamente Mh e Nh, mentre (Qm,Um) e (Qf,Uf) rap-presentano le versioni discrete dei solutori locali esatti precedentemente in-trodotti. Inoltre, tali metodi godono della fondamentale proprietà per cuiλh può essere determinata risolvendo una versione discreta della condizione1.4, che possiamo esprimere come

ah(λh, µ) = bh(µ) ∀µ ∈Mh. (1.5)

Poiché nella relazione 1.5 non sono coinvolte le variabili uh e qh, ma solola variabile λh, risulta evidente come gli unici gradi di libertà globalmenteaccoppiati siano quelli associati alla variabile λh, denita solamente sui bordidegli elementi. Sarà dunque suciente risolvere il sistema lineare associatoalla relazione 1.5 per ricavare la variabile λh e, a quel punto, le variabili uh eqh potranno essere ricostruite con un semplice post-processing elemento perelemento, a partire dalla conoscenza di λh e sfruttando le versioni discretedei solutori locali.

L'aggiunta di una terza incognita permette così di ricondurre il problemaalla risoluzione di un sistema dal quale sono state eliminate le due incognitedi partenza, consentendo di ridurre notevolmente il costo computazionale deimetodi. Gli schemi numerici così ottenuti si dicono ibridi, seguendo la prassicomune di indicare come ibridi quei metodi basati su formulazioni in cuiun'incognita è una data funzione o una sua derivata e un'altra incognita èla traccia della funzione stessa o di una sua derivata sui bordi degli elementidella triangolazione. Osserviamo che, in virtù della condizione 1.4, è possibileinterpretare la nuova incognita come moltiplicatore di Lagrange associato alvincolo di continuità della componente normale di un usso numerico.

1.2 La struttura generale dei metodi

Dopo aver introdotto nella sezione precedente i metodi DG misti-ibridi, in-dicando l'idea alla base di essi e precisando il signicato del loro nome,

5

Page 7: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

vogliamo ora descrivere lo schema generale comune a tutti i metodi dellaclasse considerata. Facendo riferimento al problema 1.1, introduciamo unatriangolazione Ωh = K del dominio Ω, non necessariamente conforme, eindichiamo con ∂Ωh = ∂K : K ∈ Ωh. Siano εih l'insieme delle facce internee ε∂h l'insieme delle facce di bordo della triangolazione, dove e ∈ εih se vi sonodue elementi K+ e K− in Ωh tali che e = ∂K+ ∩ ∂K−, mentre e ∈ ε∂h se viè un elemento K in Ωh tale che e = ∂K ∩∂Ω. Poniamo, inne, εh = εih ∪ ε∂h.

Su ciascun elemento K della triangolazione, introduciamo lo spazio poli-nomiale V(K) per l'approssimazione della variabile q e lo spazio polinomia-le W (K) per l'approssimazione della variabile u. I corrispondenti spazi adelementi niti globali sono dati da

Vh = v ∈ L2(Ω) : v |K∈ V(K) ∀K ∈ Ωh,

Wh = w ∈ L2(Ω) : w |K∈W (K) ∀K ∈ Ωh.

Per ogni funzione discontinua in Vh o in Wh, la traccia su una facciainterna e, condivisa dai due elementi K+ e K−, assume un valore diverso aseconda dell'elemento considerato. Nel caso di una funzione vettoriale v, adesempio, i due possibili valori sono dati da vK±(x) = limε→0 v(x − εnK±),dove con nK indichiamo la normale uscente dall'elemento K. Con questanotazione, il salto della componente normale attraverso la faccia interna e èdenito da

[[v]] = vK+ · nK+ + vK− · nK− ,

mentre se e rappresenta una faccia di bordo, poniamo

[[v]] = vK · nK .

Per quanto riguarda la notazione usata per esprimere i prodotti interni,date due funzioni scalari a, b ∈ L2(D), scriviamo (a, b)D =

∫D ab dD se D è

un dominio di Rn, scriviamo invece 〈a, b〉D =∫D ab dD se D è un dominio di

Rn−1. Date due funzioni scalari a e b denite su Ω e due funzioni scalari c ed denite su εh, poniamo

(a, b)Ωh =∑K∈Ωh

(a, b)K ,

〈c, d〉∂Ωh =∑K∈Ωh

〈c, d〉∂K ,

e indichiamo, inne, con (a,b)Ωh =∑n

j=1(aj , bj)Ωh il prodotto interno tradue funzioni vettoriali a e b denite su Ω.

A questo punto, introduciamo lo spazioNh delle tracce approssimate sullefacce della triangolazione e cerchiamo l'approssimazione λh dell'incognita λnello spazio

Mh = µ ∈ Nh : µ = 0 su ∂Ω.

6

Page 8: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Occorre ora denire le versioni discrete dei solutori locali 1.2 e 1.3. Ilprimo solutore locale discreto associa ad ogni funzione m ∈ Nh la coppia(Qm,Um) su Ω, la cui restrizione al singolo elemento K della triangolazioneappartiene a V(K)×W (K) e soddisfa

(cQm,v)K − (Um,∇ · v)K = −〈m,v · n〉∂K ∀v ∈ V(K),

−(∇w,Qm)K + 〈w, Qm · n〉∂K + (rUm,w)K = 0 ∀w ∈W (K).(1.6)

Il secondo solutore locale discreto associa ad ogni funzione f ∈ L2(Ω) lacoppia (Qf,Uf) su Ω, la cui restrizione al singolo elemento K della trian-golazione appartiene a V(K)×W (K) e soddisfa

(cQf,v)K − (Uf,∇ · v)K = 0 ∀v ∈ V(K),

−(∇w,Qf)K + 〈w, Qf · n〉∂K + (rUf, w)K = (f, w)K ∀w ∈W (K).(1.7)

Con Qm e Qf indichiamo le tracce numeriche dei ussi associati ai dueproblemi locali su εh. In generale, si tratta di funzioni che presentano undoppio valore su ogni faccia interna della triangolazione. A seconda del-lo schema specico considerato, tali ussi numerici presentano una formadiversa e possono essere espressi in funzione di (Qm,Um) e (Qf,Uf) o es-sere trattati come nuove incognite (in questo secondo caso risulta necessarioaggiungere nuove equazioni per ottenere una formulazione ben posta).

Assunzione 1 (esistenza e unicità dei solutori locali). Per ogni m ∈ Nh,

esiste un unico insieme di funzioni (Qm, Qm,Um) soddisfacente 1.6 e di-

pendente linearmente da m. Per ogni f ∈ L2(Ω), esiste un unico insieme di

funzioni (Qf, Qf,Uf) soddisfacente 1.7 e dipendente linearmente da f .

Grazie a tale assunzione, possiamo caratterizzare gli schemi DG misti-ibridi come quei metodi che cercano un'approssimazione di (q, u) della forma

(qh, uh) = (Qλh + Qgh + Qf,Uλh + Ugh + Uf) ∈ Vh ×Wh,

dove λh viene determinata attraverso la seguente versione discreta dellacondizione 1.4:

〈µ, [[Qλh + Qgh + Qf ]]〉εh = 0 ∀µ ∈Mh. (1.8)

Osserviamo per inciso che, in queste formule, con gh si indica il risultatodi un'opportuna proiezione su Nh del dato di Dirichlet g (opportunamenteesteso in modo che assuma valore nullo su εih).

Se deniamo il usso numerico

qh = Qλh + Qgh + Qf (1.9)

e se l'estensione a zero su εh della funzione [[qh]] |εih appartiene allo spazioMh,

la condizione 1.8 implica che [[qh]] |εih= 0 puntualmente, ovvero la componente

7

Page 9: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

normale del usso numerico qh assume un solo valore su ciascuna facciadella triangolazione e ciò signica che tale usso numerico è conservativo.Questa osservazione permette di capire perché la condizione 1.8 sia dettaconservativity condition. Se, invece, la funzione [[qh]] |εih non appartiene allospazioMh, la conservativity condition impone la continuità della componentenormale del usso numerico solo in senso debole e, dunque, qh può assumereun doppio valore su ogni faccia interna della triangolazione.

Inne, è facile notare come lo schema generale dei metodi DG misti-ibridipossa essere riassunto nella seguente forma compatta: tali metodi cercanol'insieme di funzioni (qh, uh, λh) ∈ Vh ×Wh ×Mh soddisfacente

(cqh,v)Ωh − (uh,∇ · v)Ωh +∑K∈Ωh

〈λh,v · n〉∂K\∂Ω = −〈gh,v · n〉∂Ω,

−(qh,∇w)Ωh +∑K∈Ωh

〈qh · n, w〉∂K + (ruh, w)Ωh = (f, w)Ωh ,∑K∈Ωh

〈µ, qh · n〉∂K = 0,

per ogni (v, w, µ) ∈ Vh×Wh×Mh. Le prime due equazioni sono direttamenteassociate ai solutori locali discreti, mentre la terza equazione non è altro chela conservativity condition.

Concludiamo questa sezione osservando come i metodi considerati, oltreai vantaggi di natura computazionale di cui abbiamo parlato in precedenza,presentino un ulteriore punto di forza, associato alla possibilità di utilizzareschemi dierenti in diverse parti del dominio di calcolo. Il fatto che i metodistudiati portino a soluzioni discontinue e siano tutti riconducibili alla mede-sima formulazione permette di usare schemi dierenti in diverse regioni deldominio nel contesto di un'unica implementazione e tali schemi risulterannoautomaticamente accoppiati.

1.3 La caratterizzazione della variabile λh

Il punto di forza dei metodi studiati sta nel fatto che la variabile λh vengacaratterizzata attraverso una semplice formulazione debole in cui non com-paiono le altre variabili del problema discreto, ovvero uh e qh. Tale concettoè espresso nel prossimo teorema.

Teorema 1 (caratterizzazione della variabile λh). Se l'assunzione 1 è veri-

cata, λh ∈Mh soddisfa la condizione 1.8 se e solo se soddisfa

ah(λh, µ) = bh(µ) ∀µ ∈Mh, (1.10)

dove

ah(η, µ) = (cQη,Qµ)Ωh + (r Uη,Uµ)Ωh + 〈1, [[(Uµ− µ)(Qη −Qη)]]〉εh ,

8

Page 10: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

bh(µ) = 〈gh, [[Qµ]]〉εh + (f,Uµ)Ωh − 〈1, [[(Uµ− µ)(Qf −Qf)]]〉εh+ 〈1, [[Uf(Qµ−Qµ)]]〉εh− 〈1, [[(Uµ− µ)(Qgh −Qgh)]]〉εh+ 〈1, [[(Ugh − gh)(Qµ−Qµ)]]〉εh ,

per ogni η, µ ∈Mh.

La dimostrazione del teorema appena enunciato poggia su due lemmi,che enunciamo e dimostriamo nel seguito.

Lemma 1. Per ogni m,µ ∈ Nh, f ∈ L2(Ω), v ∈ Vh e w ∈ Wh, valgono le

seguenti identità:

(cQm+∇Um,v)Ωh = +〈1, [[(Um−m)v]]〉εh , (1.11)

(∇ ·Qm+ rUm,w)Ωh = −〈1, [[w(Qm−Qm)]]〉εh , (1.12)

(cQf +∇Uf,v)Ωh = +〈1, [[Ufv]]〉εh , (1.13)

(∇ ·Qf + rUf − f, w)Ωh = −〈1, [[w(Qf −Qf)]]〉εh . (1.14)

Dimostrazione. Tutte le identità dell'enunciato di questo lemma si ricavanoimmediatamente dalle equazioni che deniscono i solutori locali 1.6 e 1.7,integrando per parti.

Lemma 2. Per ogni m,µ ∈ Nh e f ∈ L2(Ω), valgono le seguenti identità:

−〈µ, [[Qm]]〉εh = + (cQm,Qµ)Ωh + (r Um,Uµ)Ωh

+ 〈1, [[(Uµ− µ)(Qm−Qm)]]〉εh ,

−〈µ, [[Qgh]]〉εh =− 〈gh, [[Qµ]]〉εh+ 〈1, [[(Uµ− µ)(Qgh −Qgh)]]〉εh− 〈1, [[(Ugh − gh)(Qµ−Qµ)]]〉εh ,

−〈µ, [[Qf ]]〉εh =− (f,Uµ)Ωh

+ 〈1, [[(Uµ− µ)(Qf −Qf)]]〉εh− 〈1, [[Uf(Qµ−Qµ)]]〉εh .

Dimostrazione. Dimostriamo innanzitutto la prima identità. Sfruttando laprima equazione che caratterizza il solutore locale 1.6 e l'identità 1.12 del

9

Page 11: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

lemma precedente, abbiamo

−〈µ, [[Qm]]〉εh =− 〈µ, [[Qm]]〉εh − 〈µ, [[Qm−Qm]]〉εh= + (cQµ,Qm)Ωh − (Uµ,∇ ·Qm)Ωh

− 〈µ, [[Qm−Qm]]〉εh= + (cQµ,Qm)Ωh + (r Um,Uµ)Ωh

+ 〈1, [[Uµ(Qm−Qm)]]〉εh− 〈µ, [[Qm−Qm]]〉εh .

Per dimostrare la seconda identità, basta osservare che, in virtù della primaidentità, la forma bilineare

B(m,µ) = 〈µ, [[Qm]]〉εh + 〈1, [[(Uµ− µ)(Qm−Qm)]]〉εh

risulta essere simmetrica. La seconda identità, allora, segue immediatamentedal fatto che B(µ, gh) = B(gh, µ). Inne, sfruttando nell'ordine la primaequazione del solutore locale 1.6, l'identità 1.14 del lemma precedente, laprima equazione del solutore locale 1.7 e l'identità 1.12 del lemma precedente,dimostriamo la terza ed ultima identità:

−〈µ, [[Qf ]]〉εh =− 〈µ, [[Qf ]]〉εh − 〈µ, [[Qf −Qf ]]〉εh= + (cQµ,Qf)Ωh − (Uµ,∇ ·Qf)Ωh

− 〈µ, [[Qf −Qf ]]〉εh=− (f,Uµ)Ωh + (cQµ,Qf)Ωh + (r Uµ,Uf)Ωh

+ 〈1, [[(Uµ− µ)(Qf −Qf)]]〉εh=− (f,Uµ)Ωh + (∇ ·Qµ,Uf)Ωh + (r Uµ,Uf)Ωh

+ 〈1, [[(Uµ− µ)(Qf −Qf)]]〉εh=− (f,Uµ)Ωh − 〈1, [[Uf(Qµ−Qµ)]]〉εh

+ 〈1, [[(Uµ− µ)(Qf −Qf)]]〉εh .

A questo punto, possiamo dimostrare il risultato principale, ovvero ilteorema 1.

Dimostrazione. Ponendo

ah(λh, µ) = −〈µ, [[Qλh]]〉εh ,

bh(µ) = 〈µ, [[Qgh + Qf ]]〉εh ,

la conservativity condition 1.8 assume la forma 1.10 e il teorema segue dalleidentità del lemma 1.

10

Page 12: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Una volta caratterizzata la variabile λh attraverso un'opportuna formu-lazione debole, occorre enunciare un risultato di esistenza e unicità dellasoluzione della formulazione stessa. Per raggiungere questo obiettivo, ènecessario fare alcune ipotesi ulteriori sui solutori locali.

Assunzione 2 (semi-denita positività dei solutori locali). I solutori locali1.6 e 1.7 godono della proprietà per cui, per ogni K ∈ Ωh, si ha

−〈µ, Qµ · n〉∂K ≥ 0 ∀µ ∈ Nh;

inoltre, esiste uno spazio M(∂K), contenente l'insieme ν : ν |e∈ P0(e) su

ogni faccia e ∈ εih che giace su ∂K, tale che se 〈µ, Qµ · n〉∂K = 0 per

qualche µ ∈ Nh, allora P∂Kµ = CK , dove CK è una costante e P∂K indica

la proiezione ortogonale L2(∂K) sullo spazio M(∂K).

Lo spazio M(∂K) ha valenza puramente teorica e non deve essere neces-sariamente nito-dimensionale. La prima parte dell'assunzione 2 corrispondealla richiesta di semi-denita positività delle forme bilineari corrispondentiai solutori locali, mentre la seconda parte stabilisce che le funzioni µ ∈ Nh

per cui 〈µ, Qµ · n〉∂K = 0 risultino costanti attraverso un'opportuna proie-zione. Ciò suggerisce un legame tra l'operatore P∂K e l'identità e i termini diquesto legame sono precisati dalla prossima assunzione, che stabilisce una re-lazione tra i diversi solutori locali, assicurando l'unicità della soluzione dellaformulazione 1.10.

Assunzione 3 (gluing condition). Se µ ∈ Nh, allora su ogni faccia interna

e = ∂K+ ∩ ∂K− o µ = P∂K+µ o µ = P∂K−µ.

Abbiamo ora tutti gli strumenti per enunciare e dimostrare il teorema diesistenza e unicità della soluzione λh della formulazione debole 1.10.

Teorema 2 (esistenza e unicità di λh). Se le assunzioni 1, 2 e 3 sono

vericate, allora esiste un'unica soluzione λh della formulazione debole 1.10.

Dimostrazione. Attraverso il teorema 1, l'assunzione 1 garantisce che il si-stema 1.10 sia ben denito. Essendo questo un sistema quadrato, per dimo-strare l'esistenza e l'unicità della sua soluzione, è suciente mostrare che seah(µ, µ) = 0 per qualche µ ∈Mh, allora deve essere µ = 0. Grazie al lemma2, abbiamo

ah(µ, µ) = −〈µ, [[Qµ]]〉εh = −∑K∈Ωh

〈µ, Qµ · n〉∂K .

Se ah(µ, µ) = 0, per la prima parte dell'assunzione 2, ciascuno degli addendidel termine destro dell'ultima relazione deve essere nullo, ossia

〈µ, Qµ · n〉∂K = 0 ∀K ∈ Ωh.

11

Page 13: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

In virtù della seconda parte dell'assunzione 2, ciò implica che su ogni facciainterna e = ∂K+ ∩ ∂K− deve essere

CK+ = P∂K+µ =1

|e|〈µ, 1〉e = P∂K−µ = CK−

e, grazie all'assunzione 3, si ha CK+ = µ = CK− su e. Ciò signica che µè costante su εh, ma essendo µ = 0 su ∂Ω abbiamo che µ è identicamentenulla su εh e questo conclude la dimostrazione.

Il risultato appena dimostrato garantisce la bontà dell'approccio seguitoper denire i metodi DG misti-ibridi. Una volta risolto il sistema lineareassociato alla formulazione debole 1.10, che fornisce l'incognita λh, le inco-gnite uh e qh si ricavano attraverso un semplice post-processing elementoper elemento, sfruttando i solutori locali.

Concludiamo questa sezione facendo alcune considerazioni sul sistemalineare associato a 1.10. Data una base dello spazio Mh e indicato con [µ]il vettore dei coecienti della rappresentazione di µ ∈Mh nella base scelta,tale sistema è dato da

A[λh] = b,

dove [µ]TA[λh] = ah(λh, µ) e [µ]T b = bh(µ). Poiché

ah(η, µ) = −∑K∈Ωh

〈µ, Qη · n〉∂K ,

bh(µ) =∑K∈Ωh

〈µ, (Qf + Qgh) · n〉∂K ,

abbiamoA =

∑K∈Ωh

AK ,

b =∑K∈Ωh

bk,

dove [µ]TAK [η] = −〈µ, Qη · n〉∂K e [µ]T bk = 〈µ, (Qf + Qgh) · n〉∂K . Dedu-ciamo, dunque, come il sistema lineare da risolvere possa essere assemblatonella maniera tipica degli elementi niti. Inne, a proposito del pattern disparsità della matrice A, osserviamo che scegliendo

Nh = µ ∈ L2(εh) : µ |e∈ Pk(e) ∀e ∈ εh

è possibile mostrare come A abbia una struttura a blocchi, con blocchi qua-drati dell'ordine della dimensione dello spazio Pk(e). Il numero di righe diblocchi (e di colonne di blocchi) è pari al numero di facce interne della trian-golazione e, in ogni riga di blocchi, vi sono al più 2n+ 1 blocchi diversi dallamatrice nulla.

12

Page 14: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

1.4 La caratterizzazione dei singoli metodi

Da quanto detto nora, risulta evidente che ogni singolo metodo della classeconsiderata venga denito specicando le seguenti componenti:

• le tracce numeriche del usso Q·;

• gli spazi locali V(K) e W (K);

• lo spazio delle tracce approssimate Nh.

Una volta precisate queste tre componenti, è suciente vericare l'assunzione1 per garantire che i solutori locali siano ben posti e le assunzioni 2 e 3per garantire l'esistenza e l'unicità della soluzione λh. Per quanto riguardala nomenclatura, se per denire i solutori locali viene utilizzato il metodoN, il processo di ibridizzazione darà luogo al metodo N-hybridizable o, inbreve, N-H. Osserviamo che, a seconda delle scelte fatte, il usso numerico qhpotrà essere una funzione valutata univocamente su ogni faccia interna dellatriangolazione, piuttosto che una funzione che presenta un valore diverso aseconda dell'elemento considerato. Nel primo caso la conservativity conditionè soddisfatta in forma forte, nel secondo in forma debole.

Facciamo ora alcuni esempi di metodi DG misti-ibridi, rimandando all'ar-ticolo [3] per un elenco più ricco. Utilizzando il metodo di Raviart-Thomasper la denizione dei solutori locali, si ottiene il metodo RT-H, che risultacaratterizzato dalle scelte seguenti:

• per ogni K ∈ Ωh, si pone

Qm = Qm e Qf = Qf su ∂K;

• lo spazio V(K)×W (K) è posto uguale allo spazio di Raviart-Thomasdi grado k, ovvero

V(K) = [Pk(K)]n + xPk(K) e W (K) = Pk(K), con k ≥ 0;

• lo spazio delle tracce approssimate è dato da

Nh = µ ∈ L2(εh) : µ |e∈ Pk(e) ∀e ∈ εh.

Se l'assunzione 1 risulta immediatamente soddisfatta, grazie al fatto che ilmetodo RT sia ben denito, la verica delle assunzioni 2 e 3 richiede ladimostrazione di un'apposita proposizione che non riportiamo. Nel caso delmetodo RT-H, la conservativity condition è soddisfatta in forma forte.

Un secondo esempio è costituito dal metodo BDM-H, ottenuto utilizzan-do il metodo di Brezzi-Douglas-Marini per la denizione dei solutori locali.In particolare, le scelte da fare in questo caso sono le seguenti:

13

Page 15: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

• per ogni K ∈ Ωh, si pone

Qm = Qm e Qf = Qf su ∂K;

• lo spazio V(K)×W (K) è dato da

V(K) = [Pk(K)]n e W (K) = Pk−1(K), con k ≥ 1;

• lo spazio delle tracce approssimate è dato da

Nh = µ ∈ L2(εh) : µ |e∈ Pk(e) ∀e ∈ εh.

Valgono le stesse considerazioni fatte per il metodo RT-H.Inne, utilizzando il metodo LDG (local discontinuous Galerkin) per

la denizione dei solutori locali, si giunge al metodo LDG-H, che risultacaratterizzato dalle seguenti scelte:

• per ogni K ∈ Ωh, si pone

Qm = Qm+ τK(Um−m)n e Qf = Qf + τK(Uf)n su ∂K;

• lo spazio V(K)×W (K) è dato da

V(K) = [Pk(K)]n e W (K) = Pk(K), con k ≥ 0;

• lo spazio delle tracce approssimate è dato da

Nh = µ ∈ L2(εh) : µ |e∈ Pk(e) ∀e ∈ εh.

Tipicamente il parametro di stabilizzazione τ è scelto in modo tale che sianon negativo e costante su ciascuna faccia della triangolazione. In generale,esso assume doppio valore in corrispondenza di ogni faccia interna della trian-golazione. Come è lecito aspettarsi, la buona denizione del metodo LDG-Hdipende dalla scelta del parametro τ e, a questo proposito, molti risultatisono stati dimostrati. Per quanto ci riguarda, ci limiteremo ad enunciare unteorema signicativo nella prossima sezione. Osserviamo che, anche nel casodel metodo LDG-H, la conservativity condition è soddisfatta in forma forte.

1.5 Il metodo LDG-H

In questa sezione, vogliamo analizzare nel dettaglio il metodo LDG-H, inquanto trattasi del metodo scelto per l'implementazione in linguaggio C++,che discuteremo nel dettaglio nei prossimi capitoli. Per sfruttare pienamente

14

Page 16: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

le potenzialità di tale schema numerico, aggiungiamo la convezione al proble-ma trattato nora, ovvero consideriamo il problema di diusione-trasporto-reazione

−∇ · (a∇u+ βu) + ru = f in Ω,u = g su ∂ΩD,

−(a∇u+ βu) · n = qN su ∂ΩN ,

dove ∂ΩD e ∂ΩN (tali per cui ∂ΩD ∪ ∂ΩN = ∂Ω e ∂ΩD ∩ ∂ΩN = ∅) sonole porzioni di bordo su cui sono denite, rispettivamente, le condizioni diDirichlet e di Neumann. Denendo il usso totale q = −(a∇u + βu) eponendo c = a−1 e b = cβ, possiamo riscrivere il problema in forma mista:

cq +∇u+ bu = 0 in Ω,∇ · q + ru = f in Ω,

u = g su ∂ΩD,q · n = qN su ∂ΩN .

(1.15)

Le proprietà interessanti di cui gode il metodo LDG-H sono le seguenti:

• il processo di ibridizzazione permette di implementare il metodo inmaniera eciente e competitiva, contenendo il costo computazionale;

• è possibile usare polinomi dello stesso grado per l'approssimazione delpotenziale e del usso e ottenere una convergenza ottimale per entram-be le variabili, diversamente da quanto accade per la maggioranza deimetodi discontinui usati per risolvere il problema considerato;

• il metodo esibisce proprietà di superconvergenza nell'approssimazio-ne della variabile scalare, rendendo possibile un post-processing localeche restituisce una nuova approssimazione della variabile stessa, checonverge più velocemente della precedente;

• è possibile scegliere in maniera oculata il parametro di stabilizzazioneτ , in modo che il metodo possa trattare soddisfacentemente il caso incui il trasporto domina sulla diusione.

Scriviamo lo schema del metodo LDG-H per il problema 1.15. Dati glispazi nito-dimensionali Vh e Wh, deniti come in precedenza, e posto

Mh = m ∈ L2(εh) : m |e∈ Pk(e) ∀e ∈ εh, m |∂ΩD= 0,

il metodo LDG-H cerca (qh, uh, λh) ∈ Vh ×Wh ×Mh tale che

(cqh,v)Ωh + (buh,v)Ωh − (uh,∇ · v)Ωh + 〈uh,v · n〉∂Ωh = 0,−(qh,∇w)Ωh + 〈qh · n, w〉∂Ωh + (ruh, w)Ωh = (f, w)Ωh ,

〈qh · n, µ〉∂Ωh = 〈qN , µ〉∂ΩN ,(1.16)

per ogni (v, w, µ) ∈ Vh ×Wh ×Mh.

15

Page 17: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

La traccia numerica uh è data su ogni elemento K da

uh =

P∂g su ∂K ∩ ∂ΩD,λh altrimenti,

dove P∂ indica la seguente proiezione L2: data una funzione ξ ∈ L2(εh) euna faccia e ∈ εh, la restrizione di P∂ξ su e è denita come l'elemento diPk(e) che soddisfa 〈P∂ξ− ξ, η〉e = 0 per ogni η ∈ Pk(e). La traccia numericaqh è invece data da

qh = qh + τ(uh − uh)n,

dove il parametro di stabilizzazione τ è denito su ogni elemento K ∈ Ωh,in modo che sia non negativo su ∂K e costante su ogni faccia di ∂K. Taleparametro sarà in generale doppiamente valutato su ogni faccia interna dellatriangolazione.

La terza equazione della formulazione 1.16 può essere riscritta nella forma∑e∈εih

〈[[qh · n]], µ〉e + 〈qh · n, µ〉∂ΩN = 〈qN , µ〉∂ΩN ∀µ ∈Mh,

da cui risulta evidente come essa, oltre a imporre le condizioni al bor-do di Neumann, implichi la continuità della componente normale del us-so numerico qh alle interfacce e corrisponda, pertanto, alla conservativity

condition.Precisiamo ora la natura dei solutori locali e la caratterizzazione della

formulazione debole 1.10 nel caso del problema considerato. Il primo solutorelocale associa ad ogni funzione m ∈ L2(εh) la coppia (Qm,Um), denita suogni elemento K come la funzione in V(K)×W (K) che soddisfa

(cQm,v)K + (bUm,v)K − (Um,∇ · v)K = −〈m,v · n〉∂K ∀v ∈ V(K),

−(Qm,∇w)K + 〈Qm · n, w〉∂K + (r Um,w)K = 0 ∀w ∈W (K),

Qm = Qm+ τ(Um−m)n.(1.17)

Il secondo solutore locale associa ad ogni funzione f ∈ L2(Ω) la coppia(Qf,Uf), denita su ogni elemento K come la funzione in V(K) ×W (K)che soddisfa

(cQf,v)K + (bUf,v)K − (Uf,∇ · v)K = 0 ∀v ∈ V(K),

−(Qf,∇w)K + 〈Qf · n, w〉∂K + (r Uf, w)K = (f, w)k ∀w ∈W (K),

Qf = Qf + τ Ufn.(1.18)

La soluzione (qh, uh) di 1.16 può essere allora espressa come

(qh, uh) = (Qλh + Qgh + Qf, Uλh + Ugh + Uf),

dove la variabile ibrida λh è caratterizzata univocamente dalla relazione

ah(λh, µ) = bh(µ) ∀µ ∈Mh, (1.19)

16

Page 18: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

con ah(η, µ) = −〈µ, Qη ·n〉∂Ωh e bh(µ) = 〈µ, (Qf+Qg) ·n〉∂Ωh−〈qN , µ〉∂ΩN

per ogni η, µ ∈Mh.Come anticipato, la scelta del parametro di stabilizzazione τ è cruciale per

la buona denizione del metodo LDG-H e, inoltre, ne inuenza le proprietàdi convergenza e accuratezza. Innanzitutto, consideriamo il caso in cui iltermine diusivo domina su quello convettivo, ovvero esiste una costantepositiva γ < 1 tale che

βT cβ ≤ (1− γ)4r. (1.20)

Introducendo le quantità

τK = τ |eτK e τK = max τ |∂K\eτK ,

dove eτK indica una faccia di K su cui τ |∂K è massimo, possiamo enunciareil seguente risultato importante.

Teorema 3 (buona positura del metodo LDG-H). Se vale la condizione

1.20 e τK > 0 per ogni K ∈ Ωh, allora esiste un'unica soluzione (qh, uh) ∈Vh ×Wh di 1.16, o, equivalentemente, esiste un'unica soluzione λh di 1.19.

Scegliendo τK costante o proporzionale all'inverso della taglia h dellatriangolazione e τK costante o proporzionale ad h, il metodo LDG-H conver-ge in maniera ottimale: utilizzando polinomi di grado al più k sia per l'ap-prossimazione del potenziale sia per quella del usso, si ha una convergenzadi ordine k + 1 rispetto alla norma L2 per entrambe le variabili.

Nel caso in cui, invece, il problema sia a trasporto dominante, è possibilescegliere adeguatamente il parametro τ in modo da ottenere una stabilizza-zione di tipo upwind ed evitare la comparsa di oscillazioni nella soluzionenumerica. Consideriamo, per semplicità, il caso in cui il problema 1.15 siaa coecienti costanti e, in particolare, si abbia a = εI, dove I denota lamatrice identità. Posto v = −β, deniamo ∂Kin = x ∈ ∂K : v · n < 0 e∂Kout = x ∈ ∂K : v · n ≥ 0. Scegliamo allora

τ = τell + τhyp,

dove distinguiamo il contributo ellittico

τell =

ε/|eKτ | su eKτ ,0 altrimenti,

dal contributo iperbolico

τhyp =

0 su ∂Kout,|β · n| altrimenti.

Si può mostrare come questa scelta di τ corrisponda ad una stabilizzazione ditipo upwind e l'ecacia di tale stabilizzazione è vericata dalle simulazioni

17

Page 19: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

numeriche. Questo fatto rende il metodo LDG-H particolarmente interes-sante, in quanto in grado di risolvere adeguatamente il caso di problemi incui il termine convettivo domina su quello diusivo.

Inne, vogliamo soermarci sulle proprietà di superconvergenza esibitedal metodo. Eseguendo un post-processing elemento per elemento a partiredalle variabili uh e qh, è possibile ottenere una nuova approssimazione di u,che indichiamo con u?h, che converge con ordine k + 2 rispetto alla normaL2 quando si utilizzano polinomi di grado k. Consideriamo, per semplicità,il caso in cui il usso sia associato ad un potenziale ξ ∈ W 1,∞(Ω), ovveroβ = a∇ξ, e introduciamo il cambio di variabile

u = νe−ξ.

In questo modo, l'espressione del usso diventa q = −ae−ξ∇ν. Indicatacon νh un'approssimazione di ν, possiamo distinguere due casi: se r |K= 0,prendiamo νh = νh + νh con

νh =1

|K|

∫Kuhe

ξ dK

e νh ∈ Pk+10 (K) che soddisfa

(ae−ξ∇νh,∇w)K = (f, w)K − 〈qh · n, w〉∂K ∀w ∈ Pk+10 (K);

se r |K 6= 0, prendiamo νh ∈ Pk+1(K) che soddisfa

(ae−ξ∇νh,∇w)K + (re−ξνh, w)K = (f, w)K − 〈qh · n, w〉∂K ∀w ∈ Pk+1(K).

L'approssimazione superconvergente della variabile scalare u sarà allora datada

u?h = νhe−ξ.

Si tratta di un tting esponenziale, per cui u?h non costituisce un'approssi-mazione polinomiale, a dierenza di νh.

Per ulteriori dettagli sul metodo LDG-H, è possibile fare riferimentoall'articolo [2].

18

Page 20: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Capitolo 2

L'implementazione del metodo

LDG-H

2.1 L'integrazione sull'elemento di riferimento

Quando si implementa un metodo agli elementi niti, è prassi comune as-semblare la matrice del sistema lineare a cui viene ricondotto il problemadierenziale attraverso un ciclo sugli elementi della triangolazione. In cor-rispondenza di ogni elemento, si calcolano dapprima la matrice e il terminenoto locali e si aggiornano poi la matrice e il termine noto globali, sfruttan-do l'additività dell'operazione di integrazione. Alla luce della formulazionedebole, infatti, ciascun elemento delle matrici e dei termini noti locali corri-sponde ad un integrale, che deve essere calcolato numericamente. Per farequesto, ciascun integrale su un generico elemento K della triangolazioneviene ricondotto ad un integrale su un elemento di riferimento K opportuna-mente scelto. In questo modo, una volta deciso quali basi usare per gli spazinito-dimensionali a cui appartengono le incognite discrete, è suciente laconoscenza delle funzioni di base sull'elemento di riferimento per calcolaretutti gli integrali corrispondenti agli elementi matriciali.

Nell'implementare il metodo LDG-H nel caso bidimensionale, abbiamoconsiderato come elemento di riferimento K il triangolo di vertici (0, 0), (1, 0)e (0, 1). La trasformazione ane dal triangolo di riferimento K al genericotriangolo K è rappresentata da FK(x) = BK x + bK , dove la matrice BK èdata da

BK =

[x1 − x0 x2 − x0

y1 − y0 y2 − y0

]e il vettore bK è dato da

bK =

[x0

y0

],

con x0 = (x0, y0), x1 = (x1, y1) e x2 = (x2, y2) vertici di K. Osserviamo cheil valore assoluto del determinante di BK assume un signicato sico ben

19

Page 21: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

preciso, in quanto rappresenta il rapporto tra l'area del triangolo K e quelladel triangolo di riferimento K, ossia il rapporto di dilatazione superciale.

L'implementazione del metodo LDG-H, però, non richiede solamente ilcalcolo di integrali deniti sugli elementi, ma anche quello di integrali de-niti sui bordi degli elementi. Risulta allora necessario fornire un'ulterioretrasformazione, che sia una mappa da un elemento di riferimento monodi-mensionale (un intervallo di R) ad una generica entità monodimensionalecontenuta nello spazio bidimensionale (un lato della triangolazione, che gia-ce in R2). Scelto come elemento di riferimento monodimensionale l'intervallo[0, 1] ⊂ R, tale trasformazione è rappresentata da FK(x) = BK x+ bK , dovela matrice BK è data da

BK =

[x1 − x0

y1 − y0

]e il vettore bK è dato da

bK =

[x0

y0

],

con x0 = (x0, y0) e x1 = (x1, y1) vertici del lato considerato. Notiamo chesarebbe immediato estendere le denizioni delle mappe FK e FK qualora siscegliesse di implementare il metodo nello spazio tridimensionale, utilizzandogriglie costituite da tetraedri.

Una volta introdotta la trasformazione ane FK , per una corretta gestio-ne delle funzioni vettoriali denite sul generico elemento K, è utile servirsidella cosiddetta trasformazione di Piola, che manda [L2(K)]2 in [L2(K)]2 edè così denita:

P : q 7−→ q(x) =1

|det(BK)|BK q(x).

Tale trasformazione esibisce importanti proprietà nel contesto del cambio divariabili associato all'integrazione. Dati w ∈ H1(K) e q ∈ H(div, K), postow = w F−1

K e q = P(q), abbiamo∫Kq · ∇w dx =

∫Kq · ∇w dx, (2.1)∫

K∇ · qw dx =

∫K∇ · qw dx, (2.2)∫

∂Kq · nw dσ =

∫∂K

q · nw dσ. (2.3)

La trasformazione P, inoltre, risulta essere un isomorsmo da H(div, K) inH(div,K). Osserviamo come da queste relazioni possiamo dedurre che lefunzioni di base vettoriali sul dominio sico, ottenute da quelle sul dominiodi riferimento applicando la trasformazione di Piola, conservano la continuitàdella componente normale attraverso il bordo dell'elemento.

20

Page 22: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Abbiamo ora tutti gli strumenti per entrare nel dettaglio del calcolo deglielementi delle matrici locali associate al metodo LDG-H. Il codice propostopermette di risolvere un generico problema di diusione-trasporto-reazionea coecienti non costanti, con condizioni al bordo di varia natura, dato da

−∇ · (a∇u+ βu) + ru = f in Ω,u = g su ∂ΩD,

(a∇u+ βu) · n + γu = h su ∂ΩN ,(2.4)

che riscriviamo in forma mista come

cq +∇u+ bu = 0 in Ω,∇ · q + ru = f in Ω,

u = g su ∂ΩD,−q · n + γu = h su ∂ΩN ,

(2.5)

avendo posto q = −(a∇u + βu), c = a−1 e b = cβ. Come nel capitoloprecedente, ∂ΩD e ∂ΩN sono tali per cui ∂ΩD∪∂ΩN = ∂Ω e ∂ΩD∩∂ΩN = ∅.La dierenza rispetto al problema 1.15 è rappresentata dalla presenza deltermine convettivo e dalla condizione su ∂ΩN , che nel problema 2.5 assumeuna forma più generale e può essere interpretata come legge del trasferimentodi calore, con γ ≥ 0 che svolge il ruolo di coeciente di scambio termico.

Procedendo come illustrato nel capitolo precedente e sfruttando la nota-zione ivi introdotta, riconduciamo il problema 2.5 alla seguente formulazionedebole propria del metodo LDG-H: cerchiamo (qh, uh, λh) ∈ Vh×Wh×Mh

tale che

(cqh,v)Ωh + (uh,b · v −∇ · v)Ωh

+∑K∈Ωh

〈λh,v · n〉∂K\∂ΩD = −〈P∂g,v · n〉∂ΩD ,

(∇ · qh, w)Ωh + (ruh, w)Ωh + 〈τuh, w〉∂Ωh

−∑K∈Ωh

〈τλh, w〉∂K\∂ΩD = (f, w)Ωh + 〈τP∂g, w〉∂ΩD , (2.6)

∑K∈Ωh

〈qh · n, µ〉∂K\∂ΩD +∑K∈Ωh

〈τuh, µ〉∂K\∂ΩD

−∑K∈Ωh

〈τλh, µ〉∂K\∂ΩD − 〈γλh, µ〉∂ΩN = −〈P∂h, µ〉∂ΩN ,

per ogni (v, w, µ) ∈ Vh ×Wh ×Mh.

Se deniamo sull'elemento di riferimento le basi locali ωiNq

i=1, ϕiNui=1

e ηiNλi=1 degli spazi nito-dimensionali che approssimano, rispettivamente,le variabili u, q e λ, possiamo ricondurre localmente la formulazione debole

21

Page 23: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

2.6 al seguente sistema algebrico:

AK qK +BK uK + CKλK

= 0,

DK qK + EK uK + FKλK

= f2,K ,

GK qK +HK uK + IKλK

= f3,K ,

(2.7)

dove qK , uK e λK

indicano i vettori i cui elementi sono i coecienti deglisviluppi delle variabili q, u e λ rispetto alle basi adottate. Ciascun elemen-to delle matrici o dei termini noti locali presenti nel sistema 2.7 può esserecalcolato grazie alla sola conoscenza delle funzioni di base sull'elemento di ri-ferimento. Valgono, infatti, le seguenti relazioni, ottenute attraverso un sem-plice cambio di variabile, sfruttando le mappe geometriche precedentementeintrodotte e la trasformazione di Piola:

AKij =1

| detBK |

∫KωTi B

TK cBKωj ,

BKij =

∫Kϕjω

Ti B

TK cβ −

∫Kϕj∇ · ωi,

CKij =

∫∂K

ηjωi · n∂K ,

DKij =

∫K∇ · ωjϕi,

EKij = |detBK |∫Krϕjϕi +

∑e∈∂K

τe|e|∫eϕjϕi,

FKij = −∑e∈∂K

τe|e|∫eηjϕi,

GKij = CKji ,

HKij = −FKji ,

IKij = −∑e∈∂K

τe|e|∫eηj ηi −

∑e∈(∂K∩∂ΩN )

|e|∫eγηj ηi,

f2,Ki = | detBK |

∫Kf ϕi,

f3,Ki = −

∑e∈(∂K∩∂ΩN )

|e|∫eP∂hηi.

In queste identità, una generica funzione f denita sull'elemento K corri-sponde alla funzione f denita sull'elemento di riferimento K secondo larelazione f = f FK , mentre il lato e ∈ ∂K corrisponde al lato e ∈ ∂Ksecondo la relazione e = FK(e); con |e|, inne, indichiamo il rapporto trala lunghezza del lato e e quella dell'intervallo di R scelto come elemento diriferimento monodimensionale.

22

Page 24: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Dalla denizione delle matrici e dei termini noti locali, si evince che lafase di assemblaggio venga eettuata come se avessimo condizioni naturali sututto il bordo del dominio Ω. Ciò consente di evitare istruzioni condizionaliparticolarmente costose all'interno del ciclo sugli elementi, volte ad indivi-duare quei lati sui quali sono denite condizioni essenziali. L'imposizione ditali condizioni, dunque, sarà eseguita a valle dell'assemblaggio del sistemaglobale, seguendo una della tecniche possibili per questa operazione, comediscuteremo nel dettaglio nel prossimo capitolo.

2.2 La condensazione statica

Il sistema lineare associato alla formulazione debole 2.6 risulta molto costosoda risolvere. Tuttavia, come descritto ampiamente nel capitolo precedente, ilprocesso di ibridizzazione permette di ricondurre tale sistema ad un nuovo si-stema lineare, corrispondente alla formulazione debole 1.19, in cui l'incognitaè rappresentata dalla sola variabile ibrida. Il nuovo sistema avrà, dunque,dimensioni ridotte rispetto a quello di partenza e potrà essere risolto con unosforzo computazionale minore.

Da un punto di vista algebrico, una volta assemblate le matrici e i termininoti locali, si procede su ogni elemento alla cosiddetta condensazione statica,con l'obiettivo di esprimere qK e uK in funzione del solo vettore di incogniteλK. Introdotte le matrici

V K = (EK −DKAK−1BK)

−1,

UK = V K(DKAK−1CK − FK),

QK = −AK−1(BKUK + CK),

WK = −AK−1BKV K ,

semplici manipolazioni algebriche permettono di mostrare che

qK = QKλK

+WKf2,K ,

uK = UKλK

+ V Kf2,K .(2.8)

Osserviamo che l'esistenza delle matrici inverse usate è garantita dalla de-nizione delle stesse. Sostituendo, allora, le identità 2.8 nella terza equazionedel sistema 2.7, si giunge al sistema lineare locale nella sola incognita ibrida

MK λK = FK , (2.9)

doveMK = GKQK +HKUK + IK ,FK = f3,K − (GKWK +HKV K)f2,K .

Il sistema lineare globale viene assemblato a partire dalle matriciMK edai vettori FK e risulta avere come unica incognita la variabile ibrida. Una

23

Page 25: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

volta imposte le condizioni al bordo essenziali, si risolve numericamente ilsistema algebrico globale, che fornisce la conoscenza della variabile ibrida.Per ricavare anche i valori dell'incognita scalare e di quella vettoriale, èsuciente utilizzare le relazioni 2.8 su ogni elemento della triangolazione.

24

Page 26: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Capitolo 3

La descrizione del codice

3.1 Le linee guida dell'implementazione

In questo capitolo, vogliamo entrare nei dettagli dell'implementazione delmetodo LDG-H, attraverso la descrizione del codice di calcolo proposto. Ab-biamo implementato il metodo prescelto nel caso bidimensionale, con l'obiet-tivo di risolvere problemi di diusione-trasporto-reazione stazionari. Abbia-mo utilizzato il linguaggio C++, seguendo la losoa della programmazionead oggetti.

L'implementazione del metodo LDG-H, così come quella di ogni altrometodo agli elementi niti, richiede la presenza di classi che gestiscano leinformazioni geometriche associate alla mesh di calcolo, l'integrazione nume-rica e gli spazi nito-dimensionali a cui appartengono le variabili discrete.Queste classi sono state create cercando di perseguire un duplice obiettivo:da un lato permettere il loro utilizzo in contesti diversi da quello dei meto-di DG misti-ibridi (rimanendo comunque nell'ambito degli elementi niti),dall'altro particolarizzare la loro implementazione in modo da renderle par-ticolarmente funzionali ad un codice per i metodi di interesse. Il cuore delcodice è costituito dalla classe che rappresenta i metodi DG misti-ibridi verie propri, senza dubbio la più complessa del programma. Poiché tutti i me-todi DG misti-ibridi sono caratterizzati dalla medesima struttura generale,come descritto nel primo capitolo, abbiamo cercato di scrivere un codice chesia facilmente estendibile, aperto all'aggiunta di nuovi metodi della famigliaconsiderata, senza la necessità di modicare ampiamente l'implementazionecorrente. A questo proposito, osserviamo che il codice attuale comprendegià, oltre al metodo LDG-H, anche il metodo BDM-H.

Inne, un'ulteriore linea guida può essere individuata nella ricerca di uncodice che sia facilmente fruibile da parte dell'utente che volesse limitarsi adeseguire simulazioni relative ad uno o più problemi di interesse.

25

Page 27: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

3.2 Gli strumenti di supporto utilizzati

Il codice proposto sfrutta alcuni strumenti esterni, che vogliamo indicaree descrivere brevemente in questa sezione. La generazione della griglia dicalcolo è adata al software Triangle, un robusto generatore di mesh bi-dimensionali, in grado di fornire triangolazioni di Delaunay o triangolazionii cui elementi soddisfano vincoli di area massima o di angolo minimo. Unavolta fornita correttamente la descrizione di una certa geometria in un lecon estensione .poly, è suciente lanciare il programma con le opportuneopzioni per ottenere la mesh desiderata. Ad esempio, con il comando

triangle -pa.01eD square.poly

viene generata una triangolazione di Delaunay, costituita da triangoli di areanon superiore a 0.01, a partire dalla geometria descritta nel le square.poly.L'output prodotto da Triangle consiste in una serie di le che descrivono lamesh generata. In particolare, quelli utilizzati come dati di input nel nostroprogramma sono i le che descrivono i vertici (.node), gli elementi (.ele) e ilati (.edge) della triangolazione. Per ottenere quest'ultimo, raccomandiamol'utilizzo dell'opzione -e, come mostrato nell'esempio. Sottolineiamo, inoltre,la necessità di una numerazione delle entità geometriche a partire da 0.

Per la gestione delle matrici e di importanti strumenti di algebra linea-re, ci siamo avvalsi della libreria Eigen, che, essendo costituita solamenteda header les, non necessita di essere compilata. Essa, sfruttando am-piamente la tecnica degli expression templates, fornisce un'implementazio-ne particolarmente eciente di numerose funzionalità associate all'algebralineare.

Abbiamo poi utilizzato un puntatore intelligente messo a disposizionedalle librerie Boost. Si tratta del puntatore shared_ptr, che implementa ilparadigma della proprietà condivisa tra puntatori multipli. Anche in questocaso, non occorre compilare nulla, ma è suciente includere l'header le

corrispondente al puntatore indicato, per poterlo utilizzare nel codice.Per quanto riguarda la risoluzione del sistema lineare, il codice sfrutta

la libreria SuperLU, attraverso l'interfaccia fornita dalle Eigen. Tale libreriafornisce un solutore diretto per sistemi sparsi, non simmetrici e di grandidimensioni, particolarmente adatto a trattare il sistema associato al metodoLDG-H, che risulta essere sparso e non necessariamente simmetrico. Ab-biamo preferito utilizzare tale libreria, anziché ad esempio la più comuneUmfPack, perché più adatta a gestire metrici sparse memorizzate per righe,come quelle adoperate nel codice.

Per completare l'elenco degli strumenti di supporto utilizzati, citiamo lalibreria GetPot, che consente una semplice ed ecace gestione dei parametridi input del programma, permettendo di cambiare i parametri stessi senzadover ricompilare l'eseguibile. Inne, ricordiamo le applicazioni Gnuplot,

26

Page 28: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

utilizzata come strumento di visualizzazione, e Doxygen, utilizzata per gene-rare automaticamente la documentazione del codice, a partire dai commentiin esso contenuti.

3.3 Le classi per la gestione delle entità geometriche

La mesh di calcolo è costituita da entità geometriche (punti, lati e triangoli)che vengono codicate attraverso opportune classi, in un contesto tipico diapprossimazione tramite elementi niti. Le classi addette alla gestione delleinformazioni geometriche appartengono tutte allo spazio di nomi Geometry.L'utilizzo degli spazi di nomi permette di individuare la aree logiche delprogramma e di evitare il conitto di nomi all'interno dello stesso. Prima didescrivere le classi che codicano le informazioni geometriche, riportiamo ledenizioni di alcuni tipi utilizzati in tutta implementazione, contenute nelle useful_types.hpp.

typedef double Real;

typedef Eigen::Matrix<Real, Eigen::Dynamic, Eigen::Dynamic>

matrix;

typedef Eigen::Matrix<Real, Eigen::Dynamic, 1> column_vector;

typedef Eigen::Matrix<Real, 2, 2, Eigen::DontAlign> matrix2x2;

typedef Eigen::Matrix<Real, 2, 1, Eigen::DontAlign>

column_vector2x1;

Osserviamo che, per questioni di allineamento relative al modo in cui vengonomemorizzati i dati, per utilizzare le matrici delle Eigen con dimensioni ssecome membri di classi o come componenti dei contenitori della STL, abbiamospecicato il parametro template DontAlign, che disabilita la richiesta di al-lineamento. Questo, però, ha l'eetto di disabilitare anche la vettorizzazionee ciò conduce ad un codice meno performante. Vi sono maniere più ecientiper arontare il problema e possibili modiche sono lasciate ad eventualiestensori del codice.

La classe Point rappresenta un punto di R2, qualicato come vertice diuna mesh. Tra i membri privati, infatti, oltre ad un vettore con le coor-dinate spaziali che identicano il punto, troviamo anche un unsigned int

corrispondente all'identicatore del punto all'interno della griglia di calcolo.La dichiarazione della classe Point si trova nel le point.hpp. Come faremosempre nel seguito, riportiamo il listato del codice omettendo i commenti,per i quali rimandiamo ai le eettivi.

class Point

public:

Point();

explicit Point(unsigned int const & id);

27

Page 29: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Point(Point const & p);

~Point();

Point & operator=(Point const & p);

inline void set_id(unsigned int const & id)

M_ID=id;

inline unsigned int get_id() const

return M_ID;

inline Real & operator()(int const & i)

return M_coord(i);

inline Real operator()(int const & i) const

return M_coord(i);

inline unsigned int dimension() const

return M_coord.size();

friend std::ostream & operator<<(std::ostream & str,

Point const & p);

private:

unsigned int M_ID;

column_vector2x1 M_coord;

;

Le classi Edge e Triangle rappresentano, rispettivamente, un lato e unelemento della mesh e sono entrambe derivate, tramite ereditarietà pubblica,dalla classe Shape, che ne denisce l'interfaccia comune. La classe astrattaShape presenta, come membri protetti, il numero di vertici che denisco-no l'entità geometrica, l'identicatore dell'entità all'interno della mesh e ilvettore dei vertici, rappresentato da un vector contenente oggetti di classePoint. La classe Edge ha alcuni membri privati aggiuntivi rispetto a quel-li della classe base, ovvero un vettore rappresentante il vettore BK dellatrasformazione FK (denita nel capitolo precedente), gli identicatori deglielementi della mesh che condividono il lato e un enum rappresentante il tipodi lato, che può essere interno o di bordo con una particolare tipologia dicondizione assegnata. Tra i metodi pubblici della classe Edge, sottolineiamoil metodo length che restituisce la lunghezza del lato, utile nel calcolo degliintegrali, e il metodo transformationR1toR2 che rappresenta la trasforma-zione FK . Le dichiarazioni delle classi Shape ed Edge sono contenute nel leshape.hpp.

28

Page 30: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

enum bc_type Unknown=-1, Internal=0, Dirichlet=1,

Neumann=2, Robin=3 ;

typedef std::vector<Point> point_vector_type;

const unsigned int NOTEL = std::numeric_limits<int>::max();

class Edge;

class Shape

public:

Shape(unsigned int const & np);

Shape(Shape const & s);

virtual ~Shape();

inline unsigned int get_num_points() const

return M_num_points;

inline void set_id(unsigned int const & id)

M_ID=id;

inline unsigned int get_id() const

return M_ID;

inline Point & point(int const & i)

return M_points[i];

inline Point point(int const & i) const

return M_points[i];

virtual Edge edge(int const & i) const = 0;

protected:

unsigned int M_num_points;

unsigned int M_ID;

point_vector_type M_points;

;

class Edge: public Shape

public:

Edge();

Edge(Point const & P0, Point const & P1);

Edge(Edge const & ed);

virtual ~Edge();

29

Page 31: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

void set_map_R1toR2();

inline column_vector2x1 get_map_R1toR2() const

return M_map_R1toR2;

inline void set_sx(unsigned int const & sx)

M_sx=sx;

inline unsigned int get_sx() const

return M_sx;

inline void set_dx(unsigned int const & dx)

M_dx=dx;

inline unsigned int get_dx() const

return M_dx;

inline void set_boundary_condition(bc_type const & bc)

M_bc=bc;

inline bc_type get_boundary_condition() const

return M_bc;

virtual Edge edge(int const & i) const;

Real length() const;

column_vector2x1 transformationR1toR2(Real const & x)

const;

private:

column_vector2x1 M_map_R1toR2;

unsigned int M_sx;

unsigned int M_dx;

bc_type M_bc;

;

Osserviamo che i valori interi associati all'enumeratore bc_type sono quellida fornire nel le .poly (utilizzato dal generatore di griglia Triangle), perimporre le condizioni al bordo desiderate.

La classe Triangle presenta un solo membro privato aggiuntivo rispettoalla classe base, costituito da una matrice rappresentante la matrice BK dellatrasformazione FK (anch'essa denita nel capitolo precedente). Tra i metodi

30

Page 32: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

pubblici, mettiamo in evidenza il metodo edge che restituisce il lato deside-rato del triangolo, il metodo normal che fornisce la normale uscente dal latodesiderato, il metodo det_jacobian che fornisce il valore assoluto del deter-minante di BK , utile nel calcolo degli integrali, e il metodo transformation

che rappresenta la trasformazione FK . La dichiarazione della classe Trianglesi trova nel le triangle.hpp.

class Triangle: public Shape

public:

Triangle();

Triangle(Point const & P0, Point const & P1,

Point const & P2);

Triangle(Triangle const & t);

virtual ~Triangle();

void set_map();

inline matrix2x2 get_map() const

return M_map;

virtual Edge edge(int const & i) const;

column_vector2x1 normal(int const & i) const;

Real det_jacobian() const;

column_vector2x1 transformation(Real const & x,

Real const & y) const;

static const int S_connectivity[3][2];

private:

matrix2x2 M_map;

;

Tutte le informazioni relative alla griglia di calcolo sono contenute nellaclasse Mesh, costruita a partire dalle classi geometriche nora descritte. Taleclasse contiene gli insiemi dei vertici, dei lati e degli elementi della triango-lazione, tutti rappresentati attraverso opportuni vector. Inoltre, abbiamoscelto di utilizzare due ulteriori contenitori per memorizzare la collezione deilati di bordo associati a condizioni essenziali e quella dei lati di bordo associa-ti a condizioni naturali, in modo da rendere più eciente l'implementazionedella classe per il metodo misto-ibrido, evitando costose istruzioni condizio-nali. Vi è poi un ulteriore fondamentale membro privato, corrispondente

31

Page 33: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

alla matrice di connettività, che permette per ogni elemento di associare lanumerazione locale dei lati a quella globale. Tutte le strutture dati indicatevengono riempite dal costruttore della classe Mesh, che riceve in ingresso inomi dei le prodotti dal software Triangle. Per memorizzare ogni latouna sola volta nel contenitore corrispondente, ci siamo avvalsi dell'utilizzodei set e di alcuni algoritmi della STL, oltre che di una specializzazione,opportunamente scritta, del funtore less per oggetti di tipo Edge. Per riem-pire i contenitori corrispondenti ai lati di bordo, invece, abbiamo utilizzatol'algoritmo remove_copy_if della STL, che rende tale operazione particolar-mente eciente. Citiamo, inne, il metodo h che fornisce la taglia dellamesh e il metodo refElement che restituisce il triangolo di riferimento. Ladichiarazione della classe Mesh è contenuta nel le mesh.hpp.

typedef std::vector<Triangle> element_vector_type;

typedef std::vector<Edge> edge_vector_type;

class Mesh

public:

Mesh(const std::string & fileNode,

const std::string & fileElement,

const std::string & fileEdge);

~Mesh();

inline unsigned int get_numPoints() const

return M_nP;

inline unsigned int get_numElements() const

return M_nEl;

inline unsigned int get_numEdges() const

return M_nEd;

inline unsigned int get_numNaturalEdges() const

return M_nNatEd;

inline unsigned int get_numEssentialEdges() const

return M_nEssEd;

inline const Point & get_point(const unsigned int & id)

const return M_points[id];

inline const Triangle & get_element(const unsigned int

& id) const return M_elements[id];

inline const Edge & get_edge(const unsigned int & id)

const return M_edges[id];

inline const Edge & get_natural_edge(const unsigned int

& id) const return M_natural_edges[id];

inline const Edge & get_essential_edge(const unsigned int

32

Page 34: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

& id) const return M_essential_edges[id];

inline Eigen::MatrixXi get_connectivity() const

return M_connectivity;

inline unsigned int element2edge(const unsigned int

& element, const unsigned int & edge )

const return static_cast<unsigned int>(

M_connectivity(element, edge) );

Real h() const;

void help_BoundaryConditions() const;

static Triangle refElement();

private:

void buildConnectivity(std::set<Edge> & soe);

point_vector_type M_points;

element_vector_type M_elements;

edge_vector_type M_edges;

edge_vector_type M_natural_edges;

edge_vector_type M_essential_edges;

Eigen::MatrixXi M_connectivity;

unsigned int M_nP;

unsigned int M_nEl;

unsigned int M_nEd;

unsigned int M_nNatEd;

unsigned int M_nEssEd;

;

3.4 La classe per l'integrazione numerica

Per implementare un metodo DG misto-ibrido, occorre calcolare numerica-mente sia integrali deniti sugli elementi sia integrali deniti sui bordi deglielementi. Ciò implica la necessità di disporre di formule di quadratura siabidimensionali sia monodimensionali. Per ricondurre entrambi i tipi di for-mule a un'unica implementazione, abbiamo utilizzato la tecnica di metapro-grammazione dei type traits, particolari costrutti che permettono di operare

33

Page 35: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

staticamente sui tipi delle variabili. Nel nostro caso, questi costrutti sonocostituiti dalle classi denite nel le choose_type.hpp, le cui parti principalivengono riportate nel seguito.

template <int dimension>

class ChooseTypeStatically;

template <>

class ChooseTypeStatically<1>

public:

typedef Real ResultT;

typedef FunctionApproximation::LagrangeBasis::Functor1var

SecondResultT;

;

template <>

class ChooseTypeStatically<2>

public:

typedef column_vector2x1 ResultT;

typedef FunctionApproximation::LagrangeBasis::Functor2var

SecondResultT;

;

template <int dimension>

struct Dim2Type

enum value = dimension ;

;

Per capire come la tecnica dei type traits venga sfruttata nel codice, de-scriviamo la classe QuadratureRule, che rappresenta una generica formuladi quadratura. Il parametro template di tipo int caratterizza una formuladi quadratura come monodimensionale o bidimensionale. Tra i membri pri-vati, memorizziamo i vettori dei nodi e dei pesi e il grado di esattezza dellaformula. Poiché un nodo è un punto di R nel caso monodimensionale e unpunto di R2 nel caso bidimensionale, la scelta del tipo corretto da utilizzareper gli oggetti contenuti nel vettore dei nodi viene eettuata staticamente,grazie all'ausilio dei type traits, come mostrato nel prossimo listato. Il co-struttore riempie i contenitori dei nodi e dei pesi attraverso una chiamata aduno dei due metodi privati della classe, a seconda del valore del parametrotemplate, ovvero a seconda che la classe rappresenti una formula di qua-dratura monodimensionale o bidimensionale. La dichiarazione della classe

34

Page 36: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

QuadratureRule, che è parte dello spazio di nomi NumericalIntegration,è contenuta nel le quadrature.hpp.

template <int dim>

class QuadratureRule

public:

typedef typename

MetaSupport::ChooseTypeStatically<dim>::ResultT nodeT;

explicit QuadratureRule(const unsigned int & deg=5);

virtual ~QuadratureRule();

inline unsigned int get_num_nodes() const

return M_nodes.size();

inline nodeT node(const int & i) const

return M_nodes[i];

inline Real weight(const int & i) const

return M_weights[i];

inline unsigned int get_degree() const

return M_degree;

private:

std::vector<nodeT> M_nodes;

std::vector<Real> M_weights;

unsigned int M_degree;

void set_nw(const unsigned int & deg,

MetaSupport::Dim2Type<1> tt);

void set_nw(const unsigned int & deg,

MetaSupport::Dim2Type<2> tt);

;

Osserviamo, inne, che il codice utilizza nodi e pesi di Legendre-Gauss nelcaso monodimensionale e nodi e pesi deniti nell'articolo di Dunavant ([4])nel caso bidimensionale. Per entrambi i casi, nella versione attuale del pro-gramma, è possibile utilizzare formule aventi al massimo grado di esattezzapari a 5, ma eventuali estensioni risultano immediate.

35

Page 37: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

3.5 Le classi per gli spazi nito-dimensionali

Le classi che implementano gli spazi nito-dimensionali fanno parte dello spa-zio di nomi FunctionApproximation. In virtù della particolare natura deimetodi trattati, abbiamo bisogno di basi sia monodimensionali sia bidimen-sionali per descrivere adeguatamente gli spazi che approssimano le incognitedel problema. Tra le varie basi possibili, vengono usate quelle lagrangiane.Anche in questo contesto, sfruttiamo la tecnica dei type traits per ottenereun'unica implementazione per i casi monodimensionale e bidimensionale. Laclasse Basis, che rappresenta una generica base per uno spazio polinomiale,presenta dunque da un parametro template di tipo int per distinguere trai due casi e, a questo proposito, valgono le stesse considerazioni fatte nel-la sezione precedente per la classe QuadratureRule. I suoi membri privaticonsistono nei vettori dei puntatori alle funzioni di base e alle loro derivate,nel vettore dei nodi associati alle funzioni di base e nel grado dello spaziopolinomiale generato dalla base. Oltre a distinguere tra un punto di R eun punto di R2, la classe Basis deve anche distinguere una funzione di unavariabile (come quelle di una base monodimensionale) da una funzione didue variabili (come quelle di una base bidimensionale). Si sfrutta allora ladenizione di due appositi funtori nel le basis_functions.hpp, ai quali siapplica la tecnica dei type traits. La dichiarazione della classe Basis si trovanel le basis.hpp.

template <int dim>

class Basis

public:

typedef typename

MetaSupport::ChooseTypeStatically<dim>::ResultT nodeT;

typedef typename

MetaSupport::ChooseTypeStatically<dim>::SecondResultT

functorT;

explicit Basis(const unsigned int & k=1);

virtual ~Basis();

inline unsigned int get_num_functions() const

return M_Functions.size();

inline boost::shared_ptr<functorT> Func(const int & i)

const return M_Functions[i];

inline boost::shared_ptr<functorT> derFunc(const int & i)

const return M_derFunctions[i];

36

Page 38: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

inline nodeT get_node(const int & i) const

return M_nodes[i];

inline unsigned int get_k() const

return M_k;

private:

std::vector<boost::shared_ptr<functorT> > M_Functions;

std::vector<boost::shared_ptr<functorT> > M_derFunctions;

std::vector<nodeT> M_nodes;

unsigned int M_k;

void set_FdF(const unsigned int & k,

MetaSupport::Dim2Type<1> tt);

void set_FdF(const unsigned int & k,

MetaSupport::Dim2Type<2> tt);

;

Osserviamo che sia le funzioni di base sia i nodi sono deniti sull'elementodi riferimento (l'intervallo [0, 1] nel caso monodimensionale e il triangolo Knel caso bidimensionale). Come si può dedurre dal codice riportato, tutte lefunzioni di base e le loro derivate devono essere denite come funtori derivatipubblicamente dai due funtori rappresentanti le famiglie delle funzioni di unae due variabili. Tali denizioni si trovano nel le basis_functions.hpp.Attualmente sono a disposizione le funzioni di base per gli spazi polinomialiP1 e P2, ma risulta immediato aggiungere nuove basi al codice.

La classe Basis viene sfruttata dalle classi che rappresentano gli spazinito-dimensionali associati all'approssimazione delle tre incognite del pro-blema: il potenziale u, il usso q e la variabile ibrida λ. Ciascuna incognitarichiede un apposito spazio approssimante, a seconda del dominio di de-nizione e a seconda che sia una funzione scalare o vettoriale. Per gestiretale varietà di spazi da utilizzare, facciamo ricorso all'ereditarietà pubblicanel modo seguente: la classe astratta FESpace fornisce l'interfaccia comu-ne per tutte le classi rappresentanti spazi di elementi niti, mentre le classiFESpacePotential, FESpaceFlux e FESpaceHybrid, derivate da FESpace,implementano gli spazi per le variabili u, q e λ, rispettivamente. Così, laclasse FESpacePotential diviene il prototipo di uno spazio ad elementi nitiscalare nel caso bidimensionale, la classe FESpaceFlux di uno spazio ad ele-menti niti vettoriale nel caso bidimensionale e la classe FESpaceHybrid diuno spazio ad elementi niti scalare nel caso monodimensionale. Queste treclassi risultano anch'esse astratte, in quanto l'aggiunta di un secondo livello

37

Page 39: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

di derivazione rende più semplice e ordinata l'eventuale estensione del codicecon spazi approssimanti diversi dai semplici spazi Pk. In questo modo, saran-no le classi FESpacePotentialPk, FESpaceFluxPk e FESpaceHybridPk, deri-vate rispettivamente da FESPacePotential, FESpaceFlux e FESpaceHybrid,a rappresentare concretamente gli spazi utilizzati. Tornando alla classe ba-se FESpace, essa contiene come membri protetti il numero di componentidelle funzioni dello spazio, la dimensione del dominio, il numero di gradi dilibertà in riferimento al singolo elemento, il grado dello spazio e due referen-ze alle formule di quadratura monodimensionale e bidimensionale. La suadichiarazione è contenuta nel le fespace.hpp.

class FESpace

public:

FESpace(unsigned int const & k,

NumericalIntegration::QuadratureRule<1> const & rule1d,

NumericalIntegration::QuadratureRule<2> const & rule2d);

virtual ~FESpace();

virtual void set_num_components() = 0;

inline unsigned int get_num_components() const

return M_nComponents;

virtual void set_dim_domain() = 0;

inline unsigned int get_dim_domain() const

return M_dimDomain;

virtual void set_num_dof() = 0;

inline unsigned int get_num_dof() const

return M_nDof;

inline unsigned int get_k() const

return M_k;

inline const NumericalIntegration::QuadratureRule<1> &

get_rule1d() const return M_rule1d;

inline unsigned int get_degree_rule1d() const

return M_rule1d.get_degree();

inline const NumericalIntegration::QuadratureRule<2> &

get_rule2d() const return M_rule2d;

inline unsigned int get_degree_rule2d() const

return M_rule2d.get_degree();

38

Page 40: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

protected:

unsigned int M_nComponents;

unsigned int M_dimDomain;

unsigned int M_nDof;

unsigned int M_k;

NumericalIntegration::QuadratureRule<1> const & M_rule1d;

NumericalIntegration::QuadratureRule<2> const & M_rule2d;

;

Le referenze alle formule di quadratura consentono la valutazione delle fun-zioni di base e di loro opportune derivate sui nodi di quadratura degli ele-menti di riferimento (quello monodimensionale e quello bidimensionale). Ta-le calcolo viene eettuato dai costruttori delle classi concrete della gerarchiadescritta e i valori così ottenuti vengono memorizzati in opportune matrici,rendendo immediato il calcolo degli integrali associati alla formulazione delmetodo LDG-H, secondo le relazioni riportate nel capitolo precedente. Ciòè fonte di un notevole risparmio computazionale.

Per via di quanto appena discusso, la classe FESpacePotential contienecome membri protetti caratteristici le matrici che memorizzano i valori dellefunzioni di base, del gradiente delle funzioni di base, della restrizione albordo delle funzioni di base e della restrizione al bordo del gradiente dellefunzioni di base nei nodi delle formule di quadratura, come mostrato nelladichiarazione, contenuta nel le fespace_potential.hpp.

class FESpacePotential: public FESpace

public:

FESpacePotential(unsigned int const & k,

NumericalIntegration::QuadratureRule<1> const & rule1d,

NumericalIntegration::QuadratureRule<2> const & rule2d);

virtual ~FESpacePotential();

virtual void set_num_components();

virtual void set_dim_domain();

virtual void set_num_dof() = 0;

inline matrix get_phi() const;

inline matrix get_gradphi() const;

inline matrix get_phib() const;

inline matrix get_gradphib() const;

39

Page 41: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

inline Real phi(int const & i, int const & node) const;

inline column_vector2x1 gradphi(int const & i,

int const & node) const;

inline Real phib(int const & i, int const & edge,

int const & node) const;

inline column_vector2x1 gradphib(int const & i,

int const & edge, int const & node) const;

protected:

matrix M_phi;

matrix M_gradphi;

matrix M_phib;

matrix M_gradphib;

;

La classe FESpaceFluxmemorizza, invece, i valori delle funzioni di base, delladivergenza delle funzioni di base e della componente normale della restrizioneal bordo delle funzioni di base sui nodi delle formule di quadratura. Ladichiarazione corrispondente si trova nel le fespace_flux.hpp.

class FESpaceFlux: public FESpace

public:

FESpaceFlux(unsigned int const & k,

NumericalIntegration::QuadratureRule<1> const & rule1d,

NumericalIntegration::QuadratureRule<2> const & rule2d);

virtual ~FESpaceFlux();

virtual void set_num_components();

virtual void set_dim_domain();

virtual void set_num_dof() = 0;

inline matrix get_omega() const;

inline matrix get_divomega() const;

inline matrix get_omegadotn() const;

inline column_vector2x1 omega(int const & i,

int const & node) const;

inline Real divomega(int const & i,

int const & node) const;

inline Real omegadotn(int const & i, int const & edge,

int const & node) const;

40

Page 42: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

protected:

matrix M_omega;

matrix M_divomega;

matrix M_omegadotn;

;

Inne, la classe FESpaceHybrid memorizza solamente i valori delle funzionidi base sui nodi della formula di quadratura monodimensionale. La suadichiarazione si trova nel le fespace_hybrid.hpp.

class FESpaceHybrid: public FESpace

public:

FESpaceHybrid(unsigned int const & k,

NumericalIntegration::QuadratureRule<1> const & rule1d,

NumericalIntegration::QuadratureRule<2> const & rule2d);

virtual ~FESpaceHybrid();

virtual void set_num_components();

virtual void set_dim_domain();

virtual void set_num_dof() = 0;

inline matrix get_eta() const;

inline Real eta(int const & i, int const & node) const;

protected:

matrix M_eta;

;

Tutte le matrici contenenti i valori delle funzioni di base e delle loro deri-vate sono riempite soltanto dai costruttori delle classi FESpacePotentialPk,FESpaceFluxPk e FESpaceHybridPk, sfruttando le referenze alle formule diquadratura e la classe Basis precedentemente introdotta. Omettiamo ladichiarazione di tali classi, in quanto meno signicativa delle precedenti.

3.6 Le classi per la gestione dei problemi

dierenziali

Le classi che gestiscono le informazioni relative ai problemi dierenziali che sidesidera risolvere sono contenute nello spazio di nomi DifferentialProblem.Perseguendo l'obiettivo di un'implementazione in cui sia semplice aggiunge-re nuovi problemi da simulare, un generico caso test è rappresentato dauna classe derivata dalla classe astratta TestCaseBase. Tale classe contiene

41

Page 43: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

alcuni metodi pubblici corrispondenti ai vari parametri che deniscono unproblema stazionario di diusione-trasporto-reazione. Tali metodi restanoindeniti nella classe base, ma devono essere opportunamente deniti nelleclassi derivate. Inoltre, la classe TestCaseBase contiene un membro protet-to, costituito da una variabile booleana che assume il valore true nel caso incui il problema considerato sia dotato di soluzione analitica, false altrimen-ti. Il metodo get_exact_solution, che restituisce il valore di tale variabile,è utilizzato dalla classe che implementa il metodo LDG-H per sapere se siapossibile eettuare il calcolo degli errori per la soluzione numerica del pro-blema dato. La dichiarazione della classe TestCaseBase è contenuta nel letest_case_base.hpp.

class TestCaseBase

public:

TestCaseBase();

virtual ~TestCaseBase();

inline void set_exact_solution(bool const & exact)

M_ExactSolution = exact;

inline bool const & get_exact_solution() const

return M_ExactSolution;

virtual matrix2x2 a(Real const & x, Real const & y)

const = 0;

virtual column_vector2x1 beta(Real const & x,

Real const & y) const = 0;

virtual Real r(Real const & x, Real const & y) const = 0;

virtual Real f(Real const & x, Real const & y) const = 0;

virtual Real g(Real const & x, Real const & y) const = 0;

virtual Real h(Real const & x, Real const & y) const = 0;

virtual Real gamma(Real const & x, Real const & y)

const = 0;

virtual Real u_exact(Real const & x, Real const & y)

const = 0;

virtual column_vector2x1 q_exact(Real const & x,

Real const & y) const = 0;

protected:

bool M_ExactSolution;

;

Per una gestione ordinata dei problemi dierenziali e, soprattutto, in vi-sta di un possibile miglioramento del codice, basato sull'utilizzo di librerie

42

Page 44: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

dinamiche, abbiamo creato una factory di casi test, secondo lo schema im-plementativo indicato nelle dispense fornite dal Prof. Formaggia nel corso diProgrammazione Avanzata per il Calcolo Scientico. Si tratta di una object

factory, implementata come singleton, i cui prodotti concreti sono costituitidai casi test derivati da TestCaseBase, mentre gli identicatori ad essi asso-ciati sono dati da semplici stringhe. Senza addentrarci nei dettagli implemen-tativi, per i quali rimandiamo alle dispense citate e al codice contenuto neile test_factory.hpp, test_factory.cpp e test_proxy.hpp, osserviamosolo che la fase di registrazione, tipica di ogni object factory, è adata allaclasse ausiliaria TestProxy, il cui costruttore registra i prodotti nella facto-

ry. In virtù di questa particolare implementazione, per aggiungere un nuovoproblema, oltre a derivare opportunamente una classe da TestCaseBase,occorre istanziare un oggetto di tipo TestProxy per registrare il proble-ma nella factory. Tutto questo viene eettuato nei le test_cases.hpp

e test_cases.cpp. Ribadiamo che tale implementazione è alla base di uneventuale miglioramento del codice, che prevede la creazione di una libreriadinamica di casi test, in modo che sia possibile caricare dinamicamente glistessi casi test e aggiungerne di nuovi senza ricompilare l'eseguibile.

3.7 La classe per i metodi DG misti-ibridi

Il cuore del programma è costituito dalla classe HybridMethod, che im-plementa i metodi DG misti-ibridi ed è contenuta nello spazio di nomiPDEsResolution. La versione attuale del codice comprende i metodi LDG-He BDM-H, ma sono possibili estensioni che includano altri metodi della fami-glia studiata. La classe HybridMethod sfrutta tutte le classi nora descrittee l'interfaccia fornita dalle Eigen per la libreria SuperLU, usata per risol-vere il sistema algebrico nell'incognita ibrida. I membri privati della classeHybridMethod sono i seguenti:

• un enumeratore indicante il particolare metodo usato (LDG-H oppureBDM-H);

• una referenza ad un oggetto di classe Mesh, corrispondente alla trian-golazione adottata;

• il grado caratterizzante il metodo;

• tre puntatori intelligenti ad oggetti rappresentanti gli per l'approssi-mazione delle variabili u, q e λ;

• un puntatore intelligente ad un oggetto rappresentante il problemadierenziale da risolvere;

• un enumeratore che indica se il problema è a diusione dominante o atrasporto dominante;

43

Page 45: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

• gli esponenti associati alla lunghezza dei lati per il calcolo delle quantitàτK e τK (per la cui denizione rimandiamo al primo capitolo);

• un puntatore al corretto metodo privato da utilizzare per il calcolo delparametro di stabilizzazione τ ;

• un vettore di matrici contenenti i valori di τ nei nodi di quadratura suilati di ogni elemento.

Osserviamo come i puntatori intelligenti sfruttino il polimorsmo e comeparticolare attenzione venga riservata al calcolo del parametro di stabilizza-zione τ , che sarà gestito da un ben preciso metodo privato, individuato aseconda del tipo di metodo e del tipo di problema. In particolare, il calcolodi τ su un dato elemento è adato al membro privato compute_tau_dd nelcaso del metodo LDG-H e di un problema a diusione dominante, al membrocompute_tau_cd nel caso del metodo LDG-H e di un problema a trasportodominante, al membro compute_tau_zero nel caso del metodo BDM-H (percui deve essere τ = 0). Il costruttore della classe HybridMethod, oltre adattribuire il corretto valore a tutti i membri privati, si occupa anche del cal-colo di τ , predisponendo la classe alla risoluzione del problema dierenzialedato. Riportiamo la dichiarazione della classe HybridMethod, contenuta nelle hybrid_method.hpp.

class HybridMethod

public:

HybridMethod(specific_method const & name,

Geometry::Mesh const & mesh,

unsigned int const & k,

NumericalIntegration::QuadratureRule<1> const & rule1d,

NumericalIntegration::QuadratureRule<2> const & rule2d,

std::string const & problem,

specific_tau const & tau,

int const & expTauk, int const & expTaukbar);

~HybridMethod();

inline specific_method get_name() const;

inline unsigned int get_k() const;

inline boost::shared_ptr<

FunctionApproximation::FESpacePotential >

get_space_potential() const;

inline boost::shared_ptr<

FunctionApproximation::FESpaceFlux >

44

Page 46: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

get_space_flux() const;

inline boost::shared_ptr<

FunctionApproximation::FESpaceHybrid >

get_space_hybrid() const;

inline specific_tau get_tau() const;

inline int get_exp_tauk() const;

inline int get_exp_taukbar() const;

inline matrix get_tau_on_element(unsigned int const & i)

const;

void help_HybridMethods() const;

void help_TauComputing() const;

void solve() const;

private:

typedef matrix (HybridMethod::*howtau)(

Geometry::Triangle const &, int const & ) const;

matrix compute_tau_dd(Geometry::Triangle const & tr,

int const & eKtau) const;

matrix compute_tau_cd(Geometry::Triangle const & tr,

int const & eKtau) const;

matrix compute_tau_zero(Geometry::Triangle const & tr,

int const & eKtau) const;

void compute_local_matrices(unsigned int const & el,

matrix & Ak, matrix & Bk, matrix & Ck,

matrix & Dk, matrix & Ek, matrix & Fk,

column_vector & f2k,

matrix & Gk, matrix & Hk, matrix & Ik) const;

void compute_errors(column_vector const & vec_lambda,

column_vector const & vec_u,

column_vector const & vec_q,

Real & err_lambda, Real & err_u,

Real & err_q) const;

void write_solution(column_vector const & vec_lambda,

column_vector const & vec_u,

column_vector const & vec_q) const;

specific_method M_name;

45

Page 47: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Geometry::Mesh const & M_mesh;

unsigned int M_k;

boost::shared_ptr<FunctionApproximation::FESpacePotential>

M_spacePotential;

boost::shared_ptr<FunctionApproximation::FESpaceFlux>

M_spaceFlux;

boost::shared_ptr<FunctionApproximation::FESpaceHybrid>

M_spaceHybrid;

std::auto_ptr<DifferentialProblem::TestCaseBase> M_problem;

specific_tau M_tau;

int M_expTauk;

int M_expTaukbar;

howtau M_compute_tau;

std::vector<matrix> M_tauOnElements;

;

La risoluzione del problema dierenziale è adata al metodo solve, lacui implementazione sfrutta i seguenti metodi privati:

• il metodo compute_local_matrices, che calcola le matrici locali de-nite nel secondo capitolo, relativamente ad un dato elemento dellamesh;

• il metodo compute_errors, che calcola e stampa a schermo le norme L2

degli errori relativi all'approssimazione delle variabili u, q e λ (qualorail problema dierenziale ammetta una soluzione analitica);

• il metodo write_solution, che stampa su opportuni le i valori dellevariabili uh, qh e λh nei nodi associati alle funzioni di base lagrangiane;su questi le è possibile operare attraverso opportuni script di comandi,per visualizzare la soluzione tramite Gnuplot.

L'implementazione del metodo solve è piuttosto complessa e, per i dettagli,rimandiamo al codice contenuto nel le hybrid_method.cpp. Nel seguito,descriviamo i passi fondamentali eseguiti da tale metodo per la risoluzionedi un problema dierenziale. All'interno di un ciclo sugli elementi, vieneinnanzitutto chiamato il metodo compute_local_matrices per calcolare lematrici locali; viene poi eseguita la condensazione statica descritta nel capi-tolo precedente e si procede all'assemblaggio della matrice e del termine notodel sistema globale. Osserviamo che le matrici locali associate alle condizionial bordo naturali vengono trattate separatamente, all'interno di un ciclo sui

46

Page 48: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

lati di bordo associati a tali condizioni, evitando così l'utilizzo di costrutticondizionali nel ciclo principale. Osserviamo, inoltre, che la matrice globa-le viene memorizzata come una matrice sparsa, secondo un formato simileal noto CSR e fornito delle Eigen. Una volta assemblato il sistema globale,vengono imposte le condizioni al bordo essenziali nella maniera seguente: glielementi di una riga della matrice globale associata ad un grado di libertà diDirichlet vengono posti uguali a 0, eccetto l'elemento sulla diagonale princi-pale che viene posto pari a 1; l'elemento corrispondente del vettore globaleviene posto pari al valore della condizione assegnata nel punto considerato.Imposte le condizioni essenziali, viene risolto numericamente il sistema globa-le sfruttando la libreria SuperLU, ottenendo così la variabile λh. Le variabiliuh e qh vengono ricostruite usando le relazioni 2.8 del capitolo precedente,all'interno di un nuovo ciclo sugli elementi. Inne, la soluzione numericaviene scritta su le dal metodo write_solution e, se il problema ammetteuna soluzione analitica, vengono calcolati gli errori in norma L2 dal metodocompute_errors. Osserviamo che la versione attuale del codice non prevedela ricostruzione della variabile superconvergente di cui abbiamo parlato nelprimo capitolo; questa operazione può essere oggetto di future estensioni.

3.8 L'utilizzo del codice

I dettagli su come compilare ed utilizzare il codice si trovano nel le README,che elenca anche tutti gli strumenti ausiliari necessari per il corretto funzio-namento del programma. In questa sezione, riportiamo solamente le infor-mazioni principali. Il le Makefile permette di compilare semplicemente ilcodice, attraverso il comando

make

che genera la libreria statica libmhfem.a e l'eseguibile mhfem_main. La libre-ria statica comprende tutti i le oggetto associati ai source les del program-ma, ad eccezione dei le test_cases.o e mhfem_main.o. Questo permettedi aggiungere nuovi casi test e di modicare il programma principale senzadover ricompilare la libreria, fatto molto utile nel momento in cui si volesserosimulare numerosi problemi dierenziali senza modicare l'implementazionedel metodo.

Per eseguire il programma, occorre innanzitutto attribuire ai parametriin ingresso i valori desiderati, modicando il le input, che viene letto daGetPot. Tale le contiene una legenda per indicare i valori disponibili per ivari parametri. Osserviamo solamente come sia opportuno utilizzare formuledi quadratura con grado di esattezza sucientemente elevato, a secondadel grado del metodo utilizzato. Una buona scelta consiste nell'utilizzareformule di quadratura di grado 5 con approssimazioni sia di grado 1 sia digrado 2. In particolare, sconsigliamo l'utilizzo della formula di quadratura

47

Page 49: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

bidimensionale avente grado di esattezza 3, in quanto caratterizzata dallapresenza di pesi negativi. Una volta modicato opportunamente il le input,è suciente il comando

./mhfem_main

per lanciare l'eseguibile. I valori degli errori numerici vengono stampati aschermo, mentre i valori delle variabili uh, qh e λh vengono stampati rispet-tivamente sui le sol_u.dat, sol_q.dat e sol_lambda.dat. Su questi èpossibile operare con semplici script di comandi Gnuplot, per visualizzaregracamente la soluzione.

48

Page 50: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Capitolo 4

I risultati numerici

4.1 L'analisi di convergenza

In quest'ultimo capitolo, vogliamo illustrare alcuni risultati numerici, congli obiettivi di validare il codice presentato e sottolineare le potenzialità deimetodi DG misti-ibridi. Per quanto concerne la validazione della libreria,ci proponiamo di eettuare l'analisi di convergenza per i metodi LDG-H eBDM-H e di confrontare i risultati ottenuti con quelli riportati in [2].

Consideriamo il problema 2.4 sul quadrato unitario Ω = (0, 1) × (0, 1),denito dalle seguenti scelte dei coecienti: a = εI, dove I rappresenta lamatrice identità, β = [−x2,−y4]

T, r = x+ y3 e f = xy(4xηε5(y) + 6y3ηε3(x)),

dove ηεs(t) = 1 − exp((ts − 1)/(sε)) per s ≥ 1. Imposte condizioni al bordodi Dirichlet omogenee, la soluzione analitica del problema considerato è datada

u(x, y) = xyηε3(x)ηε5(y).

Scegliamo ε = 0.5 in modo che la condizione 1.20 sia soddisfatta e il terminediusivo domini su quello convettivo. La soluzione del problema, calcolatacol metodo LDG-H su una griglia con triangoli di area inferiore a 0.001, usan-do polinomi di grado k = 2 e scegliendo τK = 1 e τK = 1, è rappresentatanelle gure 4.1, 4.2, 4.3, 4.4 e 4.5.

Per eettuare l'analisi di convergenza, abbiamo simulato il problema sugriglie con un diverso grado di ttezza, in modo da individuare come glierrori di approssimazione delle variabili u e q scalino rispetto alla taglia hdella griglia (calcolata numericamente in termini di misura del lato più lungodella triangolazione). Alla luce della scelta fatta per il generatore di griglia,non potendo disporre di griglie strutturate, facciamo scalare h imponendo unvincolo di area massima per i triangoli della mesh di calcolo. In particolare,scegliamo come valori massimi per l'area degli elementi quelli corrispondentialle aree dei triangoli rettangoli isosceli aventi i cateti di lunghezza 1/2l,con l = 2, · · · , 7. In vista di un confronto con i risultati ottenuti in [2],consideriamo le seguenti norme degli errori di approssimazione del potenziale

49

Page 51: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Figura 4.1: variabile λh, calcolata col metodo LDG-H usando polinomi digrado k = 2, τK = 1 e τK = 1.

Figura 4.2: variabile uh, calcolata col metodo LDG-H usando polinomi digrado k = 2, τK = 1 e τK = 1.

50

Page 52: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Figura 4.3: la prima componente della variabile qh, calcolata col metodoLDG-H usando polinomi di grado k = 2, τK = 1 e τK = 1.

Figura 4.4: la seconda componente della variabile qh, calcolata col metodoLDG-H usando polinomi di grado k = 2, τK = 1 e τK = 1.

51

Page 53: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Figura 4.5: rappresentazione bidimensionale della variabile qh, calcolata colmetodo LDG-H usando polinomi di grado k = 2, τK = 1 e τK = 1.

e del usso, denite sullo spazio funzionale L2:

‖ u− uh ‖L2(Ωh) = (u− uh, u− uh)Ωh1/2,

‖ q− qh ‖L2(Ωh;c) = (c(q− qh),q− qh)Ωh1/2.

Innanzitutto, consideriamo il metodo LDG-H con le scelte τK = 1 eτK = 1 relativamente al parametro di stabilizzazione. Riportiamo nelletabelle 4.1 e 4.2 (corrispondenti, rispettivamente, ai casi k = 1 e k = 2) ivalori delle norme degli errori.

l h ‖ u− uh ‖L2(Ωh) ‖ q− qh ‖L2(Ωh;c)

2 0.353553 2.08228 · 10−3 1.00732 · 10−2

3 0.176777 4.5962 · 10−4 2.13246 · 10−3

4 0.0923166 1.13292 · 10−4 4.94294 · 10−4

5 0.0459674 2.87177 · 10−5 1.26186 · 10−4

6 0.0238226 7.04874 · 10−6 3.22436 · 10−5

7 0.0125119 1.76389 · 10−6 8.07181 · 10−6

Tabella 4.1: errori di approssimazione ottenuti con il metodo LDG-H, usandopolinomi di grado k = 1, τK = 1 e τK = 1.

52

Page 54: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

l h ‖ u− uh ‖L2(Ωh) ‖ q− qh ‖L2(Ωh;c)

2 0.353553 2.32674 · 10−4 1.25101 · 10−3

3 0.176777 2.42973 · 10−5 1.11102 · 10−4

4 0.0923166 2.74004 · 10−6 1.19443 · 10−5

5 0.0459674 3.40588 · 10−7 1.60322 · 10−6

6 0.0238226 4.57781 · 10−8 2.08419 · 10−7

7 0.0125119 5.69897 · 10−9 2.63899 · 10−8

Tabella 4.2: errori di approssimazione ottenuti con il metodo LDG-H, usandopolinomi di grado k = 2, τK = 1 e τK = 1.

Riportiamo poi tali valori in funzione di h in un graco in scala loga-ritmica e individuiamo la retta che interpola tali dati nel senso dei minimiquadrati, utilizzando il comando polyfit di Matlab. Il coeciente angolaredi tale retta rappresenta una stima dell'ordine di convergenza del metodo.I graci relativi al caso k = 1 corrispondono alle gure 4.6 e 4.7 , mentrequelli relativi al caso k = 2 corrispondono alle gure 4.8 e 4.9.

10−2

10−1

100

10−6

10−5

10−4

10−3

10−2

h

Err

ore

per

u in

nor

ma

L2

coefficiente angolare:2.104073

Figura 4.6: stima dell'ordine di convergenza di uh per il metodo LDG-H,usando polinomi di grado k = 1, τK = 1 e τK = 1.

Nel caso k = 1, la stima dell'ordine di convergenza del metodo LDG-Hè pari a 2.104073 per la variabile uh e a 2.117572 per la variabile qh; nelcaso k = 2, la stima è pari a 3.159812 per la variabile uh e a 3.189157 perla variabile qh. Questi risultati costituiscono una buona approssimazione

53

Page 55: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

10−2

10−1

100

10−6

10−5

10−4

10−3

10−2

10−1

h

Err

ore

per

q in

nor

ma

L2

coefficiente angolare:2.117572

Figura 4.7: stima dell'ordine di convergenza di qh per il metodo LDG-H,usando polinomi di grado k = 1, τK = 1 e τK = 1.

10−2

10−1

100

10−9

10−8

10−7

10−6

10−5

10−4

10−3

h

Err

ore

per

u in

nor

ma

L2

coefficiente angolare:3.159812

Figura 4.8: stima dell'ordine di convergenza di uh per il metodo LDG-H,usando polinomi di grado k = 2, τK = 1 e τK = 1.

54

Page 56: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

10−2

10−1

100

10−8

10−7

10−6

10−5

10−4

10−3

10−2

h

Err

ore

per

q in

nor

ma

L2

coefficiente angolare:3.189157

Figura 4.9: stima dell'ordine di convergenza di qh per il metodo LDG-H,usando polinomi di grado k = 2, τK = 1 e τK = 1.

degli ordini di convergenza teorici, per cui il metodo LDG-H facente uso dipolinomi di grado k risulta convergere con ordine k + 1 sia per la variabilescalare sia per quella vettoriale, valutando gli errori in norma L2. Tali or-dini, inoltre, trovano un ulteriore riscontro numerico in [2]. Le simulazionieettuate modicando i valori attribuiti al parametro di stabilizzazione τ ri-producono risultati molto simili a quelli nora riportati, corrispondenti allescelte τK = 1 e τK = 1, e pertanto omettiamo i relativi graci e tabelle.

Consideriamo ora il metodo BDM-H nell'unico caso possibile alla lucedei gradi polinomiali a disposizione nella versione attuale del codice, ovveroil caso in cui la variabile u è approssimata con polinomi di grado 1 e lavariabile q con polinomi di grado 2. Procedendo analogamente a come fattoper il metodo LDG-H, riportiamo i valori degli errori nella tabella 4.3 ericostruiamo la retta interpolante i dati ottenuti nei graci 4.10 e 4.11.

Anche nel caso del metodo BDM-H, le stime degli ordini di convergenzaottenute dalle simulazioni trovano una buona corrispondenza con i risultatiteorici e con quelli numerici riportati in [2]. Il metodo BDM-H, pertanto,risulta convergere con ordine 2 sia nella variabile scalare sia in quella vetto-riale quando u viene approssimata usando polinomi di grado 1 e q usandopolinomi di grado 2.

55

Page 57: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

l h ‖ u− uh ‖L2(Ωh) ‖ q− qh ‖L2(Ωh;c)

2 0.353553 1.51766 · 10−3 1.60641 · 10−3

3 0.176777 3.69102 · 10−4 3.96104 · 10−4

4 0.0923166 8.48068 · 10−5 8.34266 · 10−5

5 0.0459674 2.12555 · 10−5 1.75207 · 10−5

6 0.0238226 5.13271 · 10−6 4.25371 · 10−6

7 0.0125119 1.27457 · 10−6 1.04474 · 10−6

Tabella 4.3: errori di approssimazione ottenuti con il metodo BDM-H,usando polinomi di grado 1 per l'incognita scalare e 2 per quella vettoriale.

10−2

10−1

100

10−6

10−5

10−4

10−3

10−2

h

Err

ore

per

u in

nor

ma

L2

coefficiente angolare:2.118772

Figura 4.10: stima dell'ordine di convergenza di uh per il metodo BDM-H,usando polinomi di grado 1 per l'incognita scalare e 2 per quella vettoriale.

56

Page 58: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

10−2

10−1

100

10−6

10−5

10−4

10−3

10−2

h

Err

ore

per

q in

nor

ma

L2

coefficiente angolare:2.214238

Figura 4.11: stima dell'ordine di convergenza di qh per il metodo BDM-H,usando polinomi di grado 1 per l'incognita scalare e 2 per quella vettoriale.

4.2 Il trattamento del trasporto dominante

Come sappiamo dal primo capitolo, il metodo LDG-H si presta anche atrattare il caso di problemi in cui il termine convettivo domina su quellodiusivo. In generale, la presenza di oscillazioni nella soluzione numerica diproblemi a trasporto dominante può essere evitata ricorrendo ad opportunestabilizzazioni. Una tale stabilizzazione è fornita dal metodo LDG-H, quandosi calcola il parametro τ in maniera oculata, secondo quanto discusso nelprimo capitolo.

Per dare un'idea delle potenzialità del metodo LDG-H in questo contesto,consideriamo il problema presentato in [6], denito sul quadrato unitariodalle scelte a = εI, β = (−1,−1)T , r = 0, f = 1, e da condizioni al bordodi Dirichlet omogenee. Scegliamo ε = 10−5, in modo che il problema sia inregime di trasporto dominante. La soluzione risulta caratterizzata da duestrati limite in corrispondenza dei lati x = 1 e y = 1.

Utilizzando la forma standard del metodo LDG-H su una griglia piuttostolasca (ottenuta imponendo che l'area di ciascun elemento sia inferiore a 0.01),giungiamo ad una soluzione numerica aetta da oscillazioni spurie, comemostrato nelle gure 4.12 e 4.13. Utilizzando, invece, il metodo LDG-Hdove τ è calcolato in modo da avere uno schema stabile, otteniamo sullastessa griglia una soluzione priva di oscillazioni, come illustrato nelle gure4.14 e 4.15. Possiamo quindi osservare come il metodo LDG-H nella versionestabilizzata, pur non riproducendo i ripidi gradienti dello strato limite per via

57

Page 59: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

dell'utilizzo di una griglia poco tta, sia in grado di eliminare le oscillazioninon siche che aiggono i problemi a trasporto dominante e ciò costituisceun ulteriore motivo di interesse nei confronti dei metodi studiati.

Figura 4.12: variabile λh, calcolata col metodo LDG-H standard, usandopolinomi di grado k = 2.

58

Page 60: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Figura 4.13: variabile uh, calcolata col metodo LDG-H standard, usandopolinomi di grado k = 2.

Figura 4.14: variabile λh, calcolata col metodo LDG-H stabilizzato, usandopolinomi di grado k = 2.

59

Page 61: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Figura 4.15: variabile uh, calcolata col metodo LDG-H stabilizzato, usandopolinomi di grado k = 2.

60

Page 62: Elementi Finiti Misti-Ibridi per Problemi diforma/Didattica/ProgettiPacs/Terragni12-13/p... · o nel dato iniziale o nel caso di problemi non lineari. uttaTvia, tali metodi vengono

Bibliograa

[1] Brezzi, F. e M. Fortin: Mixed and Hybrid Finite Element Methods.Springer, 1991.

[2] Cockburn, B., B. Dong, J. Guzman, M. Restelli e R. Sacco: A hy-

bridizable discontinuous Galerkin method for steady-state convection-

diusion-reaction problems. SIAM J. Sci. Comput., 31(5):38273826,2009.

[3] Cockburn, B., J. Gopalakrishnan e R. Lazarov: Unied hybridization

of discontinuous Galerkin, mixed, and continuous Galerkin methods for

second order elliptic problems. SIAM J. Numer. Anal., 47(2):13191365,2009.

[4] Dunavant, D.: High degree ecient symmetrical Gaussian quadrature

rules for the triangle. Internal J. Numer. Meth. Engrg., 21:11291148,1985.

[5] Formaggia, L., F. Saleri e A. Veneziani: Applicazioni ed esercizi di

modellistica numerica per problemi dierenziali. Springer, 2005.

[6] Quarteroni, A.: Modellistica Numerica per Problemi Dierenziali.Springer, 4a edizione, 2008.

[7] Quarteroni, A., R. Sacco e F. Saleri: Matematica Numerica. Springer,3a edizione, 2008.

[8] Sacconi, A.: Elementi Finiti Discontinuous Galerkin Ibridizzabili per

Problemi Ellittici in 3D. tesi di laurea, Politecnico di Milano, 2011.

[9] Salsa, S.: Equazioni a derivate parziali. Metodi, modelli e applicazioni.Springer, 2a edizione, 2010.

[10] Yang, D.: C++ and Object-Oriented Numeric Computing for Scientists

and Engineers. Springer, 2001.

61