Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de...

111
Bachelorthesis Wiskunde en Informatica Scherpe Triangulaties in de Eindige Elementen Methode Raymond van Veneti¨ e 15 juli 2014 Begeleiding: Dr. Jan Brandts & Dr. Leen Torenvliet Instituut voor Informatica Korteweg-de Vries Instituut voor Wiskunde Faculteit der Natuurwetenschappen, Wiskunde en Informatica

Transcript of Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de...

Page 1: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bachelorthesis Wiskunde en Informatica

Scherpe Triangulaties in de Eindige Elementen

Methode

Raymond van Venetie

15 juli 2014

Begeleiding: Dr. Jan Brandts & Dr. Leen Torenvliet

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2001234567891011121314151617181920

Instituut voor Informatica

Korteweg-de Vries Instituut voor Wiskunde

Faculteit der Natuurwetenschappen, Wiskunde en Informatica

Page 2: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Samenvatting

We beginnen met een korte introductie in de theorie van de eindige elementen me-thode voor reactie-diffusieproblemen. Vervolgens laten we zien hoe we deze methode(handig) kunnen implementeren. We tonen aan dat de exacte oplossing van een reactie-diffusieprobleem aan het maximum principe voldoet. Met een aantal (extra) eisen aande triangulatie van het domein kunnen we laten zien dat de eindige elementen oplossingook aan dit maximum principe voldoet. Een zo een eis is dat alle dihedrale hoeken vande simplices uit de triangulatie scherp zijn.

We bekijken vervolgens triangulaties van het vierkant waarbij de hoekpunten, van dedriehoeken, op een regelmatig rooster in het vierkant liggen. We onderzoeken of wemet behulp van de computer een scherpe roostertriangulatie van het vierkant kunnenvinden. We presenteren een aanpassing aan de methode die in het eerdere werk [13]gebruikt werd om dergelijke scherpe roostertriangulaties te vinden. We zijn hiermee instaat roostertriangulaties voor fijnere roosters van het vierkant te vinden.

We onderzoeken vervolgens of we een scherpe roostertriangulatie van de kubus kunnenvinden. Dit probleem blijkt een stuk complexer dan het vinden van dergelijke triangu-laties voor het vierkant. We presenteren een algoritme om de Conforme Verzamelingvan de kubus te construeren. Dit is een verzameling facetten die mogelijkerwijs in eenscherpe roostertriangulatie van de kubus kunnen zitten. Deze verzameling blijkt leeg tezijn voor de eerste 29 regelmatige roosters van de kubus. Dit impliceert dat er voor dezeroosters geen scherpe roostertriangulatie bestaat. Voor het 30ste regelmatige rooster vande kubus vinden we dat de Conforme Verzameling niet-leeg is. We hebben daarom hetvermoeden dat er voor dit rooster een scherpe roostertriangulatie van de kubus bestaat.

Titel: Scherpe Triangulaties in de Eindige Elementen MethodeAuteur: Raymond van Venetie, [email protected], 10004627Begeleiding: Dr. Jan Brandts & Dr. Leen TorenvlietEinddatum: 15 juli 2014

Korteweg-de Vries Instituut voor WiskundeUniversiteit van AmsterdamScience Park 904, 1098 XH Amsterdamhttp://www.science.uva.nl/math

2

Page 3: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Inhoudsopgave

1. Inleiding 6

2. De eindige elementen methode 82.1. Definities en notatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.2. Het eendimensionale geval . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2.1. Zwakke differentieerbaarheid . . . . . . . . . . . . . . . . . . . . . 102.2.2. Zwakke formulering . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.3. De Galerkin methode . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.4. De eindige elementen methode . . . . . . . . . . . . . . . . . . . . 132.2.5. De volledig discrete eindige elementen methode . . . . . . . . . . . 142.2.6. Bovengrens fout eindige elementen oplossing . . . . . . . . . . . . . 152.2.7. Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.3. Het reactie-diffusieprobleem . . . . . . . . . . . . . . . . . . . . . . . . . . 182.3.1. De zwakke formulering van het reactie-diffusieprobleem . . . . . . 182.3.2. De Galerkin methode . . . . . . . . . . . . . . . . . . . . . . . . . 192.3.3. De eindige elementen methode . . . . . . . . . . . . . . . . . . . . 202.3.4. De volledig discrete eindige elementen methode . . . . . . . . . . . 212.3.5. Bovengrens fout eindige elementen oplossing . . . . . . . . . . . . . 22

3. Implementatie van de volledig discrete eindige elementen methode 233.1. Het eendimensionale geval . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1.1. Discretisatie van de inproducten (f, ψj) . . . . . . . . . . . . . . . 243.2. Het tweedimensionale reactie-diffusieprobleem . . . . . . . . . . . . . . . . 25

3.2.1. Nodale basisfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2.2. Opdelen matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.2.3. Transformatie nodale basisfuncties . . . . . . . . . . . . . . . . . . 273.2.4. Samenstellen massamatrix . . . . . . . . . . . . . . . . . . . . . . . 283.2.5. Samenstellen stijfheidsmatrix . . . . . . . . . . . . . . . . . . . . . 293.2.6. Volledig discrete eindige elementen oplossing . . . . . . . . . . . . 303.2.7. Constante reactieterm . . . . . . . . . . . . . . . . . . . . . . . . . 303.2.8. De norm van een functie uit S(T ) berekenen . . . . . . . . . . . . 303.2.9. De uniforme verfijning van een partitie . . . . . . . . . . . . . . . . 313.2.10. Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3

Page 4: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.3. Het driedimensionale reactie-diffusieprobleem . . . . . . . . . . . . . . . . 333.3.1. Samenstellen matrices . . . . . . . . . . . . . . . . . . . . . . . . . 343.3.2. De uniforme verfijning van een triangulatie . . . . . . . . . . . . . 353.3.3. Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4. Het maximum principe 384.1. Het exacte maximum principe . . . . . . . . . . . . . . . . . . . . . . . . . 384.2. Het discrete maximum principe . . . . . . . . . . . . . . . . . . . . . . . . 39

4.2.1. Herformulering van het discrete maximum principe . . . . . . . . . 404.2.2. Het discrete maximum principe en de Stieltjes matrix . . . . . . . 414.2.3. Het diffusieprobleem . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2.4. Het reactie-diffusieprobleem . . . . . . . . . . . . . . . . . . . . . . 44

5. Scherpe roostertriangulaties van het vierkant 475.1. Voorbereiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.2. De methode van Schukking en Weikamp . . . . . . . . . . . . . . . . . . . 495.3. De Conforme Verzameling . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.3.1. Definitie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.3.2. De Conforme Verzameling construeren . . . . . . . . . . . . . . . . 525.3.3. De Gezellige Verzameling . . . . . . . . . . . . . . . . . . . . . . . 53

5.4. De implementatie van het genereren van de Conforme Verzameling . . . . 545.4.1. Bepalen of een lijnstuk een conforme zijde is . . . . . . . . . . . . 545.4.2. Het bepalen van de halfruimtes . . . . . . . . . . . . . . . . . . . . 565.4.3. De Conforme Verzameling genereren . . . . . . . . . . . . . . . . . 565.4.4. De Gezellige Verzameling genereren . . . . . . . . . . . . . . . . . 58

5.5. Optimalisatie van de algoritme . . . . . . . . . . . . . . . . . . . . . . . . 595.5.1. Het controleren op conformiteit . . . . . . . . . . . . . . . . . . . . 595.5.2. Symmetrieen van het vierkant . . . . . . . . . . . . . . . . . . . . . 605.5.3. Het fundamenteel domein . . . . . . . . . . . . . . . . . . . . . . . 615.5.4. Implementatie van de symmetrieen . . . . . . . . . . . . . . . . . . 635.5.5. Resultaat na de optimalisaties . . . . . . . . . . . . . . . . . . . . 63

5.6. Scherpe roostertriangulaties vinden . . . . . . . . . . . . . . . . . . . . . . 645.6.1. Preciezere beschrijving . . . . . . . . . . . . . . . . . . . . . . . . . 645.6.2. Implementatie en resultaat van de algoritme . . . . . . . . . . . . . 65

6. Scherpe roostertriangulatie van de kubus 676.1. Scherpe roostertetraeders . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

6.1.1. Definities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.1.2. Orientatie van de normaalvectoren . . . . . . . . . . . . . . . . . . 686.1.3. Normaalvectoren op de facetten bepalen . . . . . . . . . . . . . . . 696.1.4. Scherpe roostertetraeders genereren . . . . . . . . . . . . . . . . . 716.1.5. Noodzaak andere algoritme . . . . . . . . . . . . . . . . . . . . . . 72

6.2. De Conforme Verzameling . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.2.1. Een Conform facet . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

4

Page 5: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

6.2.2. De Conforme Verzameling construeren . . . . . . . . . . . . . . . . 746.3. Implementatie van de algoritme . . . . . . . . . . . . . . . . . . . . . . . . 75

6.3.1. Het controleren op conformiteit . . . . . . . . . . . . . . . . . . . . 756.3.2. Datastructuur voor een verzameling roosterdriehoeken . . . . . . . 756.3.3. Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

6.4. Optimalisaties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.4.1. Scherpe roosterdriehoeken . . . . . . . . . . . . . . . . . . . . . . . 786.4.2. Projectie op de facetten . . . . . . . . . . . . . . . . . . . . . . . . 796.4.3. Symmetrieen van de kubus . . . . . . . . . . . . . . . . . . . . . . 816.4.4. Inline code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826.4.5. De index matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836.4.6. De fundamentele Conforme Verzameling . . . . . . . . . . . . . . . 846.4.7. De fundamentele Conforme Verzameling construeren . . . . . . . . 866.4.8. Parallellisatie van de algoritme . . . . . . . . . . . . . . . . . . . . 88

6.5. Resultaten op de DAS-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.6. Code in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906.7. Openstaande vragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

7. Discussie 92

8. Populaire samenvatting 94

Bibliografie 97

A. Eindige elementen methode 99A.1. Het eendimensionale geval . . . . . . . . . . . . . . . . . . . . . . . . . . . 99A.2. Het tweedimensionale geval . . . . . . . . . . . . . . . . . . . . . . . . . . 100A.3. Het driedimensionale geval . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

B. Triangulaties op een rooster 105B.1. Scherpe roostertriangulaties van het vierkant genereren . . . . . . . . . . . 105B.2. Scherpe roostertetraeders in de kubus tellen . . . . . . . . . . . . . . . . . 110

5

Page 6: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

1. Inleiding

In dit verslag gaan we op zoek naar een mooie triangulatie van de eenheidskubus [0, 1]3

bestaande uit scherpe tetraeders. In het artikel [1] uit 2009 is voor het eerst aangetoonddat zo een scherpe triangulatie van de eenheidskubus bestaat. We zoeken echter eenscherpe triangulatie met een extra eigenschap. Laat p een natuurlijk getal zijn en bekijkhet regelmatige p × p × p-rooster1 van [0, 1]3. Voor welke waarde van p bestaat er eentriangulatie van [0, 1]3 die alleen uit scherpe tetraeders bestaat waarvan de hoekpuntenop het p× p× p-rooster liggen? Wat is het grofste rooster (kleinste p) waarvoor zo eentriangulatie bestaat? Kan deze gevonden worden met behulp van de computer?

Deze vragen bestuderen we in Hoofdstuk 6. Eerst motiveren we deze vragen door tekijken naar de eindige elementen methode. Deze methode wordt gebruikt om oplossin-gen van partiele differentiaalverlijkingen te benaderen. In Hoofdstuk 2 bestuderen wede theorie van de eindige elementen methode toegepast op het reactie-diffusieprobleem.Een (handige) implementatie van de methode geven we vervolgens in Hoofdstuk 3.

Het blijkt dat de exacte oplossingen van het reactie-diffusieprobleem voldoen aan hetmaximum principe. Dit principe bespreken we in Hoofdstuk 4. Uit een voorbeeld zalblijken dat de eindige elementen oplossingen niet direct aan het maximum principe vol-doen. We zullen zien dat de eindige elementen methode, onder bepaalde voorwaardenaan de triangulatie van het domein, wel oplossingen geeft die aan het maximum principevoldoen. Een van de voorwaarden is dat de triangulatie van het domein scherp is.

Een logische vervolgvraag is nu of zo een scherpe triangulatie voor het domein welbestaat, en zo ja, hoe die gevonden kan worden. In Hoofdstuk 5 gaan we op zoekgaan naar scherpe triangulaties van het eenheidsvierkant [0, 1]2. We bekijken voor welkewaarden van p we een triangulatie van [0, 1]2 kunnen vinden in scherpe driehoeken methoekpunten uit het regelmatige p× p-rooster.

We bestuderen hiervoor het eerdere werk [13]. In dit werk wordt een algoritme voor-gesteld die voor een gegeven p alle scherpe triangulaties op het p×p-rooster kan bepalen.We presenteren in Hoofdstuk 5 een alternatieve methode om dergelijke triangulaties tevinden. Met deze methode hebben we een scherpe triangulatie op het 20 × 20-roostergevonden2. Ter vergelijking, in het eerdere werk [13] was p = 9 de hoogste waarde vanp waarvoor er scherpe triangulaties op het p× p-rooster berekend konden worden.

1Punten uit dit rooster hebben dus coordinaten van de vorm kp

voor k ∈ 0, . . . , p.2Illustratie op de titelpagina.

6

Page 7: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

In Hoofdstuk 6 gaan we op zoek naar een scherpe triangulatie van de eenheidskubusop het p× p× p-rooster, zoals beschreven in de eerste alinea. Het blijkt dat het vindenvan een dergelijke triangulatie voor de kubus een stuk lastiger is dan voor het vierkant.Dit komt doordat het aantal scherpe tetraeders op het p× p× p-rooster sterk toeneemtals we p vergroten. De algoritme3 die we in Hoofdstuk 5 presenteren voor het vierkantkunnen we op handige wijze veralgemeniseren naar de kubus. We geven vervolgens eenaantal essentiele optimalisaties om deze algoritme te verbeteren.

Dankwoord

Graag wil Jan Brandts bedanken voor het begeleiden van mijn bachelorthesis. Hij heefthet onderwerp aangedragen en veel van de ideeen uit Hoofdstuk 5 en 6 komen van zijnhand. De gesprekken met hem hebben niet alleen inzicht gegeven in de theorie, maarook in het reilen en zeilen van de Universiteit van Amsterdam. Verder wil ik ook mijnandere begeleider, Leen Torenvliet, bedanken. Zijn bereidheid om te helpen met hetinformatica gedeelte heb ik zeer gewaardeerd.

3Het woord ‘algoritme’ is afgeleid van de naam Mohammed ibn Moesa al-Chwarizmi. Daar dit een manis, is het juist om te spreken over ‘de algoritme’.

7

Page 8: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2. De eindige elementen methode

De eindige elementen methode wordt gebruikt om oplossingen van bepaalde partieledifferentiaalvergelijkingen te benaderen. In Sectie 2.3 bestuderen we de methode toege-past op het zogenaamde reactie-diffusieprobleem. De methode wordt in Sectie 2.2 eerstingeleid door naar een eendimensionale vorm van het reactie-diffusieprobleem te kijken.

2.1. Definities en notatie

We geven een overzicht van de notaties die we gebruiken. We schrijven Ω ⊆ Rd voor hetdomein van de functies.

Definitie 2.1. De verzameling functies die k keer continu differentieerbaar zijn op Ωnoteren we met Ck(Ω). De verzameling continue functies op Ω noteren we met C0(Ω)of C(Ω).

Definitie 2.2. Noteer L2(Ω) voor de verzameling Lebesgue meetbare functies die kwa-dratisch integreerbaar zijn op Ω. We identificeren twee functies u en v als u(x) = v(x)Lebesgue bijna overal.

Definitie 2.3. Zij f, g ∈ L2(Ω), dan noteren we het standaardinproduct op L2(Ω) met

(f, g) =

∫Ωf(x)g(x) dx.

De standaardnorm wordt geınduceerd door dit inproduct,

‖f‖2 =√

(f, f).

Verder geldt er dat alle continue functies Lebesgue meetbaar zijn, dus de bovenstaandedefinitie geeft ook een inproduct en norm op de ruimte C(Ω).

Definitie 2.4. We noteren Pk(Ω) voor de verzameling polynomen van graad k op Ω.

Definitie 2.5. We noteren ∂Ω voor de rand van Ω. De afsluiting van Ω geven we aanmet Ω.

Definitie 2.6. Bekijk een functie f : X → Y . De beperking van f tot een deelverzame-ling Ω ⊆ X noteren we met f |Ω, oftewel

f |Ω : Ω→ Y : x 7→ f(x).

8

Page 9: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Definitie 2.7. De Kronecker delta noteren we met δij , dus

δij =

0 als i 6= j

1 als i = j

Verder gebruiken we een aantal operatoren uit de vectorcalculus.

Definitie 2.8. De gradient van een een scalaire functie f(x1, x2, . . . , xn) geven we met

∇f =

(∂f

∂x1, . . . ,

∂f

∂xn

)>.

Definitie 2.9. De divergentie van een continu differentieerbaar vectorveld F geven wemet

divF = ∇ · F =n∑

i=1

∂Fi

∂xi.

Definitie 2.10. De Laplaciaan van een scalaire functie is gedefinieerd door

∆ : Ck(Rn)→ Ck−2(Rn) : f 7→ ∆f = div(∇f) =

n∑i=1

∂2f

∂x2i

.

2.2. Het eendimensionale geval

Laat a, b ∈ R met a < b gegeven zijn en schrijf I = [a, b]. Laat verder ook een f ∈ C(I)gegeven zijn. Bekijk het volgende randwaardeprobleem: vind u ∈ C2(I) zodanig dat

−u′′ = f in I,

u = 0 op ∂I.(2.1)

Dit is een eendimensionaal diffusieprobleem, in de literatuur ook wel bekend als dePoissonvergelijking [2, p. 152]. We zullen later zien dat dit een vorm van het reactie-diffusieprobleem is, waarbij de reactieterm gelijk aan nul is. Het is gemakkelijk in tezien dat dit probleem een unieke oplossing heeft.

Stelling 2.11. Het randwaardeprobleem (2.1) heeft een unieke oplossing.

Bewijs. Een oplossing van (2.1) kan gevonden worden door het tweemaal toepassen vande hoofdstelling van de integraalrekening,

u(x) = −∫ x

a

∫ y

af(t) dt dy.

Stel dat z ∈ C2(I) een andere oplossing is van (2.1). Dan geldt in I dat

−(u− z)′′ = −u′′ + z′′ = −f + f = 0.

Hieruit volgt dat u − z een polynoom van graad 1 is, dus u − z ∈ P1(I). Aangezien uen z beide oplossingen zijn van (2.1) weten we ook dat op de rand, ∂I = a, b, moetgelden dat u− z = 0− 0 = 0. Een lineaire functie die de waarde 0 heeft in twee punten,is constant 0. Oftewel u− z = 0 op I en daarmee volgt dat u = z.

9

Page 10: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2.2.1. Zwakke differentieerbaarheid

Het diffusieprobleem (2.1) kunnen we in een equivalente formulering geven, de zwakkeformulering. Deze zwakke formulering kunnen we vervolgens gebruiken om de eindigeelementen oplossing te bepalen. Om deze formulering te kunnen geven hebben we eenaantal definities nodig. Allereerst bekijken we een functieruimte die rijker is dan C1(I),de Solobev ruimte.

Definitie 2.12. De Sobolev ruimte noteren we met H1(I). Deze ruimte bestaat uit defuncties u ∈ L2(I), die Lebesgue bijna overal differentieerbaar zijn en waarvoor geldtu′ ∈ L2(I). Verder noteren we H1

0 (I) = v ∈ H1(I) : v = 0 op ∂I.

Schrijf nu C10 (I) = v ∈ C1(I) : v = 0 op ∂I, dan geldt er C1

0 (I) ⊆ H10 (I). We

kunnen ook een inproduct geven op deze ruimte.

Definitie 2.13. Definieer [v, w] := (v′, w′) voor alle v, w ∈ H10 (I).

Lemma 2.14. [v, w] definieert een inproduct op H10 (I).

Bewijs. Omdat v, w ∈ H10 (I) geldt dat v′, w′ ∈ L2(I) en dus is de functie [·, ·] goed

gedefinieerd.Uit het feit dat differentieren een lineaire operator is volgt direct de bilineariteit en

symmetrie van [v, w]. Verder geldt er

[v, v] = (v′, v′) ≥ 0, omdat v′ ∈ L2(I) en (·, ·) een inproduct is op L2(I).

Tot slot hebben we,

[v, v] = 0 ⇐⇒ (v′, v′) = 0 ⇐⇒ v′ = 0 ⇐⇒ v = 0.

De laatste equivalentie komt uit het feit dat v′ = 0 impliceert dat v constant is. Combi-neren we dit met het feit dat v nul op de rand is, dan volgt dat v nul is.

2.2.2. Zwakke formulering

Met de definities uit de vorige sectie zijn we in staat de zwakke formulering van hetrandwaardeprobleem (2.1) te geven.

Definitie 2.15. De zwakke formulering van het randwaardeprobleem (2.1) is:

Vind u ∈ H10 (I) zodat [u, v] = (f, v) voor alle v ∈ H1

0 (I).

We laten nu zien dat een oplossing van het randwaardeprobleem (2.1) ook een oplossingvan de zwakke formulering is.

Stelling 2.16. Zij u de oplossing van (2.1) en laat v ∈ H10 (I) zijn, dan geldt dat

[u, v] = (f, v).

10

Page 11: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bewijs. Aangezien u de oplossing is van (2.1) geldt −u′′(x) = f(x) voor a < x < b. Wevinden dus

(−u′′, v) =

∫ b

a−u′′(x)v(x) dx =

∫ b

af(x)v(x) dx = (f, v).

Anderzijds geldt vanwege partiele integratie

(−u′′, v) =

∫ b

a−u′′(x)v(x) dx

=[−u′(x)v(x)

]ba−∫ b

a−u′(x)v′(x) dx

(v ∈ H10 (I) , dus nul op de rand)

=

∫ b

au′(x)v′(x) dx = [u, v].

Zolang f ∈ C(I) geldt het omgekeerde van bovenstaande stelling ook. Een oplossingvan de zwakke formulering geeft ons dus direct een oplossing van het randwaardepro-bleem (2.1).

Stelling 2.17. Zij u ∈ C2(I) de oplossing van het randwaardeprobleem (2.1). Laatw ∈ H1

0 (I) een oplossing van de zwakke formulering 2.15 zijn, dan geldt er dat u = w.

Bewijs. Uit de vorige stelling weten we dat u ook een oplossing is van de zwakke formu-lering. We hebben dus

[u− w, v] = [u, v]− [w, v] = (f, v)− (f, v) = 0 voor alle v ∈ H10 (I).

Neem nu v = u − w, dan geldt er dat v ∈ H10 (I). Verder volgt er nu dus [u − w, v] =

[u− w, u− w] = 0. Omdat [·, ·] een inproduct is impliceert dit dat u = w.

Opmerking. In de zwakke formulering zoeken we naar een functie uit H10 (I), terwijl we in

het diffusieprobleem (2.1) een functie uit C2(I) zoeken. Het is a priori dus niet duidelijkdat een oplossing van de zwakke formulering ook in C2(I) zit. Dat dit wel het geval isblijkt uit de bovenstaande stelling.

2.2.3. De Galerkin methode

Het vinden van een oplossing van de zwakke formulering in Definitie 2.15 geeft onsdirect een oplossing van het diffusieprobleem (2.1). De ruimte H1

0 (I) is echter nog steedsoneindig dimensionaal is, dus dit is nog geen praktische manier om een oplossing tevinden.

Het idee is nu om een eindige lineaire deelruimte V ⊆ H10 (I) te kiezen. Als we H1

0 (I)in de zwakke formulering vervangen door V krijgen we namelijk een discreet probleem:vind uV ∈ V zodat

[uV , v] = (f, v), voor alle v ∈ V. (2.2)

11

Page 12: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Het vinden van een oplossing voor dit probleem heet de Galerkin methode [3, p. 53]. InSectie 2.2.6 zullen we zien dat we een bovengrens kunnen vinden voor de fout tussen deexacte oplossing u en de Galerkin oplossing uV .

Laat nu φ1, . . . , φn ∈ H10 (I) lineair onafhankelijke functies zijn die een basis vormen

voor V , dus V = spanφ1, . . . , φn.

Lemma 2.18. Laat u de (exacte) oplossing van het randwaardeprobleem (2.1) zijn.Schrijf uV voor de projectie van u op de deelruimte V ten opzichte van het inproduct [·, ·].Er geldt dat uV de unieke oplossing van de Galerkin methode (2.2) is.

Bewijs. Er geldt dat u− uV ⊥ V , aangezien uV de projectie van u op de deelruimte Vis. Voor elke v ∈ V geldt er dus [u− uV , v] = 0, wat impliceert dat [u, v] = [uV , v]. UitStelling 2.16 weten we dat u de zwakke formulering oplost, dus vinden we

[uV , v] = [u, v] = (f, v) voor alle v ∈ V.

Hiermee is de existentie van het gediscretiseerde probleem (2.2) aangetoond.Daar V een eindig dimensionale lineaire deelruimte is, kunnen we naar het geınduceerde

inproduct [·, ·]V kijken. De uniciteit van uV volgt nu op eenzelfde manier als in het bewijsvan Stelling 2.17.

De oplossing van het gediscretiseerde probleem (2.2) is dus gelijk aan de projectie vande exacte oplossing op de deelruimte V . De crux van de Galerkin methode is nu datwe deze projectie uV kunnen berekenen zonder dat we de exacte oplossing u hoeven teweten.

Om dit in te zien schrijven we uV als lineaire combinatie van de basisfuncties,

uV =n∑

i=1

αiφi.

Omdat uV de projectie is van u op V ten opzichte van [·, ·], geldt er in het bijzonder datu− uV ⊥ φj voor j ∈ 1, . . . , n. Schrijven we dit uit dan krijgen we,

0 = [u− uV , φj ] =⇒n∑

i=1

αi[φi, φj ] = [uV , φj ] = [u, φj ] = (f, φj) voor j ∈ 1, . . . , n.

In matrix notatie is dit gelijk aan,

Aα :=

[φ1, φ1] · · · [φn, φ1]...

. . ....

[φ1, φn] · · · [φn, φn]

α1

...αn

=

(f, φ1)...

(f, φn)

. (2.3)

Als we de inproducten [φi, φk] en (f, φi) exact weten, dan kunnen we de de waardenvan αi bepalen . Daarmee kunnen we vervolgens uV , de projectie van u op V , bepalenzonder dat we u weten.

12

Page 13: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2.2.4. De eindige elementen methode

De eindige elementen methode is een speciaal geval van de Galerkin methode. In deeindige elementen methode wordt de deelruimte V ⊆ H1

0 (I) gekozen als een ruimte vancontinue stuksgewijs lineaire functies ten opzichte van een partitie van het domein I.

Definitie 2.19. Laat n+1 punten x0, . . . , xn gegeven zijn met a = x0 < x1 < · · · <xn−1 < xn = b. Als J de verzameling van de intervallen Ij := [xj , xj+1] is, dan heet Jeen partitie van I.

De grootte van de intervallen noteren we met hj = xj+1 − xj en de fijnheid van departitie wordt gegeven door h = maxh0, . . . , hn−1.

De deelruimte V van H10 (I) die we nu gaan bekijken, is de ruimte van continue stuks-

gewijs lineaire functies ten opzichte van een partitie J .

Definitie 2.20. De verzameling van continue stuksgewijs lineaire functies ten opzichtevan J definieren we met

S(J ) = v ∈ C0(I) | ∀J ∈ J , v|J ∈ P1(J).

Elke functie v ∈ S(J ) ligt vast door zijn waarden in de punten xj . Hierdoor is deruimte dus een (n+ 1)-dimensionale deelruimte van C0(I). Een (prettige) basis voor deruimte S(J ) is de zogenaamde nodale basis.

Definitie 2.21. Laat ψj het unieke element uit S(J ) zijn met ψj(xi) = δij voor i ∈0, . . . , n. De nodale basis van S(J ) wordt nu gegeven door B = ψ0, . . . , ψn.

Voor v ∈ S(J ) hebben de eigenschap dat

v = a0ψ0 + · · ·+ anψn ⇐⇒ aj = v(xj) voor alle j ∈ 0, . . . , n.

Uit deze eigenschap volgt direct dat B daadwerkelijk een basis van S(J ) is. Zie Figuur2.1 voor een voorbeeld van nodale basisfuncties.

Met S(J ) vinden we een deelverzameling van H10 (I) door te kijken naar

S0(J ) = S(J ) ∩ C10 (I).

Dit is de ruimte van continue stuksgewijs lineaire functies die tevens nul op de randzijn. Als een functie uit S(J ) nul op de rand is, dan moet deze functie de waardenul aannemen in de punten x0 en xn. De nodale basis voor deze ruimte wordt dusgegeven door B0 = ψ1, . . . , ψn−1. De eindige elementen oplossing wordt nu gegevenals de projectie van u op S0(J ). Met de methode die in de vorige sectie beschreven werdkunnen we deze projectie bepalen. Dit doen we door het volgende matrixstelsel op telossen,

Aα :=

[ψ1, ψ1] · · · [ψn−1, ψ1]...

. . ....

[ψ1, ψn−1] · · · [ψn−1, ψn−1]

α1

...αn−1

=

(f, ψ1)...

(f, ψn−1)

(2.4)

en vervolgens de eindige elementen oplossing, uV =∑n

i=1 αiφi, te vormen.

13

Page 14: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

0.0 0.2 0.3 0.7 0.9 1.00.0

0.2

0.4

0.6

0.8

1.0

Nodale basis functie ψ0

Nodale basis functie ψ2

Nodale basis functie ψ3

Figuur 2.1.: Een voorbeeld van 3 nodale basisfuncties op een partitie van [0, 1].

2.2.5. De volledig discrete eindige elementen methode

Om de eindige elementen oplossing te bepalen moeten de inproducten (f, ψj) exact be-rekend worden, dat kan lastig zijn. Bij de volledig discrete eindige elementen methodewordt de berekening van deze inproducten ook gediscretiseerd. Dit kan door f te ver-vangen door zijn nodale interpolant Πf , gedefinieerd door

Π : C(I)→ S(J ) : w 7→ Πw =n∑

i=0

w(xj)ψj .

De volledig discrete eindige elementen methode is nu gedefinieerd als het vinden vanuΠV ∈ S0(J ) zodat

[uΠV , v] = (Πf, v) voor alle v ∈ S0(J ). (2.5)

In de volgende sectie geven we een bovengrens voor de fout tussen de exacte oplossingu en de volledig discrete eindige elementen oplossing uΠ

V . De volledig discrete eindigeelementen methode is eigenlijk een herformulering van de eindige elementen methode,met Πf in plaats van f . Dit reduceert daarom weer tot het oplossen van een matrixver-gelijking zoals in (2.4). In dit geval vinden we voor de rechterkant van deze vergelijking

(Πf, ψj) =

n∑i=0

f(xi)(ψi, ψj) voor j = 1, . . . , n− 1.

In matrix notatie wordt de inproductvector dus gegeven door (Πf, ψ1)...

(Πf, ψm−1)

=

(ψ0, ψ1) · · · (ψn, ψ1)...

. . ....

(ψ0, ψn−1) · · · (ψn, ψn−1)

f(x0)

...f(xn)

14

Page 15: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Voor het bepalen van de volledig discrete eindige elementen oplossing moeten we dushet volgend systeem oplossen, [ψ1, ψ1] · · · [ψn−1, ψ1]

.... . .

...[ψ1, ψn−1] · · · [ψn−1, ψn−1]

α1

...αn−1

=

(ψ0, ψ1) · · · (ψn, ψ1)...

. . ....

(ψ0, ψn−1) · · · (ψn, ψn−1)

f(x0)

...f(xn)

.In het kort noteren we dit als,

Aα = Mf. (2.6)

