Simulering och visualisering av en Eulerisk fluid på grafikkortet

Storlek: px
Starta visningen från sidan:

Download "Simulering och visualisering av en Eulerisk fluid på grafikkortet"

Transkript

1 ITN, Norrköping 20 mars 2011 Simulering och visualisering av en Eulerisk fluid på grafikkortet MODELLERINGS- OCH SIMULERINGSPROJEKT TNM085 Medlemmar: Christopher Birger Henrik Bäcklund Erik Englesson Anders Hedblom Per Karlsson Kontakt:

2 Sammanfattning Fluidsimuleringar blir allt vanligare när avancerad mjukvara driver hårdvaruutvecklingen framåt. Att kunna modellera och simulera fluider som rök, vatten och eld har en stor betydelse inom många områden, så som film, spel och forskning, när det blir svårt eller omöjligt att använda en riktig fluid. Det finns givetvis olika sätt att genomföra detta på, beroende på vilket resultat som ska uppnås en grafiskt snygg men snabb simulering eller en mer realistisk sådan. Alla fluidsimuleringar bygger på Navier-Stokes ekvation och det finns i princip två synsätt för att lösa dessa. Antingen används partiklar (Langrageisk) eller så diskretiseras fluiden på ett rutnät (Eulerisk). På senare tid har man även använt en kombination av dessa. I den Euleriska metoden tittar man på fixa punkter i rymden och hur fluidkvantiteter som hastighet och tryck ändrar sig i tiden, istället för att följa partiklar. I den här rapporten implemeteras en Eulerisk lösning. Eftersom vi har valt att simulera vatten behövs något sätt för att representera dess yta. Till detta används level set-metoden. Nämnda metoder är mycket beräkningstunga och har varit näst intill omöjlig att utföra i realtid. Tack vare dagens kraftfulla grafikkort har det dock börjat bli fullt möjligt att simulera och rendera en 3D-fluid i realtid. Den här rapporten tar upp teori och tillvägagångssätt som använts för att skapa och visualisera en vattenliknande fluid med den Eulariaska metoden på datorns GPU. All kod är skriven av oss själva och inga externa bibliotek har använts. Projektets grundutformning var att, i grupp, skapa en modell av ett fysikaliskt fenomen och visualisera en simulering av denna. Arbetet hölls i kursen TNM085 - Modellbygge och Simuleringsprojekt på Linköpings universitet, vårterminen 2011.

3 Förord Att fullfölja detta projekt har varit vår största utmaning hittills, och motgångarna har varit många. Eftersom idén med att simulera en Eulerisk fluid på grafikkortet i realtid har blivit beprövad av få, har det varit svårt att få tag på svar till våra frågor. Vi vill ge ett stort tack till PhD Andreas Söderström, som tog sig tid att ses och ge förklaringar på våra frågeställningar och göra projektet genomförbart på så kort tid.

4 Innehållsförteckning 1 Inledning Syfte Metod Beteckningar Begränsad rymd Interpolation Tidssteg Implementering GPU-programmering Offline-rendering Realtidssimulering Mjukvara Grunderna hos en fluid Navier-Stokes ekvation Yttre krafter Advektion Extrapolering av hastigheterna Projektion Divergensfrihet Dirichlets randvillkor Level set-metoden Implicita ytor β- och γ-band Advektion Reinitiering Resultat Realtid Utrenderat Avslutning Diskussion Vidare förbättringar Litteraturförteckning 21

5 Figurer 2.1 Rymdens uppdelning i mindre voxlar Definitionen av en MAC-ruta (Marker and Cell) i 2D Interpolation i 2D Transformation från 3D-textur till 2D En punkt spåras ett tidsteg bakåt med den blå hastighetsvektorn. I den punkten interpoleras en hastighet fram med hjälp av omkringliggande hastigheter (röda vektorer) Bild till exempel (3.17) Bild på innan och efter Dirichlets randvillkor uppfyllts Allt inom den svarta gränsen är fluid. Det gröna fältet är β-band och det streckade är γ-band Resultat Resultat

6 Kapitel 1 Inledning Det finns många anledningar till varför man skulle vilja visualisera simuleringsbara modeller av fluider. Specialeffekter till film, miljöer i spel eller avancerade tester inom andra industrier, bara för att nämna några. Exempel på effekter som går att återskapa väldigt bra med fluidsimuleringar är rök och eld, men i det här projektet handlar det om att skapa vatten, med ett realistisk utseende och beteende. Det finns olika sätt på hur man kan skapa en datorgenererad fluid. En metod som har blivit omtyckt inom branschen för specialeffekter, är den partikelbaserade SPH-metoden (Smoothed Particle Hydrodynamics). Den bygger på att man har en stor mängd partiklar, var och en med fysikaliska egenskaper som massa och kollisionshantering. En fördel med SPH är att metoden ger ett visuellt tilltalande resultat i scener där det är mycket stänk. Ett problem är dock att en SPH-fluid aldrig kan ligga riktigt still. Dess yta kommer att ha en konstant vibration. Därför lämpar sig exemplevis inte SPH i en scen där vattnet ska ligga still. Ett annat tillvägagångssätt är med den så kallade Euleriska metoden. Den baserar sig på att, istället för att använda partiklar, beskriva fluiden med hjälp av en fix yttre domän uppdelad i celler/voxlar. För att beskriva ytan används level set-metoden [1]. Det är den här metoden som har använts i detta projekt, och dess olika steg och problem, som kan uppstå, beskrivs i rapporten. 1.1 Syfte Syftet med denna rapport är bland annat att: Öka förståelsen för hur en fluid kan vara uppbyggd Förklara den Euleriska metoden och värdefulla användningsområden för den Dokumentera för- och nackdelar med metoden Ge insikt i vilka problem som kan uppstå 1

7 Kapitel 2 Metod 2.1 Beteckningar Beteckningar som används genom rapporten är: Skalärer gemener (t), Matriser versaler (A), Vektorer/vektorfält gemener med sträck ( u) 2.2 Begränsad rymd För att kunna utföra alla numeriska beräkningar på datorn måste en begränsad rymd definieras samt diskretiseras. Diskretisering utförs genom att volymen delas in i så kallade voxlar (figur 2.1). Om en volym med dimensionerna 1x1x1m skall delas in i 64x64x64 voxlar fås en voxelstorlek, h, på 1/64 m. Finare diskretisering ger högre upplösning men flera beräkningar. Varje voxel har en mittpunkt, sex sidor och 12 kanter med längden h. I denna implementation används ett så kallat MAC-grid (Marker and Cell). Detta innebär att hastigheter sparas i mitten av varje sida medan tryck sparas i mitten av varje voxel. Denna metod valdes då precisionen i uträkning av tryckgradienter samt divergens bli mer exakta [2]. 2

8 Figur 2.1: Rymdens uppdelning i mindre voxlar. Figur 2.2: Definitionen av en MAC-ruta (Marker and Cell) i 2D. 2.3 Interpolation Ett problem som uppstår vid en diskretisering som denna är att det enbart finns diskreta värden med ett visst mellanrum att jobba med. Oftast kommer man bli tvungen att hämta värden som inte finns i positionerna mellan de diskreta gränserna. En interpolation blir tvungen att utföras. Det vill säga, värden runt omkring positionen i fråga viktas och slås ihop. Ett exempel på enkel linjär interpolation i två dimensioner kan ses i figur 2.3. I tre dimensioner kan enkel trilinjär interpolation användas, men för ett mer korrekt värde bör interpolation av högre ordning användas. 3

9 Figur 2.3: Interpolation i 2D. I projektet används en Monoton Catmull-Rom-interpolation [3] som är av ordning två. Detta är en kubisk interpolation som utnyttjar derivator vid viktningen. Dessa derivator tas fram genom central differensapproximation. 2.4 Tidssteg Tidssteget t väljs så att det garanterar ett CFL-tillstånd (Courant-Friedrichs-Levy s tillstånd) [1]: h t = k (2.1) max(u x + u y + u z ) Detta medför att information maximalt kan transporteras en voxel per tidssteg. Konstanten k används för att skala tidsteget i (2.1). För att vara säker på att CFL-tillståndet uppfylls bör k ligga mellan noll och ett. Ett problem som kan uppstå med detta stabilitetsvillkor är att när hastigheten hos fluiden ökar, sjunker tidssteget proportionellt mot denna. En mycket hög hastighet ger ett mycket litet tidssteg. Det tar dock fortfarande lika lång tid för datorn att utföra beräkningarna under ett tidssteg. 2.5 Implementering Hela arbetet är kodat med C++. CUDA C [4] har i sin tur använts för att kunna implementera beräkningarna på grafikkortets processor. Fluiden kan visuliseras antingen i realtid med hjälp av OpenGL eller renderas ut offline. En iteration i fluidsimuleringen ser ut som följande: 1. Räkna ut ett tidssteg 2. Extrapolera hastighetsfältet i β-bandet 3. Lägg till externa krafter till hastighetsfältet 4. Advektera hastighetsfältet och level setet 4

