Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 57

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

ĐẠI HỌC BÁCH KHOA

KHOA KỸ THUẬT GIAO THÔNG



BÀI TẬP LỚN MÔN HỌC

PHƯƠNG PHÁP SỐ - ĐỘNG LỰC HỌC LƯU CHẤT

Giảng viên hướng dẫn: Lê Tuấn Phương Nam

Lớp: P01

Sinh viên thực hiện:

Sinh viên thực hiện Mã số sinh viên


Nguyễn Viết Minh Quân 2010558
Nguyễn Thị Khánh Ly 2010400
Nguyễn Bá Hoàng Nhân 2012521

Thành phố Hồ Chí Minh, tháng 4 năm 2024


MỤC LỤC
MỤC LỤC.............................................................................................................0

PHỤ LỤC HÌNH ẢNH.........................................................................................1

PHỤ LỤC ĐỒ THỊ................................................................................................2

1 VẤN ĐỀ........................................................................................................3

1.1 Đề bài........................................................................................................3

1.2 Giải quyết vấn đồ......................................................................................4

1.2.1 Ảnh hưởng của kích thước lưới.......................................................4

1.2.2 Ảnh hưởng của giản đồ số cho số hạng đối lưu..............................4

1.2.3 Ảnh hưởng của các thông số Re và Pr trong số hạng khuếch tán.. .4

2 CƠ SỞ LÝ THUYẾT....................................................................................5

2.1 Phương pháp số.........................................................................................5

2.2 Rời rạc hóa phương trình vi phân thành hệ phương trình đại số..............6

2.3 Công thức tính thông lượng “fluxes” cho một cell tại các biên và bên
trong miền tính toán..........................................................................................6

2.4 Sơ đồ giải thuật để viết chương trình (code):.........................................12

2.5 Lựa chọn phương pháp giải quyết phù hợp............................................13

3 KẾT QUẢ TÍNH TOÁN VÀ THẢO LUẬN..............................................14

3.1 Câu 1.......................................................................................................14

3.2 Câu 2.......................................................................................................16

3.3 Câu 3.......................................................................................................19

TÀI LIỆU THAM KHẢO...................................................................................23

PHỤ LỤC............................................................................................................24
PHỤ LỤC HÌNH ẢNH
Hình 1: Normal cells............................................................................................7
Hình 2: Bottom-Left corner boundary..................................................................7
Hình 3: Left wall boundary..................................................................................8
Hình 4: Top-Left corner boundary.......................................................................9
Hình 5: Top-Right corner boundary.....................................................................9
Hình 6: Right wall boundary.............................................................................10
Hình 7: Bottom-Right corner boundary.............................................................10
Hình 8: Bottom wall boundary..........................................................................11
Hình 9: Top wall boundary...............................................................................11
Hình 10: Sơ đồ giải thuật....................................................................................12
Hình 11: Miền tính toán.....................................................................................13
Hình 12: Contour tại mức lưới 32cells...............................................................15
Hình 13: Contour tại mức lưới 800cells.............................................................15
Hình 14: Contour tại mức lưới 3200cells...........................................................15
Hình 15: Contour tại mức lưới 12800cells.........................................................15
Hình 16: So sánh giữa hai giản đồ upwind và central........................................19
Hình 17: Contour nhiệt độ tại Pr =1.5 Re = 20................................................20
Hình 18: Contour nhiệt độ tại Pr =1 Re = 35...................................................20

1|Page
PHỤ LỤC ĐỒ THỊ
Đồ thị 1: Khảo sát hội tụ lưới..............................................................................16
Đồ thị 2: Đồ thị nhiệt độ tại y = 1 ở các hệ số khác nhau...................................21
Đồ thị 3: Đồ thị nhiệt độ tại x=0.5 ở các hệ số khác nhau..................................21

2|Page
1 VẤN ĐỀ
1.1 Đề bài

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: T(0,y) = 0; T(1,y) = 1; ;

 Đ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

 Sử dụng giá trị ban đầu của các hằng số: Pr = 1 và Re = 20.

3|Page
 Ở 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)
là nhiệt độ trong miền tính toá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ợp
hơn,…

1.2 Giải quyết vấn đề