Hier wordt A de stijfheidsmatrix genoemd en M de massamatrix. Merk op dat dedimensies van deze matrices niet hetzelfde zijn. Dit komt doordat de nodale interpolantΠf niet gelijk aan nul hoeft te zijn op de rand van het interval.

2.2.6. Bovengrens fout eindige elementen oplossing

We kunnen een aantal bovengrenzen geven voor de fout van eindige elementen oplossing.Definieer hiertoe de energienorm op H1

0 (I) met,

‖v‖A =√

[v, v] voor alle v ∈ H10 (I).

Volgens Lemma 2.18 is de oplossing uV van de Galerkin methode gelijk aan de projectievan u op de deelruimte V ten opzichte van [·, ·]. In de energienorm betekent dit dat uVde beste benadering van u in V is, oftewel

‖u− uV ‖A ≤ ‖u− v‖A voor alle v ∈ V. (2.7)

In de eindige elementen methode namen we de ruimte V gelijk aan S0(J ). Als weopmerken dat Πu ∈ S0(J ), dan vinden we de volgende bovengrens

‖u− uV ‖A ≤ ‖u−Πu‖A = O(h).

Hierin is h de fijnheid van de partitie J zoals gedefinieerd in Definitie 2.19. De eersteafschatting volgt direct uit (2.7). De tweede afschatting volgt uit de approximatietheorie,zie bijvoorbeeld [17, Theorem 3.3].

We kunnen de energienorm relateren aan de standaardnorm op C10 (I) middels het

volgende lemma dat ook wel de ongelijkheid van Poincare-Friedrich wordt genoemd [3,Thm 1.5].

Lemma 2.22. Voor alle v ∈ C10 (I) hebben we dat

‖v‖2 ≤1

2

√2(b− a)‖v‖A.

15

Page 16: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bewijs. Aangezien v(a) = 0 volgt uit de hoofdstelling van de integraalrekening dat

v(x)2 =

(∫ x

av′(t) dt

)2

≤(∫ x

a12 dt

)(∫ x

a(v′(t))2 dt

)Cauchy-Schwarz op C[a, x]

≤ (x− a)

∫ b

a(v′(t))2 dt

= (x− a)‖v‖2A.

Als we dit invullen in de standaard norm van v vinden we

||v||2 =

√∫ b

av(x)2 dx ≤

√∫ b

a(x− a)‖v‖2A dx = ‖v‖A

1

2

√2(b− a)

Voor de volledig discrete eindige elementen oplossing vinden we nu de volgende bo-vengrens.

Stelling 2.23. Laat uV de eindige elementen oplossing zijn en uΠV de volledig discrete

eindige elementen oplossing, dan hebben we

‖uV − uΠV ‖A ≤

1

2

√2(b− a)||f −Πf ||2 = O(h).

Bewijs. We hebben voor alle v ∈ V dat

[uV , v] = (f, v) en [uΠV , v] = (Πf, v).

Dit impliceert dat [uV − uΠV , v] = (f −Πf, v) voor alle v ∈ V . In het bijzonder geldt nu

voor v = uV − uΠV ∈ V dat

‖uV − uΠV ‖2A = [uV − uΠ

V , uV − uΠV ]

= (f −Πf, uV − uΠV )

≤ ||f −Πf ||2 ||uV − uΠV ||2 Cauchy-Schwarz

≤ ||f −Πf ||21

2

√2(b− a)‖uV − uΠ

V ‖A Lemma 2.22

Delen door ‖uV − uΠV ‖A levert nu het resultaat (als ‖uV − uΠ

V ‖A = 0 valt er niets tebewijzen).

De afschatting ‖f − Πf‖2 = O(h) volgt uit de approximatietheorie, zie bijvoorbeeld[17, Theorem 3.3].

Combineren we deze stelling met de eerdere afschatting ‖u−uV ‖A = O(h), dan vindenwe

‖u− uΠV ‖A = O(h).

16

Page 17: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2.2.7. Voorbeeld

We zijn nu in staat een implementatie in Python te geven van de volledig discrete eindigeelementen methode. Neem I = [0, 1] en f(x) = 2, dan zien we eenvoudig in dat deexacte oplossing van (2.1) wordt gegeven door u(x) = −(x − 1)x. Neem partitie J =(0, 0.25, 0.5, 0.75, 1). Met de code uit Appendix A.1 kunnen we de volledig discreteeindige elementen oplossing uΠ

V berekenen voor de deelruimte S0(J ). Het resultaat kunje zien in onderstaande Figuur 2.2. De implementatiedetails bekijken we in Sectie 3.1.

0.00 0.25 0.50 0.75 1.000.00

0.05

0.10

0.15

0.20

0.25

Eindige elementen oplossingExacte oplossing

Figuur 2.2.: Volledig discrete eindige elementen benadering van u(x) = −(x − 1)x, deoplossing van het eendimensionale randwaardeprobleem (2.1).

17

Page 18: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2.3. Het reactie-diffusieprobleem

In de voorgaande secties hebben we de theorie achter de eindige elementen methodegezien voor het (speciale) eendimensionale diffusieprobleem (2.1). Het idee achter debovenstaande theorie kun je echter in een algemenere vorm toepassen op elliptischedifferentiaalvergelijkingen [3, Chapter 1]. De elliptische differentiaalvergelijkingen diewij zullen bekijken zijn de reactie-diffusieproblemen.

Gegeven d ≥ 1, laat Ω ⊆ Rd een begrensd polytoop1 zijn met Lipschitz rand2 ∂Ω. Zijverder f, g ∈ C(Ω) gegeven met g ≥ 0. Het reactie-diffusieprobleem is het vinden vaneen ug ∈ C2(Ω) zodat

−∆ug + gug = f in Ω

ug = 0 op ∂Ω(2.8)

Hierin is ∆ de Laplaciaan uit Definitie 2.10. De term gug wordt de reactieterm van hetprobleem genoemd. Als we d = 1 en g = 0 kiezen dan zien we dat het eendimensionaalrandwaardeprobleem (2.1) een instantie van het reactie-diffusieprobleem is.

We zullen nu de stellingen en definities uit Sectie 2.2 generaliseren, zodat we de eindigeelementen methode kunnen toepassen op dit algemenere probleem.

2.3.1. De zwakke formulering van het reactie-diffusieprobleem

Net als het eendimensionale geval kunnen we het reactie-diffusieprobleem (2.8) in eenzwakke formulering geven. Schrijf daartoe H1(Ω) voor de Sobolev ruimte met (meer)di-mensionale functies die nu op Ω leven. Verder noteren we weer H1

0 (Ω) voor de functiesdie tevens nul zijn op de rand, H1

0 (Ω) = v ∈ H1(Ω) : v|∂Ω = 0. In het eendimensi-onale geval hebben we een inproduct [·, ·] op de Sobolev ruimte gedefinieerd. Voor hetalgemenere geval kunnen we ook een dergelijk inproduct definieren.

Definitie 2.24. Het inproduct dat geassocieerd is met het reactie-diffusieprobleem (2.8)wordt gegeven door

a(g; ·, ·) : H10 (Ω)×H1

0 (Ω)→ R : a(g;w, v) = (∇w,∇v) + (gw, v).

Hier is (·, ·) het standaard inproduct op L2(Ω) en∇ de gradient operator, zie Definitie 2.8.

Dat a(g; ·, ·) daadwerkelijk een symmetrische bilineaire vorm is, is makkelijk na te gaan.Voor het bewijs dat het ook een inproduct definieert verwijzen we naar de literatuur, ziebijvoorbeeld [4, Lemma 4.4].

De zwakke formulering van het reactie-diffusieprobleem (2.8) is nu het vinden van eenug ∈ H1

0 (Ω) zodata(g;ug, v) = (f, v) voor alle v ∈ H1

0 (Ω). (2.9)

In dit algemenere geval vinden we de volgende verbanden tussen een ug en de oplossingvan zwakke formulering.

1Veralgemenisering van het begrip polygoon.2Een rand die ‘voldoende regulier’ is, voor de precieze definitie zie [3, p.32].

18

Page 19: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Stelling 2.25. Zij ug een oplossing van het reactie-diffusieprobleem (2.8), dan is ug ookeen oplossing van de zwakke formulering (2.9).

Bewijs. Volgens de divergentiestelling3 geldt voor alle v ∈ H10 (Ω) dat∫

Ωdiv(v∇ug) dS =

∫∂Ωv∇u · da.

Het rechterlid van deze vergelijking is gelijk aan nul, want v is nul op de rand ∂Ω. Alswe het linkerlid uitschrijven met behulp van de productregel voor de divergentie, danvinden we ∫

Ωdiv(v∇ug) dS =

∫Ω∇v · ∇ug + v div(∇ug) dS.

Aangezien het linkerlid nul is en div(∇ug) = ∆ug geldt er nu dat

−(∆ug, v) = (∇ug,∇v). (2.10)

Anderzijds is ug een oplossing van het reactie-diffusieprobleem (2.8), dus er geldt dat−∆ug + gug = f in Ω. Maar dit impliceert dat −(∆ug, v) + (gug, v) = (f, v) voor allev ∈ H1

0 (Ω). Gebruiken we nu de gelijkheid (2.10), dan vinden we dat

−(∇ug,∇v) + (gug, v) = (f, v) voor alle v ∈ H10 (Ω).

Oftewel ug is een oplossing van de zwakke formulering (2.9).

Stelling 2.26. De zwakke formulering (2.9) heeft een unieke oplossing.

Bewijs. Dit volgt uit het feit dat a(g; ·, ·) een inproduct is. Het bewijs gaat op eenzelfdemanier als het bewijs van Stelling 2.17.

Opmerking. Uit de twee bovenstaande stellingen volgt nu direct dat het reactie-diffusie-probleem (2.8) een unieke oplossing heeft.

2.3.2. De Galerkin methode

De zwakke formulering van het reactie-diffusieprobleem (2.9) kunnen we ook voor eendeelruimte V ⊆ H1

0 (Ω) geven. De Galerkin methode is dan het vinden van een ugV ∈ Vzodat

a(g;ugV , v) = (f, v) voor alle v ∈ V. (2.11)

Net als in Sectie 2.2 vinden we het volgende resultaat. Voor een bewijs verwijzen wenaar de literatuur, bijvoorbeeld [4, Proposition 4.1].

Stelling 2.27. Zij ug de unieke oplossing van het reactie-diffusieprobleem (2.8). Deunieke oplossing van de Galerkin methode (2.11) is gelijk aan de projectie van ug op dedeelverzameling V in het inproduct a(g; ·, ·).3Zie een dictaat over verctorcalculus, bijvoorbeeld http://mathworld.wolfram.com/

DivergenceTheorem.html.

19

Page 20: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Stel dat een basis voor V wordt gegeven door de n onafhankelijke functies φ1, . . . , φn.Analoog aan het eendimensionale geval kunnen we de oplossing van de Galerkin methodeschrijven als ugV =

∑ni=1 αiφi, waarbij de coefficienten αi gevonden worden door het

oplossen van het matrixstelsel:

Aα :=

a(g;φ1, φ1) · · · a(g;φn, φ1)...

. . ....

a(g;φ1, φn) · · · a(g;φn, φn)

α1

...αn

=

(f, φ1)...

(f, φn)

. (2.12)

2.3.3. De eindige elementen methode

De eindige elementen oplossing van het reactie-diffusieprobleem verkrijgen we nu doorV gelijk te nemen aan de verzameling van continue stuksgewijs lineaire functies op eenpartitie van Ω. De partitie deelt Ω op in een eindig aantal subdomeinen, elementen. Deopdeling van een interval [a, b] altijd bestaat uit (sub)intervallen. In hogere dimensieshebben we meer keuze voor het type elementen, zo kunnen we een tweedimensionaaldomein bijvoorbeeld opdelen in vierkanten of driehoeken. We zullen kijken naar eenopdeling in simplices, de generalisatie van een driehoek/tetraeder.

Definitie 2.28. Een k-simplex is een k-dimensionaal polytoop, verkregen uit het con-vexe omhulsel van k+1 affien onafhankelijke4 punten. De (k−1)−dimensionale zijvlakkenworden de facetten genoemd.

Om continue stuksgewijs lineaire functies te definieren op een opdeling in simplicesmoet de partitie van Ω aan bepaalde eisen voldoen.

Definitie 2.29. Laat T = T1, . . . , TK een partitie van Ω ⊂ Rd zijn in simplices Ti.De partitie T heet face-to-face of een conforme triangulatie als aan de volgende eisen isvoldaan:

• Ω = ∪Ki=1Ti.

• Het inwendige van de simplices Ti is paarsgewijs disjunct.

• (face-to-face) Elke facet van een simplex uit de partitie ligt of op de rand ∂Ω of iswederom de facet van een andere simplex uit T .

Met een triangulatie bedoelen we altijd een conforme triangulatie, tenzij anders vermeld.

Een triangulatie heeft ook een waarde h. Deze waarde is gerelateerd aan de geometri-sche grootte van de simplices en geeft een maat voor de ‘fijnheid’ van de partitie.

Definitie 2.30. Laat T een triangulatie zijn. De grootte hi van een simplex Ti ∈ Twordt gegeven door zijn (euclidische) diameter,

hi = maxx,y∈Ti

‖x− y‖2.

4Dit zorgt ervoor dat de punten niet bevat zijn in een (d− 1)-dimensionaal hypervlak.

20

Page 21: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

De waarde h die de fijnheid van de triangulatie T aangeeft, wordt gegeven door

h = maxh1, . . . , hK.

Laat T nu een triangulatie zijn van het domein Ω en noteer de vertices van T metx1, . . . , xm. Order de vertices zodat x1, . . . , xn in Ω liggen en xn+1, . . . , xm op de rand∂Ω liggen. We bekijken nu de ruimte S(T ) ⊂ H1(Ω) van continue stuksgewijs line-aire functies ten opzichte van T . Voor deze ruimte kunnen we weer een nodale basisdefinieren.

Definitie 2.31 (Nodale basis). Laat ψj het unieke element uit S(T ) zijn met ψj(xi) = δijvoor i ∈ 1, . . . ,m. De nodale basis van S(T ) wordt nu gegeven door B = ψ1, . . . , ψm.De nodale basis van S0(T ) := S(T ) ∩H1

0 (Ω) wordt gegeven door B0 = ψ1, . . . , ψn.

Als we in de Galerkin methode de deelruimte S0(T ) gebruiken, dan noemen we ditde eindige elementen methode. De coefficienten van de eindige elementen oplossing,ugV =

∑mi=1 αiφi, vinden we door het matrixstelsel (2.12) op te lossen met de basisfuncties

ψ1, . . . , ψn.

2.3.4. De volledig discrete eindige elementen methode

Compleet analoog aan het eendimensionale geval kunnen we nu ook de volledig discreteeindige methode bekijken. Definieer daartoe de nodale interpolatie operator met

Π : C(Ω)→ S(T ) : w 7→ Πw =m∑i=1

w(xi)ψi.

De volledig discrete methode bestaat dan uit het vinden van een uΠgV zodat

a(g;uΠgV , v) = (Πf, v) voor alle v ∈ S0(T ).

De inproducten (Πf, ψi) kunnen we nu gemakkelijk uitrekenen,

(Πf, ψj) =

m∑i=1

f(xi)(ψi, ψj) voor j = 1, . . . , n.

Het vinden van de volledig discrete eindige elementen oplossing reduceert zich dus tothet oplossen van het volgende matrixstelsel,a(g;φ1, φ1) · · · a(g;φ1, φn)

.... . .

...a(g;φn, φ1) · · · a(g;φn, φn)

α1

...αn

=

(φ1, φ1) · · · (φ1, φm)...

. . ....

(φn, φ1) · · · (φn, φm)

f(x1)

...f(xm)

, (2.13)

of kortweg,Aα = Mf.

De n × n-matrix A heet de stijfheidsmatrix en de n × m-matrix M noemen we demassamatrix.

21

Page 22: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2.3.5. Bovengrens fout eindige elementen oplossing

De energienorm voor het reactie-diffusieprobleem wordt gegeven door,

‖v‖A =√a(g; v, v) voor alle v ∈ H1

0 (Ω).

De waarde h van een triangulatie T geeft de fijnheid aan. We kunnen hiermee de volgendebovengrens vinden,

‖ug − ugV ‖A = O(h).

Voor een bewijs verwijzen we naar de literatuur, bijvoorbeeld [3, Chapter 7]. We kunnenook een bovengrens voor de fout tussen de eindige elementen oplossing en de volledigdiscrete eindige elementen oplossing geven [5, Proposition 2.1],

‖ugV − uΠgV ‖A = O(h).

Combineren we deze twee bovengrenzen dan vinden we de volgende afschatting,

‖ug − uΠgV ‖A = O(h).

22

Page 23: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3. Implementatie van de volledigdiscrete eindige elementen methode

In het vorige hoofdstuk zagen we de theorie achter de eindig elementen methode. Hetvinden van de eindig elementen oplossing voor het reactie-diffusieprobleem (2.8) redu-ceert zich tot het oplossen van de matrix vergelijking

Aα :=

a(g;φ1, φ1) · · · a(g;φn, φ1)...

. . ....

a(g;φ1, φn) · · · a(g;φn, φn)

α1

...αn

=

(f, φ1)...

(f, φn)

.In dit hoofdstuk zullen we bekijken hoe we dit stelsel (handig) numeriek kunnen oplos-sen. Voor de implementatie zullen we gebruik maken van Python1 met de bibliotheekNumPy2.

3.1. Het eendimensionale geval

We bekijken eerst weer het eendimensionale diffusieprobleem (2.1). Laat J een partitievan het interval I zijn met S(J ) = spanψ0, . . . , ψn. Voor het bepalen van de eindigeelementen oplossing moeten we de stijfheidsmatrix A uit (2.4) berekenen. Schrijf daartoeIj = [xj−1, xj ] en hj = xj − xj−1, zoal in Definitie 2.19.

Bedenk dat ψj de unieke functie uit S(J ) is zodat ψj(xi) = δij . Een voorbeeld vanzo een functie is gegeven in Figuur 2.1. We kunnen deze functies ook middels explicieteformules geven voor j ∈ 1, . . . , n− 1,

ψj(x) =

x− xj−1

xj − xj−1=x− xj−1

hjx ∈ Ij

xj+1 − xxj+1 − xj

=xj+1 − xhj+1

x ∈ Ij+1

0 anders .

(3.1)

De stijfheidsmatrix A bestaat uit de inproducten [ψi, ψj ] = (ψ′i, ψ′j) met i, j ∈ 1, . . . , n−

1. Over deze inproducten kunnen we het volgende opmerken:

1Programmeertaal, zie https://www.python.org/ voor meer informatie.2Een bibliotheek die ondersteuning biedt aan matrices met lineaire algebra met lineaire algebra func-

tionaliteiten, zie ook www.numpy.org/.

23

Page 24: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

• Voor j = 1, . . . , n − 1 is het inproduct [ψj , ψj ] gelijk aan de integraal van (ψ′j)2

over Ij ∪ Ij+1. Op de rest van het domein is ψj immers constant nul.

• Voor j = 1, . . . , n−1 is het inproduct [ψj−1, ψj ] gelijk aan de integraal van ψ′j−1ψ′j

over Ij . Dit volgt direct uit het functievoorschrift (3.1).

• Voor |i− j| ≥ 2, geldt dat [ψi, ψj ] = 0, ook dit volgt direct uit (3.1).

• Het inproduct is symmetrisch.

Uit deze opmerking volgt dat alleen de elementen [ψj , ψj ] en [ψj−1, ψj ] niet triviaal zijn.Voor j = 1, . . . , n− 1 geldt er

[ψj , ψj ] =

∫Ij∪Ij+1

(ψ′j)2 =

∫Ij

1

h2j

+

∫Ij+1

1

h2j+1

=1

hj+

1

hj+1

en voor j = 2, . . . , n− 1 hebben we

[ψj−1, ψj ] =

∫Ij

ψ′j−1ψ′j =

∫Ij

−1

hj

1

hj= − 1

hj.

We kunnen nu de gehele stijfheidsmatrix A geven:

A =

1h1

+ 1h2

− 1h2

0 · · · · · · 0

− 1h2

1h2

+ 1h3

1h2

. . .. . .

...

0. . .

. . .. . .

. . . 0...

. . .. . . − 1

hn−2

1hn−2

+ 1hn−1

− 1hn−1

0 · · · · · · 0 − 1hn−1

1hn−1

+ 1hn

.

3.1.1. Discretisatie van de inproducten (f, ψj)

Bij de volledig discrete eindige elementen methode vereenvoudigen we de inproducten(f, ψj) door f te vervangen voor zijn nodale interpolant Πf . De inproducten (Πf, ψj)kunnen we bepalen met behulp van de massamatrix M uit (2.6). De elementen vanM worden gegeven door de inproducten (ψi, ψj), die we met behulp van soortgelijkeopmerkingen als hierboven expliciet kunnen berekenen. Als we dit doen, dan vinden wedat de massamatrix gelijk is aan

M =1

6

2(h1 + h2) h2 0 · · · 0

h2 2(h2 + h3) h2. . .

...

0. . .

. . .. . . 0

.... . . hn−2 2(hn−2 + hn−1) hn−1

0 · · · 0 hn−1 2(hn−1 + hn)

.

24

Page 25: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Voor een partitie J kunnen we nu de stijfheidsmatrix A en de massamatrix M bepa-len. Als we vervolgens het stelsel (2.6) oplossen, dan wordt de volledig discrete eindigeelementen oplossing gegeven door α1ψ1 + · · · + αn−1ψn−1. In Appendix A.1 is een im-plementatie in Python gegeven. De matrices A en M worden in deze implementatieiteratief opgebouwd, de logica hierachter zal in de volgende sectie duidelijk worden.

3.2. Het tweedimensionale reactie-diffusieprobleem

We bekijken het reactie-diffusieprobleem (2.8) met als domein een polygoon Ω ⊆ R2.Neem eerst g = 0 zodat we een diffusieprobleem in twee veranderlijken krijgen. LaatT = T1, . . . , Tn een triangulatie van Ω zijn en schrijf verder x0, . . . , xN voor de verticesin T . Deze triangulatie T wordt in de implementatie gegeven door:

• Een matrix N waarin kolom j gelijk is aan de coordinaten van vertex xj ∈ R2,

• Een matrix T waarin kolom j gelijk is aan de getallen p, q, r als de driehoek Tjhoekpunten xp, xq, xr heeft,

• Een vector G waarin positie j aangeeft of hoekpunt xj op de rand ligt of niet.

Voor het bepalen van de volledig discrete eindige elementen oplossing moeten we nu destijfheidsmatrix A en de massamatrixM uit (2.13) bepalen. We hebben geen reactieterm,dus de inproducten uit A laten zich vereenvoudigen: a(g;ψi, ψj) = (∇ψi,∇ψj).

De methode die in de vorige sectie werd gebruikt om de inproducten (ψi, ψj) te bepalenveralgemeniseert niet direct naar het tweedimensionale geval. We kunnen immers nietop voorhand stellen dat (ψi, ψj) = 0 voor zekere vaste |i− j|, daar er in twee dimensiesgeen natuurlijke ‘volgorde’ voor de basisfuncties ψi is.

3.2.1. Nodale basisfuncties