10 5. Reinitisering av β- och γ-band 6. Lös tryckekvation för den nya fluiddomänen 7. Uppdatera hastighetsfältet genom att subtrahera tryckgradienten. Stegen beskrivs i kapitel 3 och GPU-programmering För att programmera instruktioner till grafikkortet har Nvidia CUDA använts som tillåter mer parallellism än vad en CPU gör. För att anropa en funktion (en så kallad kernel) på GPU n, körs koden parallellt över block. Totalt kan ca block köras, där varje block i sin tur kan delas upp i trådar. Antal trådar beror på grafikkortet och för att göra fluidlösaren kompatibel med en större mängd grafikkort, används 256 trådar per block. Nästan alla algoritmer körs över en specifik kvantitet (t.ex. hastigheter, tryck eller level set). Varje kernel anropas med tillräckligt många block så att varje tråd får en egen cell/yta att arbeta med. CUDA tillåter att binda minnesplatser på grafikkortet till en textur för snabb inläsning av data, det vill säga, om data på en minnesplats ändras så kommer texturen dynamiskt att uppdateras. Användning av texturer är ett kraftfullt verktyg då lokalitet kan utnyttjas. Om ett texturvärde har lästs i en punkt, går det snabbt att läsa i samma textur i närliggande punkter. Tyvärr går det inte i dagsläget att dynamiskt skriva till 3D-texturer i CUDA, något som hade varit optimalt för en simulering i tre dimensioner. Istället är den påtänkta 3D-texturen uppdelad i skivor som läggs ut som en enda stor 2D-textur. Lokalitet bevaras då fortfarande i två dimensioner men förloras i den dimension som skivorna representerar. Figur 2.4: Transformation från 3D-textur till 2D Offline-rendering All offline-rendering är utförd i 3Ds Max, som får in en 3D-modell att jobba med. 3D-modellen räknas ut för varje bildruta med metoden Marching cubes [5], där utvalda punkter i voxelrymden används för att skapa polygoner. 5

11 2.5.3 Realtidssimulering Med hjälp av strålar kan level setet renderas ut till skärmen. För att uppnå realtidssimulering måste denna process vara snabb, något som gör det svårt att spåra strålar (raytracing) och få en fotorealistisk rendering. Istället implementeras en enkel raycaster som marscherar i en stråles riktning genom level setet tills den träffat en punkt som ligger på ytan [6]. Där används enkel trilinjär interpolation av normaler för att få mjuka övergångar mellan voxlar. Scenen renderas med valfri shadingmetod (förslagsvis Phong-shading [7]) i två pass för att återge transparens och refraktioner. I det första passet renderas omgivningen och den lagras i en textur. I det andra passet renderas fluiden och beroende på givet transparens-värde, interpoleras de två passens renderingar. För att simulera refraktioner används en fusklösning som utnyttjar normalens riktning mot kameran [8]. 2.6 Mjukvara Microsoft Visual Studio 2010 Autodesk 3Ds Max MATLAB 6

12 Kapitel 3 Grunderna hos en fluid 3.1 Navier-Stokes ekvation För att kunna simulera en fluid behövs en modell som beskriver dess beteende matematiskt. Modellen som används är den så kallade Navier-Stokes-ekvationen (3.1) som innehåller termerna advektion, tryck, yttre krafter och viskositet. u t + u u + 1 p = g + ν u (3.1) ρ Ekvationen (3.1) måste dock förenklas vid simulering. Den ska också se till att fluidens volym bevaras. Därför läggs ekvation (3.2) till som ett villkor på att fluiden ska vara okomprimerbar det vill säga att hastighetsfältet ska vara divergensfritt. u = 0 (3.2) En ytterligare förenkling på Navier-Stokes-ekvationen är att ta bort viskositetstermen (ν u) i beräkningarna. Detta på grund av att den inte är viktig vid vattensimulering i och med att de numeriska felen ger nog med viskositet ändå. De termer som återstår kommer att förklaras senare i rapporter. Den sista förenklingen är att dela upp termerna i (3.1) och lösa de var för sig vilket kommer underlätta beräkningarna. Detta benämns splitting. 3.2 Yttre krafter För att fluiden ska kunna påverkas utifrån behövs delen i Navier-Stokes-ekvationen som behandlar yttre krafter. Utan denna skulle fluiden aldrig röra på sig. Yttre krafter kan innefatta t.ex. gravitation eller vind. I det här projektet är den enda yttre kraften gravitation. Eftersom fluiden inte har någon virtuell massa kan vi se gravitationskraften som ren acceleration, som i sin tur kan omvandlas till hastighet genom att integreras över tiden. Då hela simuleringen sker i diskreta steg fås den nya hastigheten genom ekvation (3.3), där g är gravitationen: u n+1 = u n + g t (3.3) 7

13 3.3 Advektion Advektionsdelen i Navier-Stokes ekvation handlar om att propagera hastigheterna i hastighetsfältet. När fluiden rör på sig måste hastighetsvektorerna, i de voxlar som fluiden sveper över, få nya värden, sådana att fluiden behåller sin hastighet. Rent matematiskt skulle det kunna ställas upp som (3.4): q n+1 = advektera( q n, t, qn t ) (3.4) Så hur går det till? Plockas advektionsdelen ut ur (3.1) kan den ställas upp på följande vis: u n+1 t = ( u n ) u n (3.5) Eftersom hur små tidssteg som helst inte kan tas är det, i detta fall, inte lämpligt att använda sig av vanlig Euler-integration då metoden är instabil. Till slut skulle värden bli extremt felaktiga, när tidssteget blir stort, och fluiden skulle inte längre bete sig normalt. Vad som istället utförs är att en fiktiv partikel får spåras ett tidssteg bakåt i rymden. Den här metoden är stabil för alla tidssteg och kallas Semi-Lagrangeisk metod [9] semi, just för att någon verklig partikel aldrig skapas. Då metoden använder sig av två tidpunkter för att fungera, krävs också två kopior av hastighetsfältet; ett vars värden uppdateras, och används som sikte bakåt i tiden samt ett där gamla värden hämtas ifrån. Figur 3.1: En punkt spåras ett tidsteg bakåt med den blå hastighetsvektorn. I den punkten interpoleras en hastighet fram med hjälp av omkringliggande hastigheter (röda vektorer). Att bara gå ett enstaka steg bakåt i tiden och plocka ett värde där är oftast inte särskilt precist. För att öka precision har en integrationsmetod av högre ordning implementerats, Runge-Kutta ordning 4. Men Eulers stegmetod ger vid bakåtsteget ett acceptabelt resultat. När en punkt bakåt i tiden har identifierats gäller det att få ut en hastighet från just den punkten. Högst troligt är att en punkt ligger mellan voxelytor där hastigheter finns sparade, vilket innebär att interpolation (se avsnitt 2.4) krävs. För att få ett ännu bättre resultat i advektionssteget används även en metod som kallas Back-and-Forth Error Compensation and Correction (BFECC) [10]. Vad detta innebär är att hastigheten som används för att advektera bakåt i tiden korrigeras med ett antal steg, enligt 8

14 ekvation (3.6). ˆφ n+1 = Advektera(φ n ) ˆφ n = Advektera 1 ( ˆφ n+1 ) φ n 2 = (3φ n ˆφ n )/2 φ n+1 = Advektera(φ n 2) (3.6) Där φ är hastigheten som ska advekteras. Advektera 1 betyder att advektionen skall utföras framåt i tiden istället för bakåt. 3.4 Extrapolering av hastigheterna En oklarhet kvarstår; vad händer om advektionsdelen i (3.1) blir tillbedd att hämta ett värde utanför fluiden, där inga hastigheten är definierade? Det innebär problem. Man vill alltså se till att det alltid finns hastigheter en liten bit utanför fluidens yta. Hastigheter extrapoleras hela tiden ut från fluiden så att det alltid finns värden att plocka så långt ut som till gränsen på level setets β-band (se avsnitt 4.2). Vilka hastigheter som än befann sig utanför fluiden blir överskrivna under extrapoleringen. Ekvation (3.7) används för att utföra detta repetitivt. u t = ˆn u (3.7) där u är hastighetsfältet och ˆn är normalerna till ytan. Detta kan kombineras med level setets reinitiering (se avsnitt 4.4), som vet var de närmsta punkterna på ytan finns och en hastighet kan hämtas. 3.5 Projektion Projektionen handlar om att lösa tryckdelen (3.8) av Navier-Stokes-ekvationen som gör hastighetsfältet divergensfritt. Där högerledet i (3.8) består av densiteten ρ och tryckfältet p. I det här tillståndet har advektion samt externa krafter applicerats på u. Projektionen är den beräkningstyngsta delen av simuleringen i och med att trycket i vektorfältet ändras samtidigt som divergensvillkoret (3.2) och randvillkoret ska uppfyllas. u n+1 = u t 1 p (3.8) ρ Eftersom p i ekvation (3.8) är okänd måste detta tryckfält bestämmas. Helmholtz-Hodge dekomposition måste utnyttjas vilken säger att ett vektorfält kan delas upp i ett divergensfritt samt rotationsfritt fält. u = u d + k p (3.9) Där u d i är den divergensfria delen och p är den rotationsfria delen i ekvation (3.9). Både u d och p är okända. Om vi låter divergensoperatorn operera på (3.9) fås: u = u d + k 2 p = k 2 p (3.10) Eftersom den okända u d termen är divergensfri förkortas den bort från ekvation (3.10) och nu kan p lösas ut. 9

