Lappeenrannan teknillinen yliopisto School of Energy Systems Energiatekniikan koulutusohjelma BH10A0202 Energiatekniikan kandidaatintyö MIELIVALTAISISTA POLYEDREISTA MUODOSTETUT CFD-LASKENTAHILAT CFD MESHES FORMED BY ARBITRARY POLYHEDRA Työn tarkastaja: TkT Heikki Suikkanen Työn ohjaaja: TkT Heikki Suikkanen Joensuussa 8.1.2017 Simo Kettunen
TIIVISTELMÄ Lappeenrannan teknillinen yliopisto School of Energy Systems Energiatekniikan koulutusohjelma Simo Kettunen Kandidaatintyö 40 sivua, 18 kuvaa, 6 taulukkoa ja 1 liite Tarkastaja: TkT Heikki Suikkanen Hakusanat: CFD, numeerinen virtausdynamiikka, laskentahila, tetraedri, polyedri CFD-laskenta eli numeerinen virtausdynamiikka on koko ajan entistä käytetympi menetelmä ratkoa nesteiden ja kaasujen virtaukseen liittyviä ongelmia, sillä se tarjoaa monia etuja perinteisiin fyysisiin koelaitteistoihin verrattuna. Usein on kannattavampaa suorittaa simulointi tietokoneella, jolloin vältytään suurien ja kalliiden koelaitteistojen rakentamiselta. Kuitenkin monimutkaisille systeemeille soveltuvan laadukkaan laskentahilan luominen on vaikeaa. Säännöllisen ja rakenteellisen laskentahilan luominen jo vähänkin monimutkaisempaan laskentamalliin on erittäin vaikeaa ja usein jopa mahdotonta. Rakenteettoman tetraedreista koostuvan laskentahilan luominen puolestaan on mahdollista automaattisilla hilageneraattoreilla, mutta tetraedrihilan tarkkuus on huonompaa heksaedrihiloihin verrattuna. Mielivaltaisista polyedreista koostuvat laskentahilat ovat yksi mahdollinen ratkaisu tähän ongelmaan, mutta kyseinen laskentahilatyyppi ei ole vielä saanut merkittävää jalansijaa CFD-laskennassa. Tässä kandidaatintyössä tehtiin kirjallisuuskatsaus CFD-laskentaan painottuen erityisesti laskentahiloihin ja esiteltiin polyedreja hyödyntäviä CFD-laskentaohjelmistoja. Lisäksi tässä työssä tehtiin MATLABilla polyedrihilageneraattori, joka luo polyedrihilan suhteellisen yksinkertaisille geometrioille syötteenä annettavan tetraedrihilan perusteella. Lopuksi tehtiin vertailua tetraedrihilojen ja tässä työssä tehdyllä polyedrihilagenerattorilla luotujen polyedrihilojen välillä. Simuloinnit tehtiin kolmella eri hilatiheydellä kummallekin hilatyypille. CFD-laskennassa tutkittiin laskentatuloksen konvergoitumista, laskennan tarkkuutta sekä ajan ja muistin käyttöä. Polyedrihilat menestyivät samoilla hilatiheyksillä paremmin lähes kaikilla osa-alueilla muistin käyttöä lukuun ottamatta. Erot ovat vielä suuremmat polyedrihilojen hyväksi jos otetaan huomioon se, ettei polyedrihila tarvitse yhtä paljon laskentakoppeja kuin tetraedrihila vastaavan laskentatarkkuuden saavuttamiseksi.
3 SISÄLLYS 1 JOHDANTO...................................... 7 2 LASKENTAHILAT.................................. 9 2.1 Hilatopologia................................... 11 2.2 Tietorakenteet hilan esittämisessä........................ 11 3 POLYEDRIHILOJA HYÖDYNTÄVÄT CFD-KOODIT.............. 16 3.1 Polyedrihiloja rakentavat CFD-koodit...................... 16 3.2 Muita CFD-koodeja................................ 17 4 POLYEDRIHILOJEN RAKENTAMINEN..................... 18 4.1 Pohjahilan esikäsittely.............................. 18 4.2 Algoritmi duaalihilan rakentamiseen....................... 19 4.2.1 Duaalihilan kärkien luominen...................... 20 4.2.2 Duaalihilan tahkojen luominen...................... 27 4.2.3 Duaalihilan laskentakoppien luominen.................. 28 4.3 Duaalihilan jälkiprosessointi........................... 29 4.4 Polyedrihilageneraattorin puutteet ja jatkokehitystavoitteet........... 30 5 LASKENTAHILOJEN VERTAILU......................... 33 5.1 Tuloksen konvergoituminen............................ 33 5.2 Tuloksen tarkkuus................................. 35 5.3 Laskenta-aika ja muistinkäyttö.......................... 36 6 YHTEENVETO.................................... 38 LÄHTEET......................................... 39 LIITTEET LIITE I POLYEDRIHILAGENERAATTORIN LÄHDEKOODI I.1 main.m...................................... 41 I.2 anglebetweenvectors.m.............................. 42
4 I.3 cartesian2barycentric.m.............................. 42 I.4 checkfaces.m................................... 43 I.5 circumcircle.m.................................. 45 I.6 circumsphere.m.................................. 46 I.7 classifyentities.m................................. 47 I.8 flipconnectivity.m................................ 49 I.9 makemesh.m................................... 50 I.10 readmesh.m.................................... 58 I.11 sortedges.m.................................... 60 I.12 vars.m....................................... 61 I.13 writemesh.m................................... 62 I.14 zones.m...................................... 65
5 SYMBOLI- JA LYHENNELUETTELO Roomalaiset aakkoset A tason normaalivektorin x-suuntainen komponentti a barysentrinen koordinaatti B tason normaalivektorin y-suuntainen komponentti C tason normaalivektorin z-suuntainen komponentti f optimoitava kohdefunktio k turbulenssin kineettinen energia m 2 /s 2 N normaalivektori n lukumäärä P piste avaruudessa R 2 2-ulotteinen avaruus R 3 3-ulotteinen avaruus r säde x x-koordinaatti, optimipiste y y-koordinaatti z z-koordinaatti Kreikkalaiset aakkoset α suoran suuntavektorin x-suuntainen komponentti β suoran suuntavektorin y-suuntainen komponentti γ suoran suuntavektorin z-suuntainen komponentti ɛ turbulenssin dissipaatio m 2 /s 3 κ häiriöalttius ρ vähennyskerroin θ kulma rad Yläindeksit Pisteen tai koordinaatin muunnos avaruudesta R 3 avaruuteen R 2
6 Alaindeksit 0 keskipiste 1, 2,... ensimmäinen, toinen,... i i:s termi j j:s termi n n:s termi p painopiste x x-akselin suuntainen komponentti y y-akselin suuntainen komponentti z z-akselin suuntainen komponentti Lyhenteet 0D, 1D,... nollaulotteinen, yksiulotteinen,... AIAA American Institute of Aeronautics and Astronautics ASCII American Standard Code for Information Interchange CFD computational fluid dynamics, numeerinen virtausdynamiikka CGNS CFD General Notation System FDM finite difference method, differenssimenetelmä FEM finite element method, elementtimenetelmä FVM finite volume method, kontrollitilavuusmenetelmä RANS Reynolds-averaged Navier-Stokes equations, Reynolds-keskiarvotetut Navier-Stokesin yhtälöt
7 1 JOHDANTO Numeerinen virtausdynamiikka eli CFD-laskenta (computational fluid dynamics) tarkoittaa fluidien eli nesteiden ja kaasujen virtaukseen liittyvien ongelmien ratkaisemista numeerisesti tietokoneiden avulla. Sen historia ulottuu tietokoneiden alkuaikoihin 1950-luvulle asti, vaikkakin CFD:ssä käytettyjä ratkaisumenetelmiä esitettiin ensimmäisen kerran jo useita vuosikymmeniä aiemmin. (Chung 2002, s. 3) Tietokoneiden laskentatehon kehittyessä runsaasti viime vuosikymmenten aikana CFD-laskennasta on tullut entistä käytetympi keino ratkaista ongelmia yhä useammalla eri alalla. CFD mahdollistaa virtausdynamiikkaan liittyvien ongelmien ratkaisemisen tietokoneella, jolloin vältytään kalliiden ja suurien testauslaitteistojen rakentamiselta. Muita etuja ovat muun muassa joustavuus ja helppo muokattavuus, sillä simulointitilanteita on paljon helpompi rakentaa tietokoneella verrattuna fyysisten koelaitteistojen rakentamiseen. Lisäksi vaarallisten tilanteiden mallintaminen, kuten turvalaitteiden pettäminen, on turvallisempaa simuloida CFD-laskennalla verrattuna oikeisiin testauslaitteistoihin. CFD-laskenta vaatii kuitenkin pohjatiedot virtauksen käyttäytymisestä ja sen ominaispiirteistä, sillä ongelmien simulointi väärillä malleilla ja oletuksilla voi antaa virheellisiä tai epätarkkoja tuloksia. (Versteeg & Malalasekera 2007, s. 2 4) CFD-laskenta jakautuu kolmeen vaiheeseen, jotka ovat esikäsittely, simulointi ja jälkikäsittely. Esikäsittelyssä laskenta-alueesta luodaan geometria eli malli, joka jaetaan pieniin laskentakoppeihin. Laskentakopit yhdessä muodostavat laskentahilan. Lisäksi ongelmalle annetaan tunnetut parametrit, kuten materiaalien ominaisuudet ja virtauksen reunaehdot. Simulointivaihe perustuu virtaukseen liittyvien yhtälöiden ratkaisemiseen hilassa iteratiivisesti numeeristen algoritmien avulla. Jokaiselle laskentakopille muodostetut säilyvyysyhtälöt diskretisoidaan algebrallisiksi yhtälöiksi, joista muodostuu ratkaistava yhtälöryhmä. Säilyvyysyhtälöissä makroskooppisella tasolla käytettyjä suureita fluidille ovat esimerkiksi nopeus, entalpia, lämpötila ja paine. Ratkaisumenetelmiä ovat esimerkiksi differenssimenetelmä (FDM, finite difference method), elementtimenetelmä (FEM, finite element method) ja kontrollitilavuusmenetelmä (FVM, finite volume method). Lopuksi jälkikäsittelyssä analysoidaan tuloksia. Tuloksia voidaan verrata aiempiin simulointeihin tai perinteisillä koelaitteistoilla saatuihin tuloksiin. Jälkikäsittelyyn kuuluu myös tulosten esittäminen visuaalisessa muodossa, esimerkiksi virtauskenttänä. (Versteeg & Malalasekera 2007, s. 2 4)
8 CFD-laskennassa käytetyt laskentahilat ovat lähes poikeuksetta rakenteettomia tetraedrihiloja, rakenteellisia heksaedrihiloja tai molempia sisältäviä hybridihiloja. Yksinkertaisemmille laskenta-alueille käytetään usein heksaedreista koostuvia laskentahiloja ja monimutkaisemmille geometrioille tetraedreista koostuvia laskentahiloja. Polyedrihilojen käyttäminen on CFD-laskennassa toistaiseksi varsin vähän käytetty menetelmä. Kuitenkin viimeisen vuosikymmenen aikana on tutkittu ja kehitetty mielivaltaisista polyedreista koostuvia laskentahiloja, joilla on useita etuja verrattuna perinteisiin tetraedri- tai heksaedrilaskentahiloihin. Polyedrihiloja ovat viime vuosina tutkineet muun muassa Garimella et al. (2013), Balafas (2014) ja Lee (2015). Garimella et al. (2013) tekivät tetraedrihilaa syötteenä käyttävän polyedrihilageneraattorin. Balafas (2014) kehitti vastaavan polyedrihilageneraattorin omassa opinnäytetyössään. Ongelmana näillä ohjelmilla on etenkin huonolaatuisten laskentakoppien muodostuminen alueille, joihin muodostuu konkaaveja eli suuria sisäkulmia sisältäviä polyedreja. Lee (2015) on pohtinut tätä ongelmaa ja esittänyt ratkaisuja kyseiselle ongelmalle. Tällä hetkellä polyedrihiloja on mahdollista luoda muun muassa muutamilla kaupallisilla CFD-laskentaohjelmistoilla, kuten ANSYS Fluentilla ja Star-CCM+:lla. Lisäksi avoimen lähdekoodin CFD-laskentaohjelmistossa nimeltä OpenFOAM on mahdollista käyttää polyedrihiloja. Varsinkin Star-CCM+:n kehittäjä CD-adapco käyttää CFD-laskentaohjelmistonsa mainostamisessa polyedrihiloja. Tässä kandidaatintyössä on tavoitteena tarkastella laskentahiloja CFD-laskennan kannalta, luoda työkalu, joka luo yksinkertaisille geometrioille mielivaltaisista polyedreista koostuvan laskentahilan sekä vertailla tetraedri- ja polyedrihiloja keskenään. Työ on rajattu keskittymään pääosin laskentahiloihin. CFD on erittäin laaja kokonaisuus, ja se kehittyy jatkuvasti, joten aiheen laajuuden kannalta muita osa-alueita kuin laskentahiloja sen suuremmin käsitellä.
9 2 LASKENTAHILAT Laskentahilat koostuvat laskentakopeista, joista yleisimmin kolmiulotteisessa geometriassa on käytetty tetraedreja. Mikäli geometria on tarpeeksi yksinkertainen, laskentahila voidaan muodostaa helposti heksaedreista. Kuvassa 1 on esitetty tetraedrin, heksaedrin ja polyedrin muotoiset laskentakopit. Heksaedrihilat ovat useimmiten rakenteellisia, eli laskentakoppien sijainnit pystytään esittämään helposti esimerkiksi koordinaattien avulla. Rakenteellisen heksaedrihilan muodostaminen etenkin monimutkaisempiin geometrioihin on kuitenkin vaikeaa, usein jopa mahdotonta. Myös tetraedreista ja heksaedreista koostuvia hybridihiloja on käytetty. AIAA:n (American Institute of Aeronautics and Astronautics) CFD-laskentaan kehittämä suositus CGNS (CFD General Notation System) määrittelee kymmenen erilaista laskentakoppia, joista kaksi on tetraedreja, kaksi pyramideja, kolme pentaedreja sekä kolme heksaedreja (AIAA 2005). Laskentahilat voidaan luoda CFD-laskentaohjelmiston esikäsittelijällä, joka on saatavissa kaikissa suuremmissa kaupallisissa CFD-laskentaohjelmistoissa. Vaihtoehtoisesti laskentahila voidaan luoda erikseen siihen käyttöön tarkoitetulla ohjelmistolla. Varsinkin tetraedrihilan luomiseen käytettyjä automaattisia hilageneraattoreita on kehitetty runsaasti. Viimeisen vuosikymmenen aikana on tutkittu laskentahilan rakentamista mielivaltaisista polyedreista, sillä monia tetraedreihin ja heksaedreihin liittyviä heikkouksia saadaan karsittua käyttämällä polyedreista koostuvia laskentahiloja. Polyedreilla tarkoitetaan laskentahilojen yhteydessä lähinnä muita monitahokkaita kuin tetraedreja, heksaedreja, prismoja tai pyramideja. Esimerkit mielivaltaisista polyedreista ja tetraedreista muodostetuista laskentahiloista on esitetty kuvassa 2. Kuva 1. Esimerkkejä laskentakopeista: tetraedri, heksaedri ja polyedri Tetraedreista muodostuneiden hilojen suurimpana vahvuutena on niiden joustavuus ja
10 tetraedrien yksinkertainen rakenne, sillä monimutkaisiinkin geometrioihin, joihin rakenteellista heksaedrihilaa ei voida rakentaa, voidaan sen sijaan muodostaa tetraedrihila. Tetraedrihilojen heikkoutena voidaan pitää niiden heikkoja numeerisia ominaisuuksia etenkin lähellä geometrian pintaa, jossa ne yleensä korvataan prismoilla. Lisäksi jokaisella tetraedrilla on vain neljä vierekkäistä tetraedria toisin kuin heksaedreilla, joilla vierekkäisiä heksaedreja on kuusi. Heksaedrin tapauksessa säilyvyysyhtälöt lasketaan kuuden laskentakopin suhteen, kun tetraedrin tapauksessa luku jää neljään. Tetraedrihilalla ei siis päästä yhtä tarkkaan tulokseen kuin heksaedrihilalla. (Perić 2004) Kuva 2. Vasemmalla tetraedreista koostuva laskentahila, oikealla mielivaltaisista polyedreista koostuva laskentahila Mielivaltaisista polyedreista rakentuvat laskentahilat ratkaisevat monia tetraedri- ja heksaedrihiloihin liittyviä ongelmia. Polyedreilla on enemmän vierekkäisiä laskentakoppeja kuin tetraedri- tai heksaedrihiloilla, mikä tekee polyedrihilasta laskennan kannalta tarkemman menetelmän. Lisäksi polyedrihila on helppo rakentaa monimutkaisillekin geometrioille, mikäli tetraedrihilankin pystyy siihen rakentamaan. Polyedrihiloja on käytetty etenkin tietokonegrafiikassa. (Balafas 2014) Polyedrihilojen heikkoutena voidaan kuitenkin pitää polyedrien mielivaltaisuutta: kaikki polyedrit eivät ole geometrialtaan samanlaisia, minkä lisäksi ne eivät ole niin yksinkertaisia kappaleita kuin tetraedrit ja heksaedrit. Lisäksi polyedrihilat CFD-laskennassa ovat varsin uusi hilatyyppi, minkä takia standardoituja menetelmiä polyedrihiloihin liittyen ei ole määritelty.
11 Esimerkiksi CGNS:ssä ei määritellä mitään polyedrihiloihin liittyen, eikä polyedrien laadun tarkastamiseen ole kehitetty vakiintunutta tarkastusmenetelmää. 2.1 Hilatopologia Kolmiulotteisten hilojen rakenneosia ovat kärjet (0D), särmät (1D), tahkot (2D) ja laskentakopit (3D). Kärjet ovat laskenta-avaruudessa olevia pisteitä. Jokainen särmä yhdistää kaksi pistettä toisiinsa. Tahkot muodostuvat särmistä ja lopulta kolmiulotteiset laskentakopit tahkoista. Tässä työssä kolmiulotteiselle rakenneosalle käytetään termiä laskentakoppi, sillä vakiintunutta suomenkielistä termiä ei ole muodostunut. Hilan rakenneosat muodostuvat siis alemmassa dimensiossa olevista rakenneosista. Toisaalta jokainen hilan rakenneosa, joka ei ole suurinta käytettyä dimensiota, kuluu myös ylemmässä dimensiossa olevalle rakenneosalle. Esimerkiksi niin sanotussa täydellisessä kolmiulotteisessa hilassa jokainen kärki kuuluu särmälle, jokainen särmä kuuluu tahkolle ja jokainen tahko kuuluu laskentakopille. Laskentakoppi puolestaan on suurinta, eli tässä tapauksessa kolmatta dimensiota, joten se ei pysty kuuluumaan millekään muulle korkeammassa dimensiossa olevalle rakenneosalle. Laskentakoppi on myös mahdollista määritellä ilman särmiä. Tällöin tahkot muodostuvat kärjistä, sillä kärjet voidaan järjestää esimerkiksi myötäpäivään kulkevaan suuntaan. Tällöin kärkien välille voi kuvitella kuvitteelliset särmät, jolloin muodostuu tahko. Lisäksi säännölliset laskentakopit, kuten tetraedrit ja heksaedrit, on mahdollista määritellä myös ilman tahkoja. Särmien ja tahkojen jättäminen pois hilatopologiasta mahdollistaa muistin säästämisen. Polyedreille tahkoja ei ole mahdollista jättää pois hilatopologiasta, koska kokonaista polyedrilaskentakoppia ei ole mahdollista muodostaa ainoastaan kärkien tai särmien avulla. Tämä johtuu siitä, että kärkiä ja särmiä ei voi laittaa järjestykseen kolmiulotteisessa avaruudessa siten, että ne topologisesti muodostaisivat kolmiulotteisen mielivaltaisen laskentakopin. 2.2 Tietorakenteet hilan esittämisessä Asioiden esittäminen tietokoneella vaatii niiden muuntamisen tietokoneen ymmärtämään muotoon. Tämä puolestaan tarkoittaa CFD:n osalta sopivan tietorakenteen kehittämistä hilaa varten. Jokainen laskentahilassa oleva kärki on laskenta-avaruudessa oleva piste, joten on luontevaa esittää kärjet euklidisen avaruuden pisteinä. Tällöin kaksiulotteisen laskentahilan jokainen kärki voidaan esittää kaksiulotteisen avaruuden R 2 x- ja y-koordinaattien
12 avulla. Vastaavasti kolmiulotteisen laskentahilan jokainen kärki voidaan esittää kolmiulotteisen avaruuden R 3 x-, y- ja z-koordinaattien avulla. Varhaisimpia tietorakenteita hilojen esittämiseen ovat muun muassa half-edge- sekä winded-edge-tietorakenteet. Half-edge-tietorakenteessa jokainen särmä on jaettu puoliksi kahteen osaan, jotka kulkevat vastakkaisiin suuntiin. Jokaiseen puolisärmään on linkitetty lähtöja päätekärjet, edellinen, seuraava ja vastakkainen puolisärmä sekä tahko, johon puolisärmä kuuluu. Tahko koostuu tässä tietorakenteessa samaan suuntaan kulkevista puolisärmistä. (de Berg et al. 2008) Varhaisimpien hilatietorakenteiden tilalle on kehitetty hierarkkisia tietorakenteita. Hierarkkisessa tietorakenteessa jokainen rakenneosatyyppi muodostaa oman listan, jolloin jokainen rakenneosa saa oman indeksin listassa. Lisäksi jokainen rakenneosa linkitetään muissa dimensioissa oleviin rakenneosiin. Niin sanotussa täydellisessä hierarkkisessa tietorakenteessa jokainen laskentahilan rakenneosa on linkitetty suoraan seuraavaan ylemmässä sekä alemmassa dimensiossa olevaan rakenneosaan. Hierarkkiset tietorakenteet voidaan rakentaa myös jättämällä väliin jonkin rakenneosan väliset linkitykset linkittämällä esimerkiksi kärjet suoraan tahkoihin. Lisäksi mikäli hilageometriasta jätetään pois myös linkitykset tahkoista särmiin, ei näin ollen särmiä esiinny tietorakenteessa ollenkaan. Kuvassa 3 on esimerkkejä erilaisista hierarkkisista tietorakenteista. Laskentakoppi Laskentakoppi Laskentakoppi Tahko Tahko Tahko Särmä Särmä Särmä Kärki Kärki Kärki Kuva 3. Esimerkkejä hierarkkisista tietorakenteista
13 Kuvissa 4, 5 ja 6 on esitetty kaksi heksaedrilaskentakoppia. Kuvaan 4 on merkitty kummankin laskentakopin kaikki kärjet, joita on yhteensä 12 kappaletta. Lisäksi kuvasta voidaan lukea jokaisen kärjen koordinaatti x-, y- ja z-akseleilta. Kuvaan 5 on merkitty kummankin laskentakopin jokainen särmä, joita on 20 kappaletta. Kuvassa 6 on puolestaan merkitty viisi tahkoa, joista kaksi kuuluu oikealla puolella olevalle laskentakopille ja loput vasemmalla puolella olevalle laskentakopille. Selvyyden vuoksi taka-alalle jäävät tahkot on jätetty merkkaamatta kuvaan. Taulukkoihin 1 4 on merkitty kärkien koordinaatit, särmien linkitykset kärkiin, tahkojen linkitykset särmiin ja laskentakoppien linkitykset tahkoihin. Esimerkiksi laskentakoppiin vasemmalla puolella olevaan laskentakoppiin 1 kuuluvat tahkot 1, 2, 3, 4, 5, 6, tahkoon 2 kuuluvat särmät 1, 5, 6, 9 ja särmään 5 kuuluvat kärjet 1 ja 5, joiden koordinaatit ovat (0, 0, 0) ja (1, 0, 0). Kuva 4. Kaksi heksaedreista koostuvaa laskentakoppia, joiden kaikki kärjet 1-12 on merkitty kuvaan Kuva 5. Kaksi heksaedreista koostuvaa laskentakoppia, joiden kaikki särmät 1-20 on merkitty kuvaan
14 Kuva 6. Kaksi heksaedreista koostuvaa laskentakoppia, joiden tahkot 1, 2, 5, 9 ja 10 on merkitty kuvaan Taulukko 1. Kärkien koordinaatit Taulukko 2. Särmien linkitykset kärkiin Kärki Koordinaatit (x, y, z) 1 (0, 0, 0) 2 (0, 0, 1) 3 (0, 1, 1) 4 (0, 1, 0) 5 (1, 0, 0) 6 (1, 0, 1) 7 (1, 1, 1) 8 (1, 1, 0) 9 (2, 0, 0) 10 (2, 0, 1) 11 (2, 1, 1) 12 (2, 1, 0) Särmä Kärjet 1 1, 2 2 2, 3 3 3, 4 4 1, 4 5 1, 5 6 2, 6 7 3, 7 8 4, 8 9 5, 6 10 6, 7 11 7, 8 12 5, 8 13 5, 9 14 6, 10 15 7, 11 16 8, 12 17 9, 10 18 10, 11 19 11, 12 20 9, 12
15 Taulukko 3. Tahkojen linkitykset särmiin Tahko Särmät 1 1, 2, 3, 4 2 1, 5, 6, 9 3 9, 10, 11, 12 4 3, 7, 8, 11 5 2, 6, 7, 10 6 4, 5, 8, 12 7 11, 15, 16, 19 8 17, 18, 19, 20 9 9, 13, 14, 17 10 10, 14, 15, 18 11 12, 13, 16, 20 Taulukko 4. Laskentakoppien linkitykset tahkoihin Laskentakoppi Tahkot 1 1, 2, 3, 4, 5, 6 2 3, 7, 8, 9, 10, 11 Tässä työssä tehdyssä ohjelmalla on käytetty laskentahiloille hierarkkista tietorakennetta. Polyedrihilan luomisen ajaksi tetraedrihilalle muodostetaan täydellinen hierarkkinen tietorakenne. Polyedrihilalle käytetään hierarkkista tietorakennetta, josta on jätetty särmät pois. Tällöin kärjet linkittyvät suoraan tahkoihin sekä tahkot kärkiin.
16 3 POLYEDRIHILOJA HYÖDYNTÄVÄT CFD-KOODIT Polyedrihilat ovat suhteellisen uusi menetelmä hilan rakentamisessa, mutta muutama kaupallinen CFD-laskentakoodi osaa rakentaa ja soveltaa polyedrihiloja. Lisäksi avoimen lähdekoodin ohjelmassa nimeltä OpenFOAM on mahdollista luoda polyedrihiloja. 3.1 Polyedrihiloja rakentavat CFD-koodit ANSYS Fluent on CFD-laskentaohjelmisto, jossa on mahdollisuus tehdä CFD-laskentaa geometrian luomisesta jälkiprosessointiin asti. ANSYS Fluent vaatii polyedrihilan rakentamista varten pohjahilan, joka voi sisältää tetraedreja, heksaedreja ja prismoja. Kuitenkaan pelkästään heksaedreista koostuvia hiloja ANSYS Fluent ei muunna polyedrihilaksi, sillä tällöin myös duaalihila sisältää vain heksaedreja, eikä muunnoksesta ole käytännön hyötyä. ANSYS Fluentissa on kolme eri mahdollisuutta luoda polyedrihiloja. Polyedrihila voidaan luoda siten, että koko pohjahila muunnetaan duaalihilaksi. Mikäli pohjahila sisältää heksaedreja, ne muunnetaan polyedreiksi vain, mikäli niiden vieressä on muita laskentakoppeja kuin heksaedreja. Kaksi muuta vaihtoehtoista mahdollisuutta luoda polyedrihila ovat ainoastaan vääntyneiden huonolaatuisten tetraedrien muuntaminen polyedreiksi sekä kelluvia kärkiä tai särmiä sisältävien laskentakoppien muuntaminen polyedreiksi. (ANSYS 2016, s. 191) Star-CCM+ on CD-adapcon kehittämä simulointiohjelma, jolla on mahdollista tehdä numeerista laskentaa virtausdynamiikassa ja kiinteiden aineiden mekaniikassa. Star-CCM+ sisältää myös esikäsittelijän geometrian ja laskentahilan luomiseen ja jälkikäsittelijän tulosten analysointiin. (CD-adapco 2016) CD-adapcolla on myös toinen CFD-laskentaohjelmisto nimeltään CD-Star, jossa on myös mahdollista suorittaa CFD-laskentaa hilan generoinnista tulosten analysointiin asti. Polyedrihiloja on mahdollista käyttää niin Star-CCM+:ssa kuin Star-CD:ssäkin. CD-adapco panostaa erittäin vahvasti polyedrihilojen kehittämiseen, ja se on itse maininnut olleensa johtavassa asemassa tietokoneavusteisen suunnittelun alalla. (CD-adapco 2007, s. 6) OpenFOAM on avoimen lähdekoodin CFD-laskentaohjelma, joka koostuu laajasta C++-koodikirjastosta. OpenFOAMiin sisältyy esikäsittelijä ja lukuisia ratkaisualgoritmeja. Jälkikäsittely on mahdollista tehdä avoimen lähdekoodin ohjelmalla nimeltä ParaView. Laskentahilan luominen onnistuu joko työkaluilla blockmesh ja snappyhexmesh. Myös hilan tuominen onnistuu esimerkiksi ANSYS Fluentista tai Star CCM+:sta. Kuten ANSYS Fluent, myös OpenFOAM vaatii polyedrihilan rakentamista varten tetraedrihilan, mikä
17 onnistuu polydualmesh-työkalulla. OpenFOAMissa on mahdollisuus muuntaa polyedreista koostuva laskentahila takaisin tetraedreista koostuvaksi laskentahilaksi käyttäen samaa työkalua kuin polyedrihilan luomisessa. PolyDualMesh-työkalulle annettavia asetuksia ovat konkaavien laskentakoppien jakaminen pienempiin konvekseihin laskentakoppeihin, mahdollisuus luoda kaksi tahkoa kahden vierekkäisen laskentakopin välille alkuperäisen tahkon ollessa huonolaatuinen sekä estää edellä esitetty toiminto hilan ulkoreunoilla. (CFD Direct 2016) Caedium (aikaisemmalta nimeltä Symlab) on Symscapen kehittämä CFD-laskentaohjelmisto. Caediumin perusosa on ladattavissa ja käytettävissä ilmaiseksi, mutta edistyneimmät toiminnot vaativat useita Caediumin lisäosia. Kaikki kuusi lisäosaa sisältyvät Caedium Professional -pakettiin. Polyedrihilan luomiseen ja hyödyntämiseen vaaditaan RANS Flow -lisäosa, joka on kehitetty avoimen lähdekoodin CFD-laskentaohjelman OpenFOAMin pohjalta. RANS Flow -lisäosan CFD-laskenta perustuu RANS-yhtälöiden (Reynolds-averaged Navier Stokes) ratkaisemiseen. Koska RANS Flow -lisäosa perustuu OpenFOAMiin, on kummassakin ohjelmassa samat toiminnot polyedrihilojen laskennan suhteen. (Symscape 2016) 3.2 Muita CFD-koodeja Tässä osiossa esitellään lyhyesti muita CFD-koodeja, jotka pystyvät hyödyntämään polyedrihiloja laskennassaan, mutta eivät pysty luomaan niitä. Toisin sanoen polyedrihila on ensin luotava jollain muulla ohjelmalla ennen mahdollista käyttöä tässä osiossa listatuissa koodeissa. Code_Saturne on ranskalaisen Électricité de Francen kehittämä avoimen lähdekoodin CFD-laskentaohjelma, joka pystyy hyödyntämään polyedreista koostuvia hiloja laskennassaan. Code_Saturnen hyväksymiä polyedrihilan mahdollistavia tiedostomuotoja ovat Ensight Gold, MED ja CGNS. Polyedrihilan tuominen onnistuu myös Star-CCM+:sta. (Électricité de France 2015, s. 23 27) Dolfyn on avoimen lähdekoodin CFD-koodi, joka ei kuitenkaan sisällä jälkikäsittelijää, joten tulosten analysointi on tehtävä muilla ohjelmilla. Esikäsittelijäkin on rajoittunut, sillä Dolfynin esikäsittelijä mahdollistaa vain laskentahilan muuntamisen esikäsittelyn sopivaan muotoon. Mallin geometria ja laskentahila on luotava muilla ohjelmilla. Dolfyn perustuu Fortan 95 -ohjelmointikieleen, ja Fortran 95 -kääntäjä on edellytys Dolfynin käyttämiseen. (Krüs 2008)
18 4 POLYEDRIHILOJEN RAKENTAMINEN Mielivaltaisista polyedreista muodostetun laskentahilan rakentamisessa lähtökohtana on tetraedreistä koostuva lähtöhila, jonka perusteella lasketaan polyedreista koostuva hila. Tetraedreista koostuvaan laskentahilaan, joka toimii syötteenä algoritmille, viitataan tässä työssä termillä pohjahila. Algoritmin lopputuloksena syntyvään polyedreista muodostuvaan hilaan viitataan puolestaan termillä duaalihila. Tässä osiossa esitetään algoritmi, joka rakentaa polyedrihilan tetraedrihilan perusteella. Lisäksi tässä työssä kirjoitettiin MATLABilla polyedrihilageneraattori, joka käyttää kyseistä algoritmia. Sen lähdekoodi on esitetty liitteessä I. Ohjelman toiminta on varsin suoraviivainen. Päätiedostona toimii tiedosto nimeltä main.m (liite I.1) ja säädettävät parametrit sijaitsevat tiedostossa vars.m (liite I.12). Ohjelmalle annetaan syötteenä ANSYS Fluentin hilatiedostona (.msh-tiedostopääte) ASCII-muodossa (American Standard Code for Information Interchange) tetraedrihila (funktio readmesh.m, liite I.10) ja sille tehdään esikäsittely. Tämän jälkeen luodaan polyedreista muodostuva duaalihila, jonka jälkeen sille tehdään jälkikäsittely. Lopuksi duaalihila tallennetaan EnSight Case Gold -tiedostomuotoon (funktio writemesh.m, liite I.13). 4.1 Pohjahilan esikäsittely Pohjahilan esikäsittelyyn kuuluvat tetraedrihilan tietorakenteen täydentäminen sekä toimenpide, joka luokittelee pohjahilan rakenneosat eri ryhmiin riippuen niiden sijainnista laskentahilassa. ANSYS Fluentin hilatiedosto sisältää pohjahilan kärkien koordinaatit, tahkojen linkitykset kärkiin sekä laskentakoppien linkitykset tahkoihin. Tietorakenne täydennetään täydelliseksi tietorakenteeksi, eli tietorakenteeseen luodaan särmät sekä kaikki puuttuvat linkitykset. Lopullinen tietorakenne on kuvan 3 ensimmäisen tietorakenteen mukainen. Rakenneosien luokittelussa tutkitaan kärjet, särmät ja tahkot (funktio classifyentities.m, liite I.7), ja se tehdään polyedrihilan luomisen helpottamiseksi, sillä algoritmin eri vaiheissa tarvitaan tietyissä sijainneissa olevia rakenneosia. Laskentakoppeja ei tarvitse luokitella. Ensimmäiseksi tahkot luokitellaan sisätahkoihin ja pintatahkoihin. Sisätahkojen ryhmään luokitellaan kaikki tahkot, jotka kuuluvat kahdelle eri laskentakopille. Pintatahkoihin luokitellaan kaikki loput tahkot, joita ei luokiteltu sisätahkoihin. Kaikki pintatahkot sijaitsevat geometrian reunoilla.
19 Särmät luokitellaan sisäsärmiin, pintasärmiin ja reunasärmiin. Kaikki ne särmät, jotka eivät kuulu yhdellekään pintatahkolle, luokitellaan sisäsärmiksi. Loput särmät luokitellaan joko pintasärmiksi tai reunasärmiksi. Jokainen näistä särmistä kuuluu aina kahdelle pintatahkolle, ja näiden luokittelu perustuu särmän pintatahkojen normaalivektorien väliseen kulmaan, joka on sama kuin pintatahkojen välinen kulma. Mikäli kulma on suurempi kuin ennalta määritelty arvo, kuuluu särmä pintasärmiin, muussa tapauksessa se merkitään reunasärmäksi. Myös muita niin geometrisia kuin topologisia kriteereitä voidaan käyttää särmien luokittelussa (Balafas, 2014). Lopuksi kärjet luokitellaan sisäkärkiin, pintakärkiin, reunakärkiin ja kulmakärkiin. Sisäkärjiksi luokitellaan kaikki kärjet, jotka eivät kuulu yhteenkään pinta- tai reunasärmään. Kulmakärjiksi lasketaan jäljelle jäävistä kärjistä kaikki kärjet, jotka kuuluvat vähintään kolmeen eri reunasärmään. Nämä kärjet muodostavat niin sanottuja geometriamallin nurkkia. Lopuista kärjistä reunakärkiin kuuluvat kaikki kärjet, jotka kuuluvat kahteen reunasärmään. Jäljelle jäävät kärjet ovat pintakärkiä. 4.2 Algoritmi duaalihilan rakentamiseen Kun kaikki tarvittavat toimenpiteet ennen duaalihilan rakentamista on tehty, voidaan aloittaa polyedreista koostuvan hilan luominen (funktio makemesh.m, liite I.9). Garimella et al. (2013) ovat esittäneet seuraavan algoritmin polyedrihilan rakentamiseen käyttäen tetraedrihilaa pohjahilana: 1) Luodaan duaalihilan kärki jokaiseen pohjahilan laskentakopin keskipisteeseen (kuva 8). 2) Luodaan duaalihilan kärki jokaiseen pohjahilan pintatahkon keskipisteeseen (kuvassa 10 piste 2). 3) Luodaan duaalihilan kärki jokaiseen pohjahilan reunasärmän keskipisteeseen (kuvassa 10 piste 3). 4) Luodaan duaalihilan kärki jokaiseen pohjahilan kulmakärkeen (kuvassa 10 piste 4). 5) Luodaan duaalihilan sisätahko yhdistämällä ne duaalihilan kärjet, joiden pohjahilan laskentakopeilla on yhteinen sisäsärmä (kuva 11, vasemman puoleinen tilanne). 6) Luodaan duaalihilan sisätahko yhdistämällä ne duaalihilan kärjet, joiden pohjahilan laskentakopeilla on yhteinen pinta- tai reunasärmä (kuva 11, keskimmäinen ja oikeanpuoleinen tilanne). 7) Luodaan duaalihilan pintatahko yhdistämällä ne duaalihilan kärjet, joiden pohjahilan pintatahkoilla on yhteinen pinta-, reuna- tai kulmakärki (kuvassa 12 tilanne kulmakärjen
20 tapauksessa). 8) Luodaan duaalihilan laskentakoppi yhdistämällä ne duaalihilan tahkot, joita leikkaavilla pohjahilan särmillä on yhteinen sisäkärki. 9) Luodaan duaalihilan laskentakoppi yhdistämällä duaalihilan tahkot, pinta-, reuna- ja kulmakärkien perusteella (kuva 13) 4.2.1 Duaalihilan kärkien luominen Duaalihilan kärjet luodaan neljään eri paikkaan. Ensimmäisenä paikkana on pohjahilan jokaisen laskentakopin sisällä oleva piste. Käytännössä piste voi olla mikä tahansa piste, mutta keskipisteen paikan määrittämisellä on suuri vaikutus duaalihilan laatuun. Huonosti määritellyt duaalihilan kärkien sijainnit muodostavat käyriä tahkoja, kuten kuvasta 7 voi huomata. Helppo tapa on määrittää keskipisteeksi tetraedrin painopiste, sillä tällöin jokainen algoritmin ensimmäisessä vaiheessa muodostettu duaalihilan kärki sijaitsee sen määrittävän tetraedrin sisällä. Syntyvät duaalihilan tahkot ovat kuitenkin huonolaatuisia tällä menetelmällä. Toinen vaihtoehto on määrittää keskipisteeksi kaikkia neljää tetraedrin kärkeä koskettavan pallon eli tetraedriä ympäröivän pallon keskipisteeseen. Kuva 7. Sama laskentakoppi samasta kuvakulmasta käyttäen erilaista määritystä duaalihilan kärkien sijainnille. Ensimmäisessä laskentakopissa on kaksi erittäin käyrää tahkoa. Tässä työssä duaalihilan kärkien sijainnit määritellään jokaisen tetraedrin kohdalla sitä ympäröivän pallon perusteella. Tetraedria ympäröivä pallo voidaan esittää neljän pisteen eli tetraedrin kärkien P 1, P 2, P 3 ja P 4 koordinaattien avulla yhtälöllä x 2 + y 2 + z 2 x y z 1 x 1 2 + y2 1 + z2 1 x 1 y 1 z 1 1 det A = x 2 2 + y2 2 + z2 2 x 2 y 2 z 2 1 = 0. (1) x 3 2 + y2 3 + z2 3 x 3 y 3 z 3 1 x4 2 + y2 4 + z2 4 x 4 y 4 z 4 1
21 Toisaalta pallo voidaan esittää yhtälöllä x 2 + y 2 + z 2 2xx 0 2yy 0 2zz 0 + g = 0 (2) missä (x 0, y 0, z 0 ) on pallon keskipiste ja g = x 2 0 + y2 0 + z2 0 r2, kun pallon säde on r. (Zwillinger 2003, s. 373 375) Laskemalla yhtälöstä 1 ensimmäisen rivin suhteen auki kehitetty determinantti ja jakamalla saatu yhtälö puolittain alideterminantilla det A 11, saadaan yhtälöä 2 vastaava yhtälö, missä 2x 0 = det A 12 det A 11, 2y 0 = det A 13 det A 11 ja 2z 0 = det A 14 det A 11. duaalihilan kärjen koordinaatit saadaan yhtälöstä Tällöin pallon keskipiste ja samalla (x 0, y 0, z 0 ) = ( det A12, det A ) 13 det A 14, 2 det A 11 2 det A 11 2 det A 11 (3) Kaikki yhtälöstä 3 saadut pisteet eli duaalihilan kärjet eivät kuitenkaan välttämättä muodostu tetraedrin sisälle, joten jokaisen kärjen sijainti tetraedrin suhteen täytyy tarkistaa ja tarvittaessa korjata. Kuvassa 8 vasemmalla on tilanne, jossa tetraedrin kärkien kautta kulkevan pallon keskipiste eli yhtälöstä 3 saatu piste on tetraedrin sisällä ja oikealla on tilanne, jossa piste on ulkona. Pisteen P 0 sijainti tetraedrin suhteen pystytään määrittelemään helposti barysentrisillä koordinaateilla, jotka määritellään tetraedrille yhtälöllä P 0 = a 1 P 1 + a 2 P 2 + a 3 P 3 + a 4 P 4 (4) missä P 1, P 2, P 3 sekä P 4 ovat tetraedrin kärkien koordinaatit normaalissa karteesisessa koordinaatistossa ja a 1, a 2, a 3 sekä a 4 ovat tetraedrin barysentriset koordinaatit. Barysentrisille koordinaateille pätee a 1 + a 2 + a 3 + a 4 = 1 (5) Kun määritellään tetraedrin kärkien P 1...4 ja tetraedriä ympäröivän pallon keskipisteen P 0 avulla
22 matriisi B ja matriisin B alideterminanttien avulla vektori b B = τ 1 τ 2 τ 3 τ 4 τ 5 x 1 x 2 x 3 x 4 x 0 y 1 y 2 y 3 y 4 y 0, b = z 1 z 2 z 3 z 4 z 0 1 1 1 1 1 det B 11 det B 12 det B 13 det B 14 det B 15 (6) saadaan tetraedria ympäröivän pallon eli duaalihilan kärjen barysentriset koordinaatit yhtälöstä a i = b i b 5, i = 1...4 (7) Barysentrisillä koordinaateilla määritelty piste on tetraedrin ulkopuolella mikäli pätee max a i > 1 tai min a i < 0, i = 1...4 (8) pisteen jollekin barysentriselle koordinaatille. (Skala 2007) Jos duaalihilan kärki sijaitsee tetraedrin ulkopuolella, kärjelle joudutaan etsimään vaihtoehtoinen paikka tetraedrin sisältä. Garimella et al. (2013) ovat määritelleet paikan mahdollisimman lähelle alkuperäistä kärkeä tetraedrin painopisteen ja yhtälöstä 3 saadun kärjen välille muodostuvalle janalle. Tässä työssä vaihtoehtoinen paikka määritellään samalle janalle, mutta lähemmäksi tetraedrin painopistettä käyttämällä kerrointa ρ. Parametri voi saada arvoja välillä 0 < ρ < 1, jossa arvo 0 tarkoittaa tetraedrin painopistettä ja arvo 1 sijaintia tetraedrin tahkolla. Kerrointa ρ käyttämällä vähennetään lyhyiden särmien muodostumista duaalihilaan. Vaihtoehtoisen paikan määrittäminen onnistuu siis etsimällä tetraedrin painopisteen ja yhtälöstä 3 saadun kärjen välillä kulkevan suoran leikkauspiste jollain tetraedrin tahkolla ja laskemalla uusi paikka sen perusteella. Barysentristen koordinaattien määritelmästä johtuen kyseinen tahko on vastakkainen sille tetraedrin kärjelle, jolla on pienin barysentrinen koordinaatti. Kuvassa 8 oikealla on tetraedrin kärkien kautta (punaiset pisteet) kulkeva pallo, jonka keskipiste on merkitty oranssilla pisteellä. Sininen piste on tetraedrin painopiste. Pallon keskipisteen ja tetraedrin painopisteen välillä kulkeva jana on sinisellä ja lopullinen paikka duaalihilan kärjelle on violetissa pisteessä.
23 Tetraedrin painopisteen ja yhtälöstä 3 saadun pisteen välillä kulkeva suora voidaan esittää yhtälöryhmällä x = x p + αt y = y p + βt (9) z = z p + γt missä x p, y p ja z p ovat tetraedrin painopisteen koordinaatit ja α, β sekä γ suoran suuntavektorin komponentit. Pienimmän barysentrisen koordinaatin omaavan pisteen vastakkaisen tahkon kärkien kautta kulkeva taso voidaan esittää yhtälöllä Ax + By + Cz + D = 0 (10) missä A, B ja C ovat tason normaalivektorin komponentit, D = (Ax i + By i + Cz i ) ja x i, y i ja z i ovat tahkon mielivaltaisen kärjen koordinaatit. Kuva 8. Yhtälöstä 3 saatu piste (oranssi) on vasemmalla tetraedrin sisäpuolella ja oikealla ulkopuolella. Oikeanpuoleisessa tilanteessa sininen piste on tetraedrin painopiste ja violetti piste lopullinen paikka duaalikärjelle. Sijoittamalla x, y ja z yhtälöstä 9 yhtälöön 10 saadaan täsmälleen tahkon kohdalla muuttujan t arvoksi t = Ax p By p Cz p D Aα + Bβ + Cγ (11) Duaalihilan kärjen koordinaateiksi saadaan
24 (x 0, y 0, z 0 ) = (x p + αρt; y p + βρt; z p + γρt) (12) Käyttämällä yhtälössä 12 kerrointa ρ = 0 kärjen koordinaatti on sama kuin tetraedrin painopisteen koordinaatti. Kertoimella ρ = 1 saadaan piste, joka sijaitsee täsmälleen tetraedrin tahkolla. Algoritmin toisessa vaiheessa duaalikärjet luodaan pohjahilan jokaisen pintatahkon keskipisteeseen. määritellä eri tavoin. ympyrän keskipisteenä. Kuten edellisessä vaiheessa, myös tässä vaiheessa keskipiste voidaan Tässä työssä tahkojen keskipisteet määritellään tahkoa ympäröivän Pohjahilan jokainen tahko on kolmio eli kaksiulotteinen kappale, joten laskettaessa kolmion keskipistettä jokainen tahko muunnetaan kaksiulotteiseen avaruuteen xy-tasolle siten, että yksi kolmion kärjistä on origossa, toinen positiivisella x-akselilla ja kolmas on x y-koordinaatiston ensimmäisellä tai toisella neljänneksellä. Tällöin muunnetun kolmion kärkien koordinaatit ovat P 1 = (0; 0), P 2 = ( P 1 P 2 ; 0), P 3 = ( P 1 P 3 cos θ; P 1 P 3 sin θ), missä P i on kolmion kärki kolmiulotteisessa avaruudessa, Pi P j kärkien P i ja P j välisen vektorin pituus, P i muunnetun kolmion kärki kaksiulotteisessa avaruudessa ja θ on kolmion kulma kärjessä P 1. Kolmiot P 1 P 2 P 3 ja P 1 P 2 P 3 ovat yhdenmuotoiset ja samankokoiset. Muunnetun kolmion kärkiä sivuavalle ympyrälle voidaan antaa yhtälö (13) (x ) 2 + (y ) 2 x y 1 (x det A = 1 )2 + (y 1 )2 x 1 y 1 1 (x 2 )2 + (y 2 )2 x 2 y 2 = 0 (14) 1 (x 3 )2 + (y 3 )2 x 3 y 3 1 missä x i ja y i ovat muunnetun kolmion kärjen koordinaatit xy-tasolla. Ympyrä voidaan esittää myös yhtälöllä (x ) 2 + (y ) 2 2x x 0 2y y 0 + g = 0 (15)
25 missä (x 0, y 0 ) on ympyrän keskipiste ja g = (x 0 )2 + (y 0 )2 r 2 kun ympyrän säde on r. Tällöin kärjen koordinaateiksi xy-tasolla saadaan ( det (x 0, y 0 ) = A12, det A ) 13 2 det A 11 2 det A 11 (16) Koska kolmiot ovat samankokoiset ja yhdenmuotoiset, voidaan keskipisteen sijainti määritellä kolmion särmien muodostamien vektoreiden avulla. kolmiulotteiseen avaruuteen yhtälöllä Keskipiste voidaan muuntaa takaisin P 0 = P 1 + t 1 P1 P 2 + t 2 P1 P 3, (17) missä P 1, P 2 ja P 3 ovat tahkon kärjen pisteet kolmiulotteisessa avaruudessa ja t 1 sekä t 2 saadaan ratkaisuna yhtälöryhmästä x 0 = t 1x 2 + t 2x 3 (18) y 0 = t 1y 2 + t 2y 3 Tahkon muunnosta on havainnollistettu kuvassa 9, jossa keltainen kolmio on alkuperäinen tahko ja sininen kolmio on kaksiulotteiseen avaruuteen muunnettu tahko. P 3 P 0 P 1 P 2 P 2 ' P 3 ' ' P 0 ' P 1 Kuva 9. Yhtälöstä 17 saatu keskipiste muunnetaan alkuperäiseen tahkoon kolmioiden muodostamien särmien avulla
26 Kuten algoritmin ensimmäisessä vaiheessa, myös toisessa vaiheessa yhtälöstä 17 saatu sijainti duaalikärjelle voi olla halutun sijainnin eli tässä tapauksessa kolmion P 1 P 2 P 3 ulkopuolella, joten kyseinen sijainti joudutaan tarkistamaan. Kaksiulotteisessa tapauksessa tarkistus on täysin vastaava kolmiulotteisen tapauksen tarkistuksen kanssa kolmatta eli z-ulottuvuutta lukuun ottamatta. Käyttämällä pisteitä P 1, P 2 ja P 3 voidaan duaalikärjen sijainti tarkastaa ja tarvittaessa korjata yhtälöillä 4 12 jättämällä kaikista yhtälöistä pois z-komponentit sekä neljäs piste, jolloin yhtälöt sieventyvät kaksiulotteiseen muotoon. Duaalikärjen mahdollinen uusi sijainti muunnetaan kolmanteen ulottuvuuteen yhtälöiden 17 ja 18 avulla. Kolmannessa vaiheessa jokaisen reunasärmäksi luokitellun pohjahilan särmän keskipisteeseen luodaan duaalihilan kärki (kuvassa 10 piste 3). Tällöin kärkien koordinaateiksi kahden kärjen P 1 ja P 2 välisen janan keskipisteenä saadaan yhtälöstä (Zwillinger 2003, s. 364) (x 0, y 0, z 0 ) = ( x1 + x 2 2, y 1 + y 2 2, z 1 + z ) 2 2 (19) Viimeiset duaalihilan kärjet luodaan algoritmin neljännessä vaiheessa pohjahilan jokaisen sellaisen kärjen kohdalle, joka sijaitsee niin sanotusti mallin kulmassa (kuvassa 10 kärki 4). Nämä kärjet ovat esikäsittelyssä luokiteltuja pohjahilan kulmakärkiä. Tällöin duaalikärjen P 0 koordinaatit ovat mallin kulmassa sijaitsevan kulmakärjen P 1 mukaan (x 0, y 0, z 0 ) = (x 1, y 1, z 1 ) (20) Kuva 10. Algoritmin vaiheista 1 4 kustakin yksi esimerkki: 1. duaalihilan kärki pohjahilan laskentakopin keskipisteessä; 2. duaalihilan kärki pohjahilan pintatahkon keskipisteessä; 3. duaalihilan kärki pohjahilan reunasärmän keskipisteessä; 4. duaalihilan kärki pohjahilan nurkkakärjessä
27 4.2.2 Duaalihilan tahkojen luominen Duaalihilan tahkojen luomisessa algoritmi käy ensin läpi jokaisen pohjahilan särmän, joiden perusteella luodaan kaikki duaalihilan sisätahkot. Tahkon luomiseen pohjahilan särmän perusteella on kolme tilannetta, jotka riippuvat pohjahilan särmien luokittelusta. Jos särmä on luokiteltu sisäsärmäksi, luodaan algoritmin vaiheessa 5 duaalihilan tahko niistä duaalikärjistä, jotka on luotu tutkittavaan särmään linkittyvien laskentakoppien sisälle (kuva 11, vasen tilanne). Tällöin duaalihilan tahkon kaikki kärjet ovat sisäkärkiä. Koska pohjahilan jokaiseen laskentakoppiin muodostetaan vain yksi duaalihilan kärki, saadaan duaalihilan kärkien indeksit yksinkertaisesti laskentakoppien indekseistä. Jokaisessa luodussa duaalitahkossa kärjet järjestetään siten, että ne muodostavat tahkosta yksinkertaisen eli itseään leikkaamattoman monikulmion. Seuraavat kaksi tilannetta kuuluvat algoritmin vaiheeseen 6. Jos särmä on luokiteltu pintasärmäksi, luodaan duaalihilan tahko samalla perusteella kuin edellisessä kohdassa, mutta lisäksi tahkon kärjiksi lasketaan myös pintasärmään linkittyviin pintatahkoihin muodostetut duaalikärjet, joita on kaksi kappaletta (kuva 11, keskimmäinen tilanne). Mikäli särmä on reunasärmä, toimitaan kuten edellisessä tilanteessa, mutta duaalihilan tahkoon lisätään vielä yksi kärki, joka on tutkittavana olevan reunasärmän keskipisteeseen muodostettu kärki (kuva 11, oikea tilanne). Tämän kärjen paikka sijoitetaan tahkossa pintakärkien väliin. Kuva 11. Algoritmin vaiheet 5 ja 6. Vasemman puoleinen tilanne kuvaa vaihetta 5 sisäsärmän tilanteessa, keskimmäinen vaihetta 6 pintasärmän tilanteessa ja oikeanpuoleinen vaihetta 6 reunasärmän tilanteessa
28 Kun pohjahilan särmät on käyty läpi, algoritmin seitsemännessä vaiheessa käydään läpi jokainen pohjahilan kärki, joka on luokiteltu pinta-, reuna- tai kulmakärjeksi ja luodaan duaalihilan pintatahkot niiden perusteella. Jos pohjahilan kärki on luokiteltu pintakärjeksi, etsitään kyseiseen pohjahilaan linkittyvät pintatahkot. Duaalitahko luodaan näihin pintatahkoihin luoduista duaalikärjistä. Jos pohjahilan kärki on luokiteltu reuna- tai kulmakärjeksi, toimitaan samalla tavalla kuten edellisessä vaiheessa keräämällä kaikki sopivat duaalikärjet. Tämän jälkeen lähdetään kulkemaan pohjahilan kärkeen linkittyviä pinta- ja reunasärmiä pitkin aloittaen reunasärmästä. Kun päädytään reunasärmälle, muodostetaan duaalitahko matkan varrella tulleiden tahkojen keskipisteissä olevista duaalikärjistä. Lisäksi mikäli pohjahilan kärki on reunakärki, tahko koostuu lisäksi kahdesta reunasärmän keskipisteessä olevasta duaalikärjestä kun taas pohjahilan kärjen ollessa kulmakärki, muodostuu duaalitahko edellisten lisäksi vielä pohjahilan kärkeä vastaavasta duaalikärjestä. Reunakärjen tapauksessa duaalitahkoja syntyy kaksi kappaletta, nurkkakärjen tapauksessa vähintään kolme kappaletta. Kuvassa 12 on havainnollistettu algoritmin toiminta kulmakärjen tapauksessa. Kuva 12. Algoritmin toiminta vaiheessa 7 geometrian kulmassa olevan kärjen tilanteessa, lopputuloksena kolme duaalitahkoa 4.2.3 Duaalihilan laskentakoppien luominen Duaalihilan laskentakoppien luomisessa algoritmin kahdeksannessa vaiheessa käydään läpi jokainen pohjahilan sisäkärki. Jokaisen sisäkärjen kohdalla laskentakoppi luodaan niistä duaalitahkoista, jotka on luotu kyseiseen kärkeen linkittyvien pohjahilan särmien perusteella algoritmin viidennessä vaiheessa. Koska algoritmin viidennessä vaiheessa jokaisen sisäsärmän perusteella luodaan yksi duaalihilan tahko, saadaan duaalitahkojen indeksit helposti tarkasteltavaan kärkeen linkittyvien pohjahilan sisäsärmien indeksien perusteella. Algoritmin yhdeksännessä eli viimeisessä vaiheessa duaalihilan laskentakoppeja luodaan
29 käymällä läpi pohjahilan jokainen pinta-, reuna- ja kulmakärki ja yhdistämällä ne duaalitahkot, jotka on luotu kyseiseen kärkeen linkittyvien pohjahilan särmien perusteella algoritmin viidennessä ja kuudennessa vaiheessa. Lisäksi duaalihilan laskentakoppiin yhdistetään myös kyseisen pohjahilan kärjen perusteella luodut duaalihilan pintatahkot. Kuvassa 13 on pohjahilan nurkkakärjen perusteella luotu duaalihilan laskentakoppi, jolla on kahdeksan duaalitahkoa. Näistä tahkoista kolme on esillä kuvassa 11 ja kolme kuvan 12 viimeisessä vaiheessa. Kuva 13. Valmis duaalihilan laskentakoppi algoritmin yhdeksännen vaiheen jälkeen 4.3 Duaalihilan jälkiprosessointi Duaalihilan luomisen jälkeen duaalihilaa käsitellään siten, että se on sopiva CFD-laskentaohjelman käytettäväksi. Tämä vaihe sisältää laskentakoppien tahkojen kätisyyden tarkistamisen (funktio checkfaces.m, liite I.4). Viimeisenä vaiheena laskentahila tallennetaan sopivaan tiedostomuotoon (funktio writemesh.m, liite I.13). Tässä työssä on käytetty Ensight Case Gold -tiedostomuotoa. Tahkojen kätisyys määritellään tahkon kärkien kiertosuunnalla. CFD-laskentakoodeissa standardina pidetään oikean käden sääntöä ja sen tarkistamisessa voidaan verrata tahkon normaalivektoria ja tahkon keskipisteestä laskentakopin keskipisteeseen kulkevaa vektoria. Oikeakätiset normaalivektorit osoittavat laskentakopista pois päin, ja näin saadaan fluidin liikkeelle oikea suunta. Helpoin arvio keskipisteelle saadaan laskemalla laskentakopin tai
30 tahkon kärkien koordinaattien keskiarvo. voidaan laskea Newellin kaavalla Tahkon normaalivektorin x-, y- ja z-komponentit N x = n (y i y i+1 )(z i + z i+1 ) i=1 N y = n (z i z i+1 )(x i + x i+1 ) i=1 N z = n (x i x i+1 )(y i + y i+1 ) i=1 (21) missä x i, y i ja z i ovat tahkon kärjen i koordinaatit järjestyksessä myötä- tai vastapäivään, n on tahkon kärkien lukumäärä ja x n+1 = x 1, y n+1 = y 1 ja z n+1 = z 1 (Sutherland et al. 1974, s. 15). Tahkojen kätisyys saadaan laskemalla normaalivektorin sekä tahkon ja laskentakopin keskipisteiden välisen vektorin välinen kulma. Mikäli kulma on pienempi kuin 90 astetta, osoittaa normaalivektori laskentakopin sisälle päin, jolloin otetaan muistiin tahkon väärä kätisyys kyseiselle laskentakopille. Duaalihilan tallennustilanteessa kätisyys korjataan järjestämällä tahkon kärjet vastakkaiseen suuntaan. Kulman ollessa suurempi kuin 90 astetta, kuten kuvassa 14, kätisyys on oikea, eikä tahkon kärkien järjestykselle ole tarvetta tehdä mitään. Kuva 14. Tahkon normaalivektorin (sininen) sekä tahkon ja laskentakopin keskipisteiden mukaan kulkevan vektorin (punainen) välinen kulma on suurempi kuin 90 astetta, joten tahko on oikeakätinen 4.4 Polyedrihilageneraattorin puutteet ja jatkokehitystavoitteet Edellisessä osiossa esitellyllä polyedrihilageneraattorilla duaalihilan tuottaminen onnistuu yksinkertaisille geometrioille. Mikäli geometria sisältää kahden pinnan välisiä sisäkulmia,
31 jotka ovat erittäin suuria (yli 200 astetta), muodostuu duaalihilaan CFD-laskennan kannalta huonolaatuisia konkaaveja polyedreja, joilla voi olla mahdollisesti väärin määritelty tahkon kätisyys. Tahkon väärän kätisyyden vuoksi laskentahila on virheellinen, eikä sitä voi käyttää CFD-laskennassa. ANSYS Fluentissa konkaavien polyedrien ongelma on ratkaistu jakamalla tällainen laskentakoppi pienemmiksi laskentakopeiksi, kuten kuvan 16 esimerkissä. Lee (2015) on puolestaan ehdottanut kolmea menetelmää ongelman ratkaisemiseen, joista ensimmäinen on ei-monistoisen eli äärettömän ohuen pinnan asettaminen kohtaan, johon muodostuu konkaaveja laskentakoppeja. Ei-monistoinen pinta jakaa duaalihilan muodostamisen jälkeen konkaavin laskentakopin konveksiksi laskentakopiksi kuvan 15 osoittamalla tavalla. Loput kaksi menetelmää liittyvät myös konkaavin laskentakopin jakamiseen pienemmiksi laskentakopeiksi Kuva 15. Ei-monistoinen pinta jakaa konkaavin laskentakopin (sininen laskentakoppi keskellä) kahdeksi konveksiksi laskentakopiksi. Ylimenevä osa 0-1-2-3 ei-monistoisesta pinnasta poistetaan hilasta. (Lee 2015) Pohjahilana olevalle tetraedrihilalle on omat vaatimuksensa. Koska duaalihilan tekeminen perustuu pohjahilaan, luonnollisesti mitä laadukkaampi pohjahila on, sitä parempi duaalihilasta muodostuu. Etenkin huonolaatuiset tetraedrit geometrian terävissä kärjissä muodostavat huonolaatuisia polyedreja. Tässä työssä tehdylle polyedrihilageneraattorille syötteenä oleva pohjahila voi muodostua vain tetraedreista, eikä duaalihilan muodostaminen onnistu, mikäli pohjahila sisältää muita laskentakoppeja kuten prismoja. Muita kuin tetraedreja sisältävien laskentahilojen muuntaminen polyedrihilaksi onnistuu yleisesti kuitenkin samalla periaatteella kuin tetraedreille tehtiin osiossa 4.2 esitellyllä algoritmilla määrittämällä myös muille kuin tetraedrilaskentakopeille ja kolmiotahkoille keskipisteet.
32 Laskentahilaa voidaan optimoida sen laadun ja laskentatuloksen parantamiseksi. Tässä työssä ei toteutettu duaalihilan optimointia, sillä se ei ollut tämän kandidaatintyön puitteissa ja laajuudessa mahdollista. Polyedreista muodostetun hilan laadun määrittämiseen ei ole kuitenkaan vakiintunutta menetelmää. Garimella et al. (2013). ovat kehittäneet testin (star-shaped test), jolla voi optimoida ja tutkia laskentahilan laatua jakamalla polyedrit tetraedreiksi ja määrittämällä tetraedreille häiriöalttiuden κ tetraedrin särmien avulla. Häiriöalttiuksista muodostetaan kohdefunktio f (x), jota minimoimalla etsitään numeerisesti lokaaleja optimipisteitä. Kuva 16. ANSYS Fluent jakaa konkaavit ja huonolaatuiset laskentakopit useisiin pienempiin laskentakoppeihin
33 5 LASKENTAHILOJEN VERTAILU Tässä osioissa vertaillaan polyedrihiloja tetraedrihiloihin. Polyedrihilat ovat edellisessä osiossa esitellyllä polyedrihilageneraattorilla tuotettuja, joten samalla voidaan osoittaa kyseisten generaattorin toimivuus. Vertailu toteutettiin luomalla ANSYS Fluentilla simulaatio veden virtauksesta kahden putken yhtymäkohdassa. Esimerkit laskentahiloista ovat nähtävissä kuvassa 2. Mallin geometria koostui T-muotoisesta kahden putken yhtymäkohdasta. Putkien halkaisijoiksi asetettiin 0,50 metriä ja CFD-laskennassa käytettiin k-ɛ-mallia. Virtauksen reunaehdoiksi sisääntuloille asetettiin 1 metriä sekunnissa ja 2 metriä sekunnissa ja ulostulon staattiselle paineelle 0 pascalia. Veden aineominaisuudet saatiin ANSYS Fluentin aineominaisuustietokannasta. Simulaatiot toteutettiin yhteensä kuudelle eri laskentahilalle, joista kolme oli tetraedrihiloja ja kolme polyedrihiloja. Laskentahilojen laskentakoppien lukumäärät olivat suuruusluokiltaan noin 10 000, 50 000 ja 100 000. 5.1 Tuloksen konvergoituminen CFD-laskennassa simuloinnin tulos konvergoituu kohti raja-arvoa, vaikkakin äärettömän tarkkaa tulosta on käytännössä mahdotonta saavuttaa. Tuloksen konvergoitumista mittaa residuaali, joka kuvaa laskettavien suureiden eroavaisuutta vierekkäisissä laskentakopissa. Residuaalin alittaessa tietyn arvon voidaan laskentatuloksen todeta konvergoituneen riittävään tarkkaan tulokseen. (Versteeg & Malalasekera 2007, s. 209) Simuloinnin aikana seurattiin massavirran, nopeuden x-, y- ja z-komponenttien sekä turbulenssin kineettisen energian k ja dissipaation ɛ konvergoitumista. Jokaisessa simuloinnissa massavirran jatkuvuusyhtälön residuaalit jäivät suurimmiksi. Polyedrihilahilat konvergoituivat huomattavasti nopeammin verrattuna vastaavan kokoisiin tetraedrihiloihin. Taulukossa 5 on jokaisen laskentahilan vaatima iteraatiomäärä sille, että kaikki residuaalit laskivat alle rajan 10 3. Massavirran residuaalien arvot simulointien aikana ovat kuvassa 17. Kuvasta 17 havaitaan esimerkiksi 10 000 laskentakopin kokoluokassa polyedrihilalla residuaalit konvergoituvat hieman yli 50 iteraation jälkeen pienemmiksi kuin 10 3 kun tetraedrihilalla puolestaan iteraatioita piti olla noin 115. Lisäksi kaikilla polyedrihiloilla päästiin paljon pienempiin residuaalin arvoihin. Massavirran residuaali jäi tetraedrihiloilla välille 10 4 10 3,
34 eivätkä tulokset konvergoituneet enää tarkemmiksi. residuaalit laskivat pienemmiksi kuin 10 6. Kaikilla polyedrihiloilla massavirran 10 0 10-1 10-2 Tetraedri, 10 000 Tetraedri, 50 000 Tetraedri, 100 000 Polyedri, 10 000 Polyedri, 50 000 Polyedri, 100 000 10-3 Massavirran residuaali 10-4 10-5 10-6 10-7 10-8 10-9 10-10 0 50 100 150 200 250 300 350 400 450 500 Iteraatio Kuva 17. Massavirtojen residuaalit simulointien aikana
35 Taulukko 5. Vaadittavien iteraatioiden määrä eri laskentahiloille vaaditun tarkkuuden saavuttamiseksi Laskentahila Laskentakoppien lukumäärä Iteraatioiden määrä Tetraedri 10 074 115 Polyedri 10 672 56 Tetraedri 51 726 181 Polyedri 48 212 90 Tetraedri 95 051 233 Polyedri 94 227 115 5.2 Tuloksen tarkkuus Kuvassa 18 on esitetty CFD-laskennan tuloksina saadut virtauksien nopeusjakaumat. Virtauksen sisääntulonopeudet ovat vasemmalla 1 metriä sekunnissa sekä ylhäällä 2 metriä sekunnissa. Ulostulo on oikeassa laidassa. Kuvasta voidaan huomata, että harvimmalla hilatyypillä eli 10 000 laskentakopin lukumäärällä tetraedrihilan tarkkuus on huonompi verrattuna polyedrihilan tarkkuuteen. Geometrian reunoilla ei käytetty millään laskentahilalla prismoista koostuvaa kerrosta, joten etenkin tetraedrihilojen kohdalla nopeusjakauma seinämillä ei ole tarkka. Virtauksen suurimmat arvot esiintyvät putkien yhtymäkohdan kulmassa, joka on kuvasta 18 havaittavissa punaisella värillä. Harvimmalla tetraedrihilalla virtauksen nopeuden tarkkuus jäi suhteellisen heikoksi verrattuna muihin laskentahiloihin. 10 000 laskentakopin polyedrihila saavutti saman tarkkuuden kuin 50 000 laskentakoppia sisältänyt tetraedrihila. Laskentakoppien lukumäärän kaksinkertaistamisella tuloksen tarkkuus ei enää parantunut merkittävästi kummallakaan hilatyypillä.
36 Kuva 18. CFD-laskennan tuloksina saadut virtauksien nopeusjakaumat. 5.3 Laskenta-aika ja muistinkäyttö Simuloinnissa seurattiin, kuinka kauan kullakin laskentahilalla kestää konvergoitua vaaditulle tasolle. Lisäksi laskennan jälkeen ANSYS Fluent ilmoitti suurimman laskennan aikana käytetyn muistin määrän. Tulokset ovat taulukossa 6. Polyedrihilat käyttivät laskennan aikana enemmän muistia kuin vastaavaa hilatiheyttä olleet tetraedrihilat. Tämä johtuu siitä, että polyedreilla on enemmän vierekkäisiä laskentakoppeja kuin tetraedreilla, joten laskentaan joudutaan kuluttamaan enemmän resursseja. Samanlaisilla hilatiheyksillä tetraedrihila suoriutui nopeiten harvimmalla hilalla ja polyedrihila