Finite-difference method for two layered model
    조회 수: 4 (최근 30일)
  
       이전 댓글 표시
    
I am a beginner in MATLAB, and I am attempting to code a two-layered system using the finite-difference method. In my code, region I is defined for 0 <= x1 < 1/2, and region II for 1/2 < x2 <= 1, where 0 <= y <= 1. My goal is to create a contour plot for the temperature distribution in a single figure window covering the entire domain (0 <= x <= 1 and 0 <= y <= 1). I want region I to display the temperature T1 and region II to display the temperature T2. However, my code contains errors that I'm struggling to identify and correct. I would greatly appreciate your assistance in resolving these issues. Please feel free to seek clarification if needed. Thank you in advance for your help.
clc;
clear all;
%% Geometric parameters for the domain
L = 1;                                                                                %Length of the duct in y-direc(in m)
H = 1;                                                                                %Width of the duct in x-direc(in m)
Nx1 = 101;                                                                            %Number of grid point in region-I in x-direc
Nx2 = 101;                                                                            %Number of grid point in region-II in x-direc
Ny = 101;                                                                             %Number of grid point in y-direc
dx1 = H/(Nx1-1);                                                                      %Length of the element in x-direc in region-I(in m)
dx2 = H/(Nx2-1);                                                                      %Lenght of the element in x-direc in region-II(in m)
dy = L/(Ny-1);                                                                        %Lenght of the element in y-direc(in m)
%% Parameter
Gr = 10; 
Br = 0.1;
P = -0.1;
phi1 = 0.01;
phi2 = 0.01;
ro1 = 8933;                                                                           %Density of nanoparticle in region-I
beta1 = 1.67;                                                                         %Thermal expansion coefficient of nanoparticle in region-I
ka1 = 401;                                                                            %Thermal conductivity of nanoparticle in region-I
ro2 = 10500;                                                                          %Density of nanoparticle in region-II
beta2 = 1.89;                                                                         %Thermal expansion coefficient of nanoparticle in region-II
ka2 = 429;                                                                            %Thermal conductivity of nanoparticle in region-II
rof1 = 884;                                                                           %Density of base fluid in region-I
betaf1 = 70;                                                                          %Thermal expansion coefficient of base fluid in region-I
kaf1 = 0.145;                                                                         %Thermal conductivity of base fluid in region-I
muf1 = 0.486;                                                                          %Viscosity of fluid in region-I
rof2 = 920;                                                                           %Density of base fluid in region-II
betaf2 = 64;                                                                          %Thermal expansion coefficient of base fluid in region-II
kaf2 = 0.121;                                                                         %Thermal conductivity of base fluid in region-II
muf2 = 0.0145;                                                                        %Viscosity of fluid in region-II
la = muf2/muf1;                                                                       %Ratio of viscosity
beta = betaf2/betaf1;                                                                 %Ratio of thermal expansion coefficient
n = rof2/rof1;                                                                        %Ratio of density
ka = kaf2/kaf1;                                                                       %Ratio of thermal conductivity
A1 = 1/((1-phi1)^2.5);
A3 = ((1-phi1)+((phi1*ro1*beta1)/(rof1*betaf1)));
A4 = (ka1+2*kaf1-(2*phi1*(kaf1-ka1)))/(ka1+2*kaf1+(phi1*(kaf1-ka1)));
B1 = 1/((1-phi2)^2.5);
B3 = ((1-phi2)+((phi1*ro1*beta1)/(rof1*betaf1)));
B4 = (ka1+2*kaf1-(2*phi1*(kaf1-ka1)))/(ka1+2*kaf1+(phi1*(kaf1-ka1)));
%% Boundary and initial conditions 
T1 = ones(Nx1,Ny);                                                                    %Creating an array for temperature in region-I of order Nx1*Ny
T2 = ones(Nx2,Ny);                                                                    %Creating an array for temperature in region-I of order Nx1*Ny 
w1 = ones(Nx1,Ny);                                                                    %Creating an array for velocity in region-I of order Nx1*Ny
w2 = ones(Nx2,Ny);                                                                    %Creating an array for velocity in region-II of order Nx2*Ny
w1(:,1) = -w1(:,1);                                                                   %Velocity conditon for left wall region-I(y=0, 0<=x1<A1)
T1(:,1) = -1-T1(:,1);                                                                 %Temperature conditon for left wall region-I(y=0, 0<=x1<A1)
w1(:,Ny) = -w1(:,Ny);                                                               %Velocity conditon for right wall region-I(y=1, 0<=x1<A1)
T1(:,Ny) = 1-T1(:,Ny);                                                              %Temperature conditon for right wall region-I(y=1, 0<=x1<A1)
w1(1,:) = -w1(1,:);                                                                   %Velocity condition at lower adiabtic wall(x=0,0<=y<=1)
T1(1,:) = T1(1,:);                                                                    %Temperature condition at lower adiabtic wall(x=0,0<=y<=1) 
w2(Nx2,:) = w1(Nx1,:)+w1(Nx1,:)-w2(Nx2,:);                                        %Continuity of velocity at interface(x=A1, 0<=y<=1)
w1(Nx1,:) = (((la*B1*dx1)/(dx2*A1))*(w2(Nx2,:)-w2(Nx2,:)))+w1(Nx1,:);             %Continuity of tangential velocity/shear stress at the interface(x=A1, 0<=y<=1)
T2(Nx2,:) = T1(Nx1,:)+T1(Nx1,:)-T2(Nx2,:);                                        %Continuity of Temperature at interface(x=A1, 0<=y<=1)
T1(Nx1,:) = (((ka*B4*dx1)/(dx2*A4))*(T2(Nx2,:)-T2(Nx2,:)))+T1(Nx1,:);             %Continuity of heat flux at the interface(x=A1, 0<=y<=1)
w2(:,1) = -w2(:,1);                                                                   %Velocity conditon for left wall region-II(y=0, A1<x2<=A2)
T2(:,1) = -1-T2(:,1);                                                                 %Temperature conditon for left wall region-II(y=0, A1<x2<=A2)
w2(:,Ny) = -w2(:,Ny);                                                               %Velocity conditon for right wall region-II(y=1, A1<x2<=A2)
T2(:,Ny) = 1-T2(:,Ny);                                                              %Temperature conditon for right wall region-II(y=1, A1<x2<=A2)
w2(1,:) = -w2(1,:);                                                                   %Velocity condition at upper adiabtic wall(x=A1+A2,0<=y<=1)
T2(1,:) = T2(1,:);                                                                    %Temperature condition at upper adiabtic wall(x=A1+A2,0<=y<=1) 
%% Convergence
Epsilon = 1e-8;
Error = 5;                                                                            %Error is any value greater than epsilon
%% Plotting the results
% Plotting the results for Region-1 (w1, T1)
x1 = linspace(0,0.5,Nx1);
x2 = linspace(0.5,1,Nx2);
y = 0:dy:L;
figure;
contourf(x1, y, T1, 'LineStyle', 'none');
hold on
contourf(x2, y, T2, 'LineStyle', 'none');
hold off
colorbar;
title('Temperature distribution in Region-1');
xlabel('X-direction');
ylabel('Y-direction');
axis equal;
%% Computation
Iter = 0; 
while(Error>Epsilon)
    Iter = Iter + 1;
    disp(Iter);
    for j = 2:Ny-1 
    for i = 2:Nx1-1
    % Equations for region-I    