15 t ρ 2 p = u (3.11) Nästa steg är att lösa Poissons ekvationen (3.11). För att kunna göra det numeriskt måste ekvationen diskretiseras och vi börjar med högerledet som visas i ekvation (3.12) där u, v, w är x-, y- och z-komponenterna för vektorerna i vektorfältet u. Divergensen räknas bara ut i celler som innehåller fluid. ( u) i,j,k u i+1/2,j,k u i 1/2,j,k + v i,j+1/2,k v i,j 1/2,k + w i,j,k+1/2 w i,j,k 1/2 (3.12) h h h Nästa steg är att diskritisera vänsterledet som blir följande t ρ 2 p = t ( ) 6pi,j,k + p i+1,j,k + p i,j+1,k + p i,j,k+1 + p i 1,j,k + p i,j 1,k + p i,j,k 1 ρ h 2 (3.13) Den riktiga betydelsen av vänsterledet är att laplaceoperatorn beskriver växlingen mellan de olika elementen i voxeln, som bearbetas, och dess grannar. Den kan även skrivas i vektorform vilket kommer behövas när Poissons ekvation ska lösas. Högerledet uttryckt i vektorer: t ρ 2 p = p i,j,k p i+1,j,k t [ ] p i,j+1,k ρ h 2 p i,j,k+1 p i 1,j,k p i,j 1,k p i,j,k 1 (3.14) Med högerledet och vänsterledet diskretiserade återstår det att lösa Poissons ekvation (3.11) och för det måste även den skrivas i vektorform/matrisform: A x = b (3.15) I det linjära systemet (3.15) är A = 2, x = p och b = u. Detta ger att x ska lösas ut, det vill säga inversen till A ska hittas. För att få en inblick i vad som egentligen händer i ekvation 3.14 så förklaras detta med ett exempel. Det intressanta i ekvationen är radvektorn [ ] i ekvation (3.14), som refererar till om en voxel och dess grannar innehåller fluid, luft eller solid. Ettor betyder att voxlarna innehåller fluid eller solid och nollor om voxlarna innehåller luft. Om en voxel utgörs av en solid behövs ett uttryck (3.16) för att beräkna trycket i voxeln och samtidigt upprätthålla Neumans villkor [11]. Om en voxel till höger är solid, fås trycket i denna voxel genom: p i+1,j,k = p i,j,k + ρ h t (u i+1/2,j,k u solid ) (3.16) Ekvation (3.16) ersätter då p i+1,j,k i ekvation (3.14). Ett 2D-exempel ser ut som följande: p i,j t [ ] p i,j + ρ h (u t i+1/2,j u solid ) ρ h 2 p i,j+1 p i 1,j p i,j 1 (3.17) 10

16 Där p i+1,j är en solid och p i,j+1 är fylld med luft vilket representeras av en nolla i radvektorn. Figur 3.2: Bild till exempel (3.17). 11

17 3.6 Divergensfrihet Ett villkor, som är mycket viktigt när fluider som vatten simuleras, är att den ska vara inkompressibel. Volymen ska med andra ord vara konstant hela tiden. Ett villkor som kanske ses som självklart men som faktiskt inte är helt trivialt. Divergens i ett vektorfält kan ses som flödet i en viss punkt. Om divergensen är positiv strömmar det ut mer från punkten än vad det kommer in. Är flödet mot punkten större än flödet ut är divergensen negativ. Under simuleringen måste det gälla att hela fluiden är divergensfri, det vill säga, differensen mellan flödet in och ut är lika med noll. På grund av att det blir en hel del approximationer under simuleringen är det svårt att behålla en konstant volym på fluiden. Ofta komprimeras den och det ser ut som att vätska försvinner spårlöst. Ett trick för att lösa detta problem att göra en direkt modifiering på Poisson-ekvationen under tryckberäkningarna [12]. Om fluidens volym approximativt kan mätas under varje tidpunkt, genom att räkna hur många voxlar som har ett negativt värde, kan denna jämföras med volymen vid initiering. Differensen kommer att ge hur mycket volym som saknas och denna differens skalas med en konstant och används i divergensdelen i Poisson-ekvationen Dirichlets randvillkor Anledningen till att en fluid inte kan strömma in i en solid är att soliden alltid kan motsätta ett lika högt tryck mot fluiden som fluiden utgör på den. Detta måste såklart även gälla i simuleringen om vattnet ska stanna kvar i akvariet. För att tillämpa detta används Dirichlets randvillkor (3.18) [11], som säger att hastigheter i närliggande soliders motsatta normalriktning måste vara noll. Med andra ord, det får inte existera några vektorkomposanter, i hastighetsfältet, som pekar in mot en solid. Figur 3.3: Bild på innan och efter Dirichlets randvillkor uppfyllts När soliden i fråga har en hastighet så gäller: u ˆn = u solid ˆn (3.18) där ˆn är normalen till soliden, u är fluidens hastigheter och u solid är solidens hastighet. Eftersom det här projektet endast innefattar simulering med stillastående solider kan följande ekvation alltså användas: u ˆn = 0 (3.19) Det är önskvärt att Dirichlets randvillkor är uppfyllt under hela simuleringen. Därför körs operationen flera gånger för varje bildruta, mellan de olika uträkningarna. 12

18 Kapitel 4 Level set-metoden Level set-metoden handlar om att förklara fluidens form och position med implicita ytor. Det här kapitlet förklarar endast de allra grundligaste stegen för att använda metoden. 4.1 Implicita ytor Med hjälp av level set-metoden kan fluidens form hela tiden representeras som en implicit yta. En implicit yta har bland annat den fördel att den inte kan skapa tvetydighet om var ytan är genom att korsa sig själv. När två ytor överlappas slås de ihop och bildar en ny yta. Avståndet till fluidens yta ges genom ekvationerna (4.1) och (4.2): Distans inne = {x(t) R 2 : φ(x(t)) 0} (4.1) Distans ute = {x(t) R 2 : φ(x(t)) > 0} (4.2) Detta ger att närmsta avståndet φ till fluidens yta kan hittas oavsett position i rymden. Ett negativt φ-värde betyder att punkten är inuti fluiden och ett positivt värde utanför. När φ är exakt noll ligger punkten på ytan. 4.2 β- och γ-band Vid simulering är det endast intressant att veta var fluidens yta befinner sig. Därför behövs det bara ett definierat level set i omgivningen av ytan. Ett β-band begränsar level setets utsträckning utanför fluidens yta, där konstanten β avgör hur lång denna utsträckning är. Beroende på integrationsmetod i advektionen (se avsnitt 4.3) krävs olika värden på β. För ett vanligt Euler-steg räcker det med att β har ett värde motsvarande 2 h. För att försäkra sig om att korrekta derivator finns i β-bandet utvidgas level setet med ytterligare ett band, γ-bandet, som i regel är smalt. 13