1.2.1 Ảnh hưởng của kích thước lướ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
(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 toán và nhiệt độ tại các đường x = 0.5 và y = 1. Trình
bày hình ảnh, vẽ đồ thị và nhận xét kết quả cho 03 loại lưới trên.

1.2.2 Ảnh hưởng của giản đồ số cho số hạng đối lưu


Dùng giản đồ số trung tâm “central” cho các số hạng đối lưu để tính toán kết quả, rồi
so sánh với kết quả khi dùng giản đồ số “upwind” ở câu 1 cho cùng 1 lướ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.
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
để 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
1 cùng các điều kiện (lưới và giản đồ số).

4|Page
2 CƠ SỞ LÝ THUYẾT
2.1 Phương pháp số
Ta có ba phương pháp chính để giải một bài toán trong lưu chất

Phương pháp Ưu điểm Nhược điểm


Sai phân hữu hạn - Dễ lập trình. - Khó sử dụng với những
FDM - Có thể giải trên các máy tính mô hình có hình phức
song song. tạp.
- Tốt nhất trên lưới hình chữ - Chỉ dùng cho lưới cấu
nhật. trúc.
Phần tử hữu hạn - Phương pháp liên tục. - Khó xác định bảo toàn
FEM - Các hàm cơ bản được sử dụng cục bộ.
để tính gần đúng nghiệm. - Khó rời rạc một bài
- Cho phép tính toán ở nhiều toán đối lư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.
Thể tích hữu hạn - Dễ lập trình - Để đạt được high-order
FVM - Phương pháp rời rạc. thì cần phải sử dụng
- Bảo toàn cục bộ dẫn đến các loại lưới cấu trúc,
thông lượng trong mỗi thể tích điều này dễ làm ảnh
kiểm soát được bảo toàn. hưởng đến hình học
- Cho phép tính toán ở nhiều của mô hình.
dạng lưới khác nhau.

Yêu cầu của để bài là:

- Giải quyết là bài toán về truyền nhiệt trong lưu chất có thành phần đối lưu và
khuếch tán.
- Có hai dạng biên (Dirichlet và Neumann) được sử dụng.

5|Page
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ết
bài toán.

2.2 Rời rạc hóa phương trình vi phân thành hệ phương trình đại số

101\*
MERGEFORMAT (.)

Với và

Ta có thể viết lại phương trình 01 như sau:

Áp dụng định lý Gauss – Divergence :

Số hạng đối lưu

Số hạn khuếch tán:

2.3 Công thức tính thông lượng “fluxes” cho một cell tại các biên và bên
trong miền tính toán
Phần tử không ở biên – Phần tử 1

6|Page
Hình 1: Normal cells

202\* MERGEFORMAT (.)

Phần tử ở biên góc trái tại x =0

Với điều kiện biên

Phần tử 2

Hình 2: Bottom-Left corner boundary

7|Page
303\*
MERGEFORMAT (.)

Phần tử 3:

Hình 3: Left wall boundary

404\* MERGEFORMAT (.)

Phần tử 4

8|Page
Hình 4: Top-Left corner boundary

505\*
MERGEFORMAT (.)

Với biên phải tại x =1

Phần tử 5

Hình 5: Top-Right corner boundary

9|Page
606\*
MERGEFORMAT (.)

Phần tử 6

Hình 6: Right wall boundary

707\* MERGEFORMAT (.)

Phần tử 7

Hình 7: Bottom-Right corner boundary

10 | P a g e
808\*
MERGEFORMAT (.)

Phần tử phía dưới y = 0 – Phần tử 8

Hình 8: Bottom wall boundary

909\
* MERGEFORMAT (.)

Phần tử phía trên tại y = 1 – Phần tử 9

11 | P a g e
Hình 9: Top wall boundary

1
0010\* MERGEFORMAT (.)

12 | P a g e
2.4 Sơ đồ giải thuật để viết chương trình (code):

Hình 10: Sơ đồ giải thuật

Miền tính toán (Domain) [1x2] được chia lưới dưới dạng hình chữ nhật với a ô lưới
theo 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.

13 | P a g e
1 2 3 4 5 … j … a-2 a-1 a
1 1 2 3 4 5 … … … a-2 a-1 a
2 a+1 a+2 a+3 a+4 a+5 … … … a+(a-2) a+(a-1) 2a
3 2a+1 2a+2 2a+3 2a+4 2a+5 … … … 2a+(a-2) 2a+(a-1) 3a
4 3a+1 3a+2 3a+3 3a+4 3a+5 … … … 3a+(a-2) 3a+(a-1) 4a
… … … … … … … … … … … …
i … … … … … … (i-1)a+j … … … …
… … … … … … … … … … … …
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
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-1 ab

Hình 11: Miền tính toán

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ích
thước NxN và 1xN.

[ ] []
a11 a12 a13 … a1 , N− a a1 , N b1
A= … … … … … … , B= …
a N , 1 a N ,2 a N ,3 … aN , N−1 aN , N bN

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ết
cho ô lưới T(i,j) (với n = (i -1).a+j ).

2.5 Lựa chọn phương pháp giải quyết phù hợp


Để 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áp
giả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ử
dụng hàm mldivide hoặc mrdivide, hoặc sử dụng các hàm khác như linsolve hoặc các
hàm giải hệ phương trình tuyến tính cụ thể như inv, lu, qr, chol...

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ương
pháp đại số tuyến tính như:

- Phương pháp ngịch đảo ma trận (Matrix inversion method):


−1
x= A . B

Tuy nhiên, phương pháp này không phổ biến trong thực tế vì nó yêu cầu tính toán ma
trận nghịch đảo, đòi hỏi nhiều tài nguyên tính toán của máy tính và không hiệu quả
cho các ma trận lớn.

14 | P a g e
- Phương pháp phân rã LU (LU decomposition): Phương pháp này phân rã ma
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ác
dưới và U là một ma trận tam giác trên. Sau đó, hệ phương trình được giải bằng
việc giải hai hệ phương trình tam giác:

{Ux=
Ly=B
y

Trong đó, y và x là các vectơ không gian tương ứng.

- Phương pháp sử dụng Decomposition QR: Tương tự như phân rã LU, nhưng
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ên
R. Cách tiếp cận này thích hợp cho các ma trận dài và hẹp.
- Phương pháp sử dụng Cholesky Decomposition: Được sử dụng cho các ma trận
đố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ện
hiệu suất tính toán. Trong mã nguồn của MATLAB sẽ thực hiện các phương pháp này
mộ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

3 KẾT QUẢ TÍNH TOÁN VÀ THẢO LUẬN


3.1 Câu 1
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ác
nhau:

15 | P a g e
Hình 12: Contour tại mức lưới 32cells Hình 13: Contour tại mức lưới 800cells

Hình 14: Contour tại mức lưới 3200cells Hình 15: Contour tại mức lưới 12800cells

Khảo sát giá trị nhiệt độ tại vị trí (x,y) = (0.5,1), kết quả cho ở đồ thị:

16 | P a g e
Khảo sát hội tụ lưới
0.21
0.205
0.2
Số lượng cells

0.195
0.19
0.185
0.18
0.175
0.17
0.165
0 2000 4000 6000 8000 10000 12000 14000

T(0.5,1)

Đồ thị 1: Khảo sát hội tụ lưới

Nhận xét: Về mặt lý thuyết, lưới có độ mịn càng cào thì độ chính xác càng cao
tuy nhiên thời gian tính toán cũng càng lớn và bộ nhớ xử lý của máy tính càng
cần nhiều hơn. Từ quá trình khảo sát độ hội tụ lưới ta thấy, với mức lưới khoảng
trên 4000 cells . Kết quả cho ra độ sai lệch không đáng kể (đạt hội tụ lười). Do
vậy để tiết kiện thời gian và tài nguyên máy tính nhưng không mất tính chính
xác, ta lựa chọn kích cỡ lưới là 7200 cells ( 60 ô lưới trên trục x và 120 ô lưới
trên trục y).

Dưới đây là kết quả tham khảo của lưới 7200 cells sử dụng giản đồ Central
Scheme:

0.0381 0.1136 0.1873 0.2580 … 0.9686 0.9756 0.9816 0.9850


0.0380 0.1135 0.1871 0.2577 … 0.9686 0.9762 0.9840 0.9928
0.0380 0.1132 0.1867 0.2572 … 0.9681 0.9765 0.9852 0.9946
0.0378 0.1129 0.1862 0.2565 … 0.9671 0.9761 0.9853 0.9950
… … … … … … … … …
0.8289 0.8342 0.8398 0.8457 … 0.9685 0.9775 0.9865 0.9955
0.8343 0.8397 0.8453 0.8512 … 0.9701 0.9786 0.9871 0.9957
0.8379 0.8434 0.8490 0.8549 … 0.9711 0.9793 0.9876 0.9959
0.8398 0.8452 0.8509 0.8567 … 0.9717 0.9797 0.9878 0.9959

17 | P a g e
3.2 Câu 2
Giản đồ Upwind và Central là hai phương pháp phổ biến được sử dụng trong
phân tích phần tử hữu hạn (CFD) cho các bài toán 2D. So sánh giữa hai giản đồ
này:

Giản đồ Upwind:

Ưu điểm:

Hiệu quả cho các bài toán có dòng chảy mạnh và có tính chất 'dòng một chiều'
(one-directional flow), trong đó dòng chảy chủ yếu di chuyển theo một hướng.

Giảm hiện tượng dao động và sự phân tán nếu dòng chảy di chuyển theo một
hướng cụ thể.

Nhược điểm:

Không hiệu quả khi xử lý các hiện tượng dòng chảy phức tạp hoặc đa chiều.

Dễ gây ra hiện tượng mất cân bằng nếu không được thực hiện cẩn thận.

Giản đồ Central:

Ưu điểm:

Hiệu quả cho các bài toán có dòng chảy không đồu hoặc có tính chất đa chiều.

Có thể đảm bảo tính cân bằng và ổn định nếu được áp dụng đúng cách.

Nhược điểm:

Khả năng phân tán lớn hơn so với giản đồ Upwind, có thể dẫn đến sự mất mát
độ chính xác của kết quả.

Dễ gây ra hiện tượng dao động nếu không được cấu hình một cách chính xác.

Tóm lại, giản đồ Upwind thường được ưu tiên trong các trường hợp có dòng
chảy mạnh và đơn chiều, trong khi giản đồ Central thích hợp hơn cho các bài
toán có dòng chảy phức tạp và đa chiều. Tuy nhiên, việc lựa chọn giản đồ phụ

18 | P a g e
thuộc vào tính chất cụ thể của bài toán và sự kỹ năng của người mô phỏng để
cấu hình và sử dụng chúng một cách hiệu quả.

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 ở 2
giản đồ Upwind-Scheme và Central-Scheme:
T(1,1); Pr = 1, Re = 20
Cells Delta (%)
UpWind-Scheme Central-Scheme
32 0.2085 0.1766 15.31%
200 0.2107 0.2010 4.60%
450 0.1516 0.1455 4.05%
800 0.1157 0.1118 3.34%
3200 0.0580 0.0570 1.86%
7200 0.0386 0.0381 1.27%
12800 0.0288 0.0286 0.96%

Nhận xét:

- Khi hội tụ lưới. Giá trị sai số giữa 2 giản đồ Upwind Scheme và Central
Scheme là không đán kể (<10%).
- Với tính chất của bài toán ta đang phân tích là bài toán với dòng thay đổi nên
việc lựa chọn sử dụng giản đồ Central là hợp lý và dễ dàng hơn. Tuy vậy trong
bài toán này khi sử dụng cả hai giản đồ để giải bài toán vẫn cho ra kết quả tốt
với sai số không quá nhiều.

Upwind – Scheme Central – Scheme


32 cells 32 cells

3200 cells 3200 cells


19 | P a g e
7200 cells 7200 cells

Hình 16: So sánh giữa hai giản đồ upwind và central

3.3 Câu 3
Với trường hợp tăng số Pr, có thể thấy kích thước của các lớp biên nhiệt độ có sự thay
đổi lớn giữa hai hình Hình 17 và Hình 18, nhiệt độ tại đường y = 1 (Đồ thị 2) cho thấy
grandient nhiệt độ của của Pr =1 lớn hơn hai trường hợp còn lại từ vị trí x =0.75 đến x
= 1. Nếu Pr tăng khiến cho hiệu ứng đối lưu tăng đáng kể, điều này làm giảm khả năng
truyền nhiệt của lưu chất.

20 | P a g e
Hình 17: Contour nhiệt độ tại Pr =1.5 Re = 20

Hình 18: Contour nhiệt độ tại Pr =1 Re = 35

21 | P a g e
Với trường hợp tăng hệ số Reynolds, do hiệu ứng thủy động lực mạnh hơn ở số
Reynolds cao hơn, sự khuếch tán theo hướng ngang bị giảm đi và khả năng
truyền nhiệt của lưu chất giảm đi đáng kể.

Đồ thị nhiệt độ tại y = 1 ở các hệ số khác


nhau
Pr=1 Re=20 Pr= 1.5 Re=20 Pr=1 Re=35
1
0.9
0.8
0.7
0.6
0.5
T

0.4
0.3
0.2
0.1
0
0 0.2 0.4 0.6 0.8 1 1.2
x

Đồ thị 2: Đồ thị nhiệt độ tại y = 1 ở các hệ số khác nhau

Đồ thị nhiệt độ tại x=0.5 ở các hệ số khác


nhau
0.9
0.8
0.7
0.6
0.5
T

0.4
0.3
0.2
0.1
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

Pr=1 Re=20 Pr= 1.5 Re=20 Pr=1 Re=35

Đồ thị 3: Đồ thị nhiệt độ tại x=0.5 ở các hệ số khác nhau

22 | P a g e
Có thể thấy được rằng sự ảnh hưởng đến khả năng truyền nhiệt của hệ số
Reynolds và hệ số Prandtl lên bài toán gần như là giống nhau. Chúng đều làm
giàm khả năng truyền nhiệt.

23 | P a g e
TÀI LIỆU THAM KHẢO

24 | P a g e
PHỤ LỤC
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);

figure;
quiver(X, Y, u, v);
xlabel('x');
ylabel('y');
title('Vector V');
axis equal;
figure;
contourf(X, Y, sqrt(u.^2 + v.^2));
colorbar;
xlabel('x');
ylabel('y');
title('Contour velocity');
axis equal;

25 | P a g e
Output:

Code giản đồ số Central Scheme (Matlab):

% BTL 1

% Input
Pr = 1; Re = 20;
Pr = input('Input Prandtls number Pr: ');
R = input('Input Reynols number Re: ');
a = input('Input number of cells on x axis: ');
b = input('Input number of cells on y axis: ');
dx = 1/a;
dy = 2/b;
N = a*b; % Number of cells
fprintf('Total cell: %d\n', N);

26 | P a g e
% Domain matrix
A = zeros(N,N);
B = zeros(N,1);
Domain = sym('d',[b,a]);

% Matrix coorndinat
X = dx/2;
Y = dy/2;

for i = 2:a
X = [X, X(end) + dx];
end
for i = 2:b
Y = [Y, Y(end) + dy];
end

% Top-Left corner boundary 1,1


% X axis

% Est face
u = -sin(pi*(X(1)+dx/2))*cos(pi*Y(b));
fluxe =
u*dy*0.5*(Domain(1,1)+Domain(1,2))-(1/(Pr*Re))*(dy/dx)*(Do
main(1,2)-Domain(1,1));

% West face
fluxw = 0-(1/(Pr*Re))*dy*((Domain(1,1)-0)/(0.5*dx));

% Y axis

% North face
v = cos(pi*X(1))*sin(pi*(Y(b)+dy/2));

27 | P a g e
fluxn = v*dx*Domain(1,1);

% South face
v = cos(pi*X(1))*sin(pi*(Y(b)-dy/2));
fluxs =
v*dx*0.5*(Domain(1,1)+Domain(2,1))-(1/(Pr*Re))*(dx/dy)*(Do
main(1,1)-Domain(2,1));

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 = u*dy*1-(1/(Pr*Re))*(dy/(0.5*dx))*(1-
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));

