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