19 Figur 4.1: Allt inom den svarta gränsen är fluid. Det gröna fältet är β-band och det streckade är γ-band. 4.3 Advektion Enligt avsnitt 2.5 uppfylls CFL-tillståndet med valt tidssteg. Detta är viktigt för att level setet inte ska kollapsa. För att propagera ytan i tiden utförs ett advektionssteg utifrån det divergensfria hastighetsfältet med ett enkelt Euler-steg. Advektion utförs bara på celler som ligger innanför β-bandet. φ φ(n + 1) φ(n) (4.3) t t φ = u φ (4.4) t Gradienten till φ behövs alltså räknas ut och för det används ett upwind scheme, som i en dimension ser ut som: { φ x φ + x = (φ i+1,j,k φ i,j,k )/ x, if u x < 0 (4.5) φ x = (φ i1,j,k φ i 1,j,k )/ x, if u x > 0 Detta säger att information endast färdas i hastighetsfältets riktning och derivator tas fram genom att bara kolla på skillnader där fluiden har befunnit sig. 14

20 4.4 Reinitiering Både Eulersteget och approximeringen av gradienten introducerar fel i φ(n + 1). Eftersom advektionen dessutom endast utförs i punkter inom β-bandet (se figur 4.1) initieras ett nytt β-band i varje iteration i fluidsimuleringen. Detta kan göras med en geometrisk metod [13], som tar fram vilka punkter som ligger i närheten av ytan. Utifrån dessa punkter utvidgas level setet iterativt tills hela β-bandet är fyllt. Därefter skapas även ett nytt γ-band. 15

21 Kapitel 5 Resultat 5.1 Realtid Resultatet blev en vattenliknande fluid i tre dimensioner. Fluiden liknar vatten, inte bara visuellt utan också rent beteendemässigt, vilket fortfarande är knepigt att uppnå med denna metod. Vad som vanligtvis inträffar är att fluiden får en alldeles för hög viskositet och liknar mer glycerol eller sirap. Eftersom metoden inte är partikelbaserad ges dock inga riktiga stänk-effekter, som riktiga vattenrörelser brukar ge upphov till. Bild på fluiden i realtid: Figur 5.1: Resultat 16

22 5.2 Utrenderat Bild på hur fluiden ser ut när den fått renderas ut i 3Ds Max, med fysikaliskt korrekt hdri-belysning och ray-tracing-metoden Mental ray: Figur 5.2: Resultat 17

23 Kapitel 6 Avslutning 6.1 Diskussion Fluidsimulering är minst sagt en komplicerad process. Det finns en hel del information att hitta om level set-metoden, både välskrivna rapporter och hemsidor. Det knepiga och mest motsträviga under resans gång har dock varit att implementera allt på datorns grafikkort. Det blir ett helt annorlunda tänk när beräkningar ska parallelliseras och optimeras för att samma funktion ska kunna ge olika resultat på olika kärnor, värden ska sparas i texturer istället för arrayer och så vidare. Ett kvarstående problem är simuleringens alla approximationer. Numeriska fel, i följd av diskretiseringarna, gör att det kommer att bli vissa ej helt korrekta beteenden hos fluiden, bland annat volymförlusten. Det som begränsar hur fina beräkningar som kan göras är datorns prestanda. 6.2 Vidare förbättringar Det finns ett stort antal förbättringar, som kan göras med denna fluidsimulering, för att ge den ett än mer vattenliknande beteende. Det finns även åtgärden som kan göra den mer fysikaliskt korrekt. Det första som kommer på tanke är problemet med volymförluster. Sättet detta är löst på är ett mycket overkligt sådant. Att skapa volym ur ingenting genom att förstöra en fysikaliskt korrekt ekvation är inte optimalt. Det är dock en simpel lösning som fungerar bra rent visuellt, och i många fall handlar datagrafik bara om att någonting ska se bra ut. Den här metoden skulle inte vara acceptabel i forskningssammanhang. När det handlar om att få till effekter som stänk och separationer av fluiden blir man i princip tvungen att bygga vidare på arbetet med en metod som kallas FLIP (fluid-implicit partikel). Det är en Eulerisk fluidlösare som använder partiklar för advektion. [14] För varje kernel anropar CUDA tillräckligt många block så att varje tråd får enbart en cell att arbeta på. Det hade varit intressant att undersöka om det hade gått snabbare i realtid om varje tråd fått jobba med flera celler åt gången [15]. Styrkan i denna metod hade varit möjligheten till att lagra värden i Shared Memory vilket är ett minne som varje block delar mellan sig och dessutom är betydligt snabbare än att läsa från textur och globalt minne [16]. Realtidsrenderingen lider tyvärr lite av artefakter som orsakats av cellstorleken, trots att trilinjär interpolation använts. Det borde vara möjligt att innan varje rendering skapa en statisk 3D-textur av level setet, raycasta den och använda trikubisk interpolation av normaler vid ytan. 18

24 Då går det att använda grafikkortets egna process av filtrering (som är lika snabb som vanlig texturläsning) och använda endast 8 texturläsningar istället för 64 som trikubisk interpolation vanligtvis kräver [17]. 19

25 Litteraturförteckning [1] Osher S, Fedkiw R. Level Set methods and Dynamic Implicit Surfaces. Los Angeles: Springer; 2003 [2] Bridson R. Fluid Simulation for Computer Graphics. s Wellesly: A K Peters; 2008 [3] Fedkiw R, Stam J, Jensen H. W. Visual Simulation of Smoke. Standford University. http: //physbam.stanford.edu/ fedkiw/papers/stanford pdf; Senast hämtad [4] Sanders J, Kandrot E. CUDA by Example - An Introduction to General-Purpose GPU Programming. Boston: Addison-Wesley; 2010 [5] Bourke P. Polygonising a Scalar Field geometry/polygonise/; Senast hämtad [6] Hadwiger M, Sigg C, Scharsach H, Bühler K, Gross M. Real-TIme Ray-Casting and Advanced Shading of Discrete Isosurfaces. Eurographics: M. Alexa, J. Marks; 2005 [7] Watt A. 3D Computer graphics. s Harlow: Pearson, Addison-Wesley; Third edition 2010 [8] Crane K, Tariq S. Real-Time Simulation and Rendering of 3D-fluids. Nvidia. http.developer.nvidia.com/gpugems3/gpugems3_ch30.html; Senast hämtad [9] Stam J. Stable Fluids. Alias Wavefront. people/stam/reality/research/pdf/ns.pdf; Senast hämtad [10] Liu Y, Dupont T. F. Back and Forth Error Compensation and Correction Methods for Removing Errors Induced by Uneven Gradients of the Level Set Function. s J. Comput. Phys; 2003 [11] Läthén G, Nilsson O, Söderström A. Fluid Simulation. LiU, TNM079, Modeling and Animation, Lab6; 2010 [12] Söderström A. Memory Efficient Methods for Eulerian Free Surface Fluid Animation. Linköpings universitet, ITN; 2010 [13] Tsai Y.-H. R. Rapid and Accurate Computation of the Distance Function Using Grids. s J. Computing Physics; 2002 [14] Zhu Y, Bridson R. Animating Sand as Fluid. ACM Trans. Graph;

26 [15] Brandvik T, Pullan G. Acceleration of a 3D Euler Solver Using Commodity Graphics Hardware. Cambridge, University of Cambridge; uk/ gp10006/research/brandvik_pullan_2008a_draft.pdf; Senast hämtad [16] Nvidia. CUDA Programming Guide nvidia.com/compute/cuda/2_0/docs/nvidia_cuda_programming_ Guide_2.0.pdf; Senast hämtad [17] Sigg C, Hadwiger C. Fast Third-Order Texture Filtering. Nvidia. developer.nvidia.com/gpugems2/gpugems2_chapter20.html; Senast hämtad

Realistisk simulering och visualisering av uider

Realistisk simulering och visualisering av uider Realistisk simulering och visualisering av uider Linköpings Universitet 9-- ITN, VT9 TNM85 Modelleringsprojekt Mihai Aldén, Lam Chan, Marcus Olsson & Max Popescu mihal95@student.liu.se, yuech476@student.liu.se,

Läs mer

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte Sammanfattning Vi har i kursen Modelleringsprojekt TNM085 valt att simulera ett geléobjekt i form av en kub. Denna består av masspunkter som är sammankopplade med tre olika typer av fjädrar med olika parametrar.

Läs mer

Ordinära differentialekvationer,

Ordinära differentialekvationer, (ODE) Ordinära differentialekvationer, del 1 Beräkningsvetenskap II It is a truism that nothing is permanent except change. - George F. Simmons ODE:er är modeller som beskriver förändring, ofta i tiden

Läs mer

Gel esimulering 22 mars 2008

Gel esimulering 22 mars 2008 Gelésimulering 22 mars 2008 2 Sammanfattning Vi har i kursen Modelleringsprojekt TNM085 valt att simulera ett geléobjekt i form av en kub. Denna består av masspunkter som är sammankopplade med tre olika

Läs mer

Modelleringsprojekt 2013

Modelleringsprojekt 2013 Modelleringsprojekt 2013 Gruppmedlemmar: Simon BERGSTRÖM Pär ERIKSSON Oscar IVARSSON Jimmie BERG Robin BERNTSSON Examinator: Dr. Anna LOMBARDI 13 mars 2013 Sammanfattning Innehåll 1 Inledning 1 1.1 Syfte........................................

Läs mer

Hydrodynamik Mats Persson

Hydrodynamik Mats Persson Föreläsning 5/10 Hydrodynamik Mats Persson 1 De hydrodynamiska ekvationerna För att beskriva ett enkelt hydrodynamiskt flöde behöver man känna fluidens densitet,, tryck p hastighet u. I princip behöver

Läs mer

FFM234, Datoruppgift 2: Värmeledning

FFM234, Datoruppgift 2: Värmeledning FFM234, Datoruppgift 2: Värmeledning Christian Forssén 1 Ulf Torkelsson 2 1 Institutionen för fysik, Chalmers, Göteborg, Sverige, Email: christian.forssen@chalmers.se 2 Astrofysik, Chalmers och Göteborgs

Läs mer

Exempel ode45 parametrar Miniprojekt 1 Rapport. Problemlösning. Anastasia Kruchinina. Uppsala Universitet. Januari 2016

Exempel ode45 parametrar Miniprojekt 1 Rapport. Problemlösning. Anastasia Kruchinina. Uppsala Universitet. Januari 2016 Problemlösning Anastasia Kruchinina Uppsala Universitet Januari 2016 Anastasia Kruchinina Problemlösning 1 / 16 Exempel ode45 parametrar Miniprojekt 1 Rapport Anastasia Kruchinina Problemlösning 2 / 16

Läs mer

Procedurell 3D-eld på grafikkortet

Procedurell 3D-eld på grafikkortet Procedurell 3D-eld på grafikkortet TNM084 Procedurella metoder för bilder Anders Hedblom, andhe893@student.liu.se 2012-04-04 1. Bakgrund 1.1. Procedurella metoder Procedurella metoder har ett stort användningsområde

Läs mer

Lösningsskiss för tentamen Vektorfält och klassisk fysik (FFM232)

Lösningsskiss för tentamen Vektorfält och klassisk fysik (FFM232) Lösningsskiss för tentamen Vektorfält och klassisk fysik (FFM232) Tid och plats: Lösningsskiss: Tisdagen den 20 december 2016 klockan 0830-1230 i M-huset Christian Forssén Detta är enbart en skiss av den

Läs mer

Byggnationen av Cheopspyramiden - ett visualiseringsprojekt. Mathias Bergqvist, Rikard Gehlin, Henrik Gunnarsson

Byggnationen av Cheopspyramiden - ett visualiseringsprojekt. Mathias Bergqvist, Rikard Gehlin, Henrik Gunnarsson Byggnationen av Cheopspyramiden - ett visualiseringsprojekt Mathias Bergqvist, Rikard Gehlin, Henrik Gunnarsson 25 April 2010 0.1 Förord Gruppen vill tacka Adam Grudzinski för att ha fått tillåtelse att

Läs mer

FFM232, Klassisk fysik och vektorfält - Föreläsningsanteckningar

FFM232, Klassisk fysik och vektorfält - Föreläsningsanteckningar FFM232, Klassisk fysik och vektorfält - Föreläsningsanteckningar Christian Forssén, Institutionen för fysik, Chalmers, Göteborg, Sverige Oct 3, 2016 8. Potentialteori Konservativa fält och potentialer

Läs mer

TMA226 datorlaboration

TMA226 datorlaboration TMA226 Matematisk fördjupning, Kf 2019 Tobias Gebäck Matematiska vetenskaper, Calmers & GU Syfte TMA226 datorlaboration Syftet med denna laboration är att du skall öva formuleringen av en Finita element-metod,

Läs mer

HAND TRACKING MED DJUPKAMERA

HAND TRACKING MED DJUPKAMERA HAND TRACKING MED DJUPKAMERA ETT PROJEKT I TNM090 - SOFTWARE ENGINEERING Rasmus KARLSSON Per JOHANSSON Erik HAMMARLUND raska293@student.liu.se perjo020@student.liu.se eriha891@student.liu.se 2014-01-14

Läs mer

Numerisk lösning till den tidsberoende Schrödingerekvationen.

Numerisk lösning till den tidsberoende Schrödingerekvationen. Numerisk lösning till den tidsberoende Schrödingerekvationen. Det är enbart i de enklaste fallen t ex när potentialen är sträckvis konstant som vi kan lösa Schrödingerekvationen analytiskt. I andra fall

Läs mer

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod TANA21+22/ 30 september 2016 LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER 1 Inledning Vi skall studera begynnelsevärdesproblem, både med avseende på stabilitet och noggrannhetens beroende av steglängden. Vi

Läs mer

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Procedurell grottgenerator och eld i GLSL. Marcus Widegren Procedurell grottgenerator och eld i GLSL Marcus Widegren 14 januari 2012 Innehåll 2 Sammanfattning Jag har gjort en enkel procedurell grottgenerator i GLSL och C++. För belysning används en fackla, som

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet (fylls i av ansvarig) Datum för tentamen Sal Tid Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter i tentamen Antal sidor på

Läs mer

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Tisdag 3/6 2014 kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43 Inga hjälpmedel Tentamen innehåller 8 uppgifter, vilka tillsammans kan ge maximalt 50 poäng.

Läs mer

Flervariabelanalys och Matlab Kapitel 4

Flervariabelanalys och Matlab Kapitel 4 Flervariabelanalys och Matlab Kapitel 4 Thomas Wernstål Matematiska Vetenskaper 3 oktober 2012 4 Vektoranalys 4.1 Vektorfält Vi kan illustrera vektorfält, såväl i planet som i rummet, med kommandona quiver

Läs mer

FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum

FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum Johan Helsing, 11 oktober 2018 FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum Inlämningsuppgift 3 Sista dag för inlämning: onsdag den 5 december. Syfte: att träna på att hitta lösningar

Läs mer

Vektoranalys I. Anders Karlsson. Institutionen för elektro- och informationsteknik

Vektoranalys I. Anders Karlsson. Institutionen för elektro- och informationsteknik Vektoranalys I Anders Karlsson Institutionen för elektro- och informationsteknik 2 september 2015 Översikt över de tre föreläsningarna 1. Grundläggande begrepp inom vektoranalysen, nablaoperatorn samt

Läs mer

1 Vektorer och tensorer

1 Vektorer och tensorer Föreläsning 1. 1 Vektorer och tensorer Vi kommer att använda två olika beteckningar för vektorer. Enligt det första systemet använder vi fet stil för en vektor i typsatt text och ett vektorstreck då vi

Läs mer

Simulering och rendering av gräs och vind i realtid

Simulering och rendering av gräs och vind i realtid Simulering och rendering av gräs och vind i realtid Linköpings universitet, ITN, TNM085, VT2010 Carl Claesson, 850508-1672, carcl268@student.liu.se Lucas Correia, 870325-7496, lucco863@student.liu.se David

Läs mer

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY Grunderna i C++ ARK 385: Virtuella Verktyg i en Materiell värld AT Arkitektur & Teknik Chalmers Tekniska Högskola 2009 - Kursen skapades (3 förel.) 2010-6 förel. + 2 projekt 2011-8 förel. Helt omarbetade

Läs mer

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Onsdag 20/8 2014 kl 14-18 SP71 Inga hjälpmedel Tentamen innehåller 7 uppgifter, vilka tillsammans kan ge maximalt 50 poäng. För betyg G (registreras som

Läs mer

Tekniska beräkningar. Vad är tekn beräkningar? Vad är beräkningsvetenskap? Informationsteknologi. Informationsteknologi

Tekniska beräkningar. Vad är tekn beräkningar? Vad är beräkningsvetenskap? Informationsteknologi. Informationsteknologi Tekniska beräkningar stefan@it.uu.se Vad är tekn beräkningar? Finns några olika namn för ungefär samma sak Numerisk analys (NA) Klassisk NA ligger nära matematiken: sats bevis, sats bevis, mer teori Tekniska

Läs mer

0.31 = f(x 2 ) = b 1 + b 2 (x 3 x 1 ) + b 3 (x 3 x 1 )(x 3 x 2 ) = ( ) + b 3 ( )(

0.31 = f(x 2 ) = b 1 + b 2 (x 3 x 1 ) + b 3 (x 3 x 1 )(x 3 x 2 ) = ( ) + b 3 ( )( Lösningar till Tentamen i Beräkningsvetenskap II, 5.0 hp, 2012-03-09 Del A 1. (a) För att anpassa ett polynom som går genom tre punkter behövs ett andragradspolynom. Newtons interpolationsansats ger f(x)

Läs mer

23 Konservativa fält i R 3 och rotation

23 Konservativa fält i R 3 och rotation Nr 23, 7 maj -5, Amelia 2 23 Konservativa fält i R 3 och rotation 23. Potential 23.. Två dimensioner (2D) I två dimensioner definierade vi ett vektorfält som konservativt om kurvintegralen av fältet endast

Läs mer

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering KTH Matematik Tentamen del 2 SF1511, 2018-03-16, kl 8.00-11.00, Numeriska metoder och grundläggande programmering Del 2, Max 50p + bonuspoäng (max 4p). Rättas ast om del 1 är godkänd. Betygsgränser inkl

Läs mer

Procedurell renderingsmotor i Javascript och HTML5

Procedurell renderingsmotor i Javascript och HTML5 Procedurell renderingsmotor i Javascript och HTML5 TNM084 Procedurella Metoder för bilder Gustav Strömberg - gusst250@student.liu.se http://gustavstromberg.se/sandbox/html5/shademe/texture_stop_final.html

Läs mer

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer LUNDS UNIVERSITET Parallell exekvering av Float32 och INT32 operationer Samuel Molin Kursansvarig: Erik Larsson Datum 2018-12-05 Referat Grafikkort utför många liknande instruktioner parallellt då typiska

Läs mer

Universe Engine Rapport

Universe Engine Rapport 1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten

Läs mer

SF1544 LABORATION 2 INTEGRATION, MONTE-CARLO OCH BLACK-SCHOLES EKVATION FÖR OPTIONER

SF1544 LABORATION 2 INTEGRATION, MONTE-CARLO OCH BLACK-SCHOLES EKVATION FÖR OPTIONER SF1544 LABORATION INTEGRATION, MONTE-CARLO OCH BLACK-SCHOLES EKVATION FÖR OPTIONER Avsikten med denna laboration är att: - snabbt komma igång med träning på matlabprogrammering (uttnyttja gärna alla schemalagda

Läs mer

Två gränsfall en fallstudie

Två gränsfall en fallstudie 19 november 2014 FYTA11 Datoruppgift 6 Två gränsfall en fallstudie Handledare: Christian Bierlich Email: christian.bierlich@thep.lu.se Redovisning av övningsuppgifter före angiven deadline. 1 Introduktion

Läs mer

Obligatoriska uppgifter i MATLAB

Obligatoriska uppgifter i MATLAB Obligatoriska uppgifter i MATLAB Introduktion Följande uppgifter är en obligatorisk del av kursen och lösningarna ska redovisas för labhandledare. Om ni inte använt MATLAB tidigare är det starkt rekommenderat

Läs mer

Beräkningsvetenskap introduktion. Beräkningsvetenskap I

Beräkningsvetenskap introduktion. Beräkningsvetenskap I Beräkningsvetenskap introduktion Beräkningsvetenskap I Kursens mål För godkänt betyg ska studenten kunna redogöra för de nyckelbegreppen som ingår i kursen* utföra enklare analys av beräkningsproblem och

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Integraler av vektorfält Mats Persson

Integraler av vektorfält Mats Persson Föreläsning 1/8 Integraler av vektorfält Mats Persson 1 Linjeintegraler Exempel: En partikel rör sig längs en kurva r(τ) under inverkan av en kraft F(r). i vill då beräkna arbetet som kraften utövar på

Läs mer

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360 Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360 1 Att skapa en fotorealistisk bild kan sägas bestå av två delar: - Den artstiska delen. Att välja scen, ljussättning,

Läs mer

τ ij x i ρg j dv, (3) dv + ρg j dv. (4) Detta samband gäller för en godtyckligt liten kontrollvolym och därför måste det + g j.

τ ij x i ρg j dv, (3) dv + ρg j dv. (4) Detta samband gäller för en godtyckligt liten kontrollvolym och därför måste det + g j. Föreläsning 4. 1 Eulers ekvationer i ska nu tillämpa Newtons andra lag på en materiell kontrollvolym i en fluid. Som bekant säger Newtons andra lag att tidsderivatan av kontrollvolymens rörelsemängd är

Läs mer

Poissons ekvation och potentialteori Mats Persson

Poissons ekvation och potentialteori Mats Persson 1 ärmeledning Föreläsning 21/9 Poissons ekvation och potentialteori Mats Persson i vet att värme strömmar från varmare till kallare. Det innebär att vi har ett flöde av värmeenergi i en riktning som är

Läs mer

Beräkningsvetenskap. Vad är beräkningsvetenskap? Vad är beräkningsvetenskap? stefan@it.uu.se. Informationsteknologi. Informationsteknologi

Beräkningsvetenskap. Vad är beräkningsvetenskap? Vad är beräkningsvetenskap? stefan@it.uu.se. Informationsteknologi. Informationsteknologi Beräkningsvetenskap stefan@it.uu.se Finns några olika namn för ungefär samma sak Numerisk analys (NA) Klassisk NA ligger nära matematiken: sats bevis, sats bevis, mer teori Tekniska beräkningar Mer ingenjörsmässigt,

Läs mer

Numeriska metoder för ODE: Teori

Numeriska metoder för ODE: Teori Numeriska metoder för ODE: Teori Målen för föreläsningen Stabilitet vid diskretisering av ODE med numeriska metoder Definition: Den analytiska lösningen till en ODE är begränsad. En numerisk metod för

Läs mer

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20.

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20. Teorifrågor Störningsanalys 1. Värdet på x är uppmätt till 0.956 med ett absolutfel på högst 0.0005. Ge en övre gräns för absolutfelet i y = exp(x) + x 2. Motivera svaret. 2. Ekvationen log(x) x/50 = 0

Läs mer

FYSIKENS MATEMATISKA METODER

FYSIKENS MATEMATISKA METODER FYSIKENS MATEMATISKA METODER TREDJE UPPLAGAN TORBJÖRN ERIKSON HENRIK CHRISTIANSSON ERIK LINDAHL JOHAN LINDE LARS SANDBERG MATS WALLIN mfl Boken är typsatt i L A TEX med 11pt Times Printed in Sweden by

Läs mer

* Läsvecka 1 * Läsvecka 2 * Läsvecka 3 * Läsvecka 4 * Läsvecka 5 * Läsvecka 6 * Läsvecka 7 * Tentamenssvecka. Läsvecka 1

* Läsvecka 1 * Läsvecka 2 * Läsvecka 3 * Läsvecka 4 * Läsvecka 5 * Läsvecka 6 * Läsvecka 7 * Tentamenssvecka. Läsvecka 1 Detta är en preliminär planering över undervisningen i kursen och är tänkt att hjälpa dig att få ut så mycket som möjligt av föreläsningarna. Till varje föreläsningsdag finns förberedelser, innehåll och

Läs mer

LAB 3. INTERPOLATION. 1 Inledning. 2 Interpolation med polynom. 3 Splineinterpolation. 1.1 Innehåll. 3.1 Problembeskrivning

LAB 3. INTERPOLATION. 1 Inledning. 2 Interpolation med polynom. 3 Splineinterpolation. 1.1 Innehåll. 3.1 Problembeskrivning TANA18/20 mars 2015 LAB 3. INTERPOLATION 1 Inledning Vi ska studera problemet att interpolera givna data med ett polynom och att interpolera med kubiska splinefunktioner, s(x), som är styckvisa polynom.

Läs mer

UPG5 och UPG8 Miniprojekt 1: 2D datorgrafik

UPG5 och UPG8 Miniprojekt 1: 2D datorgrafik UPG5 och UPG8 Miniprojekt 1: 2D datorgrafik I den här uppgiften studerar vi hur man kan använda sig av linjära avbildningar för att modifiera bilder i två dimensioner Mycket är repetition av vissa grundbegrepp

Läs mer

Uppgift 1. Minimeringsproblemet löses med en Monte Carlo algoritm:

Uppgift 1. Minimeringsproblemet löses med en Monte Carlo algoritm: Uppgift 1 Minimeringsproblemet löses med en Monte Carlo algoritm: 1) initiera elementen i vektorn s slummässigt med +/-1 2) räkna ut värdefunktionen (ekvationen given i uppgiften) 3) starta iteration 4)

Läs mer

Anujan Balasingam IDA14 NAND flashminnen

Anujan Balasingam IDA14 NAND flashminnen Anujan Balasingam IDA14 NAND flashminnen Hur kan prestandan och kapaciteten förbättras? Kursansvarig: Erik Larsson Datorarkitektur med operativsystem 7,5 hp 04-12-2015 Innehållsförteckning 1. Inledning...

Läs mer

SF1669 Matematisk och numerisk analys II Lösningsförslag till tentamen DEL A. r cos t + (r cos t) 2 + (r sin t) 2) rdrdt.