28 | P a g e
% 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 =
v*dx*0.5*(Domain(2,a)+Domain(1,a))-(1/(Pr*Re))*(dx/dy)*(Do
main(1,a)-Domain(2,a));

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)*(Do
main(b,2)-Domain(b,1));

% West face
fluxw = 0-(1/(Pr*Re))*dy*(Domain(b,1)-0)/(0.5*dx);

29 | P a g e
% 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 =
v*dx*0.5*(Domain(b-1,1)+Domain(b,1))-(1/(Pr*Re))*(dx/dy)*(
Domain(b-1,1)-Domain(b,1));

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 = u*dy*1-(1/(Pr*Re))*(dy/(0.5*dx))*(1-
Domain(b,a));

% West face

30 | P a g e
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(1));
fluxw =
u*dy*0.5*(Domain(b,a)+Domain(b,a-1))-(1/(Pr*Re))*dy*(Domai
n(b,a)-Domain(b,a-1))/dx;

% 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 =
v*dx*0.5*(Domain(b,a)+Domain(b-1,a))-(1/(Pr*Re))*dx*(Domai
n(b-1,a)-Domain(b,a))/dy;

p = fluxn - fluxs + fluxe - fluxw;


Coeff_Domain = coeffs(p,[Domain(b-1,a),Domain(b,a-
1),Domain(b,a)]);
Coeff_Domain = double(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)
% X axis

