Projekt 9: Dyfuzja ciepła - metoda Cranck-Nicoson. Tomasz Chwiej stycznia 9 Wstęp n y ρ j= i= n x Rysunek : Siatka węzłów użyta w obiczeniach z zaznaczonymi warunkami brzegowymi: Diricheta (czerwony) i von Neumanna (niebieski). Na zajęciach znajdziemy rozwiązanie zaeżnego od czasu równania dyfuzji (T = T (x, y, t)) T = T t Równanie to zdyskretyzujemy na siatce, zapiszemy w postaci macierzowej i znajdziemy jego rozwiązanie w koejnych chwiach czasowych przy użyciu metody Cranck-Nicoson (do rozwiązania układu równań iniowych w tej metodzie wykorzystamy rozkład LU). Geometria układu wraz z siatką węzłów, w których wyznaczona zostanie temperatura pokazane jest na rys... Dyskretyzacja równania + metoda CN Najperw definiujemy siatkę węzłów, da położenia (x,y) i czasu (t) (dony indeks - położenie, górny - czas). Zapisujemy równanie () korzystając ze schematu C-N x = y = () x i = i, i =,,,..., n x (3) y j = j, j =,,,..., n y (4) t n = n t, n =,,,... () T (x, y, t) T (x i, y j, t n ) T n i,j (6) () ( T n + T n+) = T n+ T n t (7)
zastępujemy pochodne iorazami różnicowymi [ d f/dx = (f i+ f i + f i )/ ] i grupujemy wyrazy wzgędem chwi czasowych t ( ) Ti+,j n+ + T i,j n+ n+ 4Ti,j + Ti,j+ n+ + T i,j n+ ) = t ( T n i+,j + T n i,j 4T n i,j + T n i,j+ + T n i,j T n+ i,j Dokonujemy teraz reindeksacji węzłów (parę wskaźników (i, j) zastępujemy jednym ) Równanie 8 możemy zapisać w postaci macierzowej T n i,j (8) = i + j (n x + ), =,,,..., N (9) N = (n x + ) (n y + ) () ( ) j = foor () n x + i = j (n x + ) () A T n+ = B T n + c (3) [uwaga: pojawienie się wektora c nie wynika bezpośrednio z równania (8), ae dodaiśmy je aby zapewnić spełnienie warunków brzegowych von Neumanna, da WB Diricheta przyjmujemy c =. (góra/dół na rysunku ], oraz z uwzgędnieniem tyko niezerowych eementów macierzowych a, nx T n+ nx + a, T n+ + a,t n+ + a,+ T n+ + + a,+n x+t n+ +n x+ = b, nx T nx n + b, T n + b, T n.. Niezerowe eementy macierzowe z uwzgędnieniem WB Wnętrze obszaru (szary obszar na rysunku) WB Diricheta (ewy i prawy brzeg) + b,+ T n + + b,+nx+t n +n x+ + c (4) i =,,..., n x () j =,,..., n y (6) a, nx = a, = a,+ = a,+nx+ = t (7) a, = t (8) b, nx = b, = b,+ = b,+nx+ = t (9) b, = t () WB von Neumanna na górnym brzegu da chwii n + i =, n x () j =,,,..., n y () a, = (3) b, = (4) c = () T n+ y = k B (T n+ T B ) (6)
po zastąpieniu pochodnych iorazami jest następujący T n+ i,n y T n+ i,n y a po reindeksacji węzłów i po pogrupowaniu wyrazów gdzie WB von Neumanna na donym brzegu da chwii n + = k B (T n+ i,n y T B ) (7) a, nx T n+ n x + a,t n+ = c (8) (9) i =,,..., n x () j = n y (3) a, nx = k B (3) a, = + k B (33) c = T B (wektor c) (34) b, =, (cały wiersz) () T n+ y = k D (T n+ T D ) (36) po zastąpieniu pochodnych iorazami jest następujący Ti, n+ Ti, n+ a po reindeksacji węzłów i po pogrupowaniu wyrazów gdzie.. Warunki Początkowe WP narzucamy na wektor startowy T = k D (T n+ i, T B ) (37) a, T n+ + a,+nx+ T n+ +n x+ = c (38) (39) i =,,..., n x () j = (4) a, = + k D (4) a,+nx+ = k D (43) c = T D (wektor c) (44) b, =, (cały wiersz) (4) T = T A, i =, j =,,..., n y, (ewy brzeg) (46) T = T C, i = n x, j =,,..., n y, (prawy brzeg) (47) T =, w pozostałym obszarze (48) 3
Agorytm CN Agorytm CN da równania dyfuzji w wersji macierzowej inicjaizacja : A, B, c, T = T obicz rozkład LU: A FOR it = TO IT_ MAX STEP DO d = B T + c //T = T n rozwiąż ukł. równ (LU ): A T = d //T = T n+ END DO 3 Zadania do wykonania W obiczeniach do znaezienia rozkładu LU, rozwiązania układu równań iniowych, mnożenia macierzwektor czy dodawania wektorów naeży użyć bibioteki numerycznej np. GSL (ub innej dostępnej na Taurusie).. W obiczeniach naeży użyć wartości parametrów: n x =, n y =, N = (n x + ) (n y + ), =, t =, T A =, T B =, T C =, T D =, k B =., k D =.6, IT MAX =.. Utworzyć macierze A[N][N], B[N][N] oraz wektor c[n] i wypełnić je zgodnie z wzorami zamieszczonymi w sekcji.. 3. Utworzyć wektor startowy T [N] i narzucić warunki początkowe (sekcja..) 4. Znaeźć rozkład LU macierzy A (GSL). Zaimpementować agorytm CN (sekcja ) 6. Wykonać IT MAX kroków. 7. Da it =,,,, sporządzić mapy rozkładu temperatury w pomieszczeniu T (x, y) ( pkt.) 8. W stanie ustaonym równanie dyfuzji redukuje się do T = (brak zmian w czasie - znika pochodna czasowa). Da it =,,,, proszę sporządzić mapy rozkładu T (x, y) i sprawdzić czy tak jest. ( pkt.) 4 Przydatne procedury z bibioteki GSL rozkład LU int gs_inag_lu_decomp ( gs_matrix * A, gs_permutation * p, int * signum ) Po wywołaniu procedury znaeziony rozkład LU jest wpisany do macierzy A rozwiązanie układu równań z użyciem LU int gs_inag_lu_sove ( const gs_matrix * LU, const gs_permutation * p, const gs_vector * b, gs_vector * x) mnożenie macierz-wektor (BLAS ) 4
y = α op(a) x + β y op(a) = A, A T, A H int gs_bas_dgemv ( CBLA S_TRA NSPOSE_t TransA, doube apha, const gs_matrix * A, const gs_vector * x, doube beta, gs_vector * y) ( TransA = CbasNoTrans, CbasTrans, CbasConjTrans ) dodawanie dwóch wektorów (BLAS ) y = α x + y int gs_bas_daxpy ( doube apha, const gs_vector * x, gs_vector * y) Przykładowe wyniki y T(x,y).dat u ::3 y T(x,y).dat u ::4...8.6.4. x x Rysunek : Wyniki da it =