Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.29 MB, 57 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
Xem xét vấn đồ đối lưu – khuếch tán hai chiều ổn định của nhiệt độ:
Trong đó Pr là hằng số Prandtl và Re là số Reynolds.
 Điều kiện biên theo phương ngang như sau:
 là thành phần vận tốc theo phương x
 là thành phần vận tốc theo phương y
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6"><b> Ở trong bài tập lớn này ta cần sử dụng các giản đồ số để xác định được T(x,y)</b>
là nhiệt độ trong miền tính tốn, đồng thời giải quyết các vấn đồ được đặt ra ởmục 2. để có thể hiểu rõ về các giản đồ, phương pháp giản đồ số nào phù hợphơn,…
<i>1.2.1 Ảnh hưởng của kích thước lưới</i>
Dùng giản đồ số “upwind” bậc nhất cho các số hạng đối lưu, tự do thiết kế 03 loại lưới
<b>(thô, vừa, và mịn) để xét độ hội tụ lưới, viết chương trình (code) để tìm sự phân bốnhiệt độ T(x, y) trong miền tính tốn và nhiệt độ tại các đường x = 0.5 và y = 1. Trình</b>
bày hình ảnh, vẽ đồ thị và nhận xét kết quả cho 03 loại lưới trên.
<i>1.2.2 Ảnh hưởng của giản đồ số cho số hạng đối lưu</i>
Dùng giản đồ số trung tâm “central” cho các số hạng đối lưu để tính tốn kết quả, rồiso sánh với kết quả khi dùng giản đồ số “upwind” ở câu 1 cho cùng 1 lưới.
<i>1.2.3 Ảnh hưởng của các thông số Re và Pr trong số hạng khuếch tán.</i>
Thay đổi các hằng số như sau:a) Pr = 1 và Re = 35
b) Pr = 1,5 và Re = 20
Khi đó dùng giản đơ số “upwind” cho các số hạng đối lưu và lưới hội tụ xác định câu 1
<b>để tìm phân bố T(x, y). Nhận xét kết quả đạt được ở câu 3 và so sánh với kết quả ở câu</b>
1 cùng các điều kiện (lưới và giản đồ số).
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Ta có ba phương pháp chính để giải một bài toán trong lưu chất
Sai phân hữu hạn
FDM <sup>- Dễ lập trình.</sup><sub>- Có thể giải trên các máy tính</sub>song song.
- Tốt nhất trên lưới hình chữnhật.
- Khó sử dụng với nhữngmơ hình có hình phứctạp.
- Chỉ dùng cho lưới cấutrúc.
Phần tử hữu hạn
FEM <sup>- Phương pháp liên tục.</sup><sub>- Các hàm cơ bản được sử dụng</sub>để tính gần đúng nghiệm.- Cho phép tính tốn ở nhiều
loại lưới khác nhau.
- Dễ sử lý những mơ hình cóbiên dạng hình học cong.
- Khó xác định bảo tồncục bộ.
- Khó rời rạc một bàitoán đối lưu
Thể tích hữu hạn
FVM <sup>- Dễ lập trình</sup><sub>- Phương pháp rời rạc.</sub>
- Bảo tồn cục bộ dẫn đếnthơng lượng trong mỗi thể tíchkiểm sốt được bảo tồn.- Cho phép tính toán ở nhiều
dạng lưới khác nhau.
- Để đạt được high-orderthì cần phải sử dụngcác loại lưới cấu trúc,điều này dễ làm ảnhhưởng đến hình họccủa mơ hình.
<i>u cầu của để bài là:</i>
- Giải quyết là bài tốn về truyền nhiệt trong lưu chất có thành phần đối lưu và
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">Vậy nên nhóm quyết định sử dụng phương pháp thể tích hữu hạn (FVM) để giải quyếtbài tốn.
101\*MERGEFORMAT (.)
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><small>Hình 1: Normal cells</small>
02\* MERGEFORMAT (.)
<b>Phần tử ở biên góc trái tại x =0</b>
Với điều kiện biên
<i>Phần tử 2</i>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">303\*MERGEFORMAT (.)
<i>Phần tử 3:</i>
<small>Hình 3: Left wall boundary</small>
04\* MERGEFORMAT (.)
<i>Phần tử 4</i>
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11"><small>Hình 4: Top-Left corner boundary</small>
505\*MERGEFORMAT (.)
<b>Với biên phải tại x =1</b>
<i>Phần tử 5</i>
<small>Hình 5: Top-Right corner boundary</small>
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">606\*MERGEFORMAT (.)
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">808\*MERGEFORMAT (.)
<i>Phần tử phía dưới y = 0 – Phần tử 8</i>
<small>Hình 8: Bottom wall boundary</small>
909\* MERGEFORMAT (.)
<i>Phần tử phía trên tại y = 1 – Phần tử 9</i>
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14"><small>Hình 9: Top wall boundary</small>
010\* MERGEFORMAT (.)
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15"><small>Hình 10: Sơ đồ giải thuật</small>
Miền tính tốn (Domain) [1x2] được chia lưới dưới dạng hình chữ nhật với a ơ lướitheo chiều x và b ô lưới theo chiều y. Các ô lưới (cell) được đánh số thứ tự từ 1 đến N= a.b như hình bên dưới.
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16"><small>12345…j</small> <sub>…</sub> <small>a-2a-1a</small>
<small>32a+12a+22a+32a+42a+5………2a+(a-2) 2a+(a-1)3a</small>
<small>43a+13a+23a+33a+43a+5………3a+(a-2) 3a+(a-1)4a</small>
<small>b-1(b-2)a+1 (b-2)a+2 (b-2)a+3 (b-2)a+4 (b-2)a+5………(b-2)a+a-2 (b-2)a+a-1 (b-2)a+a</small>
<small>b(b-1)a+1 (b-1)a+2 (b-1)a+3 (b-1)a+4 (b-1)a+5………(b-1)a+a-2 (b-1)a+a-1abHình 11: Miền tính tốn</small>
Vị trí của một ơ lưới được xác định theo quy tắc như một phần từ trong ma trận, tức ôlưới ở hàng i và cột i có vị trí (i,j) và có số thứ tự là n = (i – 1).a – j .
Ma trận hệ số A và B chứa các hệ số của phương trình giải cho ơ lưới thứ n sẽ có kíchthước NxN và 1xN.
Hàng thứ n của mà ma trận A và B là hệ số của phương trình khuếch tán – đối lưu viếtcho ô lưới T(i,j) (với n = (i -1).a+j ).
Để thực hiện giải các nghiệm của hệ phương trình : A.x = B, ta có nhiều phương phápgiải quyết. Trong Matlab, để giải hệ phương trình tuyến tính dạng A⋅x = B, ta có thể sử
<i>dụng hàm mldivide hoặc mrdivide, hoặc sử dụng các hàm khác như linsolve hoặc cáchàm giải hệ phương trình tuyến tính cụ thể như inv, lu, qr, chol...</i>
Cơ sở toán học phổ biến cho việc giải hệ phương trình này là sử dụng các phươngpháp đại số tuyến tính như:
<i>- Phương pháp ngịch đảo ma trận (Matrix inversion method): </i>
<i><small>x= A</small></i><small>−1</small><i><small>.B</small></i>
Tuy nhiên, phương pháp này không phổ biến trong thực tế vì nó u cầu tính tốn matrận nghịch đảo, địi hỏi nhiều tài ngun tính tốn của máy tính và khơng hiệu quảcho các ma trận lớn.
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17"><i>- Phương pháp phân rã LU (LU decomposition): Phương pháp này phân rã ma</i>
trận A thành tích của một ma trận tích LU, trong đó L là một ma trận tam giácdưới và U là một ma trận tam giác trên. Sau đó, hệ phương trình được giải bằngviệc giải hai hệ phương trình tam giác:
Trong đó, y và x là các vectơ khơng gian tương ứng.
<i>- Phương pháp sử dụng Decomposition QR: Tương tự như phân rã LU, nhưng</i>
phân rã A thành tích của một ma trận trực giao Q và một ma trận tam giác trênR. Cách tiếp cận này thích hợp cho các ma trận dài và hẹp.
<i>- Phương pháp sử dụng Cholesky Decomposition: Được sử dụng cho các ma trận</i>
đối xứng và xác định dương.
Các phương pháp này tùy thuộc vào tính chất cụ thể của ma trận A và có thể cải thiệnhiệu suất tính tốn. Trong mã nguồn của MATLAB sẽ thực hiện các phương pháp nàymột cách tối ưu để cung cấp kết quả chính xác và hiệu quả khi giải hệ A.x = B
Tiến hành khảo khát độc lập lưới tại các mức lưới có số lượng ô lưới (cell) khácnhau:
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18"><small>Hình 12: Contour tại mức lưới 32cellsHình 13: Contour tại mức lưới 800cells</small>
<small>Hình 14: Contour tại mức lưới 3200cellsHình 15: Contour tại mức lưới 12800cells</small>
<small>Đồ thị 1: Khảo sát hội tụ lưới</small>
<small>0.82890.83420.83980.8457…0.96850.97750.98650.99550.83430.83970.84530.8512…0.97010.97860.98710.99570.83790.84340.84900.8549…0.97110.97930.98760.99590.83980.84520.85090.8567…0.97170.97970.98780.9959</small>
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">Khảo sát giá trị nhiệt độ của cells 1 (giá trị T(1,1)) đối với từng kích thước lưới ở 2giản đồ Upwind-Scheme và Central-Scheme:
<b>Upwind – SchemeCentral – Scheme</b>
<small>UpWind-Scheme Central-Scheme</small>
<small>320.20850.176615.31%2000.21070.20104.60%4500.15160.14554.05%8000.11570.11183.34%32000.05800.05701.86%72000.03860.03811.27%128000.02880.02860.96%T(1,1); Pr = 1, Re = 20</small> <sub>Delta (%)</sub><small>Cells</small>
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23"><small>Hình 17: Contour nhiệt độ tại Pr =1.5 Re = 20</small>
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24"><small>Pr=1 Re=20Pr= 1.5 Re=20Pr=1 Re=35</small>
<small>Pr=1 Re=20Pr= 1.5 Re=20Pr=1 Re=35y</small>
<small>Đồ thị 3: Đồ thị nhiệt độ tại x=0.5 ở các hệ số khác nhau</small>
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">Code vẽ đồ thị phân bố vận tốc:
[X, Y] = meshgrid(0:(1/20):1, 0:(2/20):2);u = -sin(pi*X).*cos(pi*Y);
v = cos(pi*X).*sin(pi*Y);
quiver(X, Y, u, v);xlabel('x');
title('Vector V');axis equal;
contourf(X, Y, sqrt(u.^2 + v.^2)); colorbar;
title('Contour velocity');axis equal;
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">Output:
Code giản đồ số Central Scheme (Matlab):
% BTL 1% Input
dy = 2/b;
N = a*b; % Number of cells
fprintf('Total cell: %d\n', N);
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">% Domain matrix
A = zeros(N,N);B = zeros(N,1);
Domain = sym('d',[b,a]);
% Matrix coorndinat
X = dx/2;Y = dy/2;
% West face
fluxw = 0-(1/(Pr*Re))*dy*((Domain(1,1)-0)/(0.5*dx));
% Y axis
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">fluxn = v*dx*Domain(1,1);
% South face
v = cos(pi*X(1))*sin(pi*(Y(b)-dy/2)); fluxs =
p = fluxn - fluxs + fluxe - fluxw;Coeff_Domain = coeffs(p,
[Domain(1,1),Domain(1,2),Domain(2,1)]);Coeff_Domain = double(Coeff_Domain);A(1,1) = Coeff_Domain(3);
A(1,2) = Coeff_Domain(2);A(1,a+1) = Coeff_Domain(1);
% Top-Right corner boundary (1,a)% X axis
% Est face
u = -sin(pi*(X(a)+dx/2))*cos(pi*Y(b));
fluxe = Domain(1,a));
% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(b)); fluxw =
u*dy*0.5*(Domain(1,a-1)+Domain(1,a))-(1/(Pr*Re))*(dy/dx)*(Domain(1,a)-Domain(1,a-1));
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">
% Y axis% North face
v = cos(pi*X(a))*sin(pi*(Y(b)+dy/2)); fluxn = v*dx*Domain(1,a);
% South face
v = cos(pi*X(1))*sin(pi*(Y(b)-dy/2)); fluxs =
p = fluxn - fluxs + fluxe - fluxw;Coeff_Domain = coeffs(p,[Domain(1,a-1),Domain(1,a),Domain(2,a)]);
Coeff_Domain = double(Coeff_Domain); A(a,a-1) = Coeff_Domain(4);
A(a,a) = Coeff_Domain(3); A(a,2*a) = Coeff_Domain(2); B(a) = - Coeff_Domain(1);
% Bottom-Left corner boundary b,1% X axis
% Est face
u = -sin(pi*(X(1)+dx/2))*cos(pi*Y(1)); fluxe =
u*dy*0.5*(Domain(b,2)+Domain(b,1))-(1/(Pr*Re))*(dy/dx)*(Domain(b,2)-Domain(b,1));
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">fluxw = 0-(1/(Pr*Re))*dy*(Domain(b,1)-0)/(0.5*dx);
% Y axis% South face
v = cos(pi*X(1))*sin(pi*(Y(1)-dy/2)); fluxs = v*dx*Domain(b,1);
% North face
v = cos(pi*X(1))*sin(pi*(Y(1)+dy/2)); fluxn =
p = fluxn - fluxs + fluxe - fluxw;Coeff_Domain = coeffs(p,[Domain(b-1,1),Domain(b,1),Domain(b,2)]);
Coeff_Domain = double(Coeff_Domain);
A((b-1)*a+1,(b-2)*a+1) = Coeff_Domain(3);A((b-1)*a+1,(b-1)*a+1) = Coeff_Domain(2);A((b-1)*a+1,(b-1)*a+2) = Coeff_Domain(1);
% Bottom-Right corner boundary (b,a)% X axis
% Est face
u = -sin(pi*(X(a)+dx/2))*cos(pi*Y(1));
fluxe = Domain(b,a));
</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">
% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(1)); fluxw =
% Y axis% South face
v = cos(pi*X(a))*sin(pi*(Y(1)-dy/2)); fluxs = v*dx*Domain(b,a);
% North face
v = cos(pi*X(a))*sin(pi*(Y(1)+dy/2)); fluxn =
p = fluxn - fluxs + fluxe - fluxw;
Coeff_Domain = 1),Domain(b,a)]);
coeffs(p,[Domain(b-1,a),Domain(b,a-Coeff_Domain = double(coeffs(p,[Domain(b-1,a),Domain(b,a-Coeff_Domain); A(a*b,(b-2)*a+a) = Coeff_Domain(4); A(a*b,(b-1)*a+a-1) = Coeff_Domain(3); A(a*b,a*b) = Coeff_Domain(2);
B(a*b) = - Coeff_Domain(1);
% Left Boundary (i,1)for i = 2 : (b-1)
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">% Est face
u = -sin(pi*(X(1)+dx/2))*cos(pi*Y(b-i+1)); fluxe =
fluxw = 0-(1/(Pr*Re))*(dy/(0.5*dx))*(Domain(i,1)-0);
v = cos(pi*X(1))*sin(pi*(Y(b-i+1)-dy/2)); fluxs =
p = fluxn - fluxs + fluxe - fluxw;Coeff_Domain = coeffs(p,[Domain(i-
1,1),Domain(i,1),Domain(i,2),Domain(i+1,1)]);Coeff_Domain = double(Coeff_Domain);
A((i-1)*a+1,(i-2)*a+1) = Coeff_Domain(4);A((i-1)*a+1,(i-1)*a+1) = Coeff_Domain(3);A((i-1)*a+1,(i-1)*a+2) = Coeff_Domain(2); A((i-1)*a+1,i*a+1) = Coeff_Domain(1);
end
</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">% Right Boundary (i,a)for i = 2 : (b-1)
% X axis% Est face
u = -sin(pi*(X(a)+dx/2))*cos(pi*Y(b-i+1));
fluxe = Domain(i,a));
% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(b-i+1)); fluxw =
% Y axis% North face
v = cos(pi*X(a))*sin(pi*(Y(b-i+1)+dy/2)); fluxn =
% South face
v = cos(pi*X(a))*sin(pi*(Y(b-i+1)-dy/2)); fluxs =
</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">p = fluxn - fluxs + fluxe - fluxw;
Coeff_Domain = 1),Domain(i,a),Domain(i+1,a)]);
coeffs(p,[Domain(i-1,a),Domain(i,a-Coeff_Domain = double(coeffs(p,[Domain(i-1,a),Domain(i,a-Coeff_Domain);
A((i-1)*a+a,(i-2)*a+a) = Coeff_Domain(5); A((i-1)*a+a,(i-1)*a+a-1) = Coeff_Domain(4); A((i-1)*a+a,(i-1)*a+a) = Coeff_Domain(3); A((i-1)*a+a,i*a+a) = Coeff_Domain(2);
B((i-1)*a+a)= - Coeff_Domain(1);
% Top Boundary (1,j)for j = 2 : (a-1)
% X axis% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(b)); fluxe =
% West face
u = -sin(pi*(X(j)-dx/2))*cos(pi*Y(b)); fluxw =
u*dy*0.5*(Domain(1,j-1)+Domain(1,j))-(1/(Pr*Re))*dy*(Domain(1,j)-Domain(1,j-1))/dx;
</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">% Y axis% North face
v = cos(pi*X(j))*sin(pi*(Y(b)+dy/2)); fluxn = v*dx*Domain(1,j);
% South face
v = cos(pi*X(j))*sin(pi*(Y(b)-dy/2)); fluxs =
p = fluxn - fluxs + fluxe - fluxw;Coeff_Domain = coeffs(p,[Domain(1,j-
1),Domain(1,j),Domain(1,j+1),Domain(2,j)]);Coeff_Domain = double(Coeff_Domain);
A(j,j-1) = Coeff_Domain(4); A(j,j) = Coeff_Domain(3); A(j,j+1) = Coeff_Domain(2); A(j,a+j) = Coeff_Domain(1);
% Bottom Boundary (b,j)for j = 2 : (a-1)
% X axis% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(1));
</div>