% Est face
u = -sin(pi*(X(1)+dx/2))*cos(pi*Y(b-i+1));

31 | P a g e
fluxe =
u*dy*0.5*(Domain(i,1)+Domain(i,2))-(1/(Pr*Re))*(dy/dx)*(Do
main(i,2)-Domain(i,1));

% West face
fluxw = 0-(1/(Pr*Re))*(dy/(0.5*dx))*(Domain(i,1)-0);

% Y axis

% North face
v = cos(pi*X(1))*sin(pi*(Y(b-i+1)+dy/2));% North face
fluxn =
v*dx*0.5*(Domain(i,1)+Domain(i-1,1))-(1/(Pr*Re))*(dx/dy)*(
Domain(i-1,1)-Domain(i,1));

% South face
v = cos(pi*X(1))*sin(pi*(Y(b-i+1)-dy/2));
fluxs =
v*dx*0.5*(Domain(i+1,1)+Domain(i,1))-(1/(Pr*Re))*(dx/dy)*(
Domain(i,1)-Domain(i+1,1));

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

32 | P a g e
% 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 = u*dy*1-(1/(Pr*Re))*(dy/(0.5*dx))*(1-
Domain(i,a));

% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(b-i+1));
fluxw =
u*dy*0.5*(Domain(i,a-1)+Domain(i,a))-(1/(Pr*Re))*(dy/dx)*(
Domain(i,a)-Domain(i,a-1));

