Beruflich Dokumente
Kultur Dokumente
Jonas Lintermans
Tegenwoordig is het gebruikelijk om naast praktisch onderzoek ook een deel van het
onderzoek te simuleren. Dit gebeurt misschien wel het meest in de fluı̈do- en thermo-
dynamica. Het voordeel van deze vorm van onderzoek is de prijs. Wanneer we bijvoor-
beeld naar het onderzoek naar aero-elasticiteit van vliegtuigvleugels kijken, zien we dat
bij tests tijdens de vlucht de kostprijs inderdaad hoog kan oplopen, door ondermeer het
brandstofverbruik etc.
Ook het gevaar voor aero-elastische effecten als flutter zijn logischerwijs afwezig bij
computationele simulatie. Tegenwoordig komen deze simulaties qua correctheid aardig
in de buurt van de werkelijkheid.
Het doel van deze onderzoeksopdracht is om op een zo eenvoudige manier een be-
wegende cilinder te implementeren in OpenFOAM. Dit werd bereikt in verschillende
stappen. Uitgaande van een overgenomen code van David Van Cauteren, zullen we de
basisideeën van OpenFOAM onder de knie proberen te krijgen. Het is van groot belang
om elk element van de OpenFOAM-case voldoende te begrijpen. Dan pas kunnen we
over gaan naar de laatste stap, waar we een lineaire kracht aanbrengen op de gecreëerde
cilinder om deze te doen bewegen volgens een sinisoı̈daal pad.
Tijdens het onderzoek viel ik ook op andere zaken, die niet altijd evenveel te maken
hadden met de onderzoeksopdracht, maar wel van belang kunnen zijn voor de algemene
kennis van OpenFOAM. Ondermeer het opdelen van de case over een aantal processoren
en de snelheidswinst ervan komt aan bod.
i
ii
Inhoudsopgave
Inhoudsopgave ii
1 Literatuurstudie 1
1.1 Aero-elasticiteit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Stabiliteit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Statische Stabiliteit . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 Dynamische Stabiliteit . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3 Flutter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 OpenFOAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 Vuistregels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.2 Opdeling in OpenFOAM . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.3 Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Algemeen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 Onderzoek 15
2.1 Von Karman in OpenFOAM . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1 Begincode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2 Code met fijnere mesh . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.3 Code compileren in parallelmode . . . . . . . . . . . . . . . . . . . 18
2.2 Dynamische beweging: movingCone-tutorial . . . . . . . . . . . . . . . . . 21
2.2.1 De 0-directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2 De system-directory . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.3 De constant-directory . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 Dynamische beweging: movingCylinder-case . . . . . . . . . . . . . . . . . 23
2.3.1 De 0-directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.2 De system-directory . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.3 De constant-directory . . . . . . . . . . . . . . . . . . . . . . . . . 26
3 Conclusie 29
3.1 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Verder onderzoek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
iii
A Code van de Dynamische Cilinder 31
A.1 0 -directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
A.1.1 p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
A.1.2 U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
A.1.3 pointDisplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A.2 system-directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
A.2.1 controlDict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
A.2.2 decomposeParDict . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
A.2.3 fvSchemes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
A.2.4 fvSolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.2.5 tetFemSolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
A.3 constant-directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.3.1 polyMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.3.2 dynamicMeshDict . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.3.3 transportProperties . . . . . . . . . . . . . . . . . . . . . . . . . . 47
A.3.4 turbulenceProperties . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Bibliografie 49
Hoofdstuk 1
Literatuurstudie
Voor aanvang van het onderzoek naar flutter via een CFD-studie dienen we de verschil-
lende elementen van de te bespreken punten onder de knie te krijgen. Deze worden
hieronder besproken.
1.1 Aero-elasticiteit
Aero-elasticiteit is de studie omtrend de interactie tussen de vervorming van een elas-
tische structuur in een luchtstroom en de resulterende aero-dynamische kracht (Hodges
and Pierce, 2002). Deze studie kunnen we indelen in verschillende vlakken: de in-
teractie tussen elasticiteit en dynamica (structurele dynamica); de interactie tussen
aero-dynamica en elasticiteit (statische aero-elasticiteit) en de interactie tussen aero-
dynamica, elasticiteit en dynamica (dynamische aero-elasticiteit).
Aero-elastische verschijnselen kunnen de vliegprestaties zowel in positieve als negatieve
zin beı̈nvloeden. Bij de ontwikkeling van vliegtuigen moet rekening gehouden worden
met deze aero-elasticiteit. Men zal de negatieve invloeden proberen te beperken, terwijl
men de positieve invloeden zal proberen uit te buiten. Die uitbuiting kan een grote
invloed hebben op de prestaties van de Uninhabited Air Vehicles (UAVs). In de prak-
tijk zien we dat door dit aero-elastisch effect in het begin een kleine wijziging is in het
comfort bij het vliegen. Bij blijvende beweging door de lucht zien we dat er vermoei-
ing optreedt in de structuur. Deze vermoeidheid zal uiteindelijk een catastrofaal gevolg
hebben, zonder enige vorm van waarschuwing vooraf. In theorie hebben deze aero-
elastische problemen een statische en dynamische oorzaak. Dynamische oorzaken liggen
voor de hand. Aero-elastische problemen ontstaan hierbij door de krachtenwerking op
de structuur tijdens de vlucht. Kleine statische traagheidskrachten hebben in theorie
geen invloed op de aero-elastische effecten; grote traagheidskrachten daarentegen mogen
niet verwaarloosd worden. Aangezien dit niet het geval is in de praktijk door , kunnen
sommige aero-elastische fenomenen beschreven worden door kleine vervormingsbeweg-
ingen uit te voeren op de structuur. Deze bewegingen kunnen soms aantonen of de
structuur naar wens zal reageren op de verkregen krachten in vlucht, dan wel dat deze
compleet omgekeerd zou reageren. Het is duidelijk dat de proeven, voorafgaande aan de
1
2 Hoofdstuk 1. Literatuurstudie
1.2 Stabiliteit
Het meest voorkomende aero-elastisch probleem is die van de stabiliteit (Hodges and
Pierce, 2002). Deze wordt gedefinieerd als de neiging om na verstoring van het even-
wicht terug te keren naar de evenwichtstoestand. Het zijn de aero-dynamische krachten
die markant vergroten in functie van de snelheid, terwijl de elasticiteitsmodulus van
het gebruikte materiaal onafhankelijk is van de snelheid. Wanneer de aero-dynamische
krachten de elastische krachten overwinnen zien we twee mogelijkheden. Wanneer de
iertiekrachten klein zijn, en dus weinig invloed hebben op het systeem, spreken we van
divergentie. Deze kan optreden bij een te grote snelheid of bij een te grote aanvalshoek
(AoA). Bij het bereiken van deze snelheid zal de structuur zodanig belast zijn dat deze
het zal begeven. Bij de constructie van de vliegtuigen zal men dus nauwkeurig moeten
bepalen hoe groot deze divergentiesnelheid is. Zie Figuur 1.1
Figuur 1.1: divergentiesnelheid in functie van de AoA (Hodges and Pierce, 2002)
• Bochtenprestaties
Hoofdstuk 1. Stabiliteit 3
Het flutterverschijnsel, dat optreedt bij grote traagheidskrachten, kan gebruikt worden
voor het volgende:
met een aperiodische beweging. Het systeem kan ook dempend oscillerend en na verloop
van tijd uit te doven tot het evenwichtspunt. Deze twee eerste gevallen, weergegeven
op Figuur 1.4 worden dynamisch stabiel genoemd. We kunnen dus concluderen dat
een lichaam statisch stabiel is wanneer het na verloop van tijd terug keert naar zijn
evenwichtspositie.
Aan de andere kant hebben we in Figuur 1.5 de dynamisch instabiele lichamen. Hier-
bij gaat het lichaam blijven oscileren met stijgende amplitude om uiteindelijk te bezwij-
ken aan deze beweging. De evenwichtspositie wordt bij dynamisch instabiele lichamen
nooit behouden.
We kunnen besluiten dat een dynamisch stabiel lichaam altijd statisch stabiel moet
zijn. Het omgekeerde geldt wel niet altijd. Het is wel van groot belang om er eerst voor
te zorgen dat een vliegtuig statisch stabiel is.
Hoofdstuk 1. Stabiliteit 5
1.2.3 Flutter
Flutter is de meest gevaarlijke fenomeen dat kan optreden in het aero-elastische studie-
domein. Daarom is het belangerijk om deze volledig te begrijpen en te weten met welke
factoren rekening moet worden gehouden. We kunnen flutter eenvoudig voorstellen door
middel van Figuur 1.6. Hierop zien we dat de flutterbeweging wordt ontbonden in 2
componenten: een wringende component
Figuur 1.7: Exitatie van de vleugel door een willekeurig signaal (Dowell, 2004)
Figuur 1.9: Reele en imaginaire component van de frequentie in functie van de vliegsnelheid
(Dowell, 2004)
Hoofdstuk 1. Stabiliteit 7
Mach-getal Ook hier zal de fluttersnelheid het kleinst zijn bij een benadering aan
1, maar deze keer dan van het Mach-getal. Bij een Mach-getal M 1 krijgen we een
1
verandering in dichtheid van het fluı̈dum. Hierdoor krijgen we dat UF ∼ M 2 bij M 1.
Deze relatie wordt weergegeven in Figuur 1.11.
Reynolds Getal Hoe hoger het Reynolds getal, hoe turbulenter de stroming. Deze
turbulentie zorgt voor wervelingen in de stroming. Hoewel flutter een fenomeen is dat
altijd gepaard gaat met het afscheiden van wervels waarvan de frequentie gelijk is aan de
flutter frequentie, is het een fenomeen veroorzaakt door wervel-geı̈nduceerde oscillaties.
Het laatstegenoemde zorgt voor de aero-elastische flow-structure interactie voor stro-
mingssnelheden waarbij de wervel-afscheiding in de buurt komt van de eigenfrequentie
van de structuur (Scanlan and Simiu, 2004).
• Betere verdeling van het gewicht, zodat het zwaartepunt zeker voor het aero-
elastisch centrum ligt.
1.3 OpenFOAM
Voor het CFD-onderzoek naar de verschillende factoren die flutter beı̈nvloeden maken
we, zoals eerder uitgelegd in de literatuurstudie, gebruik van het Open Source-programma
OpenFOAM. Voor we starten met het echte onderzoek moeten we enkele principes en
algemeenheden begrijpen omtrend OpenFOAM.
1.3.1 Vuistregels
Bij het oplossen van een bepaalde probleemstelling in OpenFOAM maken we telkens ge-
bruik van enkele vuistregels (OpenFoam, 2010). We moeten er voor zorgen de berekenin-
gen zo precies en zo stabiel mogelijk zijn. Dit kunnen we verwezenlijken door rekening
te houden met de zogenaamde Courant number. Deze moeten we lager dan n proberen
te houden.
C0 ≤ 1
d
δx = n
met d de totale afstand van het veld, en n het aantal cellen in de richting van de stroming.
We zien dus dat de tijdsstap een zeker invloed zal hebben op Courant number. Met
de gedachte C0 ≤ 1 in ons achterhoofd, zien we dat de tijdsstap klein genoeg genomen zal
moeten worden om deze C0 klein genoeg te houden. Wanneer we dus de vloeistofsnelheid
willen verhogen zullen we ook de tijdsstap moeten verkleinen om een precies resultaat
te bekomen. Algemeen moeten we dus ten aller tijde rekening houden met het feit dat
C0 ≤ 1 moet zijn.
Nr Grootheid SI-Eenheid
1 Massa kg
2 Lengte m
3 Tijd s
4 Temperatuur K
5 Hoeveelheid stof kgmol
6 Stroom A
7 Lichtintensiteit cd
1.3.3 Solver
Voor een beschrijving van alle beschikbare solvers wordt doorverwezen naar de Open-
FOAM User Guide.
Hoofdstuk 1. Algemeen 13
1.4 Algemeen
Algemeen kunnen we dus stellen dat we, bij het opstellen van een OpenFOAM-project,
rekening moeten houden met de volgende zaken:
Onderzoek
Figuur 2.1: Voorstelling van de eenvoudige mesh na een tijdsverloop van 6 seconden.
15
16 Hoofdstuk 2. Onderzoek
ming aan. Uit deze kinematische viscositeitscoëficiënt ν kunnen we ook het Reynoldsgetal
Re halen volgens:
d.|U |
Re = ν
Wanneer we deze code laten lopen zien we een duidelijk (Figuur 2.3 en 2.2) afscheiding
van de stroming waardoor we de Von Karman-wervelstraat zien ontstaan.
We zien echter dat bij de randen van de windtunnel nog te veel invloed hebben op het
verloop van de case. Dit zouden we eventueel kunnen verhelpen door een fijnere mesh
te maken. Dit wordt besproken in paragraaf 2.1.2.
Hoofdstuk 2. Von Karman in OpenFOAM 17
Figuur 2.2: Von Karman-wervels na een tijdsverloop van 4,3 seconden (vloeistofsnelheid)
Figuur 2.3: Von Karman-wervels na een tijdsverloop van 4,3 seconden (druk)
Figuur 2.4: Voorstelling van de verfijnde, cilindrisch opgedeelde mesh na een tijdsverloop van
3 seconden.
blockMesh
decomposePar
reconstructPar
paraFoam
Om een idee te geven van de tijdswinst door gebruik te maken van een verschillend
aantal processoren, is dit in tabel 2.1 en grafieken 2.5 en 2.6 weergegeven. Hier werd
een eenvoudige case (figuur 2.4) uitgerekend over een tijdspanne van 0.6 s en met een
tijdsstap 0.00005 s.
1 2848 1
2 1804 1.58
3 1941 1.47
4 1995 1.43
We zien dat de optimale rekentijd wordt bereikt bij het gebruik van twee processoren.
Dit moet echter met een korrel zout genomen worden. Er zijn verschillende manieren om
de case op te splitsen. Bij het aantonen van deze rekentijd hebben we gebruik gemaakt
van de eenvoudigste manier. Het is logisch dat bij gebruik van een betere en dus meer
ingewikkelde verdeling, we ook snellere rekentijden kunnen en hoogstwaarschijnlijk zullen
verkrijgen. Dit valt echter niet in het bestek van het onderzoek en daarom gaan we hier
niet verder op in. We gaan voor het berekenen van de dynamische cilinder de eenvoudige
manier van opsplitsen van de mesh over de processoren gebruiken en dus enkel gebruik
maken van twee processoren.
20 Hoofdstuk 2. Onderzoek
We zien dat bij het bewegen van het voorwerp, de mesh links van de muur uitgerokken
wordt (en dus minder nauwkeurige resultaten zal geven) en de rechterkant ervan zal
krimpen (en dus nauwkeurigere resulaten zal geven).
Nu we dit principe onder de knie hebben, kunnen we de meer algemene eigenschap-
pen van de case bestuderen. Deze eigenschappen vinden we terug in de movingCone-
22 Hoofdstuk 2. Onderzoek
directory. We vinden, zoals bij elke OpenFOAM-case drie subdirectories terug: 0, system
en constant. Een screenshot hiervan geeft een duidelijker beeld (figuur 2.11).
2.2.1 De 0-directory
Deze directory bevat gegevens over het stromende fluı̈dum.
• U -bestand: dit bestand bevat de gegevens over hoe een fluı̈dum zal reageren op de
verschillende delen van case, zoals de cilinder en wanden van de windtunnel, maar
ook op de onzichtbare denkbeeldige delen van het geheel.
• p-bestand: dit bevat dezelfde soort gegevens als het U -bestand maar dan in ver-
band met de druk.
2.2.2 De system-directory
Ook hier vinden we verschillende bestanden, die elk een deel van de bruikbare informatie
bevatten van de case. Van al deze bestanden is het controlDict-bestand het belangrijkste.
Deze bevat informatie over het soort solver er gebruikt wordt (in dit geval de pimpleDyM-
Foam-solver), de start- en stoptijd, de tijdsstap, die gevonden wordt aan de hand van de
Hoofdstuk 2. Dynamische beweging: movingCylinder-case 23
vuistregel in paragraaf 1.3.1, en het schrijfinterval; deze geeft aan aan welke frequentie
de berekeningen daadwerkelijk weggeschreven moeten worden in de case-directory.
2.2.3 De constant-directory
Deze directory bevat de informatie over de opbouw van de case. Het blockMeshDict-
bestand deelt het geheel op in verschillende delen. Bij het meshen werd geen rekening
gehouden met de kwaliteit van de uitkomst. Door de grove opdeling is het resultaat
onnauwkeurig. We dienen dit dus te vermijden bij het implementeren van onze case.
Oorspronkelijk was het de bedoeling om de code van de statische cilinder te laten lijken
op de code van de movingCone-tutorial om de cilinder op soortgelijke manier te laten
oscilleren. De oscillatie bleek op deze manier onmogelijk. Daarbij kwam nog eens dat
bij het aanpassen en compileren van de statische mesh telkens een andere error werd
gegeven. Daarom werd een andere manier gezocht voor het implementeren van deze
beweging. Het was een topic op het CFD-online-forum (OpenCFD, 2008) dat nuttige
informatie bevatte.
2.3.1 De 0-directory
p
De inhoud van deze file wordt weergegeven in Appendix A.1.1. Deze file bevat de in-
formatie in verband met de druk. We zien aan de class volScalarField dat we met een
scalaire grootheid te maken hebben, waarvan dus enkel de grootte van belang is. We zien
2
dat de druk gegeven wordt in m s2
. Dit gebeurt volgens tabel 1.1.De druk gedraagt zich
aan alle wanden van de windtunnel en aan de cilinder overal gelijk en wordt aangegeven
door zeroGradient. De gradiënt geeft, zoals gezien in Wiskunde voor Ingenı̈eurs (2de
jaar), de richting aan van de maximale stijging van de stromingsfunctie. zeroGradiënt
geeft dat de functie zijn maximum al heeft bereikt. De wanden krijgen de opdracht
om de druk onaangetast te laten, waardoor de druk als het ware kan ontsnappen uit
de windtunnel. Dit is beter visualiseerbaar wanneer we de case visualiseren en enkel de
druk in beschouwing nemen.
24 Hoofdstuk 2. Onderzoek
U
De inhoud van deze file wordt weergegeven in Appendix A.1.2.
De U-file bevat informatie over de snelheid van de stroming over de verschillende on-
derdelen van de case. In het begin van de file wordt de klasse van U gedeclareerd als
zijnde vectoriel (volVectorField ). De snelheid kan dus een bepaalde grootte en zin in
x-, y- en z-richting hebben. De ruimte tussen de wanden wordt beschouwd als open
en ideaal —dus wrijvingsloos—, waardoor de stroming hier vrij zal kunnen stromen.
Opnieuw treffen we het type empty aan voor de frontAndBack van de case.
De outlet wordt aangegeven als zeroGradı̈ent. Deze krijgt dus de opdracht om de stro-
mingssnelheid niet te veranderen, waardoor de stroming vrij kan wegstromen uit de
windtunnel.
De overige componenten, waarvan het type overigens gedeclareerd wordt in de block-
MeshDict-file (Appendix A.3.1) en beschreven wordt in een later onderdeel van deze
paper (Paragraaf 2.3.3), zijn van het type fixedValue. Enkel de inlet heeft een snelheid-
scomponent meegekregen, nl.(5 0 0). Dit wil zeggen dat er een stroming vloeit aan 5 m s
in de x-richting. De overige fixedValue-componenten bevatten geen snelheidsvectoren,
waardoor de stroming aan de rand van deze componenten nul zal zijn en dus stil staat.
Dit komt overeen met de werkelijkheid, waar de stroperigheid van de stroming ervoor
zorgt dat de stroming stil staat aan de wanden. Wanneer er gepoogd wordt de case te
simuleren op zo een manier dat de randen geen vertragend effect zouden hebben op de
stroming, dan zouden we het type zeroGradiënt moeten gebruiken, waarvan de betekenis
eerder werd aangehaald.
pointDisplacement
Dit is het bestand dat voor de beweging van de mesh zorgt en kan teruggevonden worden
in Appendix A.1.3. Deze is wellicht het belangrijkste bestand van het hele project. Als
de opbouw en functie van dit bestand begrepen wordt, is ons streefdoel, de dynamische
cilinder, bijzonder dichtbij.
We zien dat de klasse van dit bestand vectoriëel is. Dit is logisch, aangezien de cilinder
in verschillende richtingen kan oscilleren. De gewenste beweging is een sinusoı̈dale be-
weging volgens de y-as. Het OpenFOAM-packet bevat een voorschreven functie die deze
sinusoı̈dale functie kan verwezenlijken, nl. oscillatingDisplacement. Dit type wordt dus
meegegeven aan de te oscilleren cilinder. Enkel de hoeksnelheid ω en de amplitude dienen
meegegeven te worden. In deze case heb ik gepoogd de cilinder te laten bewegen met een
hoeksnelheid van 12 rad ω 12
s . Omgerekend naar frequentie geeft dit f = 2×π = 2×π = 1.91Hz.
Deze op- en neergaande beweging heeft een amplitude in de y-richting (0 -0.055 0).
Hoofdstuk 2. Dynamische beweging: movingCylinder-case 25
Bij deze amplitudegrootte (-0.055 in de y-richting) moet rekening houden met de con-
vertToMeters-factor die aangegeven wordt in de /constant/polymesh/blockMeshDict-
directory. Deze is, voor deze case althans, gezet op 0.4825. Dit wil zeggen dat 1 meter
aangegeven in de blockMeshDict-file gelijk is aan 0.4825 meter in werkelijkheid. De os-
cillatingDisplacement houdt echter geen rekening met deze schalingsfactor, waardoor we
manueel moeten uitrekenen wat de amplitude moet zijn voor deze case. Dit alles kan
natuurlijk vermeden worden door de convertToMeters-factor gelijk te stellen aan 1.
obstacle
{
type oscillatingDisplacement;
omega 12;
amplitude (0 -0.055 0);
value uniform (0 0 0);
}
Verder zien we dat de overige componenten van de case allen fixedValues zijn met
waarde nul. Deze zullen dus niet bewegen gedurende het hele tijdsverloop.
2.3.2 De system-directory
controlDict
Deze file is als het ware de controlerende file van de case. De code ervan kan teruggevon-
den worden in Appendix A.2.1.
De controlDict-file is van het type dictionary. Letterlijk vertaald is dit woordenboek.
Bij het oplossen van de case zal OpenFOAM rekening moeten houden met de gegevens
die in deze dictionaries worden opgegeven.
Een van de belangrijkste gegevens in dit bestand is zonder twijfel de gebruikte Solver.
De solver is een voorgeschreven code voor een bepaald geval. Het verkeerd gebruiken
van een solver resulteert in een foutieve uitkomst. Zoals al opgegeven in paragraaf 1.3.3
zullen we voor deze case gebruik maken van pimpleDyMFoam-solver.
Niet enkel de soort solver wordt gegeven in dit bestand. Ook begin- en eindtijd wordt
gegeven, net als de grootte van de tijdstap en wegschrijffrequentie. Zoals uitgelegd in
de paragraaf over de Vuistregels in OpenFOAM (1.3.1) moet deze tijdstap klein genoeg
zijn om de case oplosbaar te maken.
decomposeParDict
Dit bestand wordt gebruikt in verband met het oplossen van de case over verschillende
processoren. Een uitgebreide bespreking hiervan werd reeds gedaan in paragraaf 2.1.3.
De code wordt gegeven in Appendix A.2.2.
26 Hoofdstuk 2. Onderzoek
2.3.3 De constant-directory
polymesh/blockMeshDict
De blockMeshDict-file geeft het uitzicht van de case weer (Appendix A.3.1). De code
bestaat uit vijf belangrijke onderdelen.
1. convertToMeters – Hier wordt aangegeven wat de schaling is van de case ten
opzichte van de werkelijkheid. In deze blockMeshDict-file wordt de schaling op
0.4825 gezet. Dit betekent dat 1m in de case 0.4825m in werkelijkheid is.
2. vertices – Dit is het deel waar de basiscoördinaten van de case worden gedecla-
reerd. Deze coördinaten bestaan uit een x-, y- en z-component. Elke case moet
in 3 dimensies worden opgesteld, aangezien we met een vloeiende stroming werken
waarvan de onderdelen ook 3 dimensies hebben.
3. blocks – Hier worden verschillende coördinaten samengevoegd tot “blokken”. hex
geeft aan dat de verdeling gebeurt volgens een Hexahedron. Voor meer verdel-
ingswijzen wordt doorverwezen naar de OpenFOAM User Guide (Tabel 5.1).
4. edges – Om afgeronde randen te verkrijgen, kunnen we een rechte lijn laten omvor-
men tot een cirkelboog. Deze cirkelboog wordt in het edges-deel gedeclareerd.
5. patches – Hier worden de verschillende oppervlakteblokken samengevoegd tot een
volume-eenheid en een type toegekend.
dynamicMeshDict
Appendix A.3.2 geeft weer wat er in dit bestand wordt beschreven. Hier wordt
aangegeven welk algoritme gebruikt moet worden om de dynamische cilinder te verwezen-
lijken. Voor deze case wordt verwezen naar dynamicMotionSolverMesh. De gebruikte
solver voor deze beweging zal de displacementLaplacian zijn. Voor meer informatie over
de soorten solvers wordt doorverwezen naar de OpenFOAM User Guide.
transportProperties
Via dit bestand kunnen we de stroperigheid van de stromende vloeistof bepalen. Dit
doen we door de kinematische viscositeitscoëfficiënt ν te declareren. Zoals gezegd in
2
paragraaf 2.1.1 wordt deze in standaardomstandigheden gelijk gesteld aan 1, 5.10−5 ms .
Hoe de code er verder uit ziet vindt u in Appendix A.3.3.
Hoofdstuk 2. Dynamische beweging: movingCylinder-case 27
turbulenceProperties
Deze file bevat de informatie over de turbulentie van de stroming. We houden het
eenvoudig en werken dus enkel met een laminaire stroming. De code kan teruggevonden
worden in Appendix A.3.4.
28 Hoofdstuk 2. Onderzoek
Hoofdstuk 3
Conclusie
3.1 Samenvatting
De doelstellingen van dit onderzoek is behaald. Er is een zo duidelijk mogelijke beschrijv-
ing gegeven van de werking van OpenFOAM. Het is nu geweten welke de basisbestanden
en -mappen zijn van een eenvoudige OpenFOAM-case en met welke vuistregels men
rekening zal moeten houden.
Met deze kennis is de ultieme doelstelling met succes tot een goed einde gebracht.
Deze bestond er in een eenvoudige cilinder in een windtunnel te laten oscilleren. De code
hiervan kan terug gevonden worden in de bijlage.
29
30 Hoofdstuk 3. Conclusie
Bijlage A
A.1 0 -directory
A.1.1 p
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
upperWall
{
type zeroGradient;
31
32 Hoofdstuk A. Code van de Dynamische Cilinder
lowerWall
{
type zeroGradient;
}
obstacle
{
type zeroGradient;
}
inlet
{
type zeroGradient;
}
outlet
{
type fixedValue;
value uniform 0;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //
A.1.2 U
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
Hoofdstuk A. 0-directory 33
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
boundaryField
{
upperWall
{
type fixedValue;
value uniform (0 0 0);
}
lowerWall
{
type fixedValue;
value uniform (0 0 0);
}
obstacle
{
type fixedValue;
value uniform (0 0 0);
}
inlet
{
type fixedValue;
value uniform (5 0 0);
}
outlet
{
type zeroGradient;
}
frontAndBack
{
34 Hoofdstuk A. Code van de Dynamische Cilinder
type empty;
}
}
// ************************************************************************* //
A.1.3 pointDisplacement
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class pointVectorField;
object pointMotionU;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
boundaryField
{
obstacle
{
type oscillatingDisplacement;
omega 12;
amplitude (0 -0.055 0);
value uniform (0 0 0);
}
upperWall
{
type fixedValue;
value uniform (0 0 0);
}
Hoofdstuk A. 0-directory 35
lowerWall
{
type fixedValue;
value uniform (0 0 0);
}
inlet
{
type fixedValue;
value uniform (0 0 0);
}
outlet
{
type fixedValue;
value uniform (0 0 0);
}
frontAndBack
{
type empty;
}
// ************************************************************************* //
36 Hoofdstuk A. Code van de Dynamische Cilinder
A.2 system-directory
A.2.1 controlDict
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleDyMFoam;
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 3;
deltaT 0.00005;
writeControl timeStep;
writeInterval 50;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression uncompressed;
Hoofdstuk A. system-directory 37
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
adjustTimeStep no;
maxCo 1;
// ************************************************************************* //
A.2.2 decomposeParDict
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 2;
method simple;
simpleCoeffs
{
n ( 2 1 1 );
delta 0.001;
}
hierarchicalCoeffs
{
n ( 3 1 1 );
38 Hoofdstuk A. Code van de Dynamische Cilinder
delta 0.001;
order xyz;
}
metisCoeffs
{
processorWeights ( 1 1 1 1 );
}
manualCoeffs
{
dataFile "";
}
distributed no;
roots ( );
// ************************************************************************* //
A.2.3 fvSchemes
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default Euler;
}
Hoofdstuk A. system-directory 39
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss linear;
div((nuEff*dev(grad(U).T()))) Gauss linear uncorrected;
}
laplacianSchemes
{
default none;
laplacian(nu,U) Gauss linear corrected;
laplacian((1|A(U)),p) Gauss linear corrected;
laplacian(diffusivity,cellDisplacement) Gauss linear uncorrected;
laplacian(nuEff,U) Gauss linear corrected;
laplacian(rAU,p) Gauss linear corrected;
interpolationSchemes
{
default linear;
interpolate(HbyA) linear;
}
snGradSchemes
{
default corrected;
}
fluxRequired
{
default no;
p;
}
// ************************************************************************* //
40 Hoofdstuk A. Code van de Dynamische Cilinder
A.2.4 fvSolution
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
pcorr
{
solver PCG;
preconditioner DIC;
tolerance 0.01;
relTol 0;
}
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0.05;
}
pFinal
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
}
Hoofdstuk A. system-directory 41
U
{
solver PBiCG;
preconditioner DILU;
tolerance 1e-05;
relTol 0;
}
cellDisplacement
{
solver PCG;
preconditioner DIC;
tolerance 1e-08;
relTol 0;
}
}
PIMPLE
{
nOuterCorrectors 2;
nCorrectors 1;
nNonOrthogonalCorrectors 0;
}
// ************************************************************************* //
A.2.5 tetFemSolution
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format binary;
class dictionary;
location "system";
object tetFemSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
42 Hoofdstuk A. Code van de Dynamische Cilinder
solvers
{
motionU ICCG 1e-06 0;
}
// ************************************************************************* //
Hoofdstuk A. constant-directory 43
A.3 constant-directory
A.3.1 polyMesh
blockMeshDict
convertToMeters 0.4825;
vertices
(
//Achterkant
(0 0 -0.01) //0
(0 1.5 -0.01) //1
(1.5 1.5 -0.01) //2
(5 1.5 -0.01) //3
(5 0 -0.01) //4
(1.5 0 -0.01) //5
(0.467157287525381 0.467157287525381 -0.01) //6
(0.467157287525381 1.032842712474619 -0.01) //7
(1.032842712474619 1.032842712474619 -0.01) //8
(1.032842712474619 0.467157287525381 -0.01) //9
(0.714644660940673 0.714644660940673 -0.01) //10
(0.714644660940673 0.785355339059327 -0.01) //11
(0.785355339059327 0.785355339059327 -0.01) //12
(0.785355339059327 0.714644660940673 -0.01) //13
//Voorkant
(0 0 0.01) //14
44 Hoofdstuk A. Code van de Dynamische Cilinder
blocks
(
hex (0 6 7 1 14 20 21 15) (40 40 1) simpleGrading (1 1 1)
hex (6 10 11 7 20 24 25 21) (40 40 1) simpleGrading (1 1 1)
hex (7 8 2 1 21 22 16 15) (40 40 1) simpleGrading (1 1 1)
hex (11 12 8 7 25 26 22 21) (40 40 1) simpleGrading (1 1 1)
hex (8 9 5 2 22 23 19 16) (40 40 1) simpleGrading (1 1 1)
hex (12 13 9 8 26 27 23 22) (40 40 1) simpleGrading (1 1 1)
hex (10 6 9 13 24 20 23 27) (40 40 1) simpleGrading (1 1 1)
hex (0 5 9 6 14 19 23 20) (40 40 1) simpleGrading (1 1 1)
hex (5 4 3 2 19 18 17 16) (200 40 1) simpleGrading (1 1 1)
);
edges
(
arc 11 12 (0.75 0.8 -0.01)
arc 25 26 (0.75 0.8 0.01)
arc 12 13 (0.8 0.75 -0.01)
arc 26 27 (0.8 0.75 0.01)
arc 13 10 (0.75 0.7 -0.01)
arc 27 24 (0.75 0.7 0.01)
arc 10 11 (0.7 0.75 -0.01)
arc 24 25 (0.7 0.75 0.01)
arc 7 8 (0.75 1.15 -0.01)
arc 21 22 (0.75 1.15 0.01)
arc 8 9 (1.15 0.75 -0.01)
arc 22 23 (1.15 0.75 0.01)
arc 9 6 (0.75 0.35 -0.01)
Hoofdstuk A. constant-directory 45
patches
(
wall upperWall
(
(1 15 16 2)
(2 16 17 3)
)
wall lowerWall
(
(0 5 19 14)
(5 4 18 19)
)
wall obstacle
(
(10 11 25 24)
(11 12 26 25)
(13 27 26 12)
(10 24 27 13)
)
patch inlet
(
(0 14 15 1)
)
patch outlet
(
(4 3 17 18)
)
empty frontAndBack
(
(0 1 7 6)
(6 7 11 10)
46 Hoofdstuk A. Code van de Dynamische Cilinder
(7 1 2 8)
(11 7 8 12)
(13 12 8 9)
(9 8 2 5)
(6 10 13 9)
(0 6 9 5)
(5 2 3 4)
(14 20 21 15)
(20 24 25 21)
(21 22 16 15)
(25 26 22 21)
(27 23 22 26)
(23 19 16 22)
(20 23 27 24)
(14 19 23 20)
(19 18 17 16)
)
);
mergePatchPairs
(
);
// ************************************************************************* //
A.3.2 dynamicMeshDict
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format binary;
class dictionary;
location "constant";
object dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Hoofdstuk A. constant-directory 47
dynamicFvMesh dynamicMotionSolverFvMesh;
motionSolverLibs ( "libfvMotionSolvers.so" );
solver displacementLaplacian;
// ************************************************************************* //
A.3.3 transportProperties
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// [kg m s K A mol cd] => kinematische viscositeit
transportModel Newtonian;
nu nu [0 2 -1 0 0 0 0] 1.5e-05;
// ************************************************************************* //
A.3.4 turbulenceProperties
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6.x |
| \\ / A nd | Web: www.OpenFOAM.org |
48 Hoofdstuk A. Code van de Dynamische Cilinder
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object turbulenceProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
simulationType laminar;
// ************************************************************************* //
Bibliografie
49