SF1669 Matematisk och numerisk analys II Lösningsförslag till tentamen DEL A. r cos t + (r cos t) 2 + (r sin t) 2) rdrdt. 1. Beräkna integralen medelpunkt i origo. SF1669 Matematisk och numerisk analys II Lösningsförslag till tentamen 218-3-14 D DEL A (x + x 2 + y 2 ) dx dy där D är en cirkelskiva med radie a och Lösningsförslag.

Läs mer

Interpolation Modellfunktioner som satisfierar givna punkter

Interpolation Modellfunktioner som satisfierar givna punkter Interpolation Modellfunktioner som satisfierar givna punkter Några tillämpningar Animering rörelser, t.ex. i tecknad film Bilder färger resizing Grafik Diskret representation -> kontinuerlig 2 Interpolation

Läs mer

Beräkningsvetenskap introduktion. Beräkningsvetenskap I

Beräkningsvetenskap introduktion. Beräkningsvetenskap I Beräkningsvetenskap introduktion Beräkningsvetenskap I Kursens mål För godkänt betyg ska studenten kunna redogöra för de grundläggande begreppen algoritm, numerisk metod, diskretisering maskinepsilon,

Läs mer

1 Cirkulation och vorticitet

1 Cirkulation och vorticitet Föreläsning 7. 1 Cirkulation och vorticitet Ett mycket viktigt teorem i klassisk strömningsmekanik är Kelvins cirkulationsteorem, som man kan härleda från Eulers ekvationer. Teoremet gäller för en inviskös

