Równanie adwekcji w dwóch wymiarach
Transkrypt
Równanie adwekcji w dwóch wymiarach
Zadanie 5: Adwekcja w dwóch wymiarach. Na poprzednich zaj¦ciach (laboratorium nr 4) wyznaczyli±my pole pr¦dko±ci cieczy pªyn¡cej przez rur¦. Znaj¡c pr¦dko±ci, zasymulujemy zachowanie plamy oleju rozlanej na niej. Przyjmiemy pudªo obliczeniowe podobne jak w zestawie o przepªywie lepkim nie±ci±liwym, jednak»e z barier¡ przesuni¦t¡ pod górn¡ ±cian¦ rury - patrz rysunek poni»ej. y j2=60 jmax=60 j1=40 i1=50 i2=55 0 imax=200 x Rysunek 1: Przekrój przez rur¦ z przeszkod¡ Nasze pudªo obliczeniowe b¦dzie tablic¡ [0, imax ] × [0, jmax ] = [0, 200] × [0, 60] z dx = dy = 0.02, gdzie (x, y) = (i · dx, j · dy) - zgodnie z rysunkiem. Przeszkoda b¦dzie okre±lona obszarem [i1 , i2 ] × [j1 , j2 ] = [50, 55] × [40, 60]. Nie potrzeba jeszcze raz wylicza¢ pr¦dko±ci dla zmienionego ukªadu - prosz¦ ±ci¡gn¡¢ sobie ze strony plik 'predkosc.txt', w nim zapisane s¡ juz wyliczone warto±ci u(x,y) i v(x,y). Przykªadowy sposób wczytywania takich danych znajduje si¦ na ko«cu zestawu. G¦sto±¢ pocz¡tkowa plamy oleju dana jest wzorem: ρ0 (x, y) = ρ(x, y, t = 0) = exp −30 (x − 0.2)2 + (y − 0.6)2 . ρ(x, y, t) oznacza g¦sto±¢, natomiast pr¦dko±¢ w kierunku osi OX to u(x, y), a w kierunku osi (1) OY : v(x, y). Zbadamy unoszenie plamy ρ(x, y, t) w czasie. Zjawisko opisuje równanie adwekcji, które dla cieczy nie±ci±liwej (znikaj¡ca dywergencja pr¦dko±ci) przyjmuje posta¢ ∂ρ ∂ρ ∂ρ + u(x, y) + v(x, y) = 0. ∂t ∂x ∂y (2) Równanie (3) zdyskretyzowane zgodnie ze schematem leapfrog ma posta¢ ρn+1 ij = ρn−1 ij ρni,j+1 − ρni,j−1 ρni+1,j − ρni−1,j − ∆t uij + vij dx dy . (3) Metoda leapfrog nie jest iteracyjna - p¦tl¦ po caªym pudle obliczeniowym przeprowadzamy tylko raz dla ka»dego t (indeks górny n oznacza chwil¦ czasow¡). Schemat wymaga zadania rozkªadu g¦sto±ci nie tylko w pierwszej, ale i w drugiej chwili czasowej (potrzebne s¡ wi¦c trzy macierze: jedna dla obliczanej w danej chwili g¦sto±ci ρn+1 i dwie dla dwóch poprzednich: ρn , ρn−1 ). Przyjmiemy nast¦puj¡cy przepis na drug¡ chwil¦ czasow¡: ρ1ij = ρ0 (xi − uij ∆t, yj − vij ∆t) (4) (g¦sto±¢ w ka»dym punkcie xi , yi unoszona przez czas ∆t przez lokaln¡ pr¦dko±¢ - jest to dobre przybli»enie, gdy pr¦dko±¢ sªabo zmienia si¦ tam, gdzie plama jest wstawiona jako warunek pocz¡tkowy). √ dx , gdzie max = u2 + v 2 to makTeraz i w nast¦pnych zadaniach: krok czasowy przyjmiemy: ∆t = 4·max symalna pr¦dko±¢ cieczy w caªym pudle (nale»y j¡ najpierw znale¹¢). Zastosujemy periodyczne warunki 1 brzegowe: wzór (3) trzeba zaprogramowa¢ osobno dla kra«ców pudªa - tak, aby lewym s¡siadem punktu (i = 0, j) byª punkt (i = 200, j ) i vice versa. W symulacjach jako test poprawno±ci w ka»dym kroku czasowym ±ledzimy caªk¦ z g¦sto±ci: Z I(t) = ρ(x, y, t)dxdy. (5) Ma si¦ nie zmienia¢ w sposób znacz¡cy. ledzimy równie» ±rodek pakietu: R hxi = xρ(x, y, t)dxdy . I(t) (6) Symulacj¦ przerywamy po t ' 15. Zadanie 1: Adwekcja w rurze bez zastawki - schemat leapfrog. Zbadamy adwekcj¦ w przepªywie lepkim przez rur¦. Zadajemy paraboliczny rozkªad pr¦dko±ci u(x, y) = Q 2µ (y − ymin )(y − ymax ), v(x, y) = 0 z ymin = 0.0, ymax = 1.2, gradient ci±nienia Q = −10, i wspóªczynnik lepko±ci µ = 2. Wprowadzamy plam¦ oleju w dwóch pierwszych chwilach czasowych: ρ0ij , ρ1ij i stosujemy schemat (3) z pomini¦ciem górnego i dolnego brzegu rury. Narysowa¢ I(t) i hxi(t): 20 pkt. Narysowa¢ g¦sto±¢ plamy (tj. narysowa¢ map¦ g¦sto±ci ρ(x, y, t)) chwilach czasowych t = 0, 1, 3, 5: 20 pkt. Zadanie 2: Adwekcja w rurze z przegrod¡ - schemat leapfrog. Do rury wstawimy przegrod¦ jak na rysunku 1: i1 = 50, i2 = 55, j1 = 40, j2 = 60. Przyjmujemy Q = −10. Tutaj nale»y u»y¢ pr¦dko±ci z pliku predkosc.txt. W pliku dane s¡ uªo»one w nast¦puj¡cy sposób: x y u(x, y) v(x, y) Zbada¢, jak plama opªywa przeszkod¦. Nale»y narysowa¢ caªki I(t), hxi(t) (20 pkt) oraz g¦sto±ci w chwilach czasowych t = 0, 1, 3, 5 (20 pkt). Zadanie 3: Adwekcja w rurze z przegrod¡ - schemat Laxa-Friedrichsa. Zbada¢ problem przepªywów w rurze z przeszkod¡ z zadania drugiego schematem Laxa-Friedrichsa, który wprowadza dyfuzj¦ (numeryczn¡) ρn+1 ij ρni+1,j + ρni−1,j + ρni,j−1 + ρni,j+1 4 ρni+1,j − ρni−1,j ρni,j+1 − ρni,j−1 − ∆t uij + vij . 2dx 2dy = (7) Wstawi¢ dwukrotnie mniejszy krok czasowy, ni» w metodzie leapfrog. Wzór (3) gwarantowaª, »e plama nie wpªynie na przeszkod¦ (dokªadna adwekcja prowadzi plam¦ wzdªu» linii strumienia, nigdy wi¦c plama nie tra w przeszkod¦). Dla schematu Laxa trzeba o to zadba¢ - nie przeprowadzamy oblicze« na brzegach ani wewn¡trz przeszkód. 20 pkt za wykresy g¦sto±ci chwilach t = 0, 1, 3, 5. Do wczytywania pr¦dko±ci mo»na wykorzysta¢ nast¦puj¡cy kod: i f s t r e a m fuv (" predkosc . t x t " ) ; i n t imax =200 , jmax =60; double u [ imax + 1 ] [ jmax +1] , v [ imax + 1 ] [ jmax + 1 ] ; string line ; double x , y ; i f ( fuv . is_open ( ) ) { f o r ( i =0; i<=imax ; i ++){ f o r ( j =0; j<=jmax ; j ++){ fuv >> x>> y>> u [ i ] [ j ]>> v [ i ] [ j ] ; } g e t l i n e ( fuv , l i n e ) ; } fuv . c l o s e ( ) ; } e l s e { cout << " e r r o r " << e n d l ; } 2