% Y axis

% North face
v = cos(pi*X(a))*sin(pi*(Y(b-i+1)+dy/2));
fluxn =
v*dx*0.5*(Domain(i,a)+Domain(i-1,a))-(1/(Pr*Re))*(dx/dy)*(
Domain(i-1,a)-Domain(i,a));

% South face
v = cos(pi*X(a))*sin(pi*(Y(b-i+1)-dy/2));
fluxs =
v*dx*0.5*(Domain(i+1,a)+Domain(i,a))-(1/(Pr*Re))*(dx/dy)*(
Domain(i,a)-Domain(i+1,a));

p = fluxn - fluxs + fluxe - fluxw;

33 | P a g e
Coeff_Domain = coeffs(p,[Domain(i-1,a),Domain(i,a-
1),Domain(i,a),Domain(i+1,a)]);
Coeff_Domain = double(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);
end

% 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 =
u*dy*0.5*(Domain(1,j)+Domain(1,j+1))-(1/(Pr*Re))*dy*(Domai
n(1,j+1)-Domain(1,j))/dx;

% 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*(Domai
n(1,j)-Domain(1,j-1))/dx;

% Y axis

% North face

34 | P a g e
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 =
v*dx*0.5*(Domain(2,j)+Domain(1,j))-(1/(Pr*Re))*dx*(Domain(
1,j)-Domain(2,j))/dy;

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);
end

% Bottom Boundary (b,j)


for j = 2 : (a-1)
% X axis

% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(1));
fluxe =
u*dy*0.5*(Domain(b,j)+Domain(b,j+1))-(1/(Pr*Re))*dy*(Domai
n(b,j+1)-Domain(b,j))/dx;

% West face

35 | P a g e
u = -sin(pi*(X(j)-dx/2))*cos(pi*Y(1));
fluxw =
u*dy*0.5*(Domain(b,j-1)+Domain(b,j))-(1/(Pr*Re))*dy*(Domai
n(b,j)-Domain(b,j-1))/dx;

% Y axis

% South face
v = cos(pi*X(j))*sin(pi*(Y(1)-dy/2));
fluxs = v*dx*Domain(b,j);

% North face
v = cos(pi*X(j))*sin(pi*(Y(1)+dy/2));
fluxn =
v*dx*0.5*(Domain(b,j)+Domain(b-1,j))-(1/(Pr*Re))*dx*(Domai
n(b-1,j)-Domain(b,j))/dy;

p = fluxn - fluxs + fluxe - fluxw;


Coeff_Domain = coeffs(p,[Domain(b-1,j),Domain(b,j-
1),Domain(b,j),Domain(b,j+1)]);
Coeff_Domain = double(Coeff_Domain);
A((b-1)*a+j,(b-2)*a+j) = Coeff_Domain(4);
A((b-1)*a+j,(b-1)*a+j-1) = Coeff_Domain(3);
A((b-1)*a+j,(b-1)*a+j) = Coeff_Domain(2);
A((b-1)*a+j,(b-1)*a+j+1) = Coeff_Domain(1);
end

% Normal Cell (i,j)


for i = 2 : (b-1)
for j = 2 : (a-1)

% X axis

36 | P a g e
% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(b-i+1));
fluxe =
u*dy*0.5*(Domain(i,j)+Domain(i,j+1))-(1/(Pr*Re))*dy*(Domai
n(i,j+1)-Domain(i,j))/dx;

% West face
u = -sin(pi*(X(j)-dx/2))*cos(pi*Y(b-i+1));
fluxw =
u*dy*0.5*(Domain(i,j-1)+Domain(i,j))-(1/(Pr*Re))*dy*(Domai
n(i,j)-Domain(i,j-1))/dx;

% Y axis

% North face
v = cos(pi*X(j))*sin(pi*(Y(b-i+1)+dy/2));
fluxn =
v*dx*0.5*(Domain(i,j)+Domain(i-1,j))-(1/(Pr*Re))*dx*(Domai
n(i-1,j)-Domain(i,j))/dy;