Läs mer

Grafiska pipelinens funktion

Grafiska pipelinens funktion LUNDS TEKNISKA HÖGSKOLA CAMPUS HELSINGBORG Grafiska pipelinens funktion Ludvig von Sydow EDT62, HT17 Datorarkitekturer med Operativsystem Sammanfattning Denna rapport syftar till att beskriva hur en graphics

Läs mer

Introduktionsföreläsning. Outline. Beräkningsvetenskap I. Sara Zahedi Hanna Holmgren. Institutionen för Informationsteknologi, Uppsala Universitet

Introduktionsföreläsning. Outline. Beräkningsvetenskap I. Sara Zahedi Hanna Holmgren. Institutionen för Informationsteknologi, Uppsala Universitet Lärare Introduktionsföreläsning Beräkningsvetenskap I Institutionen för Informationsteknologi, Uppsala Universitet Sara Zahedi Hanna Holmgren 29 oktober, 2012 Outline 1 2 Information om kursen 3 Introduktion

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Konvergens för iterativa metoder

Konvergens för iterativa metoder Konvergens för iterativa metoder 1 Terminologi Iterativa metoder används för att lösa olinjära (och ibland linjära) ekvationssystem numeriskt. De utgår från en startgissning x 0 och ger sedan en följd

Läs mer