eq1 = (w1(i+1,j)-2*w1(i,j)+w1(i-1,j)/(dx1^2))+(w1(i,j+1)-2*w1(i,j)+w1(i,j-1)/(dy^2))+((Gr*A3*T1(i,j))/A1)-(P/A1);
eq2 = (T1(i+1,j)-2*T1(i,j)+T1(i-1,j)/(dx1^2))+(T1(i,j+1)-2*T1(i,j)+T1(i,j-1)/(dy^2))+((Br*A1/A4)*(((w1(i+1,j)-w1(i-1,j))/(2*dx1))^2+((w1(i,j+1)-w1(i,j-1))/(2*dy))^2));
     end
    for j = 2:Ny-1
     for i = 2:Nx2-1
         % Equations for region-II
       eq3= (w2(i+1,j)-2*w2(i,j)+w2(i-1,j)/(dx2^2))+(w2(i,j+1)-2*w2(i,j)+w2(i,j-1)/(dy^2))+((Gr*B3*beta*n*T2(i,j))/B1)-(P/(B1*la));
eq4 = (T2(i+1,j)-2*T2(i,j)+T2(i-1,j)/(dx2^2))+(T2(i,j+1)-2*T2(i,j)+T2(i,j-1)/(dy^2))+((Br*la*B1/ka*B4)*(((w2(i+1,j)-w2(i-1,j))/(2*dx2))^2+((w2(i,j+1)-w2(i,j-1))/(2*dy))^2));
    end
    end
    end
    %Error = sqrt(sumsqr(T1 - T1_old) + sumsqr(T2 - T2_old)); % Use T1_old and T2_old to store the previous values
    % Update T1_old and T2_old for the next iteration
    %T1_old = T1;
    %T2_old = T2;
    %disp(Error);