% South face
v = cos(pi*X(j))*sin(pi*(Y(b-i+1)-dy/2));
fluxs =
v*dx*0.5*(Domain(i+1,j)+Domain(i,j))-(1/(Pr*Re))*dx*(Domai
n(i,j)-Domain(i+1,j))/dy;

p = fluxn - fluxs + fluxe - fluxw;


Coeff_Domain = coeffs(p,[Domain(i-1,j),Domain(i,j-
1),Domain(i,j),Domain(i,j+1),Domain(i+1,j)]);
Coeff_Domain = double(Coeff_Domain);
A((i-1)*a+j,(i-2)*a+j) = Coeff_Domain(5);

37 | P a g e
A((i-1)*a+j,(i-1)*a+j-1) = Coeff_Domain(4);
A((i-1)*a+j,(i-1)*a+j) = Coeff_Domain(3);
A((i-1)*a+j,(i-1)*a+j+1) = Coeff_Domain(2);
A((i-1)*a+j,i*a+j) = Coeff_Domain(1);
end
end

% Solve
T = A\B;
T_Domain = zeros(b,a);
for i = 1:b
for j = 1:a
T_Domain(i,j) = T((i-1)*a+j,1);
end
end

x = linspace(0, 1, size(T_Domain, 2));


y = linspace(0, 2, size(T_Domain, 1));

% Grenerate meshgrid
[X, Y] = meshgrid(x, y);

% Generate Temp Fiel


contourf(X, Y, T_Domain);
colorbar;
xlabel('x');
ylabel('y');
zlabel('Temperature');
title('Temperature Distribution');
axis equal;

38 | P a g e
Code giản đồ số Upwind Scheme (Matlab):

% BTL 1

% Input
Pr = 1; Re = 20;
Pr = input('Input Prandtls number Pr: ');
R = input('Input Reynols number Re: ');
a = input('Input number of cells on x axis: ');
b = input('Input number of cells on y axis: ');
dx = 1/a;
dy = 2/b;
N = a*b; % Number of cells
fprintf('Total cell: %d\n', N);

% Domain matrix
A = zeros(N,N);
B = zeros(N,1);
Domain = sym('d',[b,a]);

% Matrix coorndinat
X = dx/2;
Y = dy/2;

for i = 2:a
X = [X, X(end) + dx];
end
for i = 2:b
Y = [Y, Y(end) + dy];
end

39 | P a g e
% Top-Left corner boundary 1,1
% X axis

% Est face
u = -sin(pi*(X(1)+dx/2))*cos(pi*Y(b));
if u > 0
fluxe =
u*dy*Domain(1,1)-(1/(Pr*Re))*(dy/dx)*(Domain(1,2)-
Domain(1,1));
else
fluxe =
u*dy*Domain(1,2)-(1/(Pr*Re))*(dy/dx)*(Domain(1,2)-
Domain(1,1));
end

% West face
fluxw = 0-(1/(Pr*Re))*dy*((Domain(1,1)-0)/(0.5*dx));

% Y axis

% North face
v = cos(pi*X(1))*sin(pi*(Y(b)+dy/2));
fluxn = v*dx*Domain(1,1);

% South face
v = cos(pi*X(1))*sin(pi*(Y(b)-dy/2));
if v > 0
fluxs =
v*dx*Domain(2,1)-(1/(Pr*Re))*(dx/dy)*(Domain(1,1)-
Domain(2,1));
else

40 | P a g e
fluxs =
v*dx*Domain(1,1)-(1/(Pr*Re))*(dx/dy)*(Domain(1,1)-
Domain(2,1));
end
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 = u*dy*1-(1/(Pr*Re))*(dy/(0.5*dx))*(1-
Domain(1,a));

% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(b));
if u > 0
fluxw =
u*dy*Domain(1,a-1)-(1/(Pr*Re))*(dy/dx)*(Domain(1,a)-
Domain(1,a-1));
else
fluxw =
u*dy*Domain(1,a)-(1/(Pr*Re))*(dy/dx)*(Domain(1,a)-
Domain(1,a-1));

41 | P a g e
end
% Y axis
v = cos(pi*X(a))*sin(pi*(Y(b)+dy/2));% North face
fluxn = v*dx*Domain(1,a);
v = cos(pi*X(1))*sin(pi*(Y(b)-dy/2)); % South face
if v > 0
fluxs =
v*dx*Domain(2,a)-(1/(Pr*Re))*(dx/dy)*(Domain(1,a)-
Domain(2,a));
else
fluxs =
v*dx*Domain(1,a)-(1/(Pr*Re))*(dx/dy)*(Domain(1,a)-
Domain(2,a));
end
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));
if u > 0
fluxe =
u*dy*Domain(b,1)-(1/(Pr*Re))*(dy/dx)*(Domain(b,2)-
Domain(b,1));

42 | P a g e
else
fluxe =
u*dy*Domain(b,2)-(1/(Pr*Re))*(dy/dx)*(Domain(b,2)-
Domain(b,1));
end

% West face
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));
if v > 0
fluxn =
v*dx*Domain(b,1)-(1/(Pr*Re))*(dx/dy)*(Domain(b-1,1)-
Domain(b,1));
else
fluxn =
v*dx*Domain(b-1,1)-(1/(Pr*Re))*(dx/dy)*(Domain(b-1,1)-
Domain(b,1));
end
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);