Teknik för avancerade datorspel!

Teknik för avancerade datorspel! 1(84) Information Coding / Computer Graphics, ISY, LiTH TSBK 03 Teknik för avancerade datorspel Ingemar Ragnemalm, ISY Fysik Datorgrafik Spelmekanismer AI Animation 1(84) Föreläsning 5 GPU computing GPU

Läs mer

Mekanik SG1108 Mekanikprojekt Dubbelpendel

Mekanik SG1108 Mekanikprojekt Dubbelpendel Mekanik SG1108 Mekanikprojekt Dubbelpendel Studenter: Peyman Ahmadzade Alexander Edström Robert Hurra Sammy Mannaa Handledare: Göran Karlsson karlsson@mech.kth.se Innehåll Sammanfattning... 3 Inledning...

Läs mer

Introduktionsföreläsning

Introduktionsföreläsning Introduktionsföreläsning Beräkningsvetenskap DV Institutionen för Informationsteknologi, Uppsala Universitet 29 oktober, 2012 Lärare Emanuel Rubensson (föreläsningar, lektioner) Martin Tillenius (lektioner)

Läs mer

Beräkningsuppgift I. Rörelseekvationer och kinematiska ekvationer

Beräkningsuppgift I. Rörelseekvationer och kinematiska ekvationer 1 Beräkningsuppgift I Vi skall studera ett flygplan som rör sig i xz planet, dvs vi har med de frihetsgrader som brukar kallas de longitudinella. Vi har ett koordinatsystem Oxyz fast i flygplanet och ett

Läs mer

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering Spelutveckling 3d-grafik och modellering Grunder för 3d-grafik Blender Animering Grunderna för 3d-grafik Positionering, transformationer Projektion, kameran Objekt i en 3d-värld Ljusmodeller för 3d-grafik

Läs mer

Ordinära differentialekvationer,

Ordinära differentialekvationer, Sammanfattning metoder Ordinära differentialekvationer, del 2 Beräkningsvetenskap II n Eulers metod (Euler framåt, explicit Euler): y i+1 = y i + h i f (t i, y i ) n Euler bakåt (implicit Euler): y i+1

Läs mer

Bose-Einsteinkondensation. Lars Gislén, Malin Sjödahl, Patrik Sahlin

Bose-Einsteinkondensation. Lars Gislén, Malin Sjödahl, Patrik Sahlin Bose-Einsteinkondensation Lars Gislén, Malin Sjödahl, Patrik Sahlin 3 mars, 009 Inledning Denna laboration går ut på att studera Bose-Einsteinkondensation för bosoner i en tredimensionell harmonisk-oscillatorpotential.

Läs mer

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab TANA17 Matematiska beräkningar med Matlab Laboration 1. Linjär Algebra och Avbildningar Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion I denna övning skall

Läs mer

Institutionen för matematik SF1626 Flervariabelanalys. Lösningsförslag till tentamen Måndagen den 5 juni 2017 DEL A

Institutionen för matematik SF1626 Flervariabelanalys. Lösningsförslag till tentamen Måndagen den 5 juni 2017 DEL A Institutionen för matematik SF66 Flervariabelanalys Lösningsförslag till tentamen Måndagen den 5 juni 7 DEL A. En kulles höjd ges av z 6,x,y där enheten är meter på alla tre koordinataxlar. (a) I vilken

Läs mer

Simulering av kontaktkrafter och nötning i transportörsystem för malm

Simulering av kontaktkrafter och nötning i transportörsystem för malm Simulering av kontaktkrafter och nötning i transportörsystem för malm John Nordberg 1, Martin Servin 1,2 1 UMIT Research Lab vid Umeå universitet 2 Algoryx Simulation 2011-08-25 Med stöd av ProcessIT Innovations

Läs mer

Simulering av brand i Virtual Reality

Simulering av brand i Virtual Reality Simulering av brand i Virtual Reality Bakgrund Användningen av virtual reality (VR, virtuell verklighet) som ett forskningsverktyg inom brandteknik och utrymning har på senare tid visat sig vara mycket

Läs mer

Föreläsning 14: Exempel på randvärdesproblem. LU-faktorisering för att lösa linjära ekvationssystem.

Föreläsning 14: Exempel på randvärdesproblem. LU-faktorisering för att lösa linjära ekvationssystem. 11 april 2005 2D1212 NumProg för T1 VT2005 A Föreläsning 14: Exempel på randvärdesproblem. LU-faktorisering för att lösa linjära ekvationssystem. Kapitel 8 och 5 i Q&S Stationär värmeledning i 1-D Betrakta

Läs mer

Föreläsning 16, SF1626 Flervariabelanalys

Föreläsning 16, SF1626 Flervariabelanalys Föreläsning 16, SF1626 Flervariabelanalys Haakan Hedenmalm (KTH, Stockholm) 5 december 2017 KTH Rekommenderade uppgifter: 16.1: 3, 7, 11. 16.2: 9, 15, 17. Gradient, divergens, och rotation Gradienten Om

Läs mer

Flervariabelanlys och Matlab Kapitel 4

Flervariabelanlys och Matlab Kapitel 4 Flervariabelanlys och Matlab Kapitel 4 Thomas Wernstål Carl-Henrik Fant Matematiska Vetenskaper 30 september 2009 1 4 Vektorfält, strömlinjer, potentialer, funktioner på ytor 4.1 Vektorfält Vi kan illustrera

Läs mer

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht 2014. Block 5, översikt

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht 2014. Block 5, översikt MATEMATIK GU H4 LLMA6 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht 24 I block 5 ingår följande avsnitt i Stewart: Kapitel 2, utom avsnitt 2.4 och 2.6; kapitel 4. Block 5, översikt Första delen av block 5

Läs mer

Sammanfattning av föreläsning 11. Modellbygge & Simulering, TSRT62. Föreläsning 12. Simulering. Föreläsning 12. Numeriska metoder och Simulering

Sammanfattning av föreläsning 11. Modellbygge & Simulering, TSRT62. Föreläsning 12. Simulering. Föreläsning 12. Numeriska metoder och Simulering Sammanfattning av föreläsning 11 Modellbygge & Simulering, TSRT62 Föreläsning 12. Simulering Reglerteknik, ISY, Linköpings Universitet Index för en DAE Antalet derivationer som behövs för att lösa ut ż