end
답변 (1개)
  Jason Shrand
      
 2023년 12월 6일
        
      편집: Jason Shrand
      
 2023년 12월 6일
  
      The first issue I see is on line 17, in the line of code here:
w1(:,0) = -w1(:,1);   
. In MATLAB, array indices start at 1, not 0. But here, and in several other locations, you're trying to set index 0 of an array
댓글 수: 2
  Jason Shrand
      
 2023년 12월 6일
				I found a few issues and addressed them in the updated code below. You'll still need to compute the "Error" variable in your while loop, right now it uses an undefined variable T. I assume you want either T1 or T2?
clc;
clear all;
%% Geometric parameters for the domain
L = 1;                                                                                %Length of the duct in y-direc(in m)
H = 1;                                                                                %Width of the duct in x-direc(in m)
Nx1 = 101;                                                                            %Number of grid point in region-I in x-direc
Nx2 = 101;                                                                            %Number of grid point in region-II in x-direc
Ny = 101;                                                                             %Number of grid point in y-direc
dx1 = H/(Nx1-1);                                                                      %Length of the element in x-direc in region-I(in m)
dx2 = H/(Nx2-1);                                                                      %Lenght of the element in x-direc in region-II(in m)
dy = L/(Ny-1);                                                                        %Lenght of the element in y-direc(in m)
%% Parameter
Gr = 10; 
Br = 0.1;
P = -0.1;
phi1 = 0.01;
phi2 = 0.01;
ro1 = 8933;                                                                           %Density of nanoparticle in region-I
beta1 = 1.67;                                                                         %Thermal expansion coefficient of nanoparticle in region-I
ka1 = 401;                                                                            %Thermal conductivity of nanoparticle in region-I
ro2 = 10500;                                                                          %Density of nanoparticle in region-II
beta2 = 1.89;                                                                         %Thermal expansion coefficient of nanoparticle in region-II
ka2 = 429;                                                                            %Thermal conductivity of nanoparticle in region-II
rof1 = 884;                                                                           %Density of base fluid in region-I
betaf1 = 70;                                                                          %Thermal expansion coefficient of base fluid in region-I
kaf1 = 0.145;                                                                         %Thermal conductivity of base fluid in region-I
muf1 =0.486;                                                                          %Viscosity of fluid in region-I
rof2 = 920;                                                                           %Density of base fluid in region-II
betaf2 = 64;                                                                          %Thermal expansion coefficient of base fluid in region-II
kaf2 = 0.121;                                                                         %Thermal conductivity of base fluid in region-II
muf2 = 0.0145;                                                                        %Viscosity of fluid in region-II
la = muf2/muf1;                                                                       %Ratio of viscosity
beta = betaf2/betaf1;                                                                 %Ratio of thermal expansion coefficient
n = rof2/rof1;                                                                        %Ratio of density
ka = kaf2/kaf1;                                                                       %Ratio of thermal conductivity
A1 = 1/((1-phi1)^2.5);
A3 = ((1-phi1)+((phi1*ro1*beta1)/(rof1*betaf1)));
A4 = (ka1+2*kaf1-(2*phi1*(kaf1-ka1)))/(ka1+2*kaf1+(phi1*(kaf1-ka1)));
B1 = 1/((1-phi2)^2.5);
B3 = ((1-phi2)+((phi1*ro1*beta1)/(rof1*betaf1)));
B4 = (ka1+2*kaf1-(2*phi1*(kaf1-ka1)))/(ka1+2*kaf1+(phi1*(kaf1-ka1)));
%% Boundary and initial conditions 
T1 = ones(Nx1,Ny);                                                                    %Creating an array for temperature in region-I of order Nx1*Ny
T2 = ones(Nx2,Ny);                                                                    %Creating an array for temperature in region-I of order Nx1*Ny 
w1 = ones(Nx1,Ny);                                                                    %Creating an array for velocity in region-I of order Nx1*Ny
w2 = ones(Nx2,Ny);                                                                    %Creating an array for velocity in region-II of order Nx2*Ny
w1(:,1) = -w1(:,1);                                                                   %Velocity conditon for left wall region-I(y=0, 0<=x1<A1)
T1(:,1) = -1-T1(:,1);                                                                 %Temperature conditon for left wall region-I(y=0, 0<=x1<A1)
w1(:,Ny) = -w1(:,Ny);                                                               %Velocity conditon for right wall region-I(y=1, 0<=x1<A1)
T1(:,Ny) = 1-T1(:,Ny);                                                              %Temperature conditon for right wall region-I(y=1, 0<=x1<A1)
w1(1,:) = -w1(1,:);                                                                   %Velocity condition at lower adiabtic wall(x=0,0<=y<=1)
T1(1,:) = T1(1,:);                                                                    %Temperature condition at lower adiabtic wall(x=0,0<=y<=1) 
w2(Nx2,:) = w1(Nx1,:)+w1(Nx1,:)-w2(Nx2,:);                                        %Continuity of velocity at interface(x=A1, 0<=y<=1)
w1(Nx1,:) = (((la*B1*dx1)/(dx2*A1))*(w2(Nx2,:)-w2(Nx2,:)))+w1(Nx1,:);             %Continuity of tangential velocity/shear stress at the interface(x=A1, 0<=y<=1)
T2(Nx2,:) = T1(Nx1,:)+T1(Nx1,:)-T2(Nx2,:);                                        %Continuity of Temperature at interface(x=A1, 0<=y<=1)
T1(Nx1,:) = (((ka*B4*dx1)/(dx2*A4))*(T2(Nx2,:)-T2(Nx2,:)))+T1(Nx1,:);             %Continuity of heat flux at the interface(x=A1, 0<=y<=1)
w2(:,1) = -w2(:,1);                                                                   %Velocity conditon for left wall region-II(y=0, A1<x2<=A2)
T2(:,1) = -1-T2(:,1);                                                                 %Temperature conditon for left wall region-II(y=0, A1<x2<=A2)
w2(:,Ny) = -w2(:,Ny);                                                               %Velocity conditon for right wall region-II(y=1, A1<x2<=A2)
T2(:,Ny) = 1-T2(:,Ny);                                                              %Temperature conditon for right wall region-II(y=1, A1<x2<=A2)
w2(1,:) = -w2(1,:);                                                                   %Velocity condition at upper adiabtic wall(x=A1+A2,0<=y<=1)
T2(1,:) = T2(1,:);                                                                    %Temperature condition at upper adiabtic wall(x=A1+A2,0<=y<=1) 
%% Convergence
Epsilon = 1e-8;
Error = 5;                                                                            %Error is any value greater than epsilon
%% Governing equations
%(w1(i+1,j)-2*w1(i,j)+w1(i-1,j)/(dx1^2))+(w1(i,j+1)-2*w1(i,j)+w1(i,j-1)/(dy^2))+((Gr*A3*T1(i,j))/A1)-(P/A1)==0;
%(T1(i+1,j)-2*T1(i,j)+T1(i-1,j)/(dx1^2))+(T1(i,j+1)-2*T1(i,j)+T1(i,j-1)/(dy^2))+((Br*A1/A4)*(((w1(i+1,j)-w1(i-1,j))/(2*dx1))^2+((w1(i,j+1)-w1(i,j-1))/(2*dy))^2))==0;
%(w2(i+1,j)-2*w2(i,j)+w2(i-1,j)/(dx2^2))+(w2(i,j+1)-2*w2(i,j)+w2(i,j-1)/(dy^2))+((Gr*B3*beta*n*T2(i,j))/B1)-(P/(B1*la))==0;
%(T2(i+1,j)-2*T2(i,j)+T2(i-1,j)/(dx2^2))+(T2(i,j+1)-2*T2(i,j)+T2(i,j-1)/(dy^2))+((Br*la*B1/ka*B4)*(((w2(i+1,j)-w2(i-1,j))/(2*dx2))^2+((w2(i,j+1)-w2(i,j-1))/(2*dy))^2))==0;
%% Plotting the results
x1 = linspace(0, 0.5, Nx1); %x1 = 0:dx1:1/2;
x2 = linspace(0.5, 1, Nx2); % x2 = 1/2:dx2:H;
y = 0:dy:L;
colormap(jet);
contourf(x1,y,T1);
contourf(x2,y,T2);
colorbar;
title('Temperature distribution');
xlabel('X-direction');
ylabel('Y-direction');
%% Computation
Iter = 0; 
while(Error>Epsilon)
    Iter = Iter + 1;
    disp(Iter);
    % TODO: Iterating from 2 to N-1 is a temporary work-around just to get something up and
    % running. You'll need to update your logic to handle the boundary
    % conditions (i=1, j=1, i=N, j=N) appropriately.
    for j = 2:(Ny-1)
        for i = 2:(Nx1-1)
            eq1 = (w1(i+1,j)-2*w1(i,j)+w1(i-1,j)/(dx1^2))+(w1(i,j+1)-2*w1(i,j)+w1(i,j-1)/(dy^2))+((Gr*A3*T1(i,j))/A1)-(P/A1);
            eq2 = (T1(i+1,j)-2*T1(i,j)+T1(i-1,j)/(dx1^2))+(T1(i,j+1)-2*T1(i,j)+T1(i,j-1)/(dy^2))+((Br*A1/A4)*(((w1(i+1,j)-w1(i-1,j))/(2*dx1))^2+((w1(i,j+1)-w1(i,j-1))/(2*dy))^2));
            end
         for i = 2:(Nx2-1)
           eq3 = (w2(i+1,j)-2*w2(i,j)+w2(i-1,j)/(dx2^2))+(w2(i,j+1)-2*w2(i,j)+w2(i,j-1)/(dy^2))+((Gr*B3*beta*n*T2(i,j))/B1)-(P/(B1*la));
           eq4 = (T2(i+1,j)-2*T2(i,j)+T2(i-1,j)/(dx2^2))+(T2(i,j+1)-2*T2(i,j)+T2(i,j-1)/(dy^2))+((Br*la*B1/ka*B4)*(((w2(i+1,j)-w2(i-1,j))/(2*dx2))^2+((w2(i,j+1)-w2(i,j-1))/(2*dy))^2));
        end
    end
    Error = sqrt(sumsqr(T(i,:) - T(i-1,:)));
    disp(Error);
end
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




