The size of X must match the size of Z or the number of columns of Z.
    3 views (last 30 days)
  
       Show older comments
    
clc
clear all
close all
%Geometry definition
L=0.3;                      %Length of the The rectangular bar in meter 
W=0.4;                      %Width of the The rectangular bar in meter
%Material properties 
alpha=11.234E-05;               %theraml diffusivity
% computional mesh
nx=31;                     %max divisions in x-direction
ny=41;                      %max divisions in y-direction
nt=100;                     %number of time step for transient simulation
dt=20;                     %time step size
x=linspace(0,L,nx);
y=linspace(0,W,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
convergence_criteria = 1e-4;    %Tolerance limitto stop the iteration at some point
error = 1e9;
%Temperature at boundary nodes
T = zeros(nx,ny);             % initialize temperature at all nodes
% Boundary conditions
T_top = 10;
T_bottom = 40;
T_right = 0;
T_left = 0;
T(1,:) = T_left;
T(end,:) = T_right;
T(:,1) = T_bottom;
T(:,end) = T_top;
T(1,1) = (T_bottom+T_left)/2;
T(end,1) = (T_bottom+T_right)/2;
T(1,end) = (T_left+T_top)/2;
T(end,end) = (T_top+T_right)/2;
%method details 
T_old  = T;  %previous iteration temperature  
T_prev = T;  %previous time step temperature
CFL_x = ((2*alpha*dt)/dx^2); %CFL along x
CFL_y = ((2*alpha*dt)/dy^2); %CFL along y
term_1 = (1 + CFL_x + CFL_y)^(-1);
term_2 = term_1*CFL_x/2;
term_3 = term_1*CFL_y/2;
solution_time = dt;    %tracking the solution time
jacobi_iteration = 1;
for k = 1:nt    %time marching
    while (error > convergence_criteria)    %Jacobi Iterative Method
        for i = 2:nx-1             %space marching along x
            for  j = 2:ny-1        %space marching along y
                H = (T_old(i+1,j) + T_old(i-1,j));
                V = (T_old(i,j+1) + T_old(i,j-1));
                T(i,j) = ((T_prev(i,j)*term_1) + (term_2*H) + (term_3*V)); 
            end
        end
        error = max(max(abs(T_old - T))); %calculating the error
        T_old = T;                        %updating the temperature for next iteration
        jacobi_iteration = 1 + jacobi_iteration;
    end
    error = 1;           %re-assigning the error
    T_prev = T;          %updating the temperature for the next time step  
    solution_time = dt + solution_time;
end
%ploting temperature contour
    figure(1)
    contourf(x,y,T.');
    colorbar
    colormap(jet);
    xlabel('X-Axis');
    ylabel('Y-Axis');
    title_text = sprintf('2D Implicit Unsteady Heat Diffusion, Jacobi, Solution Time: %.3f s',solution_time);
    title(title_text);
0 Comments
Answers (1)
  Torsten
      
      
 on 27 Dec 2022
        
      Edited: Torsten
      
      
 on 28 Dec 2022
  
      Errors in coding and discretization have been corrected, I guess.
Why did you delete your previous question ? Quite impolite in my opinion.
clc
clear all
close all
%Geometry definition
L=0.3;                      %Length of the The rectangular bar in meter 
W=0.4;                      %Width of the The rectangular bar in meter
%Material properties 
alpha=11.234E-05;               %theraml diffusivity
% computional mesh
nx=31;                     %max divisions in x-direction
ny=41;                      %max divisions in y-direction
nt=100;                     %number of time step for transient simulation
dt=20;                     %time step size
x=linspace(0,L,nx);
y=linspace(0,W,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
convergence_criteria = 1e-4;    %Tolerance limitto stop the iteration at some point
error = 1e9;
%Temperature at boundary nodes
T = zeros(nx,ny);             % initialize temperature at all nodes
% Boundary conditions
T_top = 10;
T_bottom = 40;
T_right = 0;
T_left = 0;
T(1,:) = T_left;
T(end,:) = T_right;
T(:,1) = T_bottom;
T(:,end) = T_top;
T(1,1) = (T_bottom+T_left)/2;
T(end,1) = (T_bottom+T_right)/2;
T(1,end) = (T_left+T_top)/2;
T(end,end) = (T_top+T_right)/2;
%method details 
T_old  = T;  %previous iteration temperature  
T_prev = T;  %previous time step temperature
CFL_x = ((2*alpha*dt)/dx^2); %CFL along x
CFL_y = ((2*alpha*dt)/dy^2); %CFL along y
term_1 = (1 + CFL_x + CFL_y)^(-1);
term_2 = term_1*CFL_x/2;
term_3 = term_1*CFL_y/2;
solution_time = dt;    %tracking the solution time
jacobi_iteration = 1;
for k = 1:nt    %time marching
    while (error > convergence_criteria)    %Jacobi Iterative Method
        for i = 2:nx-1             %space marching along x
            for  j = 2:ny-1        %space marching along y
                H = (T_old(i+1,j) + T_old(i-1,j));
                V = (T_old(i,j+1) + T_old(i,j-1));
                T(i,j) = ((T_prev(i,j)*term_1) + (term_2*H) + (term_3*V)); 
            end
        end
        error = max(max(abs(T_old - T))); %calculating the error
        T_old = T;                        %updating the temperature for next iteration
        jacobi_iteration = 1 + jacobi_iteration;
    end
    error = 1;           %re-assigning the error
    T_prev = T;          %updating the temperature for the next time step  
    solution_time = dt + solution_time;
end
%ploting temperature contour
    figure(1)
    contourf(x,y,T.');
    colorbar
    colormap(jet);
    xlabel('X-Axis');
    ylabel('Y-Axis');
    title_text = sprintf('2D Implicit Unsteady Heat Diffusion, Jacobi, Solution Time: %.3f s',solution_time);
    title(title_text);
5 Comments
See Also
Categories
				Find more on Pole and Zero Locations in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