Läs mer

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp, Uppsala universitet Institutionen för informationsteknologi Teknisk databehandling Tentamen i Beräkningsvetenskap I/KF, 5. hp, 215-3-17 Skrivtid: 14 17 (OBS! Tre timmars skrivtid!) Hjälpmedel: Bifogat

Läs mer

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation DGI/SUDOA - 060329 Rendering equation Belysningsmodeller (lokala och globala) Kort om texturer Den historiska utvecklingen 1. Enkla modeller som utvärderades genom att göra enkla bedömningar 2. Mera sofistikerade

Läs mer

FFM232, Klassisk fysik och vektorfält - Veckans tal

FFM232, Klassisk fysik och vektorfält - Veckans tal FFM232, Klassisk fysik och vektorfält - eckans tal Tobias Wenger och Christian Forssén, Chalmers, Göteborg, Sverige Oct 3, 2016 Uppgift 6.6 (Cederwalls kompendium) Beräkna normalytintegralen av a F 2 [

Läs mer

Numerisk modellering av självkompakterande betongs flöde diskret och kontinuumbaserad ansats

Numerisk modellering av självkompakterande betongs flöde diskret och kontinuumbaserad ansats Numerisk modellering av självkompakterande betongs flöde diskret och kontinuumbaserad ansats Annika Gram 1(42) Table of Contents Introduction Theory Previous Work in the Field of Concrete Simulation Experimental

Läs mer

Aggregering av kapitalkrav i standardformeln i Solvens II. Magnus Carlehed

Aggregering av kapitalkrav i standardformeln i Solvens II. Magnus Carlehed Aggregering av kapitalkrav i standardformeln i Solvens II Magnus Carlehed Inledning Det europeiska försäkringsregelverket Solvens II [1] syftar ytterst till att skydda försäkringstagarna och innefattar

Läs mer

Tentamen del 1 SF1546, , , Numeriska metoder, grundkurs

Tentamen del 1 SF1546, , , Numeriska metoder, grundkurs KTH Matematik Tentamen del 1 SF154, 1-3-3, 8.-11., Numeriska metoder, grundkurs Namn:... Bonuspoäng. Ange dina bonuspoäng från kursomgången läsåret HT15/VT1 här: Max antal poäng är. Gränsen för godkänt/betyg

Läs mer

Grafik raytracing. Mattias Axblom.

Grafik raytracing. Mattias Axblom. Grafik raytracing Mattias Axblom mam11003@student.mdh.se 1 SAMMANFATTNING Raytracing, strålföljning eller strålspårning är en metod för att rendera realistiska bilder, film och i framtiden spel. Grundidén

Läs mer

2D1210, Numeriska Metoder, GK I för V 2.

2D1210, Numeriska Metoder, GK I för V 2. Kursöversikt Numme för V, 2003. 1 Beatrice Frock NADA, KTH 030612 ANADA 2D1210, Numeriska Metoder, GK I för V 2. Kursprogram. Läsanvisningar. Om WWW: I World Wide Web på Internet finns aktuell information

Läs mer

CHALMERS Finit Elementmetod M3 Institutionen för tillämpad mekanik. Teorifrågor

CHALMERS Finit Elementmetod M3 Institutionen för tillämpad mekanik. Teorifrågor Teorifrågor : Visa att gradienten till en funktion pekar i den riktning derivatan är störst och att riktingen ortogonalt mot gradienten är tangent till funktionens nivåkurva. Visa hur derivatan i godtycklig

Läs mer

Mätning av fokallängd hos okänd lins

Mätning av fokallängd hos okänd lins Mätning av fokallängd hos okänd lins Syfte Labbens syfte är i första hand att lära sig hantera mätfel och uppnå god noggrannhet, även med systematiska fel. I andra hand är syftet att hantera linser och

Läs mer

Uppgifter till kurs: Geometriska analys och designmetoder för olinjära system

Uppgifter till kurs: Geometriska analys och designmetoder för olinjära system Uppgifter till kurs: Geometriska analys och designmetoder för olinjära system Erik Frisk 2 juni 200 Uppgift. Antag ett linjärt system som beskrivs av exkvationerna: ẋ = Ax+Bu y = Cx med n = 4 tillstånd,

Läs mer

Karta över Jorden - viktigt exempel. Sfär i (x, y, z) koordinater Funktionen som beskriver detta ser ut till att vara

Karta över Jorden - viktigt exempel. Sfär i (x, y, z) koordinater Funktionen som beskriver detta ser ut till att vara Föreläsning 1 Jag hettar Thomas Kragh och detta är kursen: Flervariabelanalys 1MA016/1MA183. E-post: thomas.kragh@math.uu.se Kursplan finns i studentportalens hemsida för denna kurs. Där är två spår: Spår

Läs mer

Teknik för avancerade datorspel!

Teknik för avancerade datorspel! 1(83) Information Coding / Computer Graphics, ISY, LiTH TSBK 03 Teknik för avancerade datorspel Ingemar Ragnemalm, ISY Fysik Datorgrafik Spelmekanismer AI Animation 1(83) Föreläsning 5 GPU computing GPU

Läs mer

Skinning and Animation

Skinning and Animation Skinning and Animation Skelett Keyframe animation BSpline Quaternioner Kinematics Animation Blending Skinning Skinning på GPU:n Skelett Hierarkiskt Kan närmast liknas vid en trädstruktur Ben och leder

Läs mer

Kurvor och ytor. Gustav Taxén

Kurvor och ytor. Gustav Taxén Kurvor och ytor Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Kurvor och ytor Explicit form Implicit form Parametrisk form Procedurbaserade Polynom Catmull-Clark Kubiska

Läs mer

SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Måndagen den 16 mars 2015

SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Måndagen den 16 mars 2015 SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Måndagen den 16 mars 2015 Allmänt gäller följande: För full poäng på en uppgift krävs att lösningen är väl presenterad och lätt

Läs mer

Information Coding / Computer Graphics, ISY, LiTH. Integrationsmetoder

Information Coding / Computer Graphics, ISY, LiTH. Integrationsmetoder Integrationsmetoder Datorspel är tidsdiskreta Explicita analytiska funktioner för hastighet och acceleration saknas Position är integral av hastighet Hastighet är integral av acceleration Eulerintegrering

Läs mer

SF1626 Flervariabelanalys Tentamen Måndagen den 21 mars 2016

SF1626 Flervariabelanalys Tentamen Måndagen den 21 mars 2016 Institutionen för matematik SF626 Flervariabelanalys Tentamen Måndagen den 2 mars 26 Skrivtid: 8:-3: Tillåtna hjälpmedel: inga Examinator: Mats Boij Tentamen består av nio uppgifter som vardera ger maximalt

Läs mer

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration 10 februari 2017 Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration Syfte med övningen: Introduktion till ett par numeriska metoder för lösning av ekvationer respektive

Läs mer

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen Procedurella Grottor TNM084 Alexander Steen alest849@student.liu.se 13-01-12 Sammanfattning Denna rapport beskriver en metod för att skapa procedurella grottor. Grottorna består utav sammanlänkade rum

Läs mer

Numerisk Analys, MMG410. Lecture 12. 1/24

Numerisk Analys, MMG410. Lecture 12. 1/24 Numerisk Analys, MMG410. Lecture 12. 1/24 Interpolation För i tiden gällde räknesticka och tabeller. Beräkna 1.244 givet en tabel över y = t, y-värdena är givna med fem siffror, och t = 0,0.01,0.02,...,9.99,10.00.

Läs mer

Numerisk Analys, MMG410. Lecture 13. 1/58

Numerisk Analys, MMG410. Lecture 13. 1/58 Numerisk Analys, MMG410. Lecture 13. 1/58 Interpolation För i tiden gällde räknesticka och tabeller. Beräkna 1.244 givet en tabel över y = t, y-värdena är givna med fem siffror, och t = 0,0.01,0.02,...,9.99,10.00.

Läs mer

2D1250 Tillämpade numeriska metoder II

2D1250 Tillämpade numeriska metoder II 1 lof Runborg NADA 2 april 2002 2D1250 Tillämpade numeriska metoder II A LABRATIN 5 rdinära differentialekvationer I den här laborationen ska ni experimentera med olika numeriska metoder för ordinära differentialekvationer.

Läs mer

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18. Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.1 Delkapitlet introducerar en del terminologi och beteckningar som används.

Läs mer

Tentamen i Beräkningsvetenskap I och KF, 5.0 hp,

Tentamen i Beräkningsvetenskap I och KF, 5.0 hp, Uppsala universitet Institutionen för informationsteknologi Avdelningen för beräkningsvetenskap Tentamen i Beräkningsvetenskap I och KF, 5.0 hp, 2015-12-17 Skrivtid: 14 00 17 00 (OBS! Tre timmars skrivtid!)

Läs mer