De deelruimtes die we bekijken in de eindige elementen methode zijn S(T ) en S0(T ).Noteer m = dim(S0(T )) en m+l = dim(S(T ). Voor deze ruimtes gebruiken we de nodalebasis, die wordt gegeven door de unieke ψ1, . . . , ψm+l met ψi(xj) = δij . Zie Figuur 3.1voor een voorbeeld van een nodale basisfunctie in twee dimensies.

We gaan nu de berekening van de inproducten (ψi, ψj) en (∇ψi,∇ψj) vereenvoudigen.Daartoe definieren we de referentiedriehoek T met hoekpunten (0, 0), (1, 0) en (0, 1) ende functies,

v1(x, y) = 1− x− y, v2(x, y) = x, v3(x, y) = y,

met gradienten

∇v1 =

[−1−1

], ∇v2 =

[10

], en ∇v3 =

[01

].

Op de driehoek T geldt nu dat v1, v2 en v3 lineaire functies zijn met de waarde 1 in eenhoekpunt en waarde 0 in de andere twee hoekpunten. Merk op dat de nodale basisfunctiesψi zijn samengesteld uit kopieen van getransformeerde functies v1, v2 en v3. Dit feit gaanwe later gebruiken om de inproducten te vereenvoudigen.

25

Page 26: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

−1.0−0.5

0.00.5

1.0 −1.0−0.5

0.00.5

1.00.0

0.2

0.4

0.6

0.8

1.0

Figuur 3.1.: Voorbeeld van een nodale basisfunctie

3.2.2. Opdelen matrices

Een manier om de massamatrix M en stijfheidsmatrix A te bepalen, is door eerst de(m+ l)× (m+ l) matrices A en M voor de grotere ruimte S(T ) uit te rekenen, preciezer

Aij = (∇ψi,∇ψj) en Mij = (ψi, ψj) voor i, j ∈ 1, . . . , l +m.

Uit A kunnen we vervolgens de stijfheidsmatrix A verkrijgen door de l rijen en kolommente verwijderen die bij de vertices horen die op de rand ∂Ω liggen. Op eenzelfde wijzekunnen we de massamatrix M construeren uit M .

Een handige manier om M samen te stellen komt voort uit de volgende observatie,

(ψi, ψj) =

∫Ωψiψj =

n∑k=1

∫Tk

ψiψj =n∑

k=1

(ψi, ψj)Tk,

waarbij (ψi, ψj)Tk:=∫Tkψiψj . We kunnen de matrix M dus schrijven als een sommatie,

M =

n∑k=1

Mk =

n∑k=1

(ψ0, ψ0)Tk· · · (ψ0, ψ0)Tk

.... . .

...(ψ0, ψn)Tk

· · · (ψn, ψn)Tk

.

26

Page 27: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Op dezelfde wijze kunnen we A schrijven als sommatie,

A =

n∑k=1

Ak =

n∑k=1

(∇ψ0,∇ψ0)Tk· · · (∇ψ0,∇ψ0)Tk

.... . .

...(∇ψ0,∇ψn)Tk

· · · (∇ψn,∇ψn)Tk

.Met de definierende eigenschap van de nodale basis kunnen we het volgende opmerken

over deze basisfuncties beperkt tot een driehoek uit de triangulatie.

Opmerking. Zij Tk ∈ T een driehoek met hoekpunten xp, xq, xr ∈ R2. Op de driehoekTk zijn alleen de basisfuncties ψp, ψq en ψr niet identiek nul.

Uit deze opmerking volgt dat de matrices Mk en Ak slechts 3 × 3 elementen hebbendie niet nul zijn. Voor de matrix Mk zijn dit de elementen

Ek =

(ψp, ψp)Tk(ψp, ψq)Tk

(ψp, ψr)Tk

(ψq, ψp)Tk(ψq, ψq)Tk

(ψq, ψr)Tk

(ψr, ψp)Tk(ψr, ψq)Tk

(ψr, ψr)Tk

. (3.2)

Deze elementen staan niet in deze volgorde in de matrix Mk, maar op de positiesp, q, r× p, q, r. In de implementatie worden deze posities gegeven door de matrix T.

3.2.3. Transformatie nodale basisfuncties

De matrices Ak en Mk bestaan uit de inproducten beperkt tot Tk ∈ T . Met behulpvan de substitutiestelling voor integralen kunnen we de berekening van deze beperkteinproducten vereenvoudigen.

Stelling 3.1 (Substitutiestelling voor integralen). Laat U en V open deelverzamelingenvan Rn zijn en laat F : V → U een C1-diffeomorfisme3 zijn. Dan geldt∫

Uf(x) dx =

∫F (V )

f(x) dx =

∫V

(f F )(y)|detDF (y)| dy

Bewijs. Zie bijvoorbeeld [7, Theorem 6.6.1].

Om in te zien hoe we deze stelling kunnen gebruiken bekijken we een driehoek Tk ∈ T .Schrijf p, q en r voor de hoekpunten van deze driehoek en laat ψp, ψq, ψr de bijbehorendenodale basisfuncties zijn. Er bestaat een C1-diffeomorfisme tussen de referentiedriehoekT en Tk, namelijk

Fk : T → Tk :

[xy

]7→[p1

p2

]+

[q1 − p1 r1 − p1

q2 − p2 r2 − p2

]︸ ︷︷ ︸

Bk

[xy

],

3Bijectie met f ∈ C1 en f−1 ∈ C1.

27

Page 28: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

met een constante totale afgeleide,

DFk(x) =

[q1 − p1 r1 − p1

q2 − p2 r2 − p2

]= Bk. (3.3)

We zien dat Fk hoekpunten van T naar hoekpunten van Tk stuurt. Als we de basisfunctiesψp, ψq en ψr beperken tot Tk dan geldt er,

v1 = ψp Fk, v2 = ψq Fk en v3 = ψr Fk. (3.4)

3.2.4. Samenstellen massamatrix

Als we de substitutiestelling gebruiken met Fk dan vinden we dat

(ψp, ψq)Tk=

∫Tk

ψp(x)ψq(x) dx

=

∫Fk(T )

ψp(x)ψq(x) dx

=

∫Tψp(Fk(x))ψq(Fk(x))|detDFk(x)| dx Substitutiestelling

= |detBk|∫Tv1(x)v2(x) dx identiteit (3.4)

= |detBk|(v1, v2)T .

Een dergelijke relatie kunnen we afleiden voor (ψi, ψj)Tkmet i, j ∈ p, q, r. Met deze

relaties zijn we in staat een expliciete uitdrukking te geven voor de matrix Ek, de 3× 3-niet triviale elementen van Mk. Er geldt namelijk,

Ek = |det(Bk)|EM , (3.5)

waarbij,

EM :=

(v1, v1)T (v1, v2)T (v1, v3)T(v2, v1)T (v2, v2)T (v2, v3)T(v3, v1)T (v3, v2)T (v3, v3)T

=1

24

2 1 11 2 11 1 2

.De laatste gelijkheid kan gevonden worden door de inproducten (vi, vj)T expliciet uit te

rekenen. Een algoritme om de massamatrix M samen te stellen vinden we nu als volgt.

Data: De triangulatie: N,T,G.Result: (m+ l)× (m+ l) massamatrix.Initialiseer de massamatrix M op nul;foreach Tk ∈ T do

Bepaal de indices p, q, r van de basisfuncties die niet triviaal zijn op Tk;Vind de coordinaten van deze indices en bepaal hiermee Bk;Bereken de matrix Ek aan de hand van (3.5);

Tel de waarden uit Ek op bij M op posities p, q, r × p, q, r;end

Algoritme 1: Samenstellen massa matrix

28

Page 29: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.2.5. Samenstellen stijfheidsmatrix

De substitutiestelling kunnen we ook gebruiken om de inproducten uit Ak te vereenvou-digen. Hiervoor merken we eerst op dat de relatie tussen de totale afgeleide D en degradient ∇ gegeven wordt door ∇v = (Dv)>. In (3.4) vonden we,

v1 = ψp Fk, v2 = ψq Fk en v3 = ψr Fk.

Gebruiken we de kettingregel en de relatie tussen D en ∇, dan vinden we

∇v1 = ∇(ψp Fk)

= [D(ψp Fk)]>

= [(Dψp Fk)(DFk)]>

= (DFk)>(Dψp Fk)>

= (DFk)>(∇ψp Fk)

en evenzo,∇v2 = (DFk)>(∇ψq Fk) en ∇v3 = (DFk)>(∇ψr Fk).

Bekijk nu het inproduct (∇ψp,∇ψq)Tk, dan vinden we met de substitutiestelling dat

(∇ψp,∇ψq)Tk=

∫Fk(T )

(∇ψp(x))>(∇ψq(x)) dx

=

∫T

(∇ψp Fk(x))>(∇ψq Fk(x))|detDFk(x)| dx

= |detBk|∫T

((DFk)−>∇v1(x))>((DFk)−>(∇v2(x))) dx

= |detBk|∫T

(∇v1)>(DFk)−1(DFk)−>(∇v2) dx

= |detBk|(∇v1)>(DFk)−1(DFk)−>(∇v2)

∫T

1 dx

= |detBk|(∇v1)>(Bk)−1(Bk)−>(∇v2)1

2.

De vijfde gelijkheid volgt uit het feit dat∇vi(x) enDFk(x) constant zijn. Voor (∇ψi,∇ψj)met i, j ∈ p, q, r, vinden we een soortgelijke relatie,(∇ψp,∇ψp)Tk

· · · (∇ψp,∇ψr)Tk

.... . .

...(∇ψr,∇ψp)Tk

· · · (∇ψr,∇ψr)Tk

=1

2| detBk|

∇v>1∇v>2∇v>3

(Bk)−1(Bk)−> [∇v1 ∇v2 ∇v3]

Deze vergelijking geeft ons de 3×3 niet-triviale elementen uit Ak. Met een aantal (kleine)aanpassingen aan Algoritme 1 uit de vorige sectie kunnen we nu de stijfheidsmatrix Abepalen.

29

Page 30: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.2.6. Volledig discrete eindige elementen oplossing

Met de methodes uit de vorige secties kunnen we de matrices A en M bepalen. Destijfheidsmatrix A vinden we nu door de l kolommen en rijen uit A te verwijderen diehoren bij de vertices die op de rand ∂Ω liggen. De massamatrix M vinden we doorde l rijen uit M te verwijderen die horen bij de vertices die op de rand ∂Ω liggen. Decoefficienten αi van de volledig discrete eindige elementen oplossing,

∑mi=1 αiψi, worden

vervolgens gegeven door het matrixstelsel Aα = Mf uit (2.13) op te lossen.

3.2.7. Constante reactieterm

In de vorige secties zagen we een manier om de volledig discrete eindige elementenoplossing van een tweedimensionaal diffusieprobleem te berekenen. We kunnen deze me-thode eenvoudig uitbreiden naar een reactie-diffusieprobleem met constante reactieterm,g(x) = c ∈ R. Het inproduct a(g; ·, ·) laat zich dan immers schrijven als

a(g; v, w) = (∇v,∇w) + (gv, w) = (∇v,∇w) + c(v, w).

De bijbehorende stijfheidsmatrix Ag van de eindige elementen oplossing kunnen we dusschrijven als

Ag = A+ c ·Mg.

Hier is A de stijfheidsmatrix uit de vorige sectie en Mg is een deelmatrix van de massa-matrix M . Preciezer, Mg is de matrix verkregen uit M door de l kolommen en rijen teverwijderen die bij de vertices horen die op de rand ∂Ω liggen.

Met behulp van de vorige secties kunnen we nu de volledig discrete eindige elementenoplossing berekenen van het tweedimensionale reactie-diffusieprobleem met een constantereactieterm. Een implementatie in Python is te vinden in Appendix A.2.

3.2.8. De norm van een functie uit S(T ) berekenen

Neem de reactieterm nog steeds gelijk aan een constante c. Voor alle v ∈ S(T ) kunnenwe nu eenvoudig de energienorm ‖v‖2A = a(g; v, v) berekenen. Schrijf hiertoe v uit in denodale basis,

v =m+l∑i=1

γiψi, met γ =

γ1...

γm+l

=

v(x1)...

v(xm+l)

.Als we deze sommatie in het inproduct a(g; v, v) invullen en de uitdrukking uitschrijven,dan vinden we

‖v‖2A = a(g; v, v) = γ>(A+ cM)γ,

waarbij A en M de volledige (m + l) × (m + l) matrices zijn voor de ruimte S(T ). Opanaloge wijze vinden we voor de standaardnorm dat

‖v‖22 = γ>Mγ voor alle v ∈ S(T ).

30

Page 31: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Als ug de exacte oplossing van het reactie-diffusieprobleem is en uΠgV de volledig dis-

crete eindige elementen oplossing is, dan vinden we middels de driehoeksongelijkheid,

‖ug − uΠgV ‖A ≤ ‖u

g −Πug‖A + ‖Πug − uΠgV ‖A.

Uit de approximatietheorie volgt dat ‖ug − Πug‖A = O(h). Aangezien Πug en uΠgV

beide elementen uit S(T ) zijn, kunnen we de norm ‖Πug − uΠgV ‖A op bovenstaande

manier uitrekenen. Als we hier vinden dat deze norm ook O(h) is, dan volgt dus dat‖ug − uΠg

V ‖A = O(h).

3.2.9. De uniforme verfijning van een partitie

Het idee achter de eindige elementen methode is dat de benadering ‘beter’ wordt als departitie wordt verfijnd4. Een manier om een tweedimensionale partitie T te verfijnen ismiddels uniforme verfijning.

Definitie 3.2 (Uniforme verfijning). Laat T een triangulatie van het domein Ω zijn. Deuniforme verfijning T ′ verkrijgen we nu door iedere driehoek Tk ∈ T op te delen in viercongruente subdriehoeken. Preciezer, door een hoekpunt op het midden van iedere zijdevan Tk te plaatsen en de drie lijnstukken die deze nieuwe hoekpunten verbinden toe tevoegen als zijdes.

Een voorbeeld van een uniforme verfijning wordt gegeven in onderstaand figuur.

−1.0 −0.5 0.0 0.5 1.0−1.0

−0.5

0.0

0.5

1.0 Triangulatie

(a) Triangulatie T

−1.0 −0.5 0.0 0.5 1.0−1.0

−0.5

0.0

0.5

1.0 Triangulatie

(b) Uniforme verfijning van T

Voor de implementatie is de volgende opmerking handig.

Opmerking. Een nieuw hoekpunt op het midden van een zijde −−→xixj ligt in het inwendigevan Ω dan en slechts dan als de zijde −−→xixj onderdeel is van twee verschillende driehoekenin de triangulatie T .

De implementatie uit Appendix A.2 is in staat een triangulatie gegeven door N,T,Guniform te verfijnen.

4Driehoeken uit de oude partitie worden in een of meer driehoeken verdeeld, zodat h kleiner wordt.

31

Page 32: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.2.10. Voorbeeld

We geven nu een voorbeeld van een tweedimensionaal reactie-diffusieprobleem. LaatΩ = [0, 1]× [0, 1] en f(x, y) = sin(πx) sin(πy)(2π2 + 1) zijn, bekijk het probleem van hetvinden van een u ∈ C2(Ω) zodat,

−∆u+ u = f in Ω

u = 0 op ∂Ω.

Merk op dat in dit geval de exacte oplossing u gelijk is aan

u(x, y) = sin(πx) sin(πy).

We bekijken nu de volledig discrete eindige elementen oplossing van dit probleem. Laatde beginpartitie T van [0, 1]× [0, 1] bestaan uit twee rechthoekige driehoeken die samenhet vierkant vormen. Met de implementatie uit Appendix A.2 kunnen we deze partitieeen aantal keer verfijnen en hierop vervolgens de volledige eindige elementen methodeloslaten. De verfijnde partities met de eindige elementen oplossingen zijn weergegevenin Figuur 3.4. In Figuur 3.3 zien we dat de volledig discrete eindige elementen oplossinglijkt te convergeren naar de nodale interpolant van de exacte oplossing.

1 2 3 4 510-3

10-2

10-1

100

||Πu−uΠV ||A||Πu−uΠV ||2

Figuur 3.3.: Grafiek die het verschil tussen Πug en uΠV weergeeft. Op de x-as is het aantal

verfijning weergegeven. De triangulaties uit Figuur 3.4 komen overeen metx = 2, 3, 4.

32

Page 33: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

0.00.2

0.40.6

0.81.0 0.0

0.20.4

0.60.8

1.00.00.10.20.30.40.50.60.70.80.9

uh

0.0 0.2 0.4 0.6 0.8 1.00.0

0.2

0.4

0.6

0.8

1.0 Triangulatie

0.00.2

0.40.6

0.81.0 0.0

0.20.4

0.60.8

1.00.0

0.2

0.4

0.6

0.8

1.0

uh

0.0 0.2 0.4 0.6 0.8 1.00.0

0.2

0.4

0.6

0.8

1.0 Triangulatie

0.00.2

0.40.6

0.81.0 0.0

0.20.4

0.60.8

1.00.0

0.2

0.4

0.6

0.8

1.0

uh

0.0 0.2 0.4 0.6 0.8 1.00.0

0.2

0.4

0.6

0.8

1.0 Triangulatie

Figuur 3.4.: Links de eindige elementen oplossing, rechts de partitie van [0, 1]× [0, 1].

3.3. Het driedimensionale reactie-diffusieprobleem

In de vorige sectie zagen we hoe we de volledig discrete eindige elementen methodevoor het tweedimensionale geval kunnen implementeren. Het driedimensionale probleemkan op analoge wijze worden geımplementeerd. We hebben in dit geval een domeinΩ ⊂ R3 met een opdeling T = T1, . . . , Tn bestaande uit tetraeders. Noteer weerm + l = dimS(T ) en m = dimS0(T ). De nodale basis van S(T ) wordt gegeven doorψ1, . . . , ψm+l.

33

Page 34: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.3.1. Samenstellen matrices

Evenals in het tweedimensionale geval berekenen we eerst de stijfheidsmatrix A en demassamatrix M voor S(T ). We vinden dat deze matrices te schrijven zijn als

A =n∑

i=1

Ak en M =n∑

i=1

Mk,

waarbij Ak en Mk de inproducten beperkt tot Tk bevatten. Een tetraeder heeft vierhoekpunten, dus er zijn vier nodale basisfuncties niet triviaal op Tk. De matrices Ak enMk bestaan dus uit 4× 4 elementen die niet nul zijn.

Laat T de referentietetraeder zijn met hoekpunten (0, 0, 0), (1, 0, 0), (0, 1, 0) en (0, 0, 1).Op T definieren we de basisfuncties,

v1 = 1− x− y − z, v2 = x, v3 = y en v4 = z.

Schrijf p, q, r, s voor de indices van de hoekpunten van Tk, dan wordt een C1-diffeomor-fisme tussen T en Tk gegeven door

Fk : T → Tk :

xyz

7→xpypzp

+

xq − xp xr − xp xs − xpyq − yp yr − yp ys − ypzq − zp zr − zp zs − zp

︸ ︷︷ ︸

Bk

xyz

.

Met dit diffeomorfisme vinden we de volgende verbanden,

v1 = ψp Fk, v2 = ψq Fk, v3 = ψr Fk en v4 = ψs Fk.

Gebruiken we deze samenstellingen in combinatie met de substitutiestelling voor Fk danvinden we dat de 4× 4 niet triviale elementen van Mk worden gegeven door

1

120|detBk|

2 1 1 11 2 1 11 1 2 11 1 1 2

.Op eenzelfde wijze als voor het tweedimensionale geval kunnen we dergelijke samenstel-lingen ook vormen voor ∇ψi. We vinden dan dat de 4 × 4 niet triviale elementen vanAk worden gegeven door

1

6|detBk|

−1 −1 −11 0 00 1 00 0 1

(Bk)−1(Bk)−>

−1 1 0 0−1 0 1 0−1 0 0 1

.Met deze verbanden voor Ak en Mk kunnen we een implementatie geven voor de

volledig discrete eindige elementen methode in het driedimensionale geval. In AppendixA.3 is een dergelijke implementatie in Python gegeven.

34

Page 35: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.3.2. De uniforme verfijning van een triangulatie

Een driedimensionale partitie kunnen we uniform verfijnen, in de literatuur heet dit ookwel red refinement [14]. Bij deze verfijning wordt elke tetraeder T ∈ T in 8 subtetraedersverdeeld. Dit gebeurt door een hoekpunt op het midden van iedere zijde van T toe tevoegen. Met deze nieuwe vertices kunnen we nu direct vier subtetraeders vormen in de‘punten’ van T , zie Figuur 3.5. In het midden van de tetraeder vormen de nieuwe verticeseen octraeder. Deze octaeder kunnen we vervolgens opsplitsen in vier subtetraeders.Voor deze opsplitsing moet een diagonaal in de octaeder worden gekozen, het is dusgeen unieke opdeling.

Figuur 3.5.: De tetraeder wordt gesplitst in vier subtetraeders en een octaeder. Deoctaeder wordt vervolgens langs een diagonaal gesplitst in vier subte-traeders. Bron: [15].

In Appendix A.3 is deze verfijning geımplementeerd, zie Figuur 3.6. We kiezen eenwillekeurige diagonaal om de octaeder langs te splitsen. Verder gebruiken we bij deverfijning een functie die expliciet retourneert of een punt op de rand ∂Ω ligt. Dit kanvermeden worden door gebruik te maken van een datastructuur die bijhoudt welke zijdeser op de rand liggen.

Figuur 3.6.: Implementatie van de uniforme verfijning van een tetraeder. Links het or-gineel, rechts de verfijning.

35

Page 36: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3.3.3. Voorbeeld

We geven nu een voorbeeld van een driedimensionaal reactie-diffusieprobleem. Als do-mein nemen we Ω = [0, 1]3 en als functie f(x, y, z) = sin(πz) sin(πx) sin(πy)(3π2 + 1),bekijk nu het probleem van het vinden van een u ∈ C2(Ω) zodat,

−∆u+ u = f in Ω

u = 0 op ∂Ω.

Merk op dat in dit geval de exacte oplossing u gelijk is aan

u(x, y, z) = sin(πx) sin(πy) sin(πz).

Als beginpartitie T nemen we een opdeling van de kubus [0, 1]3 in vijf tetraeders, zieFiguur 3.7. Met de implementatie uit Appendix A.3 kunnen we nu de partitie verfijnenen de volledig discrete eindige elementen oplossing berekenen. In Figuur 3.8 lijkt dezeeindige elementen benadering te convergeren naar de nodale interpolant van de exacteoplossing.

Figuur 3.7.: De triangulatie T van de eenheidskubus in zes tetraeders.

36

Page 37: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

2 3 410-2

10-1

100

||Πu−uΠV ||A||Πu−uΠV ||2

Figuur 3.8.: Fout tussen de eindige elementen benadering en de nodale interpolant vande exacte oplossing. Op de x-as staat het aantal uniforme verfijningen vande partitie. In de eerste twee verfijningen liggen er geen vertices in hetinwendige van de kubus, de eindige elementen oplossing is dan dus triviaal.

37

Page 38: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

4. Het maximum principe

In Hoofdstuk 2 hebben we de eindige elementen methode bestudeerd voor het reactie-diffusieprobleem. In dit hoofdstuk zullen we eerst zien dat exacte oplossingen van ditprobleem voldoen aan het zogenaamde maximum principe. Vervolgens bekijken we wan-neer de eindige elementen oplossing ook aan dit principe voldoet. Er zal blijken dat ditsamenhangt met de dihedrale hoeken van de simplices in de triangulatie van het domein.

4.1. Het exacte maximum principe

In Hoofdstuk 2 keken we naar het reactie-diffusieprobleem (2.8). We kunnen ook kijkennaar een algemenere versie van dit probleem. Hiervoor hebben we eerst de volgendedefinitie nodig.

Definitie 4.1. Een reele n × n matrix M is positief-definiet als x>Mx > 0 voor elkeniet nulvector x ∈ Rn.

Laat een coefficient matrix A(x) = aij(x)ni,j=1 gegeven zijn met aij ∈ C1(Ω) en

A(x) symmetrisch1 positief-definiet. Laat verder f, g ∈ C(Ω) gegeven zijn met g ≥ 0.Het algemene reactie-diffusieprobleem is het vinden van een u ∈ C2(Ω) zodat

−div(A∇u) + gu = f in Ω

u = 0 op ∂Ω(4.1)

Als we voor A de identiteitsmatrix nemen, dan vinden we het reactie-diffusieprobleem(2.8) uit Hoofdstuk 2.

Definitie 4.2 (Maximum principe). Het algemene reactie-diffusieprobleem voldoet aanhet maximum principe als,

f ≤ 0 =⇒ u ≤ 0 op Ω

Met andere woorden zegt dit dat u zijn maximum aanneemt op de rand ∂Ω.

Bestudeer nu eerst het eendimensionale geval van (4.1). Het domein bestaat dan uiteen interval I = [a, b] ⊂ R en we zoeken een u ∈ C2(I) zodat

−(A(x)u′(x))′ + g(x)u(x) = f(x) voor a < x < b en u(x) = 0 op ∂I. (4.2)

In de literatuur wordt dit ook wel een Sturm-Liouville randwaardeprobleem genoemd[2, p. 363].

1aij(x) = aji(x).

38

Page 39: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Lemma 4.3. Het Sturm-Liouville randwaardeprobleem (4.2) voldoet aan het maximumprincipe.

Bewijs. De functie u is continu, dus hij neemt zijn maximum aan op het interval [a, b].We leiden nu een tegenspraak af. Stel dat f ≤ 0 en dat het maximum wordt aangenomenvoor x0 ∈ (a, b), waarbij u(x0) > 0.

Omdat u continu is kunnen we ξ1, ξ2 ∈ [a, b] vinden met ξ1 < x0 < ξ2 zodat er geldt

u(x0) ≥ u(x) > 0 voor x ∈ (ξ1, ξ2) en u(ξ1) = u(ξ2) = 0. (4.3)

Pas nu de middelwaardestelling [6, Theorem 29.3] toe op de functie u en de intervallen[ξ1, x0] en [x0, ξ0]. We vinden dan een x1 ∈ (ξ1, x0) en een x2 ∈ (x0, ξ2) zodat geldt

u′(x1) =u(x0)− u(ξ1)

x0 − ξ1=

u(x0)

x0 − ξ1> 0

u′(x2) =u(ξ2)− u(x0)

ξ2 − x0=−u(x0)

ξ2 − x0< 0.

Aangezien A(x) positief definiet is geldt er dat A(x) > 0 en dus volgt er dat (Au′)(x1) > 0en (Au′)(x2) < 0.

Passen we nu nogmaals de middelwaardestelling toe op de functie Au′ en het interval[x1, x2] (dit kan omdat A en u′ differentieerbaar zijn). Dan is er een ξ ∈ (x2, x3) waarvoorgeldt dat

(Au′)′(ξ) =Au′(x2)−Au′(x1)

x2 − x1< 0.

Merk op dat ξ ∈ (ξ1, ξ2), dus volgt uit (4.3) dat u(ξ) > 0.Anderzijds is u de exacte oplossing van de differentiaalvergelijking (4.2), dus

(Au′)′(ξ) = g(ξ)u(ξ)− f(ξ) ≥ 0.

De ongelijkheid volgt uit het feit dat f ≤ 0 en g(ξ)u(ξ) ≥ 0.We hebben nu een tegenspraak gevonden voor (Au′)′(ξ). Er moet dus gelden dat

u ≤ 0, oftewel het eendimensionale algemene reactie-diffusieprobleem (4.2) voldoet aanhet maximum principe.

Stelling 4.4. Het algemene reactie-diffusieprobleem (2.8) voldoet aan het maximumprincipe.

Zie bijvoorbeeld [3, Theorem 2.1] voor een bewijs.

4.2. Het discrete maximum principe

We bekijken (weer) het reactie-diffusieprobleem (2.8). Schrijf ug voor de exacte oplossingvan dit probleem. In Hoofdstuk 2 hebben we gezien hoe we de bijbehorende eindigeelementen oplossing ugV kunnen bepalen. We bestuderen nu of ugV aan het discretemaximum principe voldoet.

39

Page 40: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Definitie 4.5 (Discrete maximum principe). De eindige elementen benadering ugV vol-doet aan het discrete maximum principe als,

f ≤ 0 =⇒ ugV ≤ 0 op Ω.

Uit Stelling 4.4 volgt dat ug aan het maximum principe voldoet. Het blijkt dat ditniet direct garandeert dat zijn eindige elementen benadering ugV hier ook aan voldoet.Hieronder staat een voorbeeld van een eindige elementen oplossing waar het maximumprincipe geschonden wordt. Het voorbeeld is overgenomen uit [5], voor een verklaringwaarom het maximum principe geschonden wordt verwijzen we naar dit artikel.

Voorbeeld 4.6. Bekijk het volgende reactie-diffusieprobleem: we zoeken ugj zodat,

−∆ugj + gjugj = fj in (0, 1)

ugj = 0 op 0, 1,

waarbij fj(x) = −2j(2x − 1)2 en gj(x) = 2j . Neem de partitie J = [0, 0.25, 0.5, 0.75, 1].Passen we nu de eindige elementen methode toe voor j ∈ 0, . . . , 15, dan verkrijgen wehet Figuur 4.1. Hierin is duidelijk te zien dat het discrete maximum principe geschondenwordt in het punt x = 0.5. We hebben immers fj ≤ 0, maar we vinden ook eindigeelementen oplossingen met ugj (0.5) > 0.

0.00 0.25 0.50 0.75 1.00−0.6

−0.5

−0.4

−0.3

−0.2

−0.1

0.0

0.1

0.2

Figuur 4.1.: De lijnen geven de eindige elementen oplossing weer, hogere intensiteit blauwis voor hogere waarde van j.

4.2.1. Herformulering van het discrete maximum principe

Uit het bovenstaande voorbeeld blijkt dat het maximum principe niet direct behoudenblijft bij de eindige elementen methode. Om te onderzoeken wanneer dit wel gebeurt

40

Page 41: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

bekijken we nogmaals de methode. Laat hiertoe T de triangulatie van het domein Ωzijn met vertices x1, . . . , xn+m. De nodale basis voor S(T ) noteren we met ψ1, . . . , ψn+m.Hernoem de vertices zodat ψ1, . . . , ψn de nodale basis van S0(T ) is. De eindige elementenoplossing, ugV =

∑ni=1 αiψi, kan nu gevonden worden door het matrixstelsel uit (2.12)

op te lossen:Agα = F, waarbij Ag

ij = a(g;ψi, ψj) en Fj = (f, ψj).

Om te te bepalen of de eindige elementen oplossing ugV aan het discrete maximum prin-cipe voldoet merken we het volgende op.

Opmerking. Voor de nodale basisfuncties geldt ψj ≥ 0, verder hebben we per aannamedat f ≤ 0. Hieruit volgt dat Fj = (f, ψj) =

∫Ω f(x)ψj(x) dx ≤ 0. Oftewel we vinden dat

f ≤ 0 =⇒ F ≤ 0.2

Anderzijds vinden we, omdat ugV een lineaire combinatie van ψi is, dat ugV zijn ex-trema aanneemt op de vertices van T . Het discrete maximum principe kunnen we nuherformuleren in lineair algebraısche termen.

Lemma 4.7. De eindige elementen benadering ugV voldoet aan het discrete maximumprincipe als,

F ≤ 0 =⇒ α ≤ 0 waarbij α = (Ag)−1F. (4.4)

Bewijs. De functie ugV neemt zijn extrema aan op de vertices van T . De waarden in dezepunten worden gegeven door ugV (xi) = αi voor i ∈ 0, . . . , n. De ongelijkheid α ≤ 0impliceert dus dat ugV ≤ 0.

Met de aanname en de eerder gemaakte opmerking vinden we nu de volgende reeksimplicaties:

f ≤ 0 =⇒ F ≤ 0 =⇒ α ≤ 0 =⇒ ugV ≤ 0.

4.2.2. Het discrete maximum principe en de Stieltjes matrix

Met bovenstaand lemma hebben we hebben we het discrete maximum principe geredu-ceerd tot een lineair algebraısch probleem. Uit Lemma 4.7 en het feit dat α = (Ag)−1Fvinden we dat

(Ag)−1 ≥ 0 (4.5)

een voldoende voorwaarde is voor het discrete maximum principe. Als we dus vindendat (Ag)−1 ≥ 0, dan weten we dat ugV aan het discrete maximum principe voldoet.

We introduceren het begrip Stieltjes matrix om te bekijken wanneer de stijfheidsma-trix Ag de eigenschap (Ag)−1 ≥ 0 heeft.

Definitie 4.8 (Stieltjes matrix). Een reele matrix (Mij)ni,j=1 met Mij ≤ 0 voor alle i 6= j

is een Stieltjes matrix als M symmetrisch en positief-definiet is.

2De ongelijkheid tussen een matrix of vector is elementsgewijs.

41

Page 42: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Uit [9, Corollary 3.24] volgt dat een Stieltjes matrix M inverteerbaar is en dat M−1 ≥0. Als we dus kunnen aantonen dat onze stijfheidsmatrix Ag een Stieltjes matrix is, danvoldoet ugV aan het discrete maximum principe.

Lemma 4.9. De stijfheidsmatrix Ag is symmetrisch en positief-definiet.

Bewijs. De symmetrie volgt direct uit de symmetrie van het inproduct a(g; ·, ·).Zij x ∈ Rn een niet nulvector en schrijven we de matrixvermenigvuldigingen uit danvinden we,

x>Agx =

n∑i=1

xi

n∑j=1

Agijxj .

Gebruiken we nu dat Agij = a(g;ψi, ψj) een inproduct is, dan volgt dat

x>Agx =n∑

i=1

xi

n∑j=1

a(g;ψi, ψj)xj =n∑

i=1

xia(g;ψi,n∑

j=1

xjψj) = a(g;n∑

i=1

xiψi,n∑

j=1

xjψj).

Noteren we v =∑n

j=1 xjψj , dan geldt omdat ψj een basis is en x 6= 0, dat v 6= 0. Nuvolgt uit de inproduct axioma’s dat,

x>Agx = a(g; v, v) > 0.

Hiermee is bewezen dat Ag positief-definiet is.

Om te bewijzen dat Ag een Stieltjes matrix is, rest ons nu te laten zien dat de elementenbuiten de hoofddiagonaal van Ag niet-positief zijn. Hiervoor introduceren we eerst watnotatie.

Definitie 4.10. Zij T een d-simplex met d ≥ 1 en facetten Fi en Fj . Definieer dedihedrale hoek tussen Fi en Fj met

αij := π − γij ,

waarbij γij ∈ [0, π] de hoek is tussen de naar buiten gerichte normaalvectoren qi en qjvan Fi respectievelijk Fj . Verder gebruiken we de volgende notatie om de afhankelijkheidvan de facetten duidelijk te maken,

cos(Fi, Fj) := cos(αij).

Definitie 4.11. Een d-simplex T heet scherp als al zijn dihedrale hoeken scherp3 zijn.

Definitie 4.12. Een triangulatie T heet scherp als elke simplex T ∈ T scherp is.

Definitie 4.13. Noteer |S| voor het volume voor een d-simplex S. Schrijf hj voor dehoogte van T boven Fj , deze hoogte voldoet aan [11, Remark 2.8],

hj =d|T ||Fj |

,

met de conventie dat |Fj | = 1 als d = 1.

3Kleiner dan 90 graden.

42

Page 43: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

ni

nj

hj

Fj

Fi

αij

γij

Figuur 4.2.: Afbeelding die de definities illustreert voor een driehoek (2-simplex). Denormaalvectoren op de facetten Fi en Fj worden gegeven door ni respec-tievelijk nj . De dihedrale hoek tussen Fi en Fj is gelijk aan αij = π − γij ,waarbij γij de hoek tussen ni en nj is.

4.2.3. Het diffusieprobleem

We bekijken eerst het diffusieprobleem, dus g = 0. We willen weten wanneer de stijf-heidsmatrix A0 een Stieltjes matrix is. Uit de vorige sectie volgt dat we hiervoor alleenhoeven te weten wanneer de elementen buiten de hoofddiagonaal van A0 niet-positiefzijn. Hiervoor gebruiken we het volgende lemma.

Lemma 4.14. Zij i, j ∈ 1, . . . , n verschillend en laat T ∈ T een simplex zijn zodatψi en ψj beperkt tot T niet triviaal4 zijn. Voor de facetten Fi en Fj van T tegenover xirespectievelijk xj, geldt

(∇ψi,∇ψj)T = −cos(Fi, Fj)

hihj|T |.

Bewijs. Zie [10] voor een exact bewijs.We geven hier een schets van het bewijs. Voor k ∈ 1, . . . , n weten we dat ∇ψk

constant is en dat deze loodrecht op de niveaukrommen ψk = c staat5. Bekijken we nude niveaukromme ψk = 0 beperkt tot T , dan is dit precies een facet van T . De vector∇ψk is dus een normaalvector op een facet van T . Uit het euclidische inproduct volgtnu dat

∇ψi · ∇ψj = |∇ψi||∇ψj | cos γij = −|∇ψi||∇ψj | cos(Fi, Fj).

De laatste gelijkheid volgt uit het feit dat cos(Fi, Fj) = cos(π − γij) = − cos(γij). Alswe nu aantonen dat |∇ψi| = 1/hi, dan volgt het lemma (zie [10]).

Opmerking. Het teken van (∇ψi,∇ψj)T hangt alleen af van cos(Fi, Fj), aangezien hi, hjen |T | positieve getallen zijn. Het teken wordt dus bepaald door de geometrische eigen-schappen van de triangulatie.

Met dit lemma kunnen we een verband leggen tussen het discrete maximum principeen de triangulatie.

4Preciezer: T ⊂ supp(ψi) ∩ supp(ψj).5De gradient staat loodrecht op de niveaukrommen, zie een college calculus.

43

Page 44: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Gevolg 4.15. Als T geen simplex bevat met een stompe6 dihedrale hoek, dan heeft A0

niet-positieve elementen buiten de hoofddiagonaal. Hiermee is A0 een Stieltjes matrixen dus voldoet de eindige elementen oplossing aan het discrete maximum principe.

Bewijs. De simplices uit T bevatten geen stompe dihedrale hoeken, er geldt dus datcos(Fi, Fj) ≥ 0. Gebruiken we nu het vorige lemma, dan volgt er dat (∇ψi,∇ψj)T ≤ 0voor i 6= j. Voor elk element aij buiten de hoofddiagonaal van A0 vinden we nu dat,

aij =∑T∈T

(∇ψi,∇ψj)T ≤ 0.

Combineren we deze eigenschap met het Lemma 4.9, dan weten we dat A0 een Stieltjesmatrix is en dus (A0)−1 ≥ 0. Uit (4.5) volgt nu dat de eindige elementen benadering ugVaan het discrete maximum principe voldoet. De triangulatie T garandeert dus dat deeindige elementen benadering aan het maximum principe voldoet.

Voorbeeld 4.16. Bekijk het eendimensionale diffusieprobleem (2.1). In de eindige ele-menten methode voor dit probleem is elke simplex T ∈ T een interval. De naar buitengerichte normaalvectoren maken een hoek van γij = π, dus we vinden dat cos(Fi, Fj) = 1.Voor elke partitie van I = [a, b] voldoet de eindige elementen oplossing dus aan het dis-crete maximum principe.

Merk op dat dit geen tegenspraak oplevert met Voorbeeld 4.6, dat was immers geenpuur diffusieprobleem.

4.2.4. Het reactie-diffusieprobleem

Bekijk nu de stijfheidsmatrix Ag van het reactie-diffusieprobleem met g 6= 0. In dit gevalkunnen we niet direct Lemma 4.14 toepassen, we hebben immers een ander inproductvoor de elementen uit Ag. We onderzoeken wanneer Ag niet-positieve elementen buitende hoofddiagonaal heeft. Schrijf daartoe elk element van Ag buiten de hoofddiagonaalals,

aij =∑T∈T

a(g;ψi, ψj)T =∑T∈T

(∇ψi,∇ψj)T + (gψi, ψj)T .

De functies g, ψi en ψj zijn alle drie niet-negatieve functies, hieruit volgt direct dat(gψi, ψj)T ≥ 0. Als we willen dat aij ≤ 0, moeten de inproducten (∇ψi,∇ψj)T duscompenseren voor positiviteit van (gψi, ψj)T . Om te kunnen zeggen wanneer dit gebeurtblijkt de volgende identiteit handig te zijn,

(ψi, ψj)T =|T |

(d+ 1)(d+ 2)voor i 6= j. (4.6)

Zie [8, p. 201] voor een bewijs. We zijn nu in staat een voldoende eis voor de triangula-tie T te geven waaronder geldt dat aij ≤ 0.

6Hoek die strikt groter dan 90 graden is.

44

Page 45: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Stelling 4.17. Laat T een triangulatie zijn zodat voor elk paar facetten Fi en Fj vanelke simplex T ∈ T geldt dat

cos(Fi, Fj)

hihj≥ ‖g‖∞

(d+ 1)(d+ 2), (4.7)

waarbij ||g||∞ = supx∈Ω |g(x)|. Dan heeft Ag niet-positieve elementen aij buiten dehoofddiagonaal.

Hiermee is Ag een Stieltjes matrix en voldoet de eindige elementen oplossing mettriangulatie T aan het discrete maximum principe.

Bewijs. Laat T ∈ T zijn en neem i, j ∈ 1, . . . , n verschillend. Schrijf Fi en Fj voor defacetten van T tegenover xi respectievelijk xj . Uit ψi ≥ 0, ψj ≥ 0 en g ≥ 0 volgt,

(gψi, ψj)T ≤ ‖g‖∞(ψi, ψj)T .

Combineren we dit met Lemma 4.14 en de identiteit (4.6), dan vinden we dat

aij =∑T∈T

(∇ψi,∇ψj)T + (gψi, ψj)T

≤∑T∈T

(∇ψi,∇ψj)T + ‖g‖∞(ψi, ψj)T

=∑T∈T−cos(Fi, Fj)

hihj|T |+ ‖g‖∞

|T |(d+ 1)(d+ 2)

=∑T∈T|T |(

‖g‖∞(d+ 1)(d+ 2)

− cos(Fi, Fj)

hihj

)≤ 0.

De laatste ongelijkheid volgt uit de aanname (4.7).De matrix Ag heeft dus niet-positieve elementen buiten de hoofddiagonaal. In combi-

natie met Lemma 4.9 volgt nu dat Ag een Stieltjes matrix is. Er geldt dus dat (Ag)−1 ≥ 0,waaruit we kunnen concluderen dat de eindige elementen oplossing aan het discrete maxi-mum principe voldoet.

Opmerking. De stelling geeft een voldoende eis aan de triangulatie T , zodat het discretemaximum principe geldt voor de eindige elementen oplossing. Het is niet direct duidelijkdat dat de voorwaarde (4.7) ook een noodzakelijke eis is. Sterker nog, de matrix Ag hoeftniet eens een Stieltjes matrix te zijn om aan het discrete maximum principe te voldoen.Het zijn van een Stieltjes matrix is ook slechts een voldoende voorwaarde, zie Sectie 4.2.2.

Stelling 4.17 geeft de aanleiding voor de volgende hoofdstukken. De vraag rijst of wevoor elk polytoop Ω een triangulatie T kunnen vinden zodat aan de voorwaarde (4.7) isvoldaan. Als g 6= 0 moet voor zo een triangulatie in ieder geval gelden dat cos(Fi, Fj)strikt positief is, oftewel dat T een scherpe triangulatie is.

45

Page 46: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Dit blijkt vaak een lastig probleem. In 1980 is in [18] aangetoond dat een scherpetriangulatie van het vierkant uit minimaal acht driehoeken moet bestaan. Een scherpeopdeling van het vierkant in acht driehoeken is gegeven in Figuur 4.3. Een scherpetriangulatie van de 3-kubus is pas in 2009 gevonden in artikel [1], zie Figuur 4.4 vooreen illustratie. Anderzijds is er bewezen dat er geen scherpe triangulatie bestaat van den-kubus voor n ≥ 4, zie [20].

Merk op dat we een scherpe triangulatie kunnen gebruiken om aan de ongelijkheid(4.7) in Stelling 4.17 te voldoen. We kunnen de linkerkant van de ongelijkheid immersverder beınvloeden door de waarden hi en hj te laten afnemen. In het vlak kunnen webijvoorbeeld uniforme verfijning op de triangulatie toepassen. Deze introduceert name-lijk geen nieuwe hoeken, dus cos(Fi, Fj) blijft gelijk, terwijl de waarden hi en hj welafnemen.

Figuur 4.3.: Voorbeeld van een scherpe triangulatie van het vierkant in 8 driehoeken.Bron: [19].

Figuur 4.4.: Scherpe triangulatie van de 3-kubus. Bron: [1]

46

Page 47: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

5. Scherpe roostertriangulaties van hetvierkant

Uit het vorige hoofdstuk bleek dat een scherpe triangulatie van een domein Ω kwalita-tieve eigenschappen kan garanderen voor de eindige elementen oplossing. Een logischevervolgvraag is of we elk domein zo kunnen opdelen. Het domein dat we in dit Hoofd-stuk bekijken is het eenheidsvierkant in het vlak. We zijn dus op zoek naar scherpetriangulaties van I2 := [0, 1]× [0, 1] ⊆ R2.

We gaan bekijken of we dergelijke scherpe triangulaties systematisch met de computerkunnen vinden. Daartoe merken we eerst op dat een scherpe triangulatie T van I2

invariant is onder kleine verschuivingen. Elke driehoek uit T heeft immers hoeken diestrikt kleiner dan 90 graden zijn. Onder kleine verschuivingen blijven deze hoeken kleinerdan 90 graden, dus blijven de driehoeken scherp. Stel nu dat de vertices van T in R2

zitten, dan kunnen we deze vertices een klein beetje verschuiven zodat we een scherpetriangulatie T ′ van I2 vinden met vertices in Q2. Als we nu een regelmatig rooster opI2 bekijken, dan is er dus een kleinste rooster waarvoor geldt dat de vertices van T ′ opdit rooster liggen.

In dit hoofdstuk bekijken we daarom voor welke waarde van p we een triangulatie vanhet vierkant Ip := [0, p] × [0, p] kunnen vinden in scherpe driehoeken met hoekpuntendie gehele coordinaten hebben. Merk op dat dit hetzelfde is als kijken naar scherpetriangulaties, op regelmatige roosters, van I2. We willen dus een algoritme ontwikkelendie voor een gegeven p controleert of er een scherpe triangulatie met gehele coordinatenvan Ip bestaat. Hiertoe bekijken we eerst het werk uit [13]. We presenteren vervolgenseen andere methode dan degene die gebruikt wordt in dit eerdere werk.

5.1. Voorbereiding

We bevinden ons in het tweedimensionale geval, dus d = 2. We zijn op zoek naar eenscherpe triangulatie van het domein Ip in 2-simplices, oftewel driehoeken. We introduce-ren nu eerst wat terminologie, waarbij we vasthouden aan de termen die gebruikt wordenin [13].

Definitie 5.1. Voor p, q ∈ Z≥0 noemen we de punten met gehele coordinaten in [0, p]×[0, q] het p× q-rooster. Het p× p-rooster noteren we met Z2

p.

Definitie 5.2. Een driehoek 4 noemen we een roosterdriehoek als de hoekpunten van4 in een p × q-rooster zitten, voor zekere p, q ∈ Z≥0. De driehoek 4 noemen we een

47

Page 48: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p-roosterdriehoek als 4 een roosterdriehoek in het p× p-rooster is.

Definitie 5.3. Zij T een triangulatie van Ip. Als voor alle driehoeken in T geldt dathet tevens p-roosterdriehoeken, dan noemen we T een roostertriangulatie.

Opmerking. De facetten van een driehoek4 zijn gewoon de zijdes. We zien nu eenvoudigin dat de dihedrale hoek tussen twee facetten hetzelfde is als de ‘gewone’ hoek tussen detwee corresponderende zijdes.

We noemen een driehoek4 scherp als al zijn dihedrale hoeken scherp zijn. Met behulpvan de bovenstaande opmerking noemen we 4 dus scherp als al zijn gebruikelijke hoekenscherp zijn.

Definitie 5.4. Een roostertriangulatie T van Ip noemen we een scherpe roostertrian-gulatie als elke driehoek uit T scherp is.

Figuur 5.1 geeft een illustratie van deze (rooster) definities.

Definitie 5.5. Zij A,B ∈ R2 verschillende punten, dan schrijven we AB voor de1−simplex, een lijnstuk, met hoekpunten A en B.

Definitie 5.6. Zij A,B,C ∈ R2 punten die niet op een lijn liggen, dan schrijven we4ABC voor de driehoek met hoekpunten A,B en C. De driehoek 4ABC heeft driezijdes en deze worden gegeven door AB,BC en AC.

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

(a) Voorbeeld van een 7-roosterdriehoek.

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

(b) Een scherpe roostertriangulatie van I7.

Figuur 5.1.: Illustratie van de definities.

De bovenstaande definities kunnen we nu gebruiken om de zoektocht uit het beginvan dit hoofdstuk formeler op schrijven: We willen een algoritme ontwikkelen die vooreen gegeven p ∈ N bekijkt of er een scherpe roostertriangulatie van Ip bestaat.

48

Page 49: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

5.2. De methode van Schukking en Weikamp

Bovenstaand vraagstuk is uitgebreid bekeken door M. Schukking en R. Weikamp in [13].In dit artikel wordt een algoritme voorgesteld om voor een gegeven p ∈ N alle scherperoostertriangulaties van Ip te vinden. Voor p ∈ N definieren we eerst de verzameling,

A(p) := 4 is een p-roosterdriehoek |4 is scherp .

De algoritme die voorgesteld wordt in [13] bestaat grofweg uit drie stappen. We zullendeze stappen later toelichten. Zij p ∈ N gegeven, dan worden de triangulaties van Ipgevonden door:

1. bepaal A(p), oftewel de verzameling scherpe roosterdriehoeken in het p×p-rooster,

2. filter de verzameling A(p) op de face-to-face eigenschap,

3. bepaal alle triangulaties van Ip uit de overgebleven verzameling scherpe rooster-driehoeken.

Deze stappen zullen we nu kort verduidelijken.

Stap 1 Het bepalen van de verzameling A(p) kan op verschillende manieren. Zo kunnenwe voor alle roosterdriehoeken in het p × p-rooster een voor een bekijken of ze scherpzijn. In [13, Definitie 2.15] wordt een efficientere manier voorgesteld, namelijk door deverzameling A(p) op te bouwen middels recursie naar p.

Stap 2 Deze stap maakt gebruik van de face-to-face eigenschap van een conformetriangulatie, zie nogmaals Definitie 2.29. Als een driehoek 4 ∈ A(p) in een triangulatievan Ip zit, dan geldt volgens deze eigenschap dat elke zijde van 4 of op de rand van Ipligt of dat de zijde wederom een zijde is van een andere driehoek uit deze triangulatie.

We vinden nu de volgende eigenschap voor driehoeken uit A(p). Zij 4 een driehoekin A(p) met een zijde die niet op de rand van Ip ligt en die geen scherpe buurdriehoekuit A(p) heeft, dan kan 4 volgens de face-to-face eigenschap nooit in een scherpe roos-tertriangulatie zitten. Voor precies bewijs, zie [13, Stelling 3.7]. Met deze constateringkunnen we ons beperken tot een deelverzameling van A(p), de zogenaamde GezelligeVerzameling.

Definitie 5.7 (De Gezellige Verzameling). Zij A(p) de verzameling scherpe rooster-driehoeken in het p × p-rooster. Verwijder nu alle driehoeken uit A(p) die niet aande face-to-face eigenschap voldoen. Door dit te herhalen tot er geen driehoeken meerverwijderd worden ontstaat de Gezellige Verzameling van het p× p rooster: Gp.

De Gezellige Verzameling is uniek en wordt op bovenstaande wijze eenduidig bepaald,voor een bewijs verwijzen we naar [13, Sectie 3.3]. Stap 2 van de algoritme is het bepalenvan de Gezellige Verzameling Gp uit A(p).

49

Page 50: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Stap 3 In deze stap worden alle scherpe roostertriangulaties van Ip gezocht. De me-thode die in [13] wordt voorgesteld heet de disjunctie methode. In deze methode wordtvoor elk paar driehoeken 4,4′ ∈ Gp bepaald of het inwendige disjunct is. Als tweedriehoeken in dezelfde triangulatie zitten moet het inwendige namelijk disjunct zijn.

Vervolgens wordt er een graaf geconstrueerd van alle 4 ∈ Gp, waarbij twee driehoe-ken verbonden worden als ze disjunct zijn. De triangulaties van Ip worden nu gevondendoor het maximum kliek probleem op te lossen voor de zojuist geconstrueerde graaf. Eenmaximale kliek komt overeen met een maximale deelgraaf waarin alle knopen met elkaarverbonden zijn. Per constructie zijn dit dus verzamelingen driehoeken uit Gp die dis-junct van elkaar zijn. In [13, Sectie 3.2] is laten zien dat elke scherpe roostertriangulatiesvan Ip overeenkomt met een maximum kliek. Door het maximum kliek probleem op telossen kunnen zo dus alle scherpe roostertriangulaties van Ip gevonden worden.

Het maximum kliek probleem is NP-volledig en schaalt dus erg slecht als de verzame-ling Gp groter wordt. Het schaalt zo slecht dat in [13] enkel scherpe roostertriangulatiesvoor p tot en met 9 zijn gevonden.

Opmerking. In deze stap wordt het vinden van de scherpe roostertriangulaties uit Gp

dus gereduceerd tot het oplossen van het maximum kliek probleem. Dit betekent nietdeze twee problemen gelijkwaardig zijn.

5.3. De Conforme Verzameling

In de komende secties presenteren we een alternatieve manier om de Gezellige Verza-meling Gp te genereren. We gaan dit doen door een verzameling zijdes te maken dieeventueel in een scherpe roostertriangulatie kunnen voorkomen. Met deze verzamelingzijdes kunnen we vervolgens eenvoudig de Gezellige Verzameling Gp vormen.

5.3.1. Definitie

Zoals eerder gezegd gaan we niet kijken naar alle roosterdriehoeken in het vierkant Ip,maar naar de roosterzijdes in Ip. Hiervoor definieren we het begrip conforme zijde. Latertonen we aan dat alle zijdes van driehoeken in een scherpe roostertriangulatie aan dezeeigenschap voldoen.

Definitie 5.8 (Conforme zijde). Laat p ∈ N gegeven zijn en zij Z een verzameling vanlijnstukken met hoekpunten in het p× p-rooster. Een lijnstuk AB ∈ Z noemen we eenconforme zijde in Z als een van de twee volgende eisen geldt:

• Het lijnstuk AB ligt op de rand van Ip en er is een C ∈ Z2p zodat,

1. de driehoek 4ABC is scherp en

2. de zijdes van 4ABC liggen in Z.

• Het lijnstuk AB ligt niet op de rand van Ip en er bestaan C,D ∈ Z2p zodat,

50

Page 51: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

3. de driehoeken 4ABC en 4ABD scherp zijn en

4. de zijdes van zowel 4ABC als 4ABD in Z zitten en

5. het inwendige van 4ABC en 4ABD disjunct is.

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

A

B

C

D

Figuur 5.2.: Illustratie van het begrip conforme zijde. Links zien we een verzamelinglijnstukken op het 7× 7-rooster. Rechts zien we dat AB een conforme zijdein deze verzameling is: de driehoeken 4ABC en 4ABD zijn scherp, dezijdes liggen weer in de verzameling lijnstukken en het inwendige is disjunct.

Definitie 5.9 (Conforme verzameling). Laat Z een verzameling van lijnstukken zijn methoekpunten in het p×p-rooster. De verzameling Z noemen we een conforme verzamelingals elk lijnstuk AB ∈ Z een conforme zijde in Z is.

Per constructie volgt nu dat de verzameling zijdes van een scherpe roostertriangulatieeen conforme verzameling is.

Lemma 5.10. Laat p ∈ N gegeven zijn en zij T een scherpe roostertriangulatie van Ip.Schrijf Z voor de verzameling van alle zijdes uit T ,

Z = Zijde van 4|4 ∈ T .

Er geldt dat Z een conforme verzameling is.

Bewijs. Dit volgt direct uit de definities van een triangulatie en een conforme zijde, zieDefinitie 2.29 en Definitie 5.8.

Ook het bewijs van het volgende lemma volg direct uit de definities.

Lemma 5.11. Zij X en Y twee conforme verzamelingen, dan geldt dat X ∪ Y ook eenconforme verzameling is.

51

Page 52: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Merk op dat er eindig veel lijnstukken zijn met hoekpunten in het p× p-rooster. Hetbovenstaande lemma vertelt ons dus dat er maximale conforme verzameling is, verkregenals de (eindige) vereniging van alle conforme verzamelingen voor het vierkant Ip.

Definitie 5.12. De maximale conforme verzameling noemen we de Conforme Verzame-ling voor Ip en noteren we met,

Cp :=⋃

Z conforme verzameling voor Ip

Z.

Stel dat er een scherpe roostertriangulatie T van Ip bestaat, dan volgt met Lemma 5.10dat alle zijdes in Cp moeten zitten. Met de verzameling Cp kunnen we onze zoektochtnaar scherpe roostertriangulaties dus verder zetten.

5.3.2. De Conforme Verzameling construeren

We kunnen de Conforme Verzameling Cp construeren met een iteratief proces. Bekijkdaartoe de verzameling met alle lijnstukken in het p× p-rooster,

Z1 := AB |A,B ∈ Z2p en A 6= B.

In elke stap van het proces verwijderen we alle zijdes die niet meer conform zijn, dus

Zn+1 : = Zn \ AB is niet conform in Zn= AB ∈ Zn |AB is conform in Zn.

Blijf nu itereren tot we vinden dat Zn+1 = Zn. Aangezien de verzameling Z1 eindig veelelementen bevat is dit proces eindig. De verzameling die we overhouden noemen we Z.

Stelling 5.13. De verzameling Z die we overhouden na het bovenstaande proces, is deConforme Verzameling Cp.

Bewijs. Uit het proces volgt direct dat Z een conforme verzameling is. Dat het tevensde maximale conforme verzameling Cp is, volgt uit het feit dat we beginnen met allelijnstukken in p × p-rooster, dus Cp ⊆ Z1. Aangezien Cp een conforme verzameling is,zullen lijnstukken uit Cp nooit verwijderd worden gedurende het proces. In het bijzondergeldt er dus dat Cp ⊆ Z. Maar Cp is de maximale conforme verzameling, dus er geldtdat Cp = Z.

Opmerking. Als de verzameling Z leeg is, dan volgt uit Lemma 5.10 dat er geen scherperoostertriangulatie van Ip mogelijk is.

Het aantal punten op het p× p-rooster is gelijk aan (p+ 1)2. De startverzameling Z1

bevat dus(

(p+1)2

2

)lijnstukken. Voor ieder van deze lijnstukken controleren we vervolgens

of ze conform in de verzameling liggen. De complexiteit van deze eerste stap zit dus

in O((

(p+1)2

2

)) = O(p4). We herhalen deze verwijderstap voor de kleinere verzameling

lijnstukken tot we de Conforme Verzameling hebben. De complexiteit van deze algoritmeis dus minimaal O(p4).

52

Page 53: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

5.3.3. De Gezellige Verzameling

We geven nu het verband tussen de Gezellige Verzameling Gp en de Conforme Verzame-ling Cp.

Stelling 5.14. Laat p ∈ N gegeven zijn. Schrijf G voor de verzameling van zijdes uitGp, dus

G = Zijde van 4|4 ∈ Gp.

Er geldt dat deze verzameling gelijk is aan de Conforme Verzameling, dus

G = Cp.

Bewijs. Per constructie heeft elke 4 ∈ Gp scherpe buren die weer in Gp zitten. Hieruitvolgt direct dat de zijdes van 4 conform in G zijn, de verzameling G is dus conform.Aangezien Cp de maximale conforme verzameling is, volgt hieruit G ⊆ Cp.

Stel nu dat er een AB ∈ Cp \ G bestaat. Aangezien AB ∈ Cp kunnen we een scherpedriehoek4ABC vinden, waarvan alle zijdes weer in Cp zitten. Voor de zijdes AC en BCvinden we nu wederom driehoeken met deze eigenschap. Blijf dit proces volhouden enverzamel alle gevonden driehoeken in een verzameling D. We kunnen laten zien dat degevonden verzameling D gezellig1 is. Aangezien Gp de maximale gezellige verzamelingis volgt nu dat D ⊆ Gp. In het bijzonder is AB een zijde van de driehoek 4ABC ∈ D,maar dan geldt dus ook dat 4ABC ∈ Gp en daarmee volgt dat AB ∈ G. Dit is eentegenspraak, dus Cp = G.

De Conforme Verzameling Cp is dus gelijk aan de verzameling zijdes van de GezelligeVerzameling Gp. De volgende stelling vertelt ons nu hoe we driehoeken in Gp kunnenvinden met de verzameling Cp.

Stelling 5.15. Laat 4ABC een p-roosterdriehoek zijn. Er geldt dat 4ABC ∈ Gp als,

• de driehoek 4ABC scherp is en

• de zijdes AB,BC en AC liggen in Cp.

Bewijs. Schrijf weer G voor de verzameling van zijdes uit Gp. Volgens Stelling 5.14 geldter nu dat Cp = G. Uit de aannames volgt nu dat de zijdes van 4ABC in Gp zitten.Aan de andere kant weten we dat een zijde alleen in Gp zit als hij grenst aan scherperoosterdriehoeken. De driehoek 4ABC is scherp per aanname en vanwege de vorigeopmerking wordt hij ook omringd door scherpe roosterdriehoeken. Dat is precies deeigenschap van driehoeken in de gezellige verzameling, dus 4ABC ∈ Gp.

Gewapend met deze stelling zijn we in staat om uit de Conforme Verzameling Cp deGezellige Verzameling Gp te berekenen.

1Alle driehoeken in D hebben scherpe buren die wederom in D zitten.

53

Page 54: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

5.4. De implementatie van het genereren van de ConformeVerzameling

In Sectie 5.3.2 zagen we hoe de Conforme Verzameling Cp middels een iteratief procesgevormd kan worden. In dit proces moeten we bepalen of een gegeven zijde AB conformin Z is.

5.4.1. Bepalen of een lijnstuk een conforme zijde is

Bekijk nogmaals Definitie 5.8 van een conforme zijde. We gaan nu de voorwaarde 5) uitdeze definitie concreter maken, zodat we een algoritme kunnen geven die controleert ofeen gegeven lijnstuk AB conform is. Daartoe zien we het volgende in.