43 | P a g e
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 = u*dy*1-(1/(Pr*Re))*(dy/(0.5*dx))*(1-
Domain(b,a));

% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(1));
if u > 0
fluxw =
u*dy*Domain(b,a-1)-(1/(Pr*Re))*dy*(Domain(b,a)-Domain(b,a-
1))/dx;
else
fluxw = u*dy*Domain(b,a)-(1/(Pr*Re))*dy*(Domain(b,a)-
Domain(b,a-1))/dx;
end

% 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));
if v > 0

44 | P a g e
fluxn = v*dx*Domain(b,a)-(1/(Pr*Re))*dx*(Domain(b-
1,a)-Domain(b,a))/dy;
else
fluxn = v*dx*Domain(b-1,a)-(1/(Pr*Re))*dx*(Domain(b-
1,a)-Domain(b,a))/dy;
end
p = fluxn - fluxs + fluxe - fluxw;
Coeff_Domain = coeffs(p,[Domain(b-1,a),Domain(b,a-
1),Domain(b,a)]);
Coeff_Domain = double(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)
% X axis

% Est face
u = -sin(pi*(X(1)+dx/2))*cos(pi*Y(b-i+1));
if u > 0
fluxe =
u*dy*Domain(i,1)-(1/(Pr*Re))*(dy/dx)*(Domain(i,2)-
Domain(i,1));
else
fluxe =
u*dy*Domain(i,2)-(1/(Pr*Re))*(dy/dx)*(Domain(i,2)-
Domain(i,1));
end

% West face

45 | P a g e
fluxw = 0-(1/(Pr*Re))*(dy/(0.5*dx))*(Domain(i,1)-0);

% Y axis

% North face
v = cos(pi*X(1))*sin(pi*(Y(b-i+1)+dy/2));% North face
if v > 0
fluxn =
v*dx*Domain(i,1)-(1/(Pr*Re))*(dx/dy)*(Domain(i-1,1)-
Domain(i,1));
else
fluxn =
v*dx*Domain(i-1,1)-(1/(Pr*Re))*(dx/dy)*(Domain(i-1,1)-
Domain(i,1));
end

% South face
v = cos(pi*X(1))*sin(pi*(Y(b-i+1)-dy/2));
if v > 0
fluxs =
v*dx*Domain(i+1,1)-(1/(Pr*Re))*(dx/dy)*(Domain(i,1)-
Domain(i+1,1));
else
fluxs =
v*dx*Domain(i,1)-(1/(Pr*Re))*(dx/dy)*(Domain(i,1)-
Domain(i+1,1));
end
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);

46 | P a g e
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

% 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 = u*dy*1-(1/(Pr*Re))*(dy/(0.5*dx))*(1-
Domain(i,a));

% West face
u = -sin(pi*(X(a)-dx/2))*cos(pi*Y(b-i+1));
if u > 0
fluxw =
u*dy*Domain(i,a-1)-(1/(Pr*Re))*(dy/dx)*(Domain(i,a)-
Domain(i,a-1));
else
fluxw =
u*dy*Domain(i,a)-(1/(Pr*Re))*(dy/dx)*(Domain(i,a)-
Domain(i,a-1));
end

% Y axis

% North face
v = cos(pi*X(a))*sin(pi*(Y(b-i+1)+dy/2));

47 | P a g e
if v > 0
fluxn =
v*dx*Domain(i,a)-(1/(Pr*Re))*(dx/dy)*(Domain(i-1,a)-
Domain(i,a));
else
fluxn =
v*dx*Domain(i-1,a)-(1/(Pr*Re))*(dx/dy)*(Domain(i-1,a)-
Domain(i,a));
end

% South face
v = cos(pi*X(a))*sin(pi*(Y(b-i+1)-dy/2));
if v > 0
fluxs =
v*dx*Domain(i+1,a)-(1/(Pr*Re))*(dx/dy)*(Domain(i,a)-
Domain(i+1,a));
else
fluxs =
v*dx*Domain(i,a)-(1/(Pr*Re))*(dx/dy)*(Domain(i,a)-
Domain(i+1,a));
end
p = fluxn - fluxs + fluxe - fluxw;
Coeff_Domain = coeffs(p,[Domain(i-1,a),Domain(i,a-
1),Domain(i,a),Domain(i+1,a)]);
Coeff_Domain = double(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);
end

48 | P a g e
% Top Boundary (1,j)
for j = 2 : (a-1)
% X axis

% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(b));
if u > 0
fluxe =
u*dy*Domain(1,j)-(1/(Pr*Re))*dy*(Domain(1,j+1)-
Domain(1,j))/dx;
else
fluxe =
u*dy*Domain(1,j+1)-(1/(Pr*Re))*dy*(Domain(1,j+1)-
Domain(1,j))/dx;
end

% West face
u = -sin(pi*(X(j)-dx/2))*cos(pi*Y(b));
if u > 0
fluxw =
u*dy*Domain(1,j-1)-(1/(Pr*Re))*dy*(Domain(1,j)-Domain(1,j-
1))/dx;
else
fluxw = u*dy*Domain(1,j)-(1/(Pr*Re))*dy*(Domain(1,j)-
Domain(1,j-1))/dx;
end

% Y axis

49 | P a g e
% 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));
if v > 0
fluxs = v*dx*Domain(2,j)-(1/(Pr*Re))*dx*(Domain(1,j)-
Domain(2,j))/dy;
else
fluxs = v*dx*Domain(1,j)-(1/(Pr*Re))*dx*(Domain(1,j)-
Domain(2,j))/dy;
end
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);
end