Lemma 5.16. Laat A,B ∈ Z2p twee verschillende punten zijn en schrijf lab ⊆ Ip voor de

lijn door A en B. De lijn lab deelt het vierkant Ip op in verzamelingen I+p en I−p zodat,

I+p ∩ I−p = ∅ en I+

p ∪ I−p ∪ lab = Ip.

De verzamelingen I+p en I−p noemen we halfruimtes.

Bewijs. Merk op dat lab een eendimensionaal affien hypervlak is, we kunnen de verza-meling dus schrijven als,

lab = (x, y) ∈ Ip|αx+ βy = γ voor zekere α, β, γ ∈ R.

De twee halfruimtes worden nu gegeven met,

I+p = (x, y) ∈ Ip|αx+ βy > γI−p = (x, y) ∈ Ip|αx+ βy < γ.

Er kan eenvoudig gecontroleerd worden dat met deze verzamelingen aan de gevraagdecondities is voldaan. Een van de halfruimtes leeg kan zijn, dit gebeurt als het lijnstukAB op de rand van Ip ligt.

Met deze halfruimtes kunnen we expliciet maken wanneer driehoeken 4ABC en4ABD een disjunct inwendige hebben.

Lemma 5.17. Laat p ∈ N gegeven zijn en bekijk de punten A,B,C,D ∈ Z2p . Stel dat er

geldt dat A 6= B en dat het lijnstuk AB niet op de rand van Ip ligt. Bekijk de halfruimtesI+p en I−p uit het vorige lemma. Als twee driehoeken 4ABC en 4ABD een disjunct

inwendige hebben, dan moeten de punten C en D in de twee verschillende halfruimtesliggen.

Bewijs. We geven geen exact bewijs, maar het volgt direct uit Figuur 5.3.

54

Page 55: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

0 1 2 3 4 5 6 7 8 9 100

1

2

3

4

5

6

7

8

9

10

A

B

C

D

lab

I +p

I−p

Figuur 5.3.: Grafische voorstelling van Lemma 5.17.

Om aan voorwaarde 5) uit Definitie 5.8 te voldoen, moeten de punten C en D dusin de twee verschillende halfruimtes zitten. Met dit gegeven zijn we in staat om eenalgoritme te geven die controleert of AB een conforme zijde in Z is.

Data: p ∈ N,Z, AB ∈ Z.Result: Controleert of AB een conforme zijde in Z is.Het lijnstuk AB is niet conform;

if het lijnstuk AB op de rand van Ip ligt thenforeach C ∈ Z2

p do

Als 4ABC scherp is en de zijdes van 4ABC zitten in Z, dan is ABconform;

end

else

Bepaal de halfruimtes I+p en I−p die bij AB horen;

foreach roosterpunt C in I+p do

Bepaal of 4ABC scherp is en of de zijdes van 4ABC in Z zitten;endStop als we geen 4ABC vonden die aan de eisen van de vorige loop voldeed;foreach roosterpunt D in I−p do

Als 4ABD scherp is en de zijdes van 4ABD liggen in Z, dan is ABconform;

end

endAlgoritme 2: Bepalen of een zijde conform is.

55

Page 56: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Voor de implementatie van Algoritme 2 moeten we kunnen controleren of een driehoek4ABC scherp is en we moeten de halfruimtes I+

p en I−p voor een lijnstuk AB bepalen.

Lemma 5.18. Zij 4 een driehoek waarvan de zijden lengte a, b en c hebben met a ≤b ≤ c. Als c2 − b2 − a2 < 0, dan is 4 scherp.

Bewijs. Dit volgt direct uit de cosinusregel, zie ook [13, Stelling 1.13].

5.4.2. Het bepalen van de halfruimtes

Laat AB een lijnstuk op het p × p-rooster zijn. We bekijken nu hoe we de halfruimtesdie bij AB horen kunnen bepalen. De lijn lab wordt gegeven door,

αx+ βy = γ voor zekere α, β, γ ∈ R,

of in matrixnotatie,

n · p =

[αβ

]·[xy

]= γ.

De vector n is een normaalvector van de lijn lab en moet dus loodrecht op de vector(B − A) staan. Het is gemakkelijk na te gaan dat een vector n die hier aan voldoetwordt gegeven door,

n =

[−(B −A)y(B −A)x

].

De waarde van γ vinden we door een punt uit lab in te vullen, bijvoorbeeld γ = n ·A.

Lemma 5.19. Laat A,B ∈ Z2p twee verschillende roosterpunten zijn. Bepaal op boven-

staande wijze de vector n en constante γ voor de vergelijking van de lijn lab. Zij C ∈ Z2p ,

er geldt nu dat als,

i) n · C < γ, dan is C ∈ I+p ,

ii) n · C > γ, dan is C ∈ I−p ,

iii) n · C = γ, dan is C ∈ lab.

Bewijs. Dit volgt direct uit de definitie van de halfruimtes in Lemma 5.16.

We zijn nu bijna in staat een implementatie van Algoritme 2 te geven.

5.4.3. De Conforme Verzameling genereren

Voor de implementatie van Algoritme 2 moeten we een verzameling lijnstukken uit hetp× p-rooster kunnen opslaan. Hiertoe geven we eerst een methode die een lijnstuk ABmet A,B ∈ Z2

p (uniek) representeert.

56

Page 57: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Lemma 5.20. Schrijf Np := 0, 1, . . . , |Z2p| − 1. Definieer de functie f door

f : Z2p → Np : (x, y) 7→ f(x, y) = x(p+ 1) + y.

De functie f definieert een bijectie tussen Z2p en Np.

Bewijs. Bekijk de ‘floor’ functie b·c. De inverse van f wordt gegeven door

f−1 : Np → Z2p : n 7→ f−1(n) =

(⌊n

p+ 1

⌋, n mod p+ 1

).

De lezer kan zelf nagaan dat de functies f en f−1 goed gedefinieerd zijn en een bijectievormen.

Een lijnstuk AB op het p × p-rooster ligt vast door de punten A en B. Met dezeopmerking kunnen we nu een unieke representatie voor het lijnstuk AB geven.

Lemma 5.21. Zij AB een lijnstuk tussen twee punten A,B ∈ Z2p. Bekijk de f uit het

vorige lemma. Een representatie van AB wordt nu gegeven door,

(f(A), f(B)) ∈ Np ×Np.

Hernoemen we A en B zodat f(A) ≤ f(B), dan is deze representatie tevens uniek.

Bewijs. Het lijnstuk AB ligt vast door zijn hoekpunten A en B. Uit het vorige lemmableek dat deze hoekpunten uniek konden worden gegeven door een getal uit Np. Hieruitvolgt dat zowel (f(A), f(B)) als (f(B), f(A)) een representatie zijn van het lijnstuk AB.

Als we nu eisen dat f(A) ≤ f(B), dan volgt direct dat de representatie uniek is.

Met dit lemma kunnen we ieder lijnstuk op het p × p-rooster representeren als eenelement uit Np × Np. We kunnen nu een verzameling lijnstukken uit het p × p-roosterweergeven met een index matrix, merk hiervoor op dat |Np| = (p+ 1)2.

Definitie 5.22. Laat Z een verzameling lijnstukken met hoekpunten op het p×p-roosterzijn. Bekijk nu de (p+ 1)2 × (p+ 1)2-matrix M . We noemen M de index matrix van Zals er geldt dat,

Mi,j =

1 i ≤ j en f−1(i)f−1(j) ∈ Z0 anders.

Een zijde AB zit in de verzameling Z dan en slechts dan als het bijbehorende elementuit de index matrix waarde 1 heeft. Met de index matrix kunnen we dus verzamelingenlijnstukken weergeven. We zijn nu in staat Algoritme 2 te implementeren. Onderstaandealgoritme om de Conforme Verzameling te construeren volgt direct uit Sectie 5.3.2.

57

Page 58: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Data: p ∈ N.Result: De Conforme Verzameling Cp.Initialiseer de index matrix M ;

foreach lijnstuk AB op het p× p-rooster doZorg dat f(A) ≤ f(B);Mf(A),f(B) = 1;

endrepeat

for i← 0 to (p+ 1)2 − 1 dofor j ← i+ 1 to (p+ 1)2 − 1 do

if Mij = 1 then(A,B) = (f−1(i), f−1(j));

Als de zijde AB niet meer conform is, zet dan Mij = 0;

end

end

end

until geen zijdes meer verwijderd ;Algoritme 3: Bepalen Conforme Verzameling

In Appendix B.1 is een programma in Python gegeven dat de Conforme Verzamelingkan construeren. Algoritme 3 is geımplementeerd door de methode Conforme_verz. Inde implementatie zijn een aantal optimalisaties toegepast die we in Sectie 5.5 zullenbeschrijven.

5.4.4. De Gezellige Verzameling genereren

Uit Stelling 5.15 volgt hoe we de Gezellige Verzameling kunnen bepalen met de ConformeVerzameling. De methode Gez_verz uit Appendix B.1 geeft hiervoor een implementatiein Python. De resultaten die we met het programma tot nu toe vinden zijn gegeven inTabel 5.1. Merk op dat de waarden voor |Gp| overeenkomen met de getallen die gevondenwerden in [13, Tabel 3.1].

58

Page 59: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p |Cp| |Gp| Tijdsduur genereren Cp

1 0 0 0s...

......

...

7 72 48 4,4 s

8 240 220 9,5 s

9 462 560 21 s

10 1058 1992 39 s

11 2028 6032 66 s

12 3450 14348 111 s

13 5174 27116 190 s

14 7578 49968 296 s

Tabel 5.1.: Resultaten Conforme en Gezellige Verzamelingen

5.5. Optimalisatie van de algoritme

De algoritme die de Conforme Verzameling genereert kunnen we verder optimaliseren.

5.5.1. Het controleren op conformiteit

Neem A,B ∈ Z2p verschillend en bekijk de methode die gebruikt werd om te controleren

of AB conform is in een verzameling Z (Algoritme 2). In deze methode controleren wevoor verschillende C ∈ Z2

p of de driehoek 4ABC scherp is.

Opmerking. Als de driehoek 4ABC scherp is, dan geldt per definitie dat ∠ABC < 90

en ∠CAB < 90.

Bekijk nu de lijnen lA en lB die door de punten A respectievelijk B gaan en die eenhoek van 90 graden maken met het lijnstuk AB.

Lemma 5.23. Laat A,B ∈ Z2p verschillend gegeven zijn en bekijk de lijnen lA, lB zoals

hierboven beschreven. Voor C ∈ Z2p geldt nu dat

4ABC scherp =⇒ C ligt tussen de lijnen lA en lB.

Bewijs. Merk op dat de lijnen lA en lB evenwijdig zijn, dus we kunnen spreken over‘tussen’. Het bewijs volgt verder direct uit de bovenstaande opmerking. Figuur 5.4illustreert de stelling.

Met bovenstaand lemma kunnen we Algoritme 2 optimaliseren. We hoeven namelijkalleen voor de punten C tussen de lijnen lA en lB te controleren of de driehoek 4ABCscherp is. De tijdswinst van deze optimalisatie zien we in Sectie 5.5.5.

59

Page 60: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

0 1 2 3 4 5 6 7 8 9 100

1

2

3

4

5

6

7

8

9

10

A

B

C

D

AB

lAlB

Figuur 5.4.: Driehoek4ABC is scherp, dus C ligt binnen de lijnen lA en lB. De driehoek4ABD is niet scherp, omdat het punt D niet tussen lA en lB ligt. Er geldtdat ∠DAB > 90.

5.5.2. Symmetrieen van het vierkant

Een andere optimalisatie die we kunnen doorvoeren komt voort uit symmetrieen van hetvierkant Ip. Het idee hierachter is als volgt. We zoeken een bijectieve functie f die Ip opzichzelf afbeeldt en de eigenschap heeft dat een driehoek 4 scherp is dan en slechts danals f(4) een scherpe driehoek is. Deze laatste eigenschap van zo een functie f kunnenwe namelijk op een handige manier gebruiken. De verzameling symmetrien van Ip heeftdeze eigenschappen.

Definitie 5.24. Een bijectieve functie Φ : Ip → Ip heet een symmetrie van Ip als hetook een isometrie is, dus als het de euclidische afstand bewaart,

d(Φ(v),Φ(w)) = d(v, w) voor alle v, w ∈ Ip.

Definitie 5.25. De verzameling symmetrien van Ip noteren we met Sym(Ip).

De lezer kan zelf nagaan dat de verzameling Sym(Ip) een groep vormt onder functie-compositie . Deze symmetriegroepen zijn uitgebreid bestudeerd in de literatuur. Wegebruiken de volgende (standaard) resultaten, zie bijvoorbeeld [22].

Lemma 5.26. Een symmetrie Φ bewaart hoeken. Dat wil zeggen de hoek tussen tweevectoren u, v is hetzelfde als de hoek tussen de vectoren Φ(u) en Φ(v).

Lemma 5.27. Een symmetrie Φ voert lijnstukken over in lijnstukken en driehoeken overin (congruente) driehoeken.

60

Page 61: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

We vinden nu het volgende verband tussen symmetrien en de Conforme Verzameling.

Stelling 5.28. Zij Φ ∈ Sym(Ip) en laat Z een conforme verzameling zijn, dan is deverzameling Φ(Z) ook een conforme verzameling.

Bewijs. Dit volgt direct uit Lemma 5.27.

Herinner uit Definitie 5.12 dat de Conforme Verzameling Cp de vereniging was overalle conforme verzamelingen van het p× p-rooster. Gecombineerd met de bovenstaandestelling krijgen we nu direct het volgende resultaat.

Stelling 5.29. Laat een lijnstuk AB op het p × p-rooster gegeven zijn. Voor elke Φ ∈Sym(Ip) geldt,

AB ∈ Cp ⇐⇒ Φ(A)Φ(B) ∈ Cp.

5.5.3. Het fundamenteel domein

Bovenstaand resultaat kunnen we gebruiken om de verzameling Cp sneller te construeren.Om dit precies te maken bekijken we expliciet de verzameling symmetrien van Ip.

Lemma 5.30. Schrijf m voor het midden van het vierkant Ip. De symmetrien van hetvierkant Ip worden gegeven door de volgende 8 functies:

i) de identiteit op Ip

ii) een rotatie van 90 om het punt m

iii) een rotatie van 180 om het punt m

iv) een rotatie van 270 om het punt m

v) een spiegeling in de lijn y = x

vi) een spiegeling in de lijn y = p− x

vii) een spiegeling in de lijn y = 12p

viii) een spiegeling in de lijn x = 12p

Bewijs. Dit volgt direct uit de theorie over symmetrien, zie bijvoorbeeld [22, Example7.].

Met deze symmetrien kunnen we ons beperken tot een deelverzameling p-roosterdrie-hoeken bij het genereren van de Conforme Verzameling. Om dit in te zien definieren wehet begrip fundamenteel domein.

Definitie 5.31. Zij x ∈ Ip en bekijk de baan die bij x hoort,

Baan(x) := Φ(x) : Φ ∈ Sym(Ip).

Een deelverzameling F ⊆ Ip, die uit iedere baan een punt bevat, noemen we een funda-menteel domein.

61

Page 62: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Lemma 5.32. Een fundamenteel domein F voor het vierkant Ip wordt gegeven door dedriehoek 4ABC, met

A = (0, 0), B =

(1

2p, 0

)en C =

(1

2p,

1

2p

).

Bewijs. Dit kunnen we inzien met Figuur 5.5. Als we alle symmetrien uit Sym(Ip)toepassen op 4ABC dan bereiken we elk punt uit het vierkant, oftewel

Ip =⋃

Φ∈Sym(Ip)

Φ(4ABC).

Daarmee voldoet 4ABC aan de eisen om een fundamenteel domein te zijn.

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

A B

C

Figuur 5.5.: Vierkant I7 met spiegellijnen getekend. De blauwe driehoeken zijn rotatiesvan 4ABC. Als we de blauwe driehoeken spiegelen in de spiegellijnen, danvinden we alle witte driehoeken.

Het fundamenteel domein 4ABC van het vierkant Ip uit bovenstaand lemma noterenwe met F . Verder schrijven we Fp := F ∩ Z2

p voor het fundamenteel domein beperkttot de roosterpunten. Merk op dat dit daadwerkelijk een fundamenteel domein voor deroosterpunten is:

Z2p =

⋃Φ∈Sym(Ip)

Φ(Fp).

Met Fp vinden we nu het volgende resultaat over de Conforme Verzameling.

Stelling 5.33. Laat een lijnstuk AB op het p × p-rooster gegeven zijn. Er is een sym-metrie Φ zodat Φ(A) ∈ Fp en

AB ∈ Cp ⇐⇒ Φ(A)Φ(B) ∈ Cp

62

Page 63: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bewijs. Het bestaan van de symmetrie Φ volgt uit het feit dat Fp een fundamenteeldomein is. De tweede eigenschap is een herhaling van Stelling 5.29.

Voor het bepalen van de Conforme Verzameling is het dus voldoende om te kijkennaar alle zijdes met minimaal een hoekpunt in het fundamenteel domein Fp.

5.5.4. Implementatie van de symmetrieen

In de vorige secties zagen we dat de Conforme Verzameling symmetrische eigenschappenheeft. Om deze eigenschap te gebruiken in onze algoritme bekijken we nogmaals hoe wede Conforme Verzameling construeren. In Sectie 5.3.2 zagen we dat dit proces iteratiefwas en dat de iteratiestap werd gegeven door,

Zn+1 := AB ∈ Zn |AB is conform in Zn.

We gaan nu een soortgelijk proces afleiden. Daartoe beginnen we weer met de verza-meling van alle lijnstukken in het p× p-rooster,

Z ′1 := AB |A,B ∈ Z2p en A 6= B.

In het nieuwe proces verwijderen we eerst de zijdes uit het fundamentele domein die nietmeer conform zijn,

Z ′n+1 := AB ∈ Z ′n |A ∈ Fp en AB conform in Z ′n.

Vervolgens passen we alle symmetrien toe op deze verzameling,

Z ′n+1 :=⋃

Φ∈Sym(Ip)

Φ(Z ′n+1).

Blijf itereren tot Z ′n+1 = Z ′n. Merk op dat we in dit proces enkel driehoeken kunnenverwijderen, het proces is dus eindig. De verzameling die we overhouden noemen we Z ′.

Stelling 5.34. De verzameling Z ′ die we overhouden na bovengenoemd proces, is deConforme Verzameling Cp.

Bewijs. Dit bewijs gaat analoog aan het bewijs van het vorige proces in Stelling 5.13.Uit de Stelling 5.33 volgt dat de verzameling Z ′ een conforme verzameling is. Verderverwijderen we geen conforme zijden in het proces, dus vinden we Z ′ ⊆ Cp. AangezienCp de maximale conforme verzameling is, geldt er dat Cp = Z ′.

De functie Conforme_verz_symmetrie uit Appendix B.1 geeft een implementatie vandit nieuwe proces in Python.

5.5.5. Resultaat na de optimalisaties

In de afgelopen secties hebben we twee optimalisaties gezien voor de algoritme die deConforme Verzameling construeert. In Tabel 5.2 zien we een overzicht van de verschil-lende executietijd voor het genereren van Cp. Er is duidelijk zichtbaar dat Cp snellergeconstrueerd wordt met behulp van de gepresenteerde optimalisaties.

63

Page 64: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p |Cp|Origineletijdsduurgeneren

Optimalisatieconforme zijde

Gebruiksymmetrie

1 0 0 s 0 s 0 s...

... ......

...

7 72 4,4 s 3,4 s 0,6 s

8 240 9,5 s 6,8 s 1,4 s

9 462 21 s 14 s 2,2 s

10 1058 39 s 26 s 4,5 s

11 2028 66 s 42 s 6,7 s

12 3450 111 s 67 s 12 s

13 5174 190 s 112 s 17 s

14 7578 296 s 175 s 32 s

Tabel 5.2.: Tijdsduur genereren Conforme Verzameling

5.6. Scherpe roostertriangulaties vinden

We kunnen uit de Conforme Verzameling Cp de Gezellige VerzamelingGp generen. In [13]wordt vervolgens een methode gegeven om uit Gp alle scherpe roostertriangulaties vanIp te vinden. Deze methode berust op het oplossen van een NP-volledig probleem enschaalt niet goed als |Gp| groot wordt. In deze sectie geven we een manier om, metbehulp van de Conforme Verzameling Cp, scherpe roostertriangulaties van Ip te vinden.We gaan dit doen middels een ‘semi-willekeurige’ algoritme.

Deze algoritme gaat iteratief een triangulatie van Ip proberen op te bouwen. Ditdoen we door aan de rand van de opgebouwde triangulatie een scherpe driehoek teplaatsen, met zijdes die uit een conforme verzameling komen. Verder dient deze nieuwedriehoek disjunct te zijn van de reeds geplaatste driehoeken in de triangulatie. Vervolgensverwijderen we alle zijdes uit de conforme verzameling die niet disjunct zijn met het netgeplaatste driehoek. Dit herhalen we tot we geen nieuwe driehoek meer kunnen plaatsen.

5.6.1. Preciezere beschrijving

We zullen de vorige beschrijving formaliseren. Zij Cp de Conforme Verzameling voor hetvierkant Ip. Voor onze algoritme definieren we de volgende verzamelingen:

Zn: een (conforme) verzameling met overgebleven zijdes na n-stappen.

Tn: dit is de opgebouwde triangulatie na n-stappen.

Bn: dit is de verzameling zijdes die op de rand van Tn, maar niet op de rand van Ip,liggen.

De n-de stap van het proces werkt als volgt. Pak een willekeurige zijde uit Bn en zoekeen C ∈ Z2

p zodat,

64

Page 65: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

1. de driehoek 4ABC scherp is en

2. de zijdes van 4ABC in de verzameling Zn zitten en

3. het inwendige van alle driehoeken uit Tn disjunct is met het inwendige van dedriehoek 4ABC.

Als we niet zo een C kunnen vinden, dan kunnen we Tn niet uitbreiden naar een roos-tertriangulatie van Ip.

Kunnen we wel zo een driehoek 4ABC vinden die aan de bovenstaande eisen voldoet,dan voeren we de volgende stappen uit:

• Tn+1 := Tn ∪4ABC.

• Laat Bn+1 de verzameling zijdes zijn die op de rand van Tn+1, maar niet op derand van Ip, liggen.

• Verwijder alle zijdes uit Zn die niet disjunct zijn met het inwendige van 4ABCen noteer deze nieuwe verzameling met Z ′n+1. Zorg vervolgens dat Z ′n+1 weer eenconforme verzameling wordt. Dit doen we op eenzelfde wijze als bij het construerenvan Cp. We verwijderen stap voor stap de zijdes uit Z ′n+1 die niet meer conformin de verzameling liggen. De overgebleven conforme verzameling zijdes noemen weZn+1.

Merk op dat een lege verzameling Bn+1 impliceert dat de triangulatie Tn+1 geen randenheeft, oftewel dat Tn+1 een scherpe roostertriangulatie van het vierkant Ip is.

Voor de initiele verzamelingen nemen we T1 := ∅ en Z1 := Cp. Aangezien T1 leegis hebben we geen natuurlijke rand van onze triangulatie. We kiezen B1 daarom gelijkaan een willekeurige zijde uit Cp. Het opbouwen van de triangulatie begint dan bij hetneerleggen van een scherpe driehoek aan deze zijde.

Om in te zien dat deze algoritme ‘werkt’ kijken we nogmaals naar Lemma 5.10. Steldat Tn uit te breiden is naar een scherpe roostertriangulatie T , dan volgt uit dit lemmadat de zijdes van Tn in een conforme verzameling liggen. Deze eigenschap gebruiken wein de bovenstaande algoritme door de conforme verzameling zijdes telkens zover mogelijkuit te dunnen, terwijl we er wel voor zorgen dat de zijdes van Tn erin blijven. Een preciezeanalyse van de algoritme laten we achterwege.

5.6.2. Implementatie en resultaat van de algoritme

De functie Triangulatie_willekeurig uit Appendix B.1 implementeert het boven-staande proces. In de implementatie komen twee disjunctie tests voor. We moetenimmers kunnen bepalen of een lijnstuk en een driehoek disjunct zijn en of twee drie-hoeken disjunct zijn. Voor de theorie achter deze disjunctie tests verwijzen we naar deliteratuur, bijvoorbeeld [13, Stelling 3.3]. Merk verder op dat de algoritme, met een be-paalde kans, vast kan lopen als we geen scherpe driehoek aan de rand van de triangulatieTn kunnen vinden. In dit geval kiezen we ervoor de algoritme te herstarten.

65

Page 66: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Met de implementatie van deze algoritme zijn we in staat om triangulaties voor Ip tevinden. We vinden zo scherpe roostertriangulaties voor hogere waarde van p dan in [13]gevonden werden. Dit komt doordat we een scherpe roostertriangulatie vinden voor Ip,terwijl in [13] alle scherpe roostertriangulaties werden gezocht die bij deze p horen.

p |Cp| Tijdsduur genereren Cp Tijdsduur triangulatie

15a 10700 39 s 80 s

15b 10700 39 s 53 s

20c 43544 347 s s 6741 s

Tabel 5.3.: Tijdsduur genereren triangulaties

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 150

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

(a) p = 15

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 150

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

(b) p = 15

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2001234567891011121314151617181920

(c) p = 20

Figuur 5.6.: Scherpe roostertriangulaties voor verschillende p.

66

Page 67: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

6. Scherpe roostertriangulatie van dekubus

Uit het vorige hoofdstuk bleek dat het mogelijk was scherpe roostertriangulaties vanhet vierkant te vinden. In dit hoofdstuk zullen we bestuderen of we ook zulke roos-teropdelingen van de kubus kunnen vinden. Hiertoe schrijven we Kp := [0, p]3 voor dekubus, met p ∈ N. We zoeken naar een triangulatie van de kubus in scherpe 3−simplices(tetraeders) met gehele hoekpunten in Kp.

In artikel [1] is aangetoond dat er een scherpe triangulatie van de kubus bestaat. Netals bij het vierkant blijft deze triangulatie scherp onder kleine verschuivingen van devertices. Dit garandeert dus dat er een scherpe roostertriangulatie van Kp bestaat voorp groot genoeg.

Het is logisch om te bekijken of we de methodes uit het vorige Hoofdstuk kunnenveralgemeniseren naar het driedimensionale geval. Met de Conforme Verzameling kondenwe immers scherpe roostertriangulaties vinden voor het vierkant.

6.1. Scherpe roostertetraeders

De triangulatie die we zoeken bestaat uit scherpe tetraeders waarvan de hoekpuntengehele coordinaten hebben in Kp. We zullen eerst voor een aantal waarden van p onder-zoeken hoeveel van zulke tetraeders er zijn.

6.1.1. Definities

Om de zoektocht precies te maken geven we een aantal basisresultaten en definities,analoog aan het vierkant.

Definitie 6.1. Voor p ∈ N definieren we het p3-rooster als de verzameling punten,

Z3p := (x, y, z) ∈ Kp |x, y, z ∈ Z.

Definitie 6.2. Een tetraeder T noemen we een roostertetraeder als de hoekpunten vanT in een p3-rooster zitten, voor zekere p ∈ N. We noemen T een p-roostertetraeder alsde hoekpunten van T in het p3-rooster zitten.

Definitie 6.3. Zij T een triangulatie van Kp. Als elke tetraeder in T een p-rooster-tetraeder is, dan noemen we T een roostertriangulatie.

67

Page 68: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Een tetraeder T heeft vier zijvlakken, ofwel facetten. De facetten van de tetraederworden gegeven door het convexe omhulsel van drie punten. De facetten zijn dus drie-hoeken die in een (tweedimensionaal) vlak liggen. De dihedrale hoek tussen twee facettenFi en Fj definieerde we met,

αij := π − γij ,

waarbij γij ∈ [0, π] de hoek is tussen de naar buiten gerichte normaalvectoren qi en qjvan Fi respectievelijke Fj . De tetraeder noemen we scherp als al zijn dihedrale hoekenscherp zijn. Verder kunnen we ook iets zeggen over de hoeken in de facetten van eentetraeder.

Opmerking. Zij A,B,C ∈ R3 en bekijk de driehoek 4ABC. De hoeken van 4ABCworden gegeven door het inwendig product, bijvoorbeeld

cos∠ABC =(A−B) · (C −B)

‖A−B‖‖C −B‖.

Lemma 6.4. Als T een scherpe tetraeder is, dan zijn alle vier zijn facetten scherpedriehoeken.

Bewijs. Voor het bewijs verwijzen we naar de literatuur, zie bijvoorbeeld [16, Lemma2].

Gevolg 6.5. Voor p < 7 bestaat er geen scherpe roostertriangulatie van Kp.

Bewijs. Als T een scherpe roostertriangulatie van Kp is, dan volgt uit bovenstaandlemma dat T op de zijvlakken van de kubus scherpe roostertriangulaties van Ip vormt.Uit het vorige hoofdstuk bleek dat p = 7 de kleinste waarde is waarvoor er een scherperoostertriangulatie van Ip bestaat.

Een tetraeder wordt gegeven door vier affien onafhankelijke punten. De hoekpuntenmogen dus niet in een vlak liggen.

Definitie 6.6. Zij A,B,C,D ∈ R3 vier punten die niet in een vlak liggen, dan schrijvenwe schrijven we ABCD voor de tetraeder met hoekpunten A,B,C en D. De facettenworden gegeven door de vier driehoeken,

Fa = 4BCD, Fb = 4ACD, Fc = 4ABD en Fd = 4ABC.

Definitie 6.7. Zij A,B,C,D ∈ R3 vier punten die in een vlak liggen. Dan noemen weABCD een gedegenereerde tetraeder.

6.1.2. Orientatie van de normaalvectoren

Zoals eerder gezegd zijn we benieuwd hoeveel scherpe p-roostertetraeders er zijn voorverschillende waarden van p. Een manier om hier achter te komen is door alle p-rooster-tetraeders te testen op scherpheid. Om te bepalen of een tetraeder T scherp is moeten

68

Page 69: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

we, per definitie van de dihedrale hoeken, naar buiten gerichte normaalvectoren hebbenop de vier facetten van T .

We maken nu precies wat er met ‘naar buiten gericht’ bedoeld wordt. Hiervoor be-kijken we een tetraeder ABCD en een facet Fa = 4BCD met normaalvector na ∈ R3.Per definitie staat na loodrecht op het tweedimensionale vlak V waar Fa in ligt, dat wilzeggen

na · (p2 − p1) = 0, voor alle p1, p2 ∈ V ⊃ Fa. (6.1)

Het vlak V wordt nu gegeven door de verzameling punten p waarvoor geldt dat,

na · p = c, met een constante c ∈ R.

We vinden de waarde van c door een punt p1 uit V in te vullen, c = na ·p1. Analoog aanhet vierkant vinden we dat het vlak V de ruimte R3 in drie delen opdeelt:

• na · p < c, het punt p ligt in de negatieve halfruimte.

• na · p = c, het punt p ligt in het vlak V .

• na · p > c, het punt p ligt in de positieve halfruimte.

Om de orientatie van na te bepalen bekijken we het hoekpunt A van de tetraeder datniet in het vlak V ligt. Als A in de positieve halfruimte ligt, dan noemen we na naarbinnen gericht. Ligt A in de negatieve halfruimte, dan is na naar buiten gericht.

Gevolg 6.8. Zij na een normaalvector op Fa. Voor elk punt p0 ∈ Fa geldt er c = na · p0

en vinden we dus:

• Als na · (A− p0) < 0, dan is na naar buiten gericht.

• Als na · (A− p0) = 0, dan is de tetraeder ABCD gedegenereerd.

• Als na · (A− p0) > 0, dan is na naar binnen gericht.

Het bovenstaande gevolg kunnen we afleiden voor normaalvectoren op alle vier defacetten.

6.1.3. Normaalvectoren op de facetten bepalen

We zijn nu in staat normaalvectoren op de facetten te geven met een geschikte orientatie.Om deze normaalvectoren te bepalen gebruiken we het kruisproduct1 in R3. Gegeventwee vectoren A,B ∈ R3, dan vinden we dat het kruisproduct A×B loodrecht op A enB staat.

1Zie een dictaat over vectorcalculus.

69

Page 70: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Stelling 6.9. Laat ABCD een niet-gedegenereerde tetraeder zijn met de vier hoekpuntengegeven door A,B,C,D ∈ R3. Bekijk nu de volgende vier vectoren,

qa = (D −B)× (C −B),

qb = (C −A)× (D −A),

qc = (D −A)× (B −A),

qd = (B −A)× (C −A).

Voor i ∈ a, b, c, d geldt er dat qi een normaalvector op het facet Fi is. Verder zijn dezenormaalvectoren qi allemaal naar buiten gericht, of allemaal naar binnen gericht.

Bewijs. Dat de vectoren qi normaalvectoren zijn volgt direct uit de loodrecht eigenschapvan het kruisproduct.

Voor de orientatie van de normaalvectoren beginnen we met qa. Neem p0 = C ∈ Fa,dan vinden we met Gevolg 6.8 dat het teken van qa · (A − C) de orientatie van qa vastlegt. We laten nu zien dat deze orientatie gelijk is aan de orientatie van qb. Hiervoorgebruiken we een aantal eigenschappen van het kruisproduct, zie bijvoorbeeld [23].

qa · (A− C) = ((D −B)× (C −B)) · (A− C)

= (((C −B) + (D − C))× (C −B)) · (A− C)

= ((C −B)× (C −B) + (D − C)× (C −B)) · (A− C)

= ((D − C)× (C −B)) · (A− C)

(dit drievoudig product is invariant onder circulaire verschuiving)

= ((A− C)× (D − C) · (C −B)

= ((A− C)× ((A− C) + (D −A)) · (C −B)

= ((A− C)× (D −A)) · (C −B)

= −((C −A)× (D −A)) · (C −B)

= ((C −A)× (D −A)) · (B − C)

= qb · (B − C).

We vinden dus dat qa · (A − C) = qb · (B − C). Aangezien C ∈ Fb, concluderen we numet Gevolg 6.8 dat qa en qb dezelfde orientatie hebben.

Bekijk nu qb · (B − A), dit heeft hetzelfde teken als qb · (B − C) en legt daarmee dusook de orientatie van qa vast. Anderzijds vinden we,

qb · (B −A) = ((C −A)× (D −A)) · (B −A)

= ((D −A)× (B −A))︸ ︷︷ ︸qc

·(C −A)

= ((B −A)× (C −A))︸ ︷︷ ︸qd

·(D −A).

Daarmee heeft qb dus dezelfde orientatie als qc en qd. We concluderen dat de normaal-vectoren qi of allemaal naar buiten gericht zijn of allemaal naar binnen gericht zijn.

70

Page 71: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

6.1.4. Scherpe roostertetraeders genereren

Met de bovenstaande stelling vinden we normaalvectoren op de facetten van een tetraedermet dezelfde orientatie. We zijn nu in staat een concreet criterium te maken voor eenscherpe tetraeder.

Stelling 6.10. Laat A,B,C,D ∈ R3 gegeven zijn en bekijk de vier normaalvectorenqa, qb, qc, qd uit Stelling 6.9. De tetraeder ABCD is scherp dan en slechts dan als qi ·qj <0 voor i, j ∈ a, b, c, d en i 6= j.

Voor de tweede conditie mogen A,B,C,D best in een vlak liggen, een gedegenereerdetetraeder voldoet namelijk niet aan deze eis.

Bewijs. De hoek tussen twee normaalvectoren qi en qj vinden we als,

cos γij =qi · qj‖qi‖‖qj‖

=(−qi) · (−qj)‖ − qi‖‖ − qj‖

.

Deze is dus hetzelfde als de hoek tussen −qi en −qj , de normaalvectoren met tegen-overgestelde orientatie. Voor het bepalen van de dihedrale hoeken is het dus alleen vanbelang dat alle normaalvectoren dezelfde kant op gericht zijn, maar dat volgt uit Stel-ling 6.9. Voor het berekenen van de dihedrale hoeken kunnen we dus de normaalvectorenqi gebruiken.

We laten zien dat qi · qj < 0 voor i, j ∈ a, b, c, d impliceert dat ABCD niet ge-degenereerd is. Om dit in te zien stellen we eerst dat ABCD wel gedegenereerd is,dus dat A,B,C en D in hetzelfde vlak liggen. Per constructie zijn de vectoren qi allennormaalvectoren op dit vlak, dus volgt dat

qb = β1qa, qc = β2qa, qd = β3qa voor zekere β1, β2, β3 ∈ R.

Per aanname vinden we nu,

qa · β1qa < 0 =⇒ β1 < 0 en net zo dat β2 < 0.

Anderzijds geldt per aanname ook dat qb · qc < 0, dus

β1qa · β2qa < 0 =⇒ β1β2 < 0.

Maar dit kan niet, dus we hebben een tegenspraak, dus de tetraeder ABCD is nietgedegenereerd. We kunnen dus over een tetraeder ABCD praten.

De tetraeder ABCD is scherp dan en slechts dan als zijn dihedrale hoeken αij = π−γijscherp zijn. De dihedrale hoeken zijn scherp dan en slechts dan als γij stomp zijn, oftewelcos γij < 0. Er geldt dat cos γij < 0 dan en slechts dan als qi · qj < 0. Daarmee is destelling bewezen.

Met behulp van de bovenstaande stelling zijn we in staat een programma te schrijvendat voor alle p-roostertetraeders in Kp controleert of ze scherp zijn. Een implementatiein Python is gegeven in Appendix B.2. De resultaten zijn gegeven in Tabel 6.1.

71

Page 72: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p Scherpe p-roostertetraeders Tijdsduur tellen

0 0 0 s

1 2 0 s

2 308 1,9 s

3 12330 66 s

4 207576 1022 s

5 1980104 12926 s

Tabel 6.1.: Resultaten tellen scherpe p-roostertetraeders in Python.

6.1.5. Noodzaak andere algoritme

Uit Tabel 6.1 komen twee dingen duidelijk naar voren. Allereerst is ons programma inPython erg traag. Met oog op de snelheid is het dus waarschijnlijk handig voor een an-dere programmeertaal te kiezen. We zullen in de rest van dit hoofdstuk daarom gebruikmaken van de programmeertaal C, daar we hier veel meer invloed op de uitvoersnelheidhebben. De resultaten die bij een implementatie in C horen zijn gegeven in Tabel 6.2.Merk op dat het tellen inderdaad aanzienlijk sneller gaat met dit programma in C.

pScherpe p-

roostertetraedersTijdsduur

tellenPercentage scherp

1 2 0 s 2,9%

2 308 0 s 1,8%

3 12330 0 s 1,9%

4 207576 1,1 s 2,1%

5 1980104 5,0 s 2,2%

6 13153902 34 s 2,3%

7 66974054 169 s 2,4%

8 279944838 704 s 2,4%

Tabel 6.2.: Resultaten tellen scherpe p-roostertetraeders in C. De laatste kolom geeft hetpercentage scherpe p-roostertetraeders uit alle mogelijke p-roostertetraeders,afgerond op 1 decimaal.

Een tweede opmerking die we met deze tabellen kunnen maken is dat het aantalscherpe p-roostertetraeders sterk groeit bij het vergroten van p. Als we aannemen dathet percentage scherpe roostertetraeders ongeveer 2, 4% blijft, dan schatten we het aantalscherpe p-roostertetraeders voor p = 15 op,(

(15 + 1)3

4

)2, 4

100≈ 2, 8× 1011.

Dergelijke hoeveelheden roostertetraeders leveren duidelijk problemen op. Ter vergelij-king, stel dat elke scherpe tetraeder 1 bit in opslagruimte inneemt, dan hebben we metdeze schatting voor p = 15 ongeveer 35 GB aan geheugen nodig.

72

Page 73: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bekijk nogmaals Sectie 5.2 over de methode die in artikel [13] werd voorgesteld omroostertriangulaties voor het vierkant te vinden. Hier werden eerst alle scherpe roos-terdriehoeken gegenereerd voor het vierkant Ip. Een analoge methode voor de kubus isvanwege bovenstaande opmerkingen niet erg werkbaar. Het zou daarom wenselijk zijnom net als voor de vierkant, ‘iets’ met de facetten te doen. Het totaal aantal mogelijke

facetten op het p3 rooster is namelijk ‘slechts’(|Z3

p|3

)in vergelijkingen met het totaal

aantal p-roostertetraeders(|Z3

p|4

).

6.2. De Conforme Verzameling

Uit de vorige paragraaf volgt dat het handig is om ‘iets’ met de facetten te doen. Hetis dus logisch om te kijken of we de Conforme Verzameling uit Hoofdstuk 5 kunnenveralgemeniseren voor de kubus Kp.

6.2.1. Een Conform facet

Voordat we over de Conforme Verzameling kunnen praten dienen we eerst het begripconforme zijde te veralgemeniseren. Hiertoe definieren we een conform facet. Herinnerdat de facetten van een roostertetraeder gegeven worden door een roosterdriehoek.

Definitie 6.11 (Conform facet). Laat p ∈ N gegeven zijn en zij F een verzameling vanp-roosterdriehoeken. Een driehoek 4ABC ∈ F noemen we een conform facet in F alseen van de twee volgende eisen geldt:

• De driehoek 4ABC ligt op de rand van Kp en er is een D ∈ Z3p zodat,

1. de tetraeder ABCD is scherp en

2. de facetten van ABCD liggen in F .

• De driehoek 4ABC ligt niet op de rand van Kp en er bestaan D,E ∈ Z3p zodat,

3. de tetraeders ABCD en ABCE scherp zijn en

4. de facetten van zowel ABCD als ABCE in F zitten en

5. het inwendige van ABCD en ABCE disjunct is.

Definitie 6.12. Laat F een verzameling p-roosterdriehoeken zijn. De verzameling Fnoemen we een conforme verzameling, als elke driehoek 4 ∈ F een conform facet in Fis.

Merk op dat deze definities letterlijk veralgemeniseringen zijn van de begrippen uitHoofdstuk 5. Ook hier vinden we weer een verband tussen scherpe roostertriangulatiesvan Kp en conforme verzamelingen. Het bewijs van onderstaande stelling volgt directuit de definitie van een conform facet en de face-to-face eigenschap van de triangulatiein Definitie 2.29.

73

Page 74: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Lemma 6.13. Zij p ∈ N gegeven en laat T een scherpe roostertriangulatie van Kp zijn.Bekijk de verzameling facetten van de tetraeders uit T ,

F = Facetten van T |T ∈ T .

Er geldt dat de verzameling F een conforme verzameling is.

Lemma 6.14. Zij X en Y twee conforme verzamelingen, dan geldt dat F := X ∪Y ookeen conforme verzameling is.

Bewijs. Dit volgt direct uit de definitie van een conforme verzameling.

We kunnen ook hier dus weer de maximale conforme verzameling van Kp bekijken.

Definitie 6.15. Zij p ∈ N gegeven. De maximale conforme verzameling van Kp noemenwe de Conforme Verzameling,

Cp :=⋃

F conforme verzameling in Kp

F .

Als er een scherpe roostertriangulatie T van Kp bestaat, dan zitten de facetten vande tetraeders uit T in de Conforme Verzameling. Dit volgt uit Lemma 6.13. Andersomvertelt dit lemma dat |Cp| = 0 impliceert dat er geen scherpe roostertriangulatie voorKp bestaat. De Conforme Verzameling geeft ons dus informatie over scherpe roostertri-angulaties van Kp.

6.2.2. De Conforme Verzameling construeren

De Conforme Verzameling van Kp kunnen we op eenzelfde manier construeren als dievan het vierkant. We beginnen met de verzameling van alle p-roosterdriehoeken,

F1 := 4ABC |A,B,C ∈ Z3p.

In elke vervolgstap verwijderen we de facetten die niet meer conform zijn, dus

Fn+1 : = Fn \ 4ABC is geen conform facet in Fn= 4ABC ∈ Fn |4ABC is conform in Fn.

Blijf dit herhalen er geldt dat Fn+1 = Fn. Dit gebeurt na een eindig aantal stappen,aangezien de verzamelingen eindig zijn. De verzameling die we overhouden noteren wemet F . Met eenzelfde bewijs als voor het vierkant in Stelling 5.13 vinden we nu hetvolgende resultaat.

Stelling 6.16. De verzameling F die we overhouden na het bovengenoemde proces isgelijk aan de Conforme Verzameling Cp voor de kubus Kp.

74

Page 75: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

6.3. Implementatie van de algoritme

We weten nu hoe we de Conforme Verzameling kunnen genereren. We zullen nu stapvoor stap bekijken hoe we deze algoritme kunnen implementeren. De uiteindelijke im-plementatie in C geven we aan het eind van dit hoofdstuk in Sectie 6.6, als we alleoptimalisaties in de code besproken hebben. De meetresultaten zijn allemaal gemaaktop dezelfde testmachine2, tenzij anders vermeld.

6.3.1. Het controleren op conformiteit

Bij het construeren van de Conforme Verzameling moeten we kunnen bepalen of eenroosterdriehoek een conform facet is. De enige niet-triviale stap hierin is om te contro-leren of aan voorwaarde 5) uit Definitie 6.11 van een conform facet is voldaan. Oftewel,gegeven een driehoek 4ABC en punten D,E ∈ Z3

p , hoe bepalen we of het inwendigevan de tetraeders ABCD en ABCE disjunct is?

In Sectie 6.1.2 zagen we dat we een vlak Vabc ⊂ R3 kunnen vinden waar de driehoek4ABC in ligt. Dit vlak werd gegeven als de oplossingsverzameling van n ·p = γ, waarbijn een normaalvector is en γ een constante. Een normaalvector voor Vabc wordt gegevendoor n = (B − A)× (C − A) en de constante door bijvoorbeeld γ = n · A. Verder werdin diezelfde sectie ook duidelijk dat het vlak Vabc de ruimte R3 in drie delen opdeelt.Hiermee vinden we het volgende lemma.

Lemma 6.17. Laat 4ABC een p-roosterdriehoek zijn met hoekpunten A,B,C ∈ Z3p

en bekijk twee punten D,E ∈ Z3p. Als de tetraeders ABCD en ABCE een disjunct

inwendige hebben, dan liggen de punten D en E in de twee verschillende halfruimtesgeınduceerd door Vabc. Preciezer, bekijk de normaalvector n en constante γ van hierbo-ven, dan geldt een van de twee volgende uitspraken:

• n ·D > γ en n · E < γ, of

• n ·D < γ en n · E > γ.

Met dit lemma zijn we in staat voorwaarde 5) uit Definitie 6.11 concreet te maken.We kunnen nu Algoritme 2 uit Hoofdstuk 5 op eenduidige wijze veralgemeniseren naareen algoritme die controleert of een facet conform in een verzameling F is.