% Bottom Boundary (b,j)


for j = 2 : (a-1)
% X axis

% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(1));
if u > 0

50 | P a g e
fluxe =
u*dy*Domain(b,j)-(1/(Pr*Re))*dy*(Domain(b,j+1)-
Domain(b,j))/dx;
else
fluxe =
u*dy*Domain(b,j+1)-(1/(Pr*Re))*dy*(Domain(b,j+1)-
Domain(b,j))/dx;
end

% West face
u = -sin(pi*(X(j)-dx/2))*cos(pi*Y(1));
if u > 0
fluxw =
u*dy*Domain(b,j-1)-(1/(Pr*Re))*dy*(Domain(b,j)-Domain(b,j-
1))/dx;
else
fluxw = u*dy*Domain(b,j)-(1/(Pr*Re))*dy*(Domain(b,j)-
Domain(b,j-1))/dx;
end

% Y axis

% South face
v = cos(pi*X(j))*sin(pi*(Y(1)-dy/2));
fluxs = v*dx*Domain(b,j);

% North face
v = cos(pi*X(j))*sin(pi*(Y(1)+dy/2));
if v > 0
fluxn = v*dx*Domain(b,j)-(1/(Pr*Re))*dx*(Domain(b-
1,j)-Domain(b,j))/dy;
else

51 | P a g e
fluxn = v*dx*Domain(b-1,j)-(1/(Pr*Re))*dx*(Domain(b-
1,j)-Domain(b,j))/dy;
end
p = fluxn - fluxs + fluxe - fluxw;
Coeff_Domain = coeffs(p,[Domain(b-1,j),Domain(b,j-
1),Domain(b,j),Domain(b,j+1)]);
Coeff_Domain = double(Coeff_Domain);
A((b-1)*a+j,(b-2)*a+j) = Coeff_Domain(4);
A((b-1)*a+j,(b-1)*a+j-1) = Coeff_Domain(3);
A((b-1)*a+j,(b-1)*a+j) = Coeff_Domain(2);
A((b-1)*a+j,(b-1)*a+j+1) = Coeff_Domain(1);
end

% Normal Cell (i,j)


for i = 2 : (b-1)
for j = 2 : (a-1)

% X axis

% Est face
u = -sin(pi*(X(j)+dx/2))*cos(pi*Y(b-i+1));
if u > 0
fluxe =
u*dy*Domain(i,j)-(1/(Pr*Re))*dy*(Domain(i,j+1)-
Domain(i,j))/dx;
else
fluxe =
u*dy*Domain(i,j+1)-(1/(Pr*Re))*dy*(Domain(i,j+1)-
Domain(i,j))/dx;
end

% West face

52 | P a g e
u = -sin(pi*(X(j)-dx/2))*cos(pi*Y(b-i+1));
if u > 0
fluxw =
u*dy*Domain(i,j-1)-(1/(Pr*Re))*dy*(Domain(i,j)-Domain(i,j-
1))/dx;
else
fluxw = u*dy*Domain(i,j)-(1/(Pr*Re))*dy*(Domain(i,j)-
Domain(i,j-1))/dx;
end

% Y axis

% North face
v = cos(pi*X(j))*sin(pi*(Y(b-i+1)+dy/2));
if v > 0
fluxn = v*dx*Domain(i,j)-(1/(Pr*Re))*dx*(Domain(i-
1,j)-Domain(i,j))/dy;
else
fluxn = v*dx*Domain(i-1,j)-(1/(Pr*Re))*dx*(Domain(i-
1,j)-Domain(i,j))/dy;
end

% South face
v = cos(pi*X(j))*sin(pi*(Y(b-i+1)-dy/2));
if v > 0
fluxs =
v*dx*Domain(i+1,j)-(1/(Pr*Re))*dx*(Domain(i,j)-
Domain(i+1,j))/dy;
else
fluxs = v*dx*Domain(i,j)-(1/(Pr*Re))*dx*(Domain(i,j)-
Domain(i+1,j))/dy;
end

53 | P a g e
p = fluxn - fluxs + fluxe - fluxw;
Coeff_Domain = coeffs(p,[Domain(i-1,j),Domain(i,j-
1),Domain(i,j),Domain(i,j+1),Domain(i+1,j)]);
Coeff_Domain = double(Coeff_Domain);
A((i-1)*a+j,(i-2)*a+j) = Coeff_Domain(5);
A((i-1)*a+j,(i-1)*a+j-1) = Coeff_Domain(4);
A((i-1)*a+j,(i-1)*a+j) = Coeff_Domain(3);
A((i-1)*a+j,(i-1)*a+j+1) = Coeff_Domain(2);
A((i-1)*a+j,i*a+j) = Coeff_Domain(1);
end
end

% Solve
T = A\B;
T_Domain = zeros(b,a);
for i = 1:b
for j = 1:a
T_Domain(i,j) = T((i-1)*a+j,1);
end
end

x = linspace(0, 1, size(T_Domain, 2));


y = linspace(0, 2, size(T_Domain, 1));

% Grenerate meshgrid
[X, Y] = meshgrid(x, y);

% Generate Temp Fiel


contourf(X, Y, T_Domain);
colorbar;
xlabel('x');
ylabel('y');

54 | P a g e
zlabel('Temperature');
title('Temperature Distribution');
axis equal;

55 | P a g e

You might also like