6.3.2. Datastructuur voor een verzameling roosterdriehoeken

De Conforme Verzameling is een verzameling roosterdriehoeken. We moeten dus eenmanier vinden om een verzameling roosterdriehoeken op de computer op te slaan. Inhet bijzonder willen we de verzameling met alle p-roosterdriehoeken opslaan,

F1 := 4ABC |A,B,C ∈ Z3p.

2Processor met twee kernen, een kloksnelheid van 1,9 GHz en 3,8 GB werkgeheugen.

75

Page 76: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Hiertoe merken we op dat de roosterdriehoeken bestaan uit drie punten in het p3-roos-ter. Een naıeve manier om een roosterdriehoek te representeren is dus door 3 × 3 = 9gehele getallen te gebruiken. Gelukkig zijn we in staat de hoekpunten te ‘vereenvoudi-gen’.

Lemma 6.18. Laat p ∈ N gegeven zijn. Definieer de verzameling getallen,

Np := 0, . . . , |Z3p| − 1.

Er bestaat een bijectie f van Z3p naar Np.

Bewijs. Merk op dat |Np| = |Z3p | = (p+ 1)3. Daar dit beide eindige verzamelingen zijn

is er een heel scala aan bijecties mogelijk. In het bijzonder vinden we,

f : Z3p → Np : (x, y, z) 7→ f(x, y, z) = x(p+ 1)2 + y(p+ 1) + z,

met inverse,

f−1 : Np → Z3p : k 7→ f−1(k) = (f−1

1 (k), f−12 (k), f−1

3 (k)),

waarbij, voor t(k) = k mod (p+ 1)2 geldt, dat

f−11 (k) =

⌊k

(p+ 1)2

⌋,

f−12 (k) =

⌊t(k)

p+ 1

⌋,

f−13 (k) = t(k) mod (p+ 1).

Met deze bijectie kunnen we roosterpunten opslaan als een geheel getal. Voor derepresentatie van p-roosterdriehoeken gebruiken we het volgende lemma.

Lemma 6.19. Definieer de verzameling

N3p := Np ×Np ×Np.

De bijectie f uit het vorige lemma induceert een surjectieve afbeelding F van N3p naar F1,

de verzameling van alle p-roosterdriehoeken.

Bewijs. Per constructie van een 3-simplex bestaat er een surjectieve afbeelding G vanZ3p × Z3

p × Z3p naar F1. Combineer deze afbeelding met f uit het vorige lemma, dan

vinden we een surjectieve afbeelding

F : N3p → F1 : (i, j, k) 7→ G(f−1(i), f−1(j), f−1(k)).

76

Page 77: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Uit dit lemma volgt nu dat we een p-roosterdriehoek kunnen weergeven als elementuit N3

p . Dit is echter nog geen unieke representatie. Om dit wel te krijgen definieren weeen deelverzameling van N3

p ,

Nup := (i, j, k) ∈ N3

p : i ≤ j ≤ k.

Lemma 6.20. De afbeelding F ′ := F |Nup

, de beperking van F uit het vorige lemmatot Nu

p , is een bijectie van Nup naar F1.

Bewijs. Dit volgt uit het feit dat permutaties van het drievoud (i, j, k) door F naardezelfde roosterdriehoek worden gestuurd. Als we eisen dat i ≤ j ≤ k, dan vindenwe een unieke permutatie van (i, j, k). De beperking van F tot Nu

p is dus nog steeds

surjectief. De injectiviteit volgt uit het feit dat |Nup | = |F1| =

(|Z3p|

3

).

Een verzameling p-roosterdriehoeken kunnen we met dit lemma ook als verzamelingelementen uit Nu

p geven. In de implementatie kunnen we een verzameling p-rooster-driehoeken dus bijvoorbeeld geven als een lijst elementen uit Nu

p . Het gebruik van eendergelijke lijst als datastructuur is echter inefficient qua opslagruimte. Verder is het eenkostbare operatie om te controleren of een element in een lijst zit.

Een slimmere datastructuur vinden we door gebruik te maken van een index matrix.

Definitie 6.21. Merk op dat |Z3p| = (p + 1)3. Bekijk de drie dimensionale matrix M

met afmetingen (p+1)3×(p+1)3×(p+1)3. Deze matrix M noemen we de index matrixvan een verzameling p-roosterdriehoeken F , als er geldt dat

Mi,j,k =

1 i ≤ j ≤ k en 4F−1(i, j, k) ∈ F0 anders,

waarbij F de bijectie uit Lemma 6.19 is.

Met behulp van Lemma 6.20 volgt nu dat een index matrix inderdaad een manier is omeen verzameling p-roosterdriehoeken weer te geven. De verzameling F1 wordt gegevendoor de index matrix met Mi,j,k = 1 voor i ≤ j ≤ k.

6.3.3. Resultaten

We zijn nu in staat een implementatie te geven van de algoritme die de Conforme Ver-zameling construeert. De pseudo-code van deze algoritme is volstrekt analoog aan Algo-ritme 3 voor het vierkant. Voor de implementatie hebben we de lemma’s uit de vorigesecties gebruikt. Zoals eerder gezegd bespreken we de implementatiedetails aan het eindvan dit hoofdstuk. De resultaten zijn gegeven in Tabel 6.3.

Uit deze tabel volgt nu dat er voor p < 9 geen scherpe roostertriangulatie van dekubus bestaat. Merk op dat de tijden erg snel oplopen. Het genereren van de ConformeVerzameling begint met een verzameling van alle p-roosterdriehoek, dit zijn in totaal dus(

(p+1)3

3

)driehoeken. Voor ieder van deze p-roosterdriehoeken controleren we vervolgens

of het conform is in de verzameling. De complexiteit van het algoritme is dus minimaal

O((

(p+1)3

3

)) = O(p9). Dit is de reden dat de tijdsduur van de generatie zo snel oploopt.

77

Page 78: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p |Cp| Tijdsduur genereren Cp

1 0 0 s

2 0 0 s

3 0 0,2 s

4 0 2,2 s

5 0 19,8 s

6 0 126 s

7 0 621 s

8 0 2607 s

Tabel 6.3.: Resultaten Conforme Verzameling

6.4. Optimalisaties

In de vorige sectie werd duidelijk dat er voor p < 9 geen scherpe roostertriangulatie vande Kp bestaat. Voor hogere waarden van p neemt de executietijd van het programmasterk toe. We presenteren daarom een aantal optimalisaties voor de algoritme.

6.4.1. Scherpe roosterdriehoeken

De eerste optimalisatie volgt uit Lemma 6.4. Volgens dit lemma zijn de facetten vaneen scherpe tetraeder ook scherp. Hieruit volgt dat een facet 4ABC alleen conformkan zijn, als 4ABC scherp is. We geven nu een test waarmee we kunnen controlerendriehoek 4ABC scherp is.

Lemma 6.22. Laat de roosterpunten A,B,C ∈ Z3p gegeven zijn. Beschrijf de zijdes van

4ABC met de volgende vectoren,

P0 = B −A, P1 = C −A, P2 = C −B.

De driehoek 4ABC is scherp als

P0 · P1 > 0

P1 · P2 > 0

P0 · P2 < 0

Bewijs. In de opmerking boven Lemma 6.4 zagen we dat de hoeken van een driehoek methet inwendig product berekend kunnen worden. Hier volgt direct uit dat een driehoekscherp als,

(C −A) · (B −A) > 0

(A− C) · (B − C) > 0

(C −B) · (A−B) > 0

Gebruiken we nu de eigenschappen van het inproduct, dan volgt direct het lemma.

78

Page 79: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Met dit lemma kunnen we een methode implementeren die test of een p-roosterdriehoekscherp is. Zo kunnen we roosterdriehoeken nu eerst testen op scherpheid voordat wecontroleren of het een conform facet is. De methode die controleert of een tetraeder Tscherp is kunnen we hiermee ook optimaliseren. Voordat we controleren of een tetraederT scherp is, kunnen we namelijk eerst de facetten van T op scherpheid testen. De resul-taten na implementatie van deze twee optimalisaties zijn gegeven in Tabel 6.4. Merk opdat we de executietijd inderdaad hebben teruggebracht.

p |Cp| Origineel Optimalisatie 1 Optimalisatie 2

1 0 0 s 0 s 0 s

2 0 0 s 0 s 0 s

3 0 0,2 s 0 s 0 s

4 0 2,2 s 0,9 s 0,7 s

5 0 19,8s 7,8 s 6,8 s

6 0 126 s 51 s 43 s

7 0 621 s 257 s 218 s

Tabel 6.4.: Vergelijking tijdsduur berekenen Conforme Verzameling. De derde kolom isde initiele algoritme. Optimalisatie 1 is de tijdsduur na het veranderen vande functie die controleert of een facet conform is. Bij optimalisatie 2 is ookde methode, die controleert of een tetraeder scherp is, geoptimaliseerd.

6.4.2. Projectie op de facetten

In Sectie 5.5.1 zagen we dat een driehoek4ABC in het vierkant alleen scherp kan zijn alshet punt C tussen de evenwijdige lijnen lA en lB ligt. Een dergelijke optimalisatie zoudenwe ook graag gebruiken voor de kubus. Hiertoe gebruiken we de volgende karakterisatievan een scherpe tetraeder.

Lemma 6.23. Een tetraeder is scherp dan en slechts dan als de orthogonale projectievan elk hoekpunt op het tegenoverliggende facet strikt in dat facet ligt.

Bewijs. Dit volgt direct uit de definitie van de dihedrale hoek. Voor een precies bewijs,zie [16, Lemma 2].

Bekijk nu een p-roosterdriehoek 4ABC en een roosterpunt D ∈ Z3p. Als de tetraeder

ABCD scherp is, dan moet D dus geprojecteerd worden in het inwendige van 4ABC.Hier kunnen we op een handige manier gebruik van maken, bekijk daartoe eerst hetvolgende lemma.

Lemma 6.24. Laat 4ABC een driehoek in R3 zijn. Schrijf Vabc voor het vlak waar4ABC in ligt met normaalvector n = (B − A) × (C − A). Definieer nu drie normaal-

79

Page 80: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

vectoren met,

s1 = n× (B −A)

s2 = (C −A)× ns3 = n× (B − C)

Een punt D uit het inwendige van 4ABC voldoet aan,

s1 · (D −A) > 0, s2 · (D −A) > 0 en s3 · (D − C) > 0. (6.2)

Bewijs. De vectoren si zijn normaalvectoren van vlakken die loodrecht op Vabc staanen een zijde van 4ABC bevatten. Bekijk bijvoorbeeld het vlak Wab gegeven door depunten p met s1 · p = s1 ·A. Per constructie vinden we dat de zijde AB in het vlak Wab

ligt. Anderzijds ligt het punt C duidelijk niet in het vlak Wab.Het vlak Wab deelt de ruimte op in twee halfruimtes. Aangezien het vlak de zijde AB

bevat, ligt het inwendige van 4ABC geheel in een van deze twee halfruimtes. Het puntC ligt in de positieve halfruimte van Wab:

s1 · (C −A) = (n× (B −A)) · (C −A)

= n · ((B −A) · (C −A)

= n · n > 0.

Een punt D uit het vlak Vabc kan alleen in het inwendige van 4ABC liggen als het indezelfde halfruimte ligt als C. Er moet dus gelden dat s1 · (D −A) > 0.

Op eenzelfde manier kunnen we de andere twee uitspraken afleiden.

Gevolg 6.25. Zij 4ABC een p-roosterdriehoek en laat D ∈ Z3p gegeven zijn. Als de

tetraeder ABCD scherp is, dan moet punt D aan voorwaarde (6.2) voldoen van hetvorige lemma.

Bewijs. Schrijf D voor de loodrechte projectie van D op het vlak Vabc. We vinden nude volgende decompositie D = D + αn, waarbij α ∈ R en n een normaalvector voor hetvlak Vabc is.

Uit Lemma 6.23 volgt dat een scherpe tetraeder ABCD impliceert dat D in hetinwendige van 4ABC ligt. Met het vorige lemma volgt vervolgens dat het punt D aanvoorwaarde (6.2) moet voldoen.

Per constructie staat s1 loodrecht op n, dus

s1 · (D −A) = s1 · (D + αn−A) = s1 · (D −A).

De afleiding voor s2 en s3 gaan analoog. We vinden dat D aan voorwaarde (6.2) voldoetdan en slechts dan als D aan de voorwaarde voldoet.

Een scherpe tetraeder ABCD impliceert dus dat D aan voorwaarde (6.2) voldoet.

Bovenstaand lemma kunnen we gebruiken om de methode, die controleert of een facetconform is, te optimaliseren. We hoeven immers alleen voor punten D die aan voor-waarde (6.2) voldoen te controleren of de tetraeder ABCD scherp is. Dit scheelt inhet aantal aanroepen van de methode die controleert of een tetraeder scherp is. Deexecutietijd van het programma na deze optimalisatie is gegeven in Tabel 6.5.

80

Page 81: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p |Cp| Projectie optimalisatie

1 0 0 s

2 0 0 s

3 0 0 s

4 0 0,5 s

5 0 3,8 s

6 0 24 s

7 0 117 s

Tabel 6.5.

6.4.3. Symmetrieen van de kubus

In Sectie 5.5.2 zagen we hoe we de symmetrie van het vierkant konden gebruiken omde Conforme Verzameling sneller te genereren. We bekijken nu hoe we deze eigenschapkunnen veralgemeniseren naar de kubus.

Definitie 6.26. Een isometrisch bijectieve functie Φ : Kp → Kp heet een symmetrie.De verzameling van symmetrien op Kp noteren we met Sym(Kp).

Voor de kubus vinden we eenzelfde soort resultaten als voor het vierkant.

Lemma 6.27. Voor elke symmetrie Φ ∈ Sym(Kp) geldt er dat Φ(Z3p) = Z3

p.

Lemma 6.28. Een symmetrie Φ ∈ Sym(Kp) bewaart de hoeken. Als F een conformeverzameling is, dan is Φ(F) dus ook een conforme verzameling.

Gevolg 6.29. Zij 4ABC een p-roosterdriehoek en Cp de Conforme Verzameling. Voorelke Φ ∈ Sym(Kp) geldt er dat

4ABC ∈ Cp ⇐⇒ 4Φ(A)Φ(B)Φ(C) ∈ Cp.

Bekijk de baan van een punt x ∈ Kp,

Baan(x) = Φ(x) |Φ ∈ Sym(Kp).

Het fundamenteel domein is een deelverzameling van Kp die uit iedere baan een puntbevat. Om dit fundamenteel domein te bepalen moeten we eerst de verzameling Sym(Kp)vinden.

Lemma 6.30. De verzameling symmetrien van Kp bestaat uit 48 elementen.

Bewijs. Zie bijvoorbeeld [21, Example 4.] voor een exact bewijs.Intuıtief kun je het als volgt inzien. Stel een kubus, met zes genummerde zijvlakken,

voor die op een tafel ligt. We kunnen zes verschillende zijvlakken naar de onderkantdraaien. Vervolgens kunnen we de kubus op vier verschillende manieren draaien terwijldit zijvlak naar beneden blijft gericht. Combineer je al deze 6 × 4 = 24 manieren meteen spiegeling in het vlak x = y, dan vind je alle combinaties. In totaal zijn dit dus4× 6× 2 = 48 symmetrien.

81

Page 82: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Lemma 6.31. Schrijf M = 12p. Een fundamenteel domein F voor de kubus Kp wordt

gegeven door de tetraeder ABCD, waarbij

A = (0, 0, 0), B = (M, 0, 0), C = (M,M, 0) en D = (M,M,M)

Bewijs. Dit kan worden nagegaan door expliciet alle symmetrien toe te passen op dezeverzameling punten.

Schrijf Fp := F ∩ Z3p voor het fundamenteel domein van de roosterpunten. Analoog

aan het vierkant vinden we de volgende stelling.

Stelling 6.32. Laat een p-roosterdriehoek 4ABC gegeven zijn. Er bestaat een symme-trie Φ ∈ Sym(Kp) zodat Φ(A) ∈ Fp en

4ABC ∈ Cp ⇐⇒ 4Φ(A)Φ(B)Φ(C) ∈ Cp.

Met deze stelling kunnen we een andere manier geven om de Conforme Verzamelingte construeren. Dit doen we op eenzelfde wijze als in Sectie 5.5.4 beschreven werdvoor het vierkant. In dit nieuwe proces verwijderen we dus eerst driehoeken met eenpunt in het fundamentele domein, die niet meer conform zijn. Vervolgens passen we allesymmetrien toe om de gehele verzameling terug te krijgen. Blijven we itereren tot er geendriehoeken meer verwijderd worden, dan vinden we Cp. De resultaten na implementatievan deze optimalisatie staan gegeven in Tabel 6.6. Dit zorgt duidelijk voor een grotesnelheidswinst.

p |Cp| Symmetrie optimalisatie

1 0 0 s...

......

5 0 0,2 s

6 0 0,9 s

7 0 3,8 s

8 0 15 s

9 0 48 s

10 0 143 s

Tabel 6.6.

6.4.4. Inline code

In de vorige secties hebben we laten zien dat we in staat zijn om de Conforme Verzamelingin een aanmerkelijk snellere tijd te berekenen dan voorheen. We kunnen de algoritmeverder versnellen door de code te optimaliseren. Daartoe executeren we de code in deprofiler3 Valgrind4.

3Programma dat uitvoersnelheid analyseert.4Zie http://valgrind.org.

82

Page 83: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Met behulp van deze profiler kunnen we zien in welke functies het grootste deel vande executietijd zit. Dit blijkt te zitten in: het uitvoeren van de symmetrien, het uitre-kenen van het inwendig product, het bepalen van het kruisproduct en het aftrekken vanvectoren. Dit is uiteraard logisch te verklaren, daar dit de functies zijn die in de kernvan de algoritme zitten. Het blijkt dat deze (simpele) functies door de compiler nietge-inlined5 worden. Het aanroepen van een functie geeft overhead, daarom schrijven wedeze methodes om tot C macro’s. Dit houdt in dat de functies ge-inlined worden, waar-door de overhead verdwijnt die gepaard gaat met het aanroepen van functies. Als wedeze macro’s implementeren, dan zien we in Tabel 6.7 inderdaad lagere executietijden.

p |Cp| Inline optimalisatie Geheugengebruik

1 0 0 s 0 MB...

......

...

5 0 0,2 s 1,6 MB

6 0 0,6 s 6 MB

7 0 3,6 s 19 MB

8 0 13 s 53 MB

9 0 43 s 134 MB

10 0 124 s 310 MB

11 671 MB

12 1366 MB

13 2650 MB

Tabel 6.7.: De tijden geven de tijdsduur voor het genereren van Cp met alle optimalisatiestot nu toe. De kolom geheugengebruik geeft aan hoeveel geheugen er nodigis om de index matrix voor p op te slaan.

6.4.5. De index matrix

In Tabel 6.7 merken we nog iets anders op, het geheugengebruik van de index matrix Mneemt snel toe. Bekijk nogmaals hoe de index matrix voor een verzameling roosterdrie-hoeken F bepaald wordt,

Mi,j,k =

1 i ≤ j ≤ k en 4F−1(i, j, k) ∈ F0 anders .

In de huidige implementatie hebben we de index matrix gegeven door een drie dimensi-onale array van (vaste) lengte (p+ 1)3× (p+ 1)3× (p+ 1)3. Uit de definitie blijkt echterdat alleen Mi,j,k met i ≤ j ≤ k daadwerkelijk betekenis hebben. We kunnen de indexmatrix zo implementeren dat we alleen deze indices hoeven op te slaan. Dit doen wedoor per dimensie een variabele lengte te gebruiken. Preciezer,

5Functie-aanroepen die worden vervangen door de code van de functie.

83

Page 84: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

• Neem M als een array van lengte (p+ 1)3.

• Neem M [i] als een array van lengte (p+ 1)3 − i.

• Neem M [i][j] als array van lengte (p+ 1)3 − i− j.

In deze implementatie slaan we alleen de indices op die daadwerkelijk gebruikt kunnenworden. De resultaten van deze implementatie staan gegeven in Tabel 6.8. Merk opdat de tijdsduur voor het genereren van Cp ook afgenomen is. Dit komt waarschijnlijkdoordat er minder cache misses zijn, daar het geheugen compacter gestructureerd is.

p |Cp| Tijdsduur Geheugengebruik

1 0 0 s 0 MB...

......

...

5 0 0,1 s 0,4 MB

6 0 0,5 s 1,4 MB

7 0 2,3 s 3,9 MB

8 0 10,3 s 10 MB

9 0 31 s 25 MB

10 0 91 s 57 MB

11 0 243 s 120 MB

12 0 594 s 241 MB

13 0 1381 s 463 MB

14 0 3210 s 850 MB

15 0 7642 s 1504 MB

16 2676 MB

17 4330 MB

Tabel 6.8.: De tijden geven de tijdsduur voor het genereren van Cp met alle optimalisatiestot nu toe. De kolom geheugengebruik geeft aan hoeveel geheugen er nodigis om de index matrix voor p op te slaan.

6.4.6. De fundamentele Conforme Verzameling

In Tabel 6.8 zien we dat de Conforme Verzameling voor p ≤ 15 leeg is. Het is dusniet mogelijk een scherpe roostertriangulatie te vinden voor deze roosters. Verder groeithet geheugengebruik nog steeds snel voor grotere waarde van p. We kunnen dit verderterugdringen door gebruik te maken van de volgende eigenschap.

Stelling 6.33. Bekijk de baan voor een gegeven 4 ∈ Cp,

Baan(4) = Φ(4) |Φ ∈ Sym(Kp).

Driehoeken uit deze baan zitten of allemaal in Cp of allemaal niet in Cp.

84

Page 85: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bewijs. Dit volgt direct uit Gevolg 6.29.

Merk op dat we de Conforme Verzameling kunnen schrijven als (disjuncte) verenigingvan een eindig aantal banen. Voor het construeren van Cp is het dus voldoende om uitelke baan van een element te weten of het in Cp ligt. Uit Stelling 6.32 volgt dat er in elkebaan van Cp een p-roosterdriehoek is met een punt in het fundamenteel domein. Dezeeigenschap gaan we gebruiken om de fundamentele Conforme Verzameling te genereren.

Definitie 6.34. De fundamentele Conforme Verzameling definieren we als,

Cp := 4ABC ∈ Cp |A ∈ Fp.

Opmerking. Als we de fundamentele Conforme Verzameling construeren, dan vinden wede Conforme Verzameling op eenvoudige wijze met

Cp := 4′ ∈ Baan(4) |4 ∈ Cp.

Het heeft dus zin om te bestuderen hoe we Cp kunnen construeren.

Voor p-roosterdriehoeken vinden we het volgende verband met de fundamentele Con-forme Verzameling.

Lemma 6.35. Voor elke A ∈ Z3p is er een ΦA ∈ Sym(Kp) zodat ΦA(A) ∈ Fp. Laat verder

B,C ∈ Z3p gegeven zijn, dan noteren we de getransformeerde driehoek van 4ABC met

4ABC = ΦA(4ABC).

Er geldt dat

4ABC ∈ Cp ⇐⇒ 4ABC ∈ Cp.

Bewijs. Dit is een herformulering van Stelling 6.32.

Definitie 6.36. Een p-roosterdriehoek 4ABC noemen we een fundamentele p-rooster-driehoek als een hoekpunt in het fundamenteel domein ligt.

Definitie 6.37. De fundamentele facetten van een tetraeder ABCD worden gegevendoor de getransformeerde facetten, oftewel

ABC, ACD, ABC en BCD.

Definitie 6.38 (Fundamenteel conform facet). Laat p ∈ N gegeven zijn en zij F eenverzameling van fundamentele p-roosterdriehoeken. Een driehoek 4ABC ∈ F noemenwe een fundamenteel conform facet in F als een van de twee volgende eisen geldt:

• De driehoek 4ABC ligt op de rand van Kp en er is een D ∈ Z3p zodat,

1. de tetraeder ABCD is scherp en

2. de fundamentele facetten van ABCD liggen in F .

85

Page 86: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

• De driehoek 4ABC ligt niet op de rand van Kp en er bestaan D,E ∈ Z3p zodat,

3. de tetraeders ABCD en ABCE scherp zijn en

4. de fundamentele facetten van zowel ABCD als ABCE in F zitten en

5. het inwendige van ABCD en ABCE disjunct is.

We zien eenvoudig in dat Cp de maximale verzameling fundamentele conforme facettenis. We zijn in staat de fundamentele Conforme Verzameling direct te construeren. Bekijkhiervoor de verzameling van alle fundamentele p-roosterdriehoeken,

F := 4ABC |A ∈ Fp en B,C ∈ Z3p.

Stelling 6.39. Begin met de verzameling F . Blijf uit deze verzameling driehoeken ver-wijderen die niet meer fundamenteel conform in de verzameling liggen. De verzamelingdie we overhouden is de fundamenteel Conforme Verzameling Cp.

Bewijs. Het bewijs is analoog aan de bewijzen van soortgelijke constructies die we eerderzagen.

Het grote voordeel van de fundamentele Conforme Verzameling is dat we minder fa-cetten hoeven op te slaan. De verzameling van alle fundamentele p-roosterdriehoeken

bestaat uit(|Z3

p|3

)−(|Z3

p|−|Fp|3

)elementen, terwijl de verzameling van alle p-roosterdriehoe-

ken uit(|Z3

p|3

)elementen bestaat. Dit kunnen we dus gebruiken om het geheugengebruik

terug te brengen.

6.4.7. De fundamentele Conforme Verzameling construeren

Het construeren van de fundamentele Conforme Verzameling is een soort uitbreiding opde algoritme die de Conforme Verzameling construeert. Voor de implementatie hebbenwe een manier nodig om een verzameling fundamentele roosterdriehoeken op te slaan.Dit gaan we doen door een index matrix voor fundamentele roosterdriehoeken te maken.

Stelling 6.40. Laat p ∈ N gegeven zijn en bekijk het fundamenteel domein Fp ⊂ Z3p. Er

is een bijectie f ,f : Z3

p ↔ Np = 0, . . . , |Z3p| − 1,

met de eigenschap dat,

f = f |Fp : Fp ↔ Np = 0, . . . , |Fp| − 1.

Bewijs. De functie f is dus een bijectie tussen Z3p en Np, zodat de deelverzameling

Fp ⊂ Z3p bijectief wordt afgebeeld op de verzameling Np = 0, . . . , |Fp| − 1.

Aangezien beide verzamelingen eindig zijn kunnen we een dergelijke bijectie f gewoonconstrueren.

Bekijk nu de volgende verzameling,

NFund = (i, j, k) ∈ Np ×Np ×Np | i ≤ j ≤ k.

86

Page 87: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Stelling 6.41. Schrijf F voor de verzameling van alle fundamentele p-roosterdriehoeken.Er bestaat een bijectie F van NFund naar F .

Bewijs. Voor het bewijs bekijken we de functie f uit de vorige stelling. Een afbeeldingF die een bijectie vormt tussen NFund en F wordt nu gegeven door,

F : F ↔ NFund : 4ABC 7→ (f(A), f(B), f(C)),

waarbij A,B en C hernoemd zijn zodat f(A) ≤ f(B) ≤ f(C).Aangezien 4ABC een fundamentele p-roosterdriehoek is, geldt (na hernoeming) dat

A ∈ Fp. Uit de vorige stelling volgt vervolgens dat f(A) = f(A) ∈ Np. De afbeelding F

is dus goed gedefinieerd. De surjectiviteit volgt nu uit het feit dat f en f surjectief zijn.Injectiviteit volgt vervolgens uit het feit dat |F| = |NFund|.

Deze stelling geeft ons de mogelijkheid elke fundamentele p-roosterdriehoeken uniek tebeschrijven als een element uit NFund. We kunnen nu een fundamentele index matrix Mdefinieren voor een verzameling fundamentele p-roosterdriehoeken F :

Mi,j,k =

1 i ≤ j ≤ k en 4F−1(i, j, k) ∈ F0 anders.

De implementatie is analoog aan de ‘normale’ index matrix, we moeten alleen de nieuwefunctie F gebruiken. Met deze fundamentele index matrix zijn we in staat om verzame-lingen van fundamentele roosterdriehoeken op de computer weer te geven.

Om de fundamentele Conforme Verzameling te construeren hebben we verder nog een

functie nodig die driehoeken4ABC naar zijn getransformeerde 4ABC stuurt. Dit doenwe door de ΦA uit Lemma 6.35 expliciet te bepalen voor elke A ∈ Z3

p. De implementatiehiervan is eenduidig.

We kunnen nu de algoritme uit Stelling 6.39 implementeren die de fundamentele Con-forme Verzameling genereert. De resultaten van deze nieuwe implementatie vinden we inTabel 6.9. Merk op dat we met deze nieuwe algoritme het geheugengebruik aanzienlijkhebben weten terug te dringen.

p |Cp| Tijdsduur Geheugengebruik

9 0 23 s 2,4 MB

10 0 69 s 6,6 MB

11 0 195 s 11 MB

12 0 501 s 26 MB

13 0 1469 s 40 MB

Tabel 6.9.: De tijdsduur geeft aan hoeveel tijd het programma nodig had om de funda-mentele Conforme Verzameling Cp te genereren

87

Page 88: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

6.4.8. Parallellisatie van de algoritme

De implementaties van de algoritmen waren tot op heden single threaded. We kunnen dealgoritme die de fundamentele Conforme Verzameling genereert parallelliseren. Bekijkdaartoe nogmaals Stelling 6.39 voor het proces dat deze verzameling construeert.

We beginnen met de verzameling van alle fundamentele roosterdriehoeken en verwij-deren vervolgens een voor een driehoeken die niet meer een fundamenteel conform facetzijn. De opmerking die we hierbij kunnen maken is, dat het niet uitmaakt in welke volg-orde dit gebeurt. Een roosterdriehoek wordt immers nooit onterecht verwijderd. Deze‘verwijderstap’ kunnen we dus parallelliseren. Dit doen we door in meerdere threadstegelijkertijd de conformiteit van verschillende facetten te bepalen.

Voor de implementatie van deze parallellisatie stap gebruiken we de OpenMP6 API.De snelheidswinst is duidelijk zichtbaar in Tabel 6.10.

p |Cp| Tijdsduur Geheugengebruik

8 0 5,5 s 1,3 MB

9 0 11 s 2,4 MB

10 0 33 s 6,6 MB

11 0 114 s 11 MB

12 0 326 s 26 MB

13 0 627 s 40 MB

Tabel 6.10.: Tijdsduur genereren fundamentele Conforme Verzameling na parallellisatie.

6.5. Resultaten op de DAS-4

We hebben nu een geoptimaliseerde algoritme gevonden om de fundamentele ConformeVerzameling te bepalen. Een manier om de executietijd van het programma verder teverkorten is door het programma op een snellere computer te draaien. We hebben hetprogramma daarom uitgevoerd op de DAS-4 supercomputer7. We hebben hier gebruikgemaakt van een ‘normal compute node’. Dit is een computer met een dual-quad-coreprocessor, een kloksnelheid van 2,4 GHz en 24 GB werkgeheugen. Deze processor be-schikt over acht kernen, die ieder via hyper-threading ongeveer twee threads tegelijkertijduitvoeren. Met de parallellisatie stap uit de vorige sectie kunnen we op deze processorende werklast dus over 16 threads verdelen.

In Tabel 6.11 is een overzicht gegeven van de resultaten op de DAS-4. We zien eenduidelijke tijdwinst ten opzichte van de resultaten op de vorige testmachine in Tabel 6.10.Als we voor p = 8 de tijd op de DAS-4 vergelijken met de tijd van de eerste implementatiein Tabel 6.3, dan zien we een factor 3724 tijdswinst.

6Zie http://openmp.org.7Voor specificaties, zie http://www.cs.vu.nl/das4.

88

Page 89: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

p |Cp| Tijdsduur Geheugengebruik

8 0 0,7 s 1,3 MB

9 0 2,3 s 2,4 MB

10 0 7,2 s 6,6 MB

11 0 20 s 11 MB

12 0 51 s 26 MB

13 0 123 s 40 MB

Tabel 6.11.: Resultaten gevonden op de DAS-4.

Eerder zagen we al dat voor p ≤ 15 de Conforme Verzameling leeg is. Door het pro-gramma op de DAS-4 uit te voeren, kunnen we de tabel voor de fundamentele ConformeVerzameling uitbreiden. De resultaten zijn gegeven in Tabel 6.12. De verzameling Fp ishierbij de verzameling van alle fundamentele p-roosterdriehoeken, de startverzamelingvoor de algoritme.

p |Cp| Tijdsduur Geheugengebruik |Fp|14 0 278 s 86 MB 6,59× 108

15 0 601 s 126 MB 9,77× 108

16 0 1236 s 247 MB 1,92× 109

17 0 2469 s 349 MB 2,73× 109

18 0 4733 s 639 MB 5,01× 109

19 0 8869 s 871 MB 6,85× 109

20 0 15994 s 1,50 GB 1,19× 1010

21 0 28337 s 2,00 GB 1,58× 1010

22 0 48543 s 3,31 GB 2,61× 1010

23 0 81955 s 4,23 GB 3,39× 1010

24 0 135048 s 6,80 GB 5,39× 1010

25 0 222310 s 8,63 GB 6,85× 1010

26 0 356157 s 13,3 GB 1,05× 1011

27 0 561097 s 16,5 GB 1,32× 1011

28 0 581406 s1 24,7 GB 1,97× 1011

29 0 868125 s1 30,4 GB 2,42× 1011

30 372234329 633265 s2 44,2 GB 3,52× 1011

31 53,6 GB 4,27× 1011

Tabel 6.12.: Resultaten gevonden op de DAS-4.

1 Hier is gebruik gemaakt van een snellere computer uit deDAS-4 cluster met 64 GB werkgeheugen.

2 Hier is gebruik gemaakt van een 48-core processor, met eenkloksnelheid van 2,1 GHz en met 128 GB werkgeheugen.

Uit Tabel 6.12 kunnen we een aantal dingen concluderen. Allereerst is de fundamentele

89

Page 90: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Conforme Verzameling voor p ≤ 29 leeg. Dit impliceert dat er geen scherpe roostertri-angulatie van Kp bestaat voor deze waarden van p. Voor p > 27 heeft het programmameer dan 24 GB werkgeheugen nodig, de ‘normal nodes’ van de DAS-4 zijn hier dus nietgeschikt voor. Gelukkig beschikt de DAS-4 over een aantal computers met meer werk-geheugen. Als we hier gebruik van maken, dan zien we dat voor p = 30 de fundamenteleConforme Verzameling niet leeg is! Een aantal cijfers over de roosterdriehoeken uit dezeverzameling is gegeven in Tabel 6.13. We kunnen nu op eenvoudige wijze de (niet-lege)Conforme Verzameling voor p = 30 construeren.

Oppervlakte Hoeken

Gemiddeld 29,707 61,38

Maximum 330 89,77

Minimum 0,866 3,03

Tabel 6.13.: Een aantal statistieken over de roosterdriehoeken uit de fundamentele Con-forme Verzameling C30.

Opmerking. Het feit dat de Conforme Verzameling voor p = 30 niet leeg is, impliceertniet direct er daadwerkelijk een scherpe roostertriangulatie van K30 bestaat. Gezien hetgrote aantal fundamentele facetten in C30 vermoeden we dit wel.

Het Vermoeden. We vermoeden dat er een scherpe roostertriangulatie van K30 bestaat.

6.6. Code in C

De code van de implementatie is te vinden op https://github.com/rvanvenetie/

AcuteTet/releases/tag/v1. Hier een aantal opmerkingen bij deze implementatie.

tetraeder.c De algoritme die de fundamentele Conforme Verzameling construeert isin deze file geımplementeerd. De methode facets_conform_fund blijft facetten uit degegeven verzameling verwijderen die niet meer fundamenteel conform in de verzamelingzijn. Als we deze functie de verzameling van alle fundamentele p-roosterdriehoekengegeven, dan rekent hij dus de fundamenteel Conforme Verzameling Cp uit.

mem list.c De index matrix is geımplementeerd in dit bestand. De elementen uit deindex matrix hebben de waarde 1 of 0, deze kunnen we dus representeren middels eenbit. De implementatie van de index matrix is daarom gegeven als een driedimensionalebit array. Verder bevat dit bestand allerlei hulpmethodes voor de index matrix. Zokunnen we de datastructuur opslaan op de harde schijf, het aantal elementen tellen, hetgeheugengebruik geven, etc.

test.c Dit bestand bevat een scala aan functies die de implementatie controleert. Zo iser voor elke optimalisatiestap uit dit hoofdstuk een testfunctie geschreven die controleert

90

Page 91: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

of deze optimalisatie juist is geımplementeerd. Deze methodes Met deze functies kunnenwe eventuele fouten in de implementatie opsporen.

6.7. Openstaande vragen

Uit Tabel 6.12 kunnen we concluderen dat er voor p < 30 geen scherpe roostertriangulatievan Kp bestaat. Het blijft echter nog steeds een vraag voor welke waarde van p er eenscherpe roostertriangulatie wel bestaat. Hieronder een korte opsomming van dergelijkeopenstaande vragen.

• Voor welke waarde van p ≥ 30 bestaat er een scherpe roostertriangulatie van Kp?

• We weten dat de Conforme Verzameling voor p = 30 niet-leeg is. Klopt hetvermoeden uit Sectie 6.5, bestaat er een scherpe roostertriangulatie van K30? Zoja, hoeveel verschillende scherpe roostertriangulaties bestaan er dan voor p = 30?

• Algemener, impliceert Cp 6= ∅ het bestaan van een scherpe roostertriangulatievoor Kp?

• Stel dat Cp 6= ∅, wat is een (handige) manier om (alle) scherpe roostertriangulatiesvan Kp te vinden met facetten uit Cp?

• Kunnen we de algoritme die de fundamentele Conforme Verzameling construeertparallelliseren over verschillende nodes in een computercluster?

• We bekeken regelmatige roosters in de kubus. Wat vinden we als we naar onregel-matige roosters kijken?

• De verzameling facetten uit Cp die op een zijvlak van de kubus ligt, is een gezelligeverzameling voor het vierkant Ip. Geeft deze opmerking aanleiding tot een snellerealgoritme voor Cp?

• Kunnen we het idee achter de Conforme Verzameling gebruiken om scherpe roos-tertriangulaties van andere polytopen te vinden?

91

Page 92: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

7. Discussie

We geven een korte terugblik. In Hoofdstuk 2 zagen we de theorie achter de eindigeelementen methode toegepast op het reactie-diffusieprobleem. Voor het berekenen vande eindige elementen oplossing hebben we eerst een triangulatie van het domein nodig.Met deze triangulatie vinden we de eindige elementen oplossing vervolgens door eenmatrixstelsel op te lossen. In Hoofdstuk 3 zagen we een (handige) manier om de eindigeelementen methode te implementeren voor het een-, twee- en driedimensionale geval.

In Hoofdstuk 4 bestudeerden we het maximum principe voor de exacte oplossing vanhet reactie-diffusieprobleem. Volgens dit principe neemt de exacte oplossing zijn maxi-mum aan op de rand van het domein. Voldoet de eindige elementen oplossing van dit-zelfde probleem ook aan het maximum principe? Onder een aantal voorwaarden kunnenwe deze vraag bevestigend beantwoorden. Een zo een voorwaarde is dat de triangulatievan het domein uit enkel scherpe simplices bestaat.

In Hoofdstuk 5 bekeken we vervolgens hoe we scherpe roostertriangulaties van het vier-kant kunnen vinden. Hiervoor bekeken we eerst de aanpak uit het eerdere werk [13].Deze aanpak bestaat grofweg uit twee stappen:

• het construeren van de Gezellige Verzameling Gp en

• het bepalen van alle roostertriangulaties met behulp van Gp.

We presenteerden een alternatieve manier om de Gezellige Verzameling te construeren.Dit deden we door eerst de Conforme Verzameling Cp te bepalen. Verder gaven we ookeen ‘semi-willekeurige’ algoritme die scherpe roostertriangulaties kan vinden met behulpvan Cp. Zo waren we in staat een scherpe roostertriangulatie voor het 20× 20-rooster tevinden, terwijl het 9 × 9-rooster in [13] het fijnste rooster was waarvoor er een scherperoostertriangulatie berekend kon worden.

In Hoofdstuk 6 onderzochten we de vragen uit Hoofdstuk 1. We gingen op zoek naar eenalgoritme om scherpe roostertriangulaties van de kubus te bepalen. We zagen dat hetaantal scherpe tetraeders op het p×p×p-rooster sterk toeneemt bij het vergroten van p.Een algoritme die eerst alle scherpe tetraeders genereert en de verzameling vervolgensfiltert, is vanwege deze constatering dus niet erg praktisch.

De Conforme Verzameling Cp voor de kubus bood een uitkomst. Een voor de handliggende algoritme om Cp te construeren bleek echter slecht te schalen. We bekekendaarom allerlei manieren deze algoritme te optimaliseren. Uiteindelijk hebben we met

92

Page 93: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

behulp van de DAS-4 de fundamentele Conforme Verzameling Cp voor p ∈ 0, . . . , 30berekend. Voor p < 30 vonden we dat deze verzameling leeg is, dit impliceert dater voor p < 30 geen scherpe roostertriangulatie van de kubus Kp bestaat. Voor p =30 is de (fundamentele) Conforme Verzameling niet leeg en we hebben het vermoedendat er wel een scherpe roostertriangulatie van K30 bestaat. We hebben hiermee deonderzoeksvragen uit Hoofdstuk 1 slechts deels beantwoord. Voor een volledig antwoordzal er meer onderzoek moeten worden gedaan, zie ook de (nieuwe) onderzoeksvragen uitSectie 6.7.

93

Page 94: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

8. Populaire samenvatting

In de natuurwetenschappen worden partiele differentiaalvergelijkingen vaak gebruikt omverschijnselen te modelleren. Zo kunnen deze vergelijkingen bijvoorbeeld de warmtever-plaatsing in een object geven. Wiskundig is dit ‘object’, waar de differentiaalvergelijkingop gedefinieerd is, het domein. Het blijkt vaak lastig om deze vergelijkingen wiskundigexact op te lossen. Gelukkig is er een methode die ons in staat stelt oplossingen vandeze vergelijkingen te benaderen met de computer, de eindige elementen methode. In ditverslag bestuderen we de theorie en implementatie van de eindige elementen methode.

De eerste stap van de eindige elementen methode is het maken van een opdeling vanhet domein. We bekijken opdelingen in simplices, dit is de generalisering van driehoe-ken/tetraeders naar algemene dimensies. Een dergelijke opdeling van het domein insimplices noemen we ook wel een triangulatie. De eindige elementen methode geeft ver-volgens, voor elk van deze simplices, een benadering van de exacte functie. Figuur 8.1illustreert de stappen van de eindige elementen methode voor een vierkant.

0.0 0.2 0.4 0.6 0.8 1.00.0

0.2

0.4

0.6

0.8

1.0 Triangulatie

0.00.2

0.40.6

0.81.0 0.0

0.20.4

0.60.8

1.00.0

0.2

0.4

0.6

0.8

1.0

uh

0.00.2

0.40.6

0.81.0 0.0

0.20.4

0.60.8

1.00.0

0.2

0.4

0.6

0.8

1.0

Figuur 8.1.: Voorbeeld van de eindige elementen methode. Links is een triangulatie vanhet vierkant gegeven. In het midden zien we een eindige elementen oplossingover deze triangulatie, terwijl rechts de exacte oplossing is gegeven.

We concentreren ons op een specifieke partiele differentiaalvergelijking, het reactie-diffusieprobleem. Het blijkt dat de exacte oplossingen van dit probleem aan het zoge-naamde maximum principe voldoen. Dit betekent bijvoorbeeld dat de oplossing van eenwarmtevergelijking geen waarde onder het absolute nulpunt kan aannemen. De vraagrijst nu of de eindige elementen oplossing van een reactie-diffusieprobleem ook aan ditmaximum principe voldoet.

Er blijkt dat dit niet per se het geval is. We geven een voorbeeld van een reactie-

94

Page 95: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

diffusieprobleem waarbij de eindige elementen oplossing niet aan het maximum principevoldoet. We bestuderen vervolgens wanneer de eindige elementen oplossing wel aandit maximum principe voldoet. We tonen aan dat een bepaald soort triangulaties kangaranderen dat de eindige elementen benadering aan het maximum principe voldoet.

Een voorwaarde aan zo een triangulatie is dat deze uit scherpe simplices moet bestaan.We kunnen ons dus afvragen of we voor elk domein zo een scherpe triangulatie kunnenvinden. Dit blijkt in het algemeen een lastig vraagstuk. We bestuderen deze vraagdaarom eerst voor een (simpel) domein: het vierkant. We gaan op zoek naar een manierom scherpe triangulaties van het vierkant te vinden met behulp van de computer. Ditdoen we door een regelmatig p× p-rooster over het vierkant te leggen, zie Figuur 8.2.

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2001234567891011121314151617181920

Figuur 8.2.: Links het 7× 7-rooster, rechts het 20× 20-rooster.

We geven vervolgens een algoritme die voor een gegeven rooster bekijkt of er eentriangulatie bestaat uit enkel scherpe driehoeken met hoekpunten op dit rooster. Ineerder werk was het 9 × 9-rooster het fijnste rooster waarvoor de computer scherpetriangulaties kon berekenen. Met de methodes die wij presenteren zijn we in staat eenopdeling voor het 20× 20-rooster te vinden, zie Figuur 8.3.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2001234567891011121314151617181920

Figuur 8.3.: Scherpe triangulatie van het 20× 20-rooster.

95

Page 96: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

De kubus is de generalisatie van het vierkant uit het platte vlak. Toch blijkt hetvinden van een scherpe triangulatie voor de kubus een stuk lastiger. Pas in 2009 iser aangetoond dat een scherpe triangulatie van de kubus bestaat, zie Figuur 8.4. Weonderzoeken daarom of we met de computer scherpe triangulaties van de kubus kunnenvinden. We gebruiken eenzelfde aanpak als bij het vierkant; we gaan op zoek naar eenopdeling van de kubus in scherpe tetraeders met hoekpunten op een p× p× p-rooster.

De methode die we voor het vierkant gebruikten kunnen we generaliseren naar dekubus. Het blijkt alleen dat deze (directe) generalisatie te traag is om daadwerkelijkscherpe triangulaties mee te kunnen vinden. Het aantal verschillende tetraeders in hetp × p × p-rooster neemt namelijk sterk toe als we p vergroten. We presenteren daaromeen flink aantal optimalisaties die ervoor zorgen dat we in steeds fijnere roosters kunnenzoeken.

Uiteindelijk hebben we met behulp van de DAS-4 supercomputer1 een aantal dingenkunnen berekenen. Zo bestaan er voor p ∈ 0, . . . , 29 geen triangulaties van de kubusin scherpe tetraeders met hoekpunten in het p× p× p-rooster. Voor p = 30 hebben weeen niet-lege verzameling driehoeken gevonden die mogelijkerwijs de zijvlakken vormenvan een scherpe triangulatie. We hebben dus het vermoeden er een scherpe triangulatievan de kubus bestaat met tetraeders op het 30× 30× 30-rooster. Verder onderzoek zalhier uitsluitsel over moeten geven.

Figuur 8.4.: Plaatje van de (eerste) scherpe triangulatie van de kubus. Bron: [1].

1Zie http://www.cs.vu.nl/das4.

96

Page 97: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

Bibliografie

[1] E. VanderZee, A.N. Hirani, V. Zharnitsky, D. Guoy, A dihedral acute triangulationof the cube, Computational Geometry Elsevier, 2009.

[2] P.J. Olver, Introduction to Partial Differential Equations, Springer, 2014.

[3] D. Braess, Finite elements, Cambridge University Press, 2007.

[4] S.W. Graaf, Nonnegative energy-orthonormal bases and their relation to discretemaximum and comparison principles, Master Thesis, 2012

[5] J.H. Brandts, S. Korotov, M. Krızek, The discrete maximum principle for linear sim-plicial finite element approximations of a reactiondiffusion problem, Linear Algebraand its Applications - Elsevier, 2008.

[6] K.A. Ross, Elementary Analysis: The Theory of Calculus, Springer, 2000.

[7] J.J. Duistermaat, J.A.C. Kolk, Multidimensional Real Analysis II, Cambridge Uni-versity Press, 2004.

[8] P.G. Ciarlet, The Finite Element Method for Elliptic Problems, North-Holland Am-sterdam, 1978.

[9] R.S. Varga Matrix Iterative Analysis, Springer, 2010.

[10] J. Xu, L. Zikatanov A Monotone Finite Element Scheme for Convection-DiffusionEquations, Mathematics of Computation of the American Mathematical Society 68,1999, 1429-1446.

[11] J.H. Brandts, S. Korotov, M Krızek, Dissection of the path-simplex in Rn into npath-subsimplices, Linear algebra and its applications 421,2007, 382-393.

[12] H R Simpson and K Jackson, Process Synchronisation in MASCOT, The ComputerJournal, 22, 332, 1979.

[13] M. Schukking, R. Weikamp, Triangles in a rooster, Project wiskunde jaar 2, Bege-leiding: J.H. Brandts, 2012.

[14] S. Korotov, M. Krızek, On simplicial red refinement in three and higher dimensions,Conference Applications of Mathematics, 2013.

97

Page 98: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

[15] S. Schaefer, J. Hakenberg, J. Warren, Smooth Subdivision of Tetrahedral Meshes,Eurographics Symposium on Geometry Processing, 2004.

[16] D. Eppstein, J.M. Sullivan, A. Ungor, Tiling space and slabs with acute tetrahedra,Computational Geometry Elsevier, 2004.

[17] M. Asadzadeh, An Introduction to the Finite Element Method (FEM) for Diffe-rential Equations, http://www.math.chalmers.se/~mohammad/teaching/PDEbok/draft_FEM_version4.pdf.

[18] C. Cassidy, G. Lord, A square acutely triangulated, J. Rec. Math, 263-268, 1980.

[19] D. Eppstein, Acute square triangulation, The geometry junkyard, 1997, http://

www.ics.uci.edu/~eppstein/junkyard/acute-square/.

[20] E. Kopczynski, I. Pak, P. Przytycki, Acute triangulations of polyhedra and Rn,Combinatorica, Springer, 2012.

[21] P. B. Yale, Geometry and symmetry, Courier Dover Publications, 1968.

[22] P. J. Morandi, Isometries of Rn, http://sierra.nmsu.edu/morandi/notes/

isometries.pdf.

[23] P. Klingsberg, The cross product, http://people.sju.edu/~pklingsb/

crossproduct.pdf.

98

Page 99: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

A. Eindige elementen methode

A.1. Het eendimensionale geval

1 import numpy as np

2 import matplotlib.pyplot as plt

3

4 #Bereken massmatrix voor partitie J

5 def AssembleM(J):

6 h = np.diff(J)

7 n = h.shape[0]

8 EM = np.mat([[2,1],[1,2]])/6.0

9 M = np.mat(np.zeros((n+1,n+1)))

10 for j in range(n):

11 M[j:j+2,j:j+2] = M[j:j+2,j:j+2] + h[j]*EM

12 return M

13

14 #Bereken stijfheidsmatrix voor partitie J

15 def AssembleA(J):

16 h = np.diff(J)

17 n = h.shape[0]

18 EA = np.mat([[1,-1],[-1,1.0]])

19 A = np.mat(np.zeros((n+1,n+1)))

20 for j in range(n):

21 A[j:j+2,j:j+2] = A[j:j+2,j:j+2] + 1/h[j]*EA

22 return A

23

24 #Voer FEM uit op partitie J met functie f en constante reactieterm g

25 def FEM(J, f, g = 0):

26 n = J.shape[0]

27

28 #Bereken de massa matrix (0, ..., n)^2

29 M = AssembleM(J)

30 #Bereken de stiffness matrix (0, ..., n)^2

31 A = AssembleA(J)

32

33 #Verwijder basis functies op de rand

34 A = A[1:n-1,1:n-1]

35 Mg = g * M[1:n-1, 1:n-1]

36 M = M[1:n-1, :]

37 #Bereken de waarde van f in de punten van onze partitie

38 F = map(f,J)

39 F = np.mat(F).T

40 #Bereken de eindige elementen oplossing

41 return np.linalg.solve(A + Mg,M*F)

42

43 ’’’

44 Laat een voorbeeld zien van:

45 -u’’ = 2 (in [0,1])

46 u = 0 (op rand)

47 ’’’

48 def Voorbeeld():

49 J = np.linspace(0,1,5)

50 #f = lambda x: 4 * np.pi**2 * np.sin(2*np.pi * x)

51 f = lambda x: 2

52

53 #a heeft de waarde van de eindige elementen oplossing

54 a = FEM(J,f)

55

56 #De eindige elementen oplossing heeft 0 op de rand

57 u = [0] + np.array(a).flatten().tolist() + [0]

58

59 plt.plot(J,u, label="Eindige elementen oplossing")

60 Jexact = np.linspace(0.0,1.0, num = 1000)

61 Uexact = - (Jexact - 1) * Jexact

62 plt.plot(Jexact,Uexact, label="Exacte oplossing")

99

Page 100: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

63 plt.legend(loc=4)

64 plt.xticks(J)

65 plt.show()

66

67 if __name__ == ’__main__’:

68 Voorbeeld()

A.2. Het tweedimensionale geval

1 import numpy as np

2 from matplotlib import cm

3 import matplotlib.pyplot as plt

4 from mpl_toolkits.mplot3d import Axes3D

5

6 #Bereken massamatrix voor de gehele triangulatie

7 def AssembleM(N,T):

8 EM = np.mat([[2,1,1],

9 [1,2,1],

10 [1,1,2]]) / 24.0

11

12 n = N.shape[0] #Aantal hoekpunten

13 m = T.shape[0] #Aantal driehoeken

14

15 M = np.zeros((n,n))

16 for k in range(m):

17 Tk = T[k,:] #Indices van hoekpunten die bij Tk horen

18 C = N[Tk,:].T #Coordinaten van deze hoekpunten

19 B = C[:,[1,2]] - C[:,[0, 0]] #Bepaal transformatiematrix van D(F_k^-1)

20

21 #Voeg alle niet-nul inproducten toe aan M.

22 M[np.ix_(Tk,Tk)] = M[np.ix_(Tk,Tk)] + abs(np.linalg.det(B)) * EM

23 return M

24

25 #Bereken stijfheidsmatrix voor de gehele triangulatie

26 def AssembleA(N,T):

27 EA1 = np.mat([[-1,-1],[1,0],[0,1]])

28 EA2 = np.mat([[-1,1,0],[-1,0,1]])

29 n = N.shape[0] #Aantal hoekpunten

30 m = T.shape[0] #Aantal driehoeken

31 A = np.zeros((n,n))

32 for k in range(m):

33

34 Tk = T[k,:] #Indices van de hoekpunten die bij Tk horen

35 C = N[Tk,:].T #Coordinaten van deze hoekpunten

36

37 B = np.mat(C[:,[1,2]] - C[:,[0, 0]]) #Bepaal transformatiematrix van D(F_k^-1)

38 BI = np.linalg.inv(B) #Inverse van deze transformatiematrix

39

40 #Bereken Ak, de niet-nul inproducten van A over driehoek Tk

41 Ak = 0.5 * abs(np.linalg.det(B)) * EA1 * BI * BI.T * EA2

42

43 #Voeg deze inproducten toe op de juiste plek in A

44 A[np.ix_(Tk,Tk)] = A[np.ix_(Tk,Tk)] + Ak

45 return A

46

47 #Bereken norm met continue stuksgewijs lineaire functie. Hierin is v de vector die de waarde

48 #van de functie in de vertices geeft.

49 def Norms(A,M,v):

50 v = np.mat(v).T

51 return (np.sqrt(v.T*(A+M)*v), np.sqrt(v.T*M*v))

52

53 ’’’

54 Bereken de eindige elementen opossing met functie f en constante reactieterm g

55 over de partitie gegeven door N,T en G.

56 ’’’

57 def FEM(N,T,G,f,g = 1):

58 A = AssembleA(N,T)

59 M = AssembleM(N,T)

60 n = N.shape[0]

61

62 GInd = np.where(G == 0)[0] #Geeft aan welke vertices er op de rand liggen

63 GIx = np.ix_(GInd,GInd) #Tovert dit om voor numpy zodat we de stijfheidsmatrix kunnen verkrijgen

64

65 #Bepaal de matrices met inproducten die niet op de rand liggen

100

Page 101: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

66 Ag = A[GIx]

67 Mg = g * M[GIx]

68 Mf = M[GInd,:]

69

70 #Bereken de waarde van f in de punten van onze partitie

71 F = map(f,N)

72 F = np.mat(F).T

73

74

75 #Bereken de eindige elementen oplossing

76 sol = np.linalg.solve(Ag + Mg,Mf*F)

77

78 #Voeg waarde nul toe aan vertices op de rand

79 uh = np.zeros(n)

80 uh[GInd] = sol

81

82 return uh, A, M

83

84

85 #Verfijn partitie

86 def Refine(N,T,G):

87 n = N.shape[0]

88 m = T.shape[0]

89 refined = np.zeros((n,n)) #Matrix die aangeeft of een bepaalde zijde al verfijnd is

90 edges = [(0,1),(0,2),(1,2)] #Drie combinaties die de zijdes van een driehoek geven

91 TT = np.zeros((m*4,3),dtype=np.int) #Nieuwe triangulatie

92

93 for k in range(m):

94 #indices en coordinaten van Tk

95 Tk = T[k,:]

96 C = N[Tk,:]

97

98 #Array die indices van nieuwe vertices geeft

99 new_indices = np.zeros(3,dtype=np.int)

100 for j in range(3):

101 a,b = edges[j] #Geef een zijde van Tk

102 if refined[Tk[a],Tk[b]] == 0: #Hebben we al een hoekpunten op deze zijde toegevoegd?

103 #Voeg punt toe

104

105 new_vert = (C[a,:] + C[b,:])/ 2.0

106 N = np.append(N,[new_vert],axis=0)

107 G = np.append(G,1) #Nieuw punt, neem aan dat hij op de rand ligt.

108 new_indices[j] = n

109 refined[Tk[a],Tk[b]] = refined[Tk[a],Tk[b]] = n

110 n = n +1

111 else:

112 #We hebben deze zijde al gesplitst

113 new_indices[j] = refined[Tk[a],Tk[b]]

114 G[new_indices[j]] = 0 #Punt ligt dus niet op de rand

115

116 #New_indices heeft de indices van de nieuwe vertices

117

118 #Deel Tk op in de vier sub-driehoeken en voeg deze toe aan de nieuwe triangulatie

119 TT[k*4:4*(k+1),:] = [[Tk[0],new_indices[0],new_indices[1]],

120 [Tk[1],new_indices[0],new_indices[2]],

121 [Tk[2],new_indices[1],new_indices[2]],

122 [new_indices[0],new_indices[1],new_indices[2]]]

123 return N,TT,G

124 ’’’

125 Voorbeeld van een reactie-diffusieprobleem op het vierkant met vierkant domein

126 -laplace(u) + u = sin(pi * x) sin(pi * y) (2 * pi^2 +1) in [0,1]x[0,1]

127 u = 0 op de rand van [0,1]x[0,1]

128 ’’’

129 def Voorbeeld():

130 #Eindheidsvierkant

131 N = np.array([[0,0],

132 [0,1],

133 [1,1],

134 [1,0]])

135 T = np.array([[0,1,2],

136 [0,2,3]])

137 G = np.array([1,1,1,1])

138 #Aantal verfijnstappen

139 j = 5

140 fig = plt.figure()

141 normsa = np.zeros(j)

142 norms2 = np.zeros(j)

101

Page 102: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

143 for i in range(j):

144 N,T,G = Refine(N,T,G)

145

146 #Exacte oplossing

147 u = np.sin(np.pi * N[:,0]) * np.sin(np.pi* N[:,1])

148

149 f = lambda pt: np.sin(np.pi * pt[0]) * np.sin(np.pi * pt[1]) *(2 * np.pi**2 + 1)

150 g = 1

151

152 #Bereken eindige elementen oplossing en massa- en stijfheidsmatrix voor de norms

153 uh, A, M = FEM(N,T,G,f,g)

154 normsa[i],norms2[i] = Norms(A,M,u-uh)

155

156 ax = fig.add_subplot(2,j,j+i+1,aspect=’equal’)

157 ax.triplot(N[:,0],N[:,1],T)

158 ax.set_title(’Triangulatie’)

159 ax = fig.add_subplot(2,j,i+1, projection=’3d’)

160 ax.plot_trisurf(N[:,0],N[:,1],uh)#,cmap=cm.RdBu)

161 ax.set_title(’$u_h$’)

162

163 #Plot norms

164 ax = plt.figure().add_subplot(111)

165 plt.yscale(’log’)

166 plt.plot(normsa)

167 plt.plot(norms2)

168 plt.legend([r"$||\Pi u - u_V^\Pi||_A$",r"$||\Pi u - u_V^\Pi ||_2$"])

169 plt.xticks(range(j))

170 ax.set_xticklabels(range(1,j+1))

171 plt.show()

172

173 if __name__ == ’__main__’:

174 Voorbeeld()

A.3. Het driedimensionale geval

1 import numpy as np

2 import matplotlib.pyplot as plt

3 import itertools as it

4

5

6 #Bereken massamatrix voor gehele triangulatie, zie ook 2D implementatie.

7 def AssembleM(N,T):

8 EM = np.mat([[2,1,1,1],

9 [1,2,1,1],

10 [1,1,2,1],

11 [1,1,1,2]]) / 120.0

12

13 n = N.shape[0]

14 m = T.shape[0]

15

16 M = np.zeros((n,n))

17 for k in range(m):

18 Tk = T[k,:]

19 C = N[Tk,:].T

20 B = C[:,[1,2,3]] - C[:,[0, 0,0 ]]

21 det = abs(np.linalg.det(B))

22 M[np.ix_(Tk,Tk)] = M[np.ix_(Tk,Tk)] + det * EM

23 return M

24

25 #Bereken stijfheidsmatrix voor gehele triangulatie

26 def AssembleA(N,T):

27 EA2 = np.mat([[-1, 1.0 , 0, 0],

28 [-1, 0.0 , 1, 0],

29 [-1, 0.0 , 0, 1]])

30 EA1 = EA2.T * 1/6.0

31

32 n = N.shape[0]

33 m = T.shape[0]

34 A = np.zeros((n,n))

35

36 for k in range(m):

37 Tk = T[k,:]

38 C = N[Tk,:].T

39

102

Page 103: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

40 B = np.mat(C[:,[1,2,3]] - C[:,[0, 0,0]])

41 BI = np.linalg.inv(B)

42 det = abs(np.linalg.det(B))

43

44 Ak = det * (EA1 * BI) * (BI.T * EA2)

45 A[np.ix_(Tk,Tk)] = A[np.ix_(Tk,Tk)] + Ak

46 return A

47

48 #Bereken norm continue stuksgewijs lineaire functie.

49 def Norms(A,M,v):

50 v = np.mat(v).T

51 return (np.sqrt(v.T*(A+M)*v), np.sqrt(v.T*M*v))

52

53 #Berekent eindige elementen oplossing

54 def FEM(N,T,G,f,g = 1):

55 A = AssembleA(N,T)

56 M = AssembleM(N,T)

57 n = N.shape[0]

58 GInd = np.where(G == 0)[0]

59 GIx = np.ix_(GInd,GInd)

60

61 Ag = A[GIx]

62 Mg = g* M[GIx]

63 Mf = M[GInd,:]

64

65 F = map(f,N)

66 F = np.mat(F).T

67

68 sol = np.linalg.solve(Ag + Mg,Mf*F)

69 uh = np.zeros(n) #Values of the solution at vertices

70 uh[GInd] = sol

71

72 return uh, A, M

73

74 ’’’

75 Verfijn de triangulatie. Gebruik functie Bound om te bekijken of een punt op de rand ligt

76 ’’’

77 def Refine(N,T,G,Bound):

78 n = N.shape[0]

79 m = T.shape[0]

80 refined = #Dictionary die bijhoud of een zijde al een nieuw hoekpunt heeft

81 TT = np.zeros((m*8,4),dtype=np.int) #Nieuwe triangulatie

82 TIndex = 0

83 edges = [(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)] #Alle zijdes van een tetrahedron

84

85 for k in range(m):

86 Tk = T[k,:]

87 C = N[Tk,:]

88

89 #Elke tetraeder heeft zes zijdes, dus zes nieuwe vertices

90 new_indices = np.zeros(6,dtype=np.int)

91 for j in range(6): #Loop over zijdes

92 a,b = edges[j]

93

94 #Kijk of we deze zijde al verfijnd hebben

95 if not (Tk[a],Tk[b]) in refined:

96 #Voeg nieuwe vertex toe

97 new_vert = (C[a,:] + C[b,:])/ 2.0

98 N = np.append(N,[new_vert],axis=0)

99 new_indices[j] = n

100 refined[(Tk[b],Tk[a])] = refined[(Tk[a],Tk[b])] = n

101 n = n +1

102 else:

103 new_indices[j] = refined[(Tk[a],Tk[b])]

104

105 #Voeg nieuwe tetraeders toe

106 TT[k*8:8*(k+1),:] =[

107 #Vier tetraeders in de hoekpunten van de oude tetraeder

108 [Tk[0],new_indices[0],new_indices[1],new_indices[2]],

109 [Tk[1],new_indices[0],new_indices[3],new_indices[4]],

110 [Tk[2],new_indices[1],new_indices[3],new_indices[5]],

111 [Tk[3],new_indices[2],new_indices[4],new_indices[5]],

112 #Opdeling van de octaeder in het middel langs as 2-3

113

114 [new_indices[0],new_indices[2],new_indices[3],new_indices[4]],

115 [new_indices[0],new_indices[2],new_indices[3],new_indices[1]],

116 [new_indices[2],new_indices[3],new_indices[4],new_indices[5]],

103

Page 104: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

117 [new_indices[1],new_indices[2],new_indices[3],new_indices[5]]

118

119 ]

120

121 #Bepaal of de nieuwe punten op de rand van het domein liggen

122 G = np.array(map(Bound,N)).astype(int)

123 return N,TT,G

124

125

126 #Geeft aan of punt C op de rand van de eenheidskubus ligt

127 def Boundary_Cube(C):

128 return np.logical_or(C == 0.0, C == 1.0).any()

129

130 ’’’

131 Voorbeeld van reactie-diffusie probleem in eenheidskubus.

132 -laplace(u) + u = sin(pi * x) sin(pi * y) sin(pi * z) (3 * pi^2 +1) in [0,1]x[0,1]x[0,1]

133 u = 0 op de rand van [0,1]x[0,1]x[0,1]

134 ’’’

135 def Voorbeeld():

136 #Eenheidskubus

137 N = np.array([[0,0,0],

138 [1,0,0],

139 [0,1,0],

140 [1,1,0], #Grondvlak

141 [0,0,1], #4

142 [1,0,1],

143 [0,1,1],

144 [1,1,1]]) #Bovenvlak

145

146 T = np.array([[4,0,1,2],

147 [7,1,2,3],#Grondvlak bedekt

148 [1,4,5,7],

149 [2,4,6,7], #Bovenvlak bedekt

150 [1,2,4,7]])#Midden

151

152 G = np.ones(N.shape[0]) #Alle punten liggen op de rand

153 N,T,G = Refine(N,T,G, Boundary_Cube)

154

155 #Aantal verfijn stappen

156 j = 3

157 normsa = np.zeros(j)

158 norms2 = np.zeros(j)

159 for i in range(j):

160 N,T,G = Refine(N,T,G, Boundary_Cube)

161 #Exacte oplossing

162 u = np.sin(np.pi * N[:,0]) * np.sin(np.pi* N[:,1]) * np.sin(np.pi * N[:,2])

163

164 f = lambda pt: np.sin(np.pi * pt[0]) * np.sin(np.pi * pt[1]) * np.sin(np.pi * pt[2])*(3 * np.pi**2 + 1)

165 g = 1

166

167 #Bereken eindige elementen oplossing en massa- en stijfheidsmatrix voor de norms

168 uh, A, M = FEM(N,T,G,f,g)

169 normsa[i],norms2[i] = Norms(A,M,u-uh)

170

171 ax = plt.figure().add_subplot(111)

172 plt.plot(normsa)

173 plt.plot(norms2)

174 plt.yscale(’log’)

175 plt.legend([r"$||\Pi u - u_V^\Pi||_A$",r"$||\Pi u - u_V^\Pi ||_2$"])

176 plt.xticks(range(j))

177 ax.set_xticklabels(range(2,j+2))

178

179 plt.show()

180

181

182 if __name__ == ’__main__’:

183 Voorbeeld()

104

Page 105: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

B. Triangulaties op een rooster

B.1. Scherpe roostertriangulaties van het vierkantgenereren

1 import numpy as np

2 import matplotlib.pyplot as plt

3 import time

4 import random

5 from mpl_toolkits.mplot3d import Axes3D

6 from mpl_toolkits.mplot3d.art3d import Poly3DCollection,Line3DCollection

7 from matplotlib.collections import PolyCollection

8

9 #Bekijk of de zijdes van ABC in de verz zitten.

10 def Zijdes_driehoek_verz(A,B,C,p, verz):

11 return ((Get_zijde_verz(A,B,p,verz)) and

12 (Get_zijde_verz(B,C,p,verz)) and

13 (Get_zijde_verz(A,C,p,verz)))

14

15 #Bekijk of de driehoek ABC scherp is

16 def Driehoek_scherp(A,B,C):

17

18 #Bereken lengtes van de zijdes in het kwadraat

19 lenAB = (B[0] - A[0])**2 + (B[1] - A[1])**2

20 lenBC = (C[0] - B[0])**2 + (C[1] - B[1])**2

21 lenAC = (C[0] - A[0])**2 + (C[1] - A[1])**2

22

23 lenSorted = np.sort([lenAB, lenBC, lenAC]) #Sorteer lengtes

24

25 return ((lenSorted[2] - lenSorted[1] - lenSorted[0]) < 0)

26

27 #Bekijk of de zijde AB op de rand van het vierkant ligt

28 def Zijde_rand_vierkant(A,B,p):

29 return ((A[0] == B[0] == 0) or #Zijde ligt op lijn x = 0

30 (A[0] == B[0] == p) or #Zijde ligt op lijn x = p

31 (A[1] == B[1] == 0) or #Zijde ligt op lijn y = 0

32 (A[1] == B[1] == p)) #Zijde ligt op lijn y = p

33

34 #Bekijk of AB een conforme zijde is in verz

35 def Conforme_zijde(A,B,p,verz):

36 if (A[0] == B[0] and A[1] == B[1]): #A en B moeten verschillend zijn

37 return False

38 rand_zijde = Zijde_rand_vierkant(A,B,p)

39

40

41 n = np.array([-(B[1] - A[1]), B[0] - A[0]]) #Bereken normaalvector op lijn AB

42 c = np.dot(n, A) #Bereken constante voor vergelijking van lijn door AB

43

44 scherp_pos = scherp_neg = False #Sla op of we scherpe driehoek in pos/neg halfruimte hebben gevonden

45 normaal_AB = [B[0] - A[0], B[1] - A[1]]

46 d_A = np.dot(normaal_AB,A)

47 d_B = np.dot(normaal_AB,B)

48 #l_A nu gegeven door: normaal_AB dot p = d_A

49 #l_B met: normaal_AB dot p = d_B

50

51 #Doorloop alle punten tussen lijnen l_A en l_B

52 for x in range(p+1):

53 ymin = 0

54 ymax = p

55

56 if (normaal_AB[1] != 0): #Horizontale lijnstukken werkt dit niet, div door nul

57 y_A = (d_A - normaal_AB[0] * x) / normaal_AB[1]

58 y_B = (d_B - normaal_AB[0] * x) / normaal_AB[1]

59 ymin = max(min(y_A,y_B) + 1,0)

60 ymax = min(max(y_A,y_B) + 1,p)

105

Page 106: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

61

62 for y in range(ymin,ymax+1):

63 C = [x,y] #Derde punt

64 tmp = np.dot(n,C) #Bereken inproduct tussen normaalvector en punt (x,y)

65 if ((tmp > c and not scherp_pos) or

66 (tmp < c and not scherp_neg)): #We hebben nog geen scherpe driehoek gevonden in deze halfruimte

67

68 if (Zijdes_driehoek_verz(A,B,C,p,verz) and #Zijdes in de verzameling

69 Driehoek_scherp(A,B,C)): #Deze driehoek is scherp!

70 if tmp > c:

71 scherp_pos = True #Punt gevonden uit positieve halfruimte waarvoor ABC scherp is

72 else:

73 scherp_neg = True

74

75 if ((scherp_pos and scherp_neg) or#Scherpe driehoeken in beide halfruimte, dus conforme zijde.

76 rand_zijde): #We zaten op de rand, maar hebben nu wel een scherpe driehoek gevonden.

77 return True

78 return False

79

80 #Functies die getal <-> coordinaat transformaties doen

81 def Coordinaat_naar_getal(A,p):

82 return (p+1) * A[0] + A[1]

83

84 def Getal_naar_coordinaat(num,p):

85 return [num / (p+1),num % (p+1)]

86

87 #Geeft terug of de zijde AB in verz zit

88 def Get_zijde_verz(A,B,p,verz):

89 num_A = Coordinaat_naar_getal(A,p)

90 num_B = Coordinaat_naar_getal(B,p)

91 index = np.sort([num_A,num_B])

92 return verz[index[0]][index[1]]

93

94 #Voeg zijde AB toe, of verwijder, uit verz

95 def Set_zijde_verz(A,B,p,verz,waarde):

96 num_A = Coordinaat_naar_getal(A,p)

97 num_B = Coordinaat_naar_getal(B,p)

98 index = np.sort([num_A,num_B])

99 verz[index[0]][index[1]] = waarde

100

101 #Doet het bovenstaande voor alle symmetrien van AB

102 def Set_zijde_verz_sym(A,B,p,verz,waarde):

103 AX, AY = A

104 BX, BY = B

105 symmetries = np.array([

106 [AX ,AY ,BX , BY], #Original

107 [AY ,AX ,BY , BX], #Mirror in the line y = x

108 [AY ,p-AX,BY ,p-BX], #Flip vertical y’ = N - y, x’ = x

109 [AX ,p-AY,BX ,p-BY], #Mirror in line y’ = N -x, x’ = N - y

110 [p-AX,p-AY,p-BX,p-BY], #Flip horizontal, y’ = y, x’ = M - x

111 [p-AY,p-AX,p-BY,p-BX], #Mirror in the line y= x

112 [p-AY,AX ,p-BY, BX], #Mirror vertical y’ = N - y

113 [p-AX,AY ,p-BX, BY] #Mirror in the line y’ = N - x

114 ])

115 for [X1,Y1,X2,Y2] in symmetries:

116 Set_zijde_verz([X1,Y1],[X2,Y2],p,verz,waarde)

117

118 #Maak lege conforme verzameling voor p

119 def Init_conforme_verz(p):

120 tmp = (p+1)**2

121 return np.zeros((tmp,tmp),dtype=bool)

122

123 #Retouneert een verzameling met alle zijdes op het vierkant I_p

124 def Zijdes_verz(p):

125 verz = Init_conforme_verz(p)

126 tot_punten = (p+1)**2

127 #Voeg alle lijnstukken toe aan verz

128 for i in range(0, tot_punten):

129 for j in range(i+1, tot_punten):

130 A = Getal_naar_coordinaat(i,p)

131 B = Getal_naar_coordinaat(j,p)

132 Set_zijde_verz(A,B,p,verz,True)

133 return verz

134

135 #Conformeert verz. Als verz niet gegeven is, dan pakt hij de verzameling van alle lijnstukken op vierkant

136 def Conforme_verz(p,verz=None):

137 tot_punten = (p+1)**2

106

Page 107: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

138 if verz == None:

139 verz = Zijdes_verz(p)

140 veranderd = True

141

142 #Blijf lijnstukken verwijderen uit de verz

143 while (veranderd):

144 veranderd = False

145 for i in range(0,tot_punten):

146 for j in range(i,tot_punten):

147 A = Getal_naar_coordinaat(i,p)

148 B = Getal_naar_coordinaat(j,p)

149 if Get_zijde_verz(A,B,p,verz):

150 conf = Conforme_zijde(A,B,p,verz)

151 if not conf: #Niet meer conform

152 veranderd = True

153 Set_zijde_verz(A,B,p,verz,conf)

154 return verz

155

156 #Maakt array van alle punten in het fundamenteel domein

157 def Fundamenteel_domein(p):

158 fund = np.zeros((0,2),dtype=int)

159 #Driehoek met hoekpunten (0,0), (1/2 p, 0) en (1/2 p, 1/2 p)

160 for x in range(p/2+1):

161 for y in range(x+1):

162 fund = np.vstack((fund,[x,y]))

163 return fund

164

165 ’’’

166 Doet hetzelfde als Conforme_verz, maar kijkt alleen naar punten in het

167 fundamenteel domein (past daarna symmetrie toe).

168 ’’’

169 def Conforme_verz_symmetrie(p):

170 tot_punten = (p+1)**2

171 verz = Zijdes_verz(p)

172 fund = Fundamenteel_domein(p)

173 veranderd = True

174 #Blijf lijnstukken verwijderen uit de verz

175 while (veranderd):

176 veranderd = False

177 for i in range(0,tot_punten):

178 A = Getal_naar_coordinaat(i,p)

179 for j in range(fund.shape[0]):

180 B = fund[j]

181 if Get_zijde_verz(A,B,p,verz):

182 conf = Conforme_zijde(A,B,p,verz)

183 if not conf: #Niet meer conform

184 veranderd = True

185 Set_zijde_verz_sym(A,B,p,verz,conf)

186 return verz

187

188 #Geef terug aan welke kant het punt P ligt ten opzichte van de lijn door AB

189 def Kant_lijn(A,B,P):

190 return ((B[0] - A[0])*(P[1] - A[1]) - (B[1] - A[1])*(P[0] - A[0]))

191

192 #Geeft < 0 terug als P en Q aan verschillende kanten van de lijn door AB liggen

193 #Geeft > 0 terug als P en Q aan dezelfde kant van de lijn door AB liggen

194 #Geef 0 terug als minimaal een van de twee punten op de lijn door AB ligt.

195 def Vergelijk_kant_lijn(A,B,p,q):

196 return Kant_lijn(A,B,p)*Kant_lijn(A,B,q)

197

198

199 #Als de driehoek en de lijn disjunct liggen, dan worden ze gesepereerd

200 #door een zijde van de driehoek, of door het lijnstuk.

201 def Driehoek_lijn_disjunct(driehoek, lijn):

202 A,B = lijn

203

204 s1 = Vergelijk_kant_lijn(A,B,driehoek[0], driehoek[1])

205 s2 = Vergelijk_kant_lijn(A,B,driehoek[1], driehoek[2])

206 if (s1 >= 0 and s2 >= 0): #De driehoek ligt aan een kant van het lijnstuk AB

207 return True

208

209 #Vergelijk punt A met alle punten tegenover de zijdes van de driehoek

210 a1 = Vergelijk_kant_lijn(driehoek[0], driehoek[1], driehoek[2], A)

211 a2 = Vergelijk_kant_lijn(driehoek[1], driehoek[2], driehoek[0], A)

212 a3 = Vergelijk_kant_lijn(driehoek[0], driehoek[2], driehoek[1], A)

213 #Vergelijk punt B met alle punten tegenover de zijdes van de driehoek

214 b1 = Vergelijk_kant_lijn(driehoek[0], driehoek[1], driehoek[2], B)

107

Page 108: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

215 b2 = Vergelijk_kant_lijn(driehoek[1], driehoek[2], driehoek[0], B)

216 b3 = Vergelijk_kant_lijn(driehoek[0], driehoek[2], driehoek[1], B)

217

218 #Kijk of gehele zijde aan andere kant ligt

219 if ((a1 <= 0 and b1 <= 0) or (a2 <= 0 and b2 <= 0) or (a3 <= 0 and b3 <= 0)):

220 return True

221

222 return False

223

224 #Controleer voor alle punten van de driehoek of ze aan de andere kant van de lijn

225 #door AB liggen, de zijde waar niet p ligt.

226 def Driehoek_punt_kant(driehoek, A,B,p):

227 a1 = Vergelijk_kant_lijn(A,B,p,driehoek[0])

228 a2 = Vergelijk_kant_lijn(A,B,p,driehoek[1])

229 a3 = Vergelijk_kant_lijn(A,B,p,driehoek[2])

230 return (a1 <= 0 and a2 <= 0 and a3 <=0)

231

232 #Controleert of de twee driehoeken disjunct zijn

233 def Driehoek_driehoek_disjunct(driehoek1, driehoek2):

234

235 #Bekijk voor elke zijde van de driehoeken of deze zijde de twee driehoeken scheidt.

236 disjunct = (Driehoek_punt_kant(driehoek1, driehoek2[0],driehoek2[1], driehoek2[2]) or

237 Driehoek_punt_kant(driehoek1, driehoek2[0],driehoek2[2], driehoek2[1]) or

238 Driehoek_punt_kant(driehoek1, driehoek2[1],driehoek2[2], driehoek2[0]) or

239 Driehoek_punt_kant(driehoek2, driehoek1[0],driehoek1[1], driehoek1[2]) or

240 Driehoek_punt_kant(driehoek2, driehoek1[0],driehoek1[2], driehoek1[1]) or

241 Driehoek_punt_kant(driehoek2, driehoek1[1],driehoek1[2], driehoek1[0]))

242 return disjunct

243

244 #Geeft terug of de driehoek disjunct is met alle driehoeken in de lijst

245 def Driehoek_lijst_disjunct(A,B,C,triangulatie):

246 driehoek = [A,B,C]

247 for i in range(triangulatie.shape[0]):

248 test = Driehoek_driehoek_disjunct(driehoek, triangulatie[i])

249 #print "Disjunct test: ", driehoek, triangulatie[i], test

250 if not test:

251 return False

252 return True

253

254 #Probeert een triangulatie te vinden in de conf_verz met semi-willekeurig algoritme

255 def Triangulatie_willekeurig(p,conf_verz=None):

256 if conf_verz == None:

257 conf_verz = Conforme_verz_symmetrie(p)

258

259 verz = conf_verz.copy()

260

261 #Verzameling leeg

262 if np.argwhere(verz).shape[0] == 0:

263 return None

264

265 #Kies willekeurig lijnstuk op de rand

266 A = Coordinaat_naar_getal([0,0],p)

267 B = Coordinaat_naar_getal([0,0],p)

268 while not (verz[A][B]):

269 B =Coordinaat_naar_getal([0,random.randrange(0,p+1)],p)

270

271 #Initalizeer de verzameling van randen

272 randen = np.array([[A,B]])

273 #Initalizeer de verzameling van driehoeken uit onze triangulatie

274 triangulatie = np.zeros((0,3,2), dtype=int)

275 tot_punten = (p+1)**2

276 while (randen.shape[0] > 0): #Zolang we randen van onze triangulatie vinden

277

278 #Kies een willekeurige rand uit onze verzameling en verwijder deze vervolgens

279 willekeurige_rand = random.randrange(0,randen.shape[0])

280 rand = randen[willekeurige_rand]

281 randen = np.delete(randen,willekeurige_rand,axis=0)

282 A = Getal_naar_coordinaat(rand[0],p)

283 B = Getal_naar_coordinaat(rand[1],p)

284

285 #Nu zoeken we een scherpe driehoek op de rand AB

286 nieuwe_driehoek = None

287 for i in range(0,tot_punten):

288 C = Getal_naar_coordinaat(i,p)

289

290 #De driehoek moet zijdes uit de conforme vezameling hebben, scherp zijn

291 #en disjunct zijn van de triangulatie

108

Page 109: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

292 if (Zijdes_driehoek_verz(A,B,C,p,verz) and

293 Driehoek_scherp(A,B,C) and

294 Driehoek_lijst_disjunct(A,B,C,triangulatie)):

295 nieuwe_driehoek = [rand[0],rand[1],i]

296 break

297

298 #We konden geen driehoek meer vinden, deze triangulatie loopt dood.

299 if nieuwe_driehoek == None:

300 print "\nTriangulatie kan geen nieuwe driehoek meer vinden bij rand van zijde", A,B

301 print "Herstart algoritme\n"

302 verz = None

303 return Triangulatie_willekeurig(p,conf_verz)

304 else:

305 #Nieuwe driehoek ABC gevonden, nu doen we drie dingen

306 #1) Verwijderen we alle zijdes uit de conforme verzameling die niet disjunct zijn met ABC

307 #2) Conformeren we de verzameling opnieuw

308 #3) Voegen we nieuwe randen van ABC toe aan onze verzameling randen, en verwijderen we oude

309 # als die door ABC geen rand meer zijn van triangulatie.

310

311

312 driehoek = [Getal_naar_coordinaat(nieuwe_driehoek[0],p),

313 Getal_naar_coordinaat(nieuwe_driehoek[1],p),

314 Getal_naar_coordinaat(nieuwe_driehoek[2],p)]

315 #Verwijder alle zijdes uit conf die niet disjunct zijn met de nieuwe driehoek

316 for i in range(0, tot_punten):

317 for j in range(i+1,tot_punten):

318 A = Getal_naar_coordinaat(i,p)

319 B = Getal_naar_coordinaat(j,p)

320 if (Get_zijde_verz(A,B,p,verz) and not Driehoek_lijn_disjunct(driehoek,[A,B])):

321 Set_zijde_verz(A,B,p,verz,False)

322

323 #Conformeer de verzameling

324 Conforme_verz(p,verz)

325

326 #Voeg nieuwe boundaries toe en verwijder randen die al gebruikt zijn

327 A,B,C = nieuwe_driehoek

328

329 BC = True

330 AC = True

331 #Kijk of AC en BC in de verzameling randen zat, zoja verwijder deze

332 i = 0

333 while (i < randen.shape[0]):

334 if (B in randen[i] and C in randen[i]):

335 BC = False

336 randen = np.delete(randen,i,axis=0)

337 elif (A in randen[i] and C in randen[i]):

338 AC = False

339 randen = np.delete(randen,i,axis=0)

340 else:

341 i += 1

342

343 #Voeg deze zijdes toe als we ze nog niet op de rand hadden en ze

344 #niet op de rand van het vierkant liggen.

345 if (BC and not Zijde_rand_vierkant(driehoek[1],driehoek[2],p)):

346 randen = np.vstack((randen,[B,C]))

347 if (AC and not Zijde_rand_vierkant(driehoek[0],driehoek[2],p)):

348 randen = np.vstack((randen,[A,C]))

349

350 #Voeg deze driehoek toe aan de triangulatie

351 triangulatie = np.vstack((triangulatie,[driehoek]))

352

353 return triangulatie

354

355 #Maakt Gezellige Verzameling uit de Conforme Verzameling

356 def Gez_verz(p,conf_verz):

357 tot_punten = (p+1)**2

358 c = 0

359 gez_verz = np.zeros((0,3), dtype=int)

360 for i in range(0,tot_punten):

361 for j in range(i+1,tot_punten):

362 for k in range(j+1,tot_punten):

363 A = Getal_naar_coordinaat(i,p)

364 B = Getal_naar_coordinaat(j,p)

365 C = Getal_naar_coordinaat(k,p)

366 if (Zijdes_driehoek_verz(A,B,C,p,conf_verz) and

367 Driehoek_scherp(A,B,C)):

368

109

Page 110: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

369 gez_verz = np.vstack((gez_verz,[i,j,k]))

370 c += 1

371

372 return gez_verz

373

374 #Maakt rooster voor plot

375 def Prepare_Plot(p,ax=None):

376 if ax == None:

377 ax = plt.figure().add_subplot(111,aspect=’equal’)

378 ax.set_xticks(range(p+1))

379 ax.set_yticks(range(p+1))

380 ax.set_autoscaley_on(False)

381 ax.set_autoscalex_on(False)

382 plt.grid()

383 return ax

384

385 #Teken de driehoeken

386 def Plot_Triangles(Triangles,ax):

387 for triangle in Triangles:

388 triangle = triangle.reshape(-1,2)

389 ax.plot(triangle[[0,1,2,0],0],triangle[[0,1,2,0],1], c=’b’)

390

391 if __name__ == "__main__":

392 LOAD_FILE = 0

393 for p in range(20):

394 print "\n p = ", p

395 verz = None

396 if LOAD_FILE:

397 try:

398 verz = np.load("conf_verz"+str(p)+".npy")

399 except:

400 verz = None

401

402 if verz == None:

403 start_time = time.clock()

404 verz = Conforme_verz_symmetrie(p)

405 end_time = time.clock()

406 np.save("conf_verz"+str(p),verz)

407 print "Aantal seconde om conform te genereren:", end_time - start_time

408

409 indices = np.argwhere(verz)

410 print "Aantal conforme zijdes:", indices.shape[0]

411 start_time = time.clock()

412 triang = Triangulatie_willekeurig(p,verz)

413 if (triang != None):

414 np.save("triang"+str(p), triang)

415 end_time = time.clock()

416

417 print "Aantal seconde om triangulatie te vinden:", end_time - start_time

418 ax = Prepare_Plot(p)

419 Plot_Triangles(triang,ax)

420 plt.show()

421

422

423 start_time = time.clock()

424 gez_verz = Gez_verz(p,verz)

425 end_time = time.clock()

426 print "Aantal seconde om gezellig te genereren:", end_time - start_time

427 print "Aantal driehoeken in gez verzameling:", gez_verz.shape[0]

B.2. Scherpe roostertetraeders in de kubus tellen

1 import numpy as np

2 import itertools as it

3 import time

4

5 def Tetra_Scherp(punten):

6 a,b,c,d = punten

7 q = [np.cross(d-b,c-b),

8 np.cross(c-a,d-a),

9 np.cross(d-a,b-a),

10 np.cross(b-a,c-a)]

11 return ((np.dot(q[0],q[1]) < 0) and

12 (np.dot(q[0],q[2]) < 0) and

110

Page 111: Scherpe Triangulaties in de Eindige Elementen Methode · het onderwerp aangedragen en veel van de idee en uit Hoofdstuk 5 en 6 komen van zijn hand. De gesprekken met hem hebben niet

13 (np.dot(q[0],q[3]) < 0) and

14 (np.dot(q[1],q[2]) < 0) and

15 (np.dot(q[1],q[3]) < 0) and

16 (np.dot(q[2],q[3]) < 0))

17

18 def Tel_Scherp(p):

19 c = 0

20 kubus_punten = [[x,y,z] for x in range(p+1) for y in range(p+1) for z in range(p+1)]

21 combinaties = it.combinations(kubus_punten,4)

22 for comb in combinaties:

23 if Tetra_Scherp(np.array(comb)):

24 c += 1

25 return c

26

27 if __name__ == "__main__":

28 for p in range(1,10):

29 start_time = time.clock()

30 c = Tel_Scherp(p)

31 end_time = time.clock()

32 print "\nAantal scherpe tetraeders voor p = ",p,":", c

33 print "Aantal seconde om te tellen genereren:", end_time - start_time

111