Project

convergence rate [Number of iterations] of the steady state and transient [explicit and implicit]

Objective : To investigate convergence rate of steady and Unsteady methods:

Matlab code for steady convergence rate :

close all
clear all
clc

nx = 20;
ny = 20;
nt = 1000;

x = linspace(0,1,nx);
y = linspace(0,1,ny);

d_x = x(2) - x(1);
d_y = y(2) - y(1);

y1 = 1;

error = 9e9;
tolerance = 1e-4;
dt = 1e-4;

T_L = 400;
T_R = 800;
T_T = 600;
T_B = 900;

T = 300*ones(nx,ny);
T(2:ny-1,1) = T_L;
T(2:ny-1,nx) = T_R;
T(1,2:nx-1) = T_T;
T(ny,2:ny-1) = T_B;

T(1,1) = (T_L + T_T)/2;
T(nx,ny) = (T_R + T_B)/2;
T(1,ny) = (T_T + T_R)/2;
T(nx,1) = (T_L + T_B)/2;

 k = 2*((d_x^2 + d_y^2)/(d_x^2*d_y^2));
 k1 = (1.6*dt)/d_x^2; 
 k2 = (1.6*dt)/d_y^2; 
 term1 = (1/(1+2*k1+2*k2)); 
 term2 = (k1*term1);
 term3 = (k2*term1); 
 w_opt = 1.4;
 
 kj = 1;
 kc = 0;
 T_new2 = T;
 T1 = T;
 T2 = T;
T_new1 = T;
T_new = T;
kl = 1;
 while error > 1e-4
      for i=2:nx-1
          for j = 2:ny-1
             T_new(i,j) = (1/k)*(((T(i-1,j) + T(i+1,j))/d_x^2)  + ((T(i,j-1) + T(i,j+1))/d_x^2));
             T_new1(i,j) = (1/k)*((T_new1(i-1,j)+T1(i+1,j))/d_x^2) + (1/k)*((T_new1(i,j-1) + T1(i,j+1))/d_y^2);
             T_new2(i,j) =  (1-w_opt)*T2(i,j) + w_opt*(((1/k)*((T_new2(i-1,j)+T2(i+1,j))/d_x^2) + (1/k)*((T_new2(i,j-1) + T2(i,j+1))/d_y^2)));
          end         
      end 
      error = max(max(abs(T_new - T)));
      error1 = max(max(abs(T_new1 - T1)));
      error2 = max(max(abs(T_new2 - T2)));
      if kj == 1
          fg = error;
          fg1 = error1;
          fg2 = error2;
      end
      if kj>=2
          loglog([kj-1,kj],[fg,error],'color','r')
          axis([0 1000 1e-4 400])
          hold on
          loglog([kj-1,kj],[fg1,error1],'color','b')
          loglog([kj-1,kj],[fg2,error2],'color','cyan')
          legend('jacobi','Gauss-siedel','SOR-g-s')
          pause(0.0000000000001)
          title('convergence rate of iterative methods for steady conuction equation',kj)
          xlabel('log(iterations)')
          ylabel('log(error)')
      end
      fg = error;
      fg1 = error1;
      fg2 = error2;
      kj = kj +1;
      kc = kc+1;
      T = T_new;
      T1 = T_new1; 
      T2 = T_new2;
 end

Results :

Observations :

1. SOR takes less iterations than jacobi and gauss siedel.

2. plotted using loglog command , so it would be easy to visualize.

Matlab code for both steady and unsteady methods :

close all
clear all
clc

nx = 20;
ny = 20;
nt = 1000;

x = linspace(0,1,nx);
y = linspace(0,1,ny);

d_x = x(2) - x(1);
d_y = y(2) - y(1);

y1 = 1;

error = 9e9;
tolerance = 1e-4;
dt = 1e-4;

T_L = 400;
T_R = 800;
T_T = 600;
T_B = 900;

T = 300*ones(nx,ny);
T(2:ny-1,1) = T_L;
T(2:ny-1,nx) = T_R;
T(1,2:nx-1) = T_T;
T(ny,2:ny-1) = T_B;

T(1,1) = (T_L + T_T)/2;
T(nx,ny) = (T_R + T_B)/2;
T(1,ny) = (T_T + T_R)/2;
T(nx,1) = (T_L + T_B)/2;

 k = 2*((d_x^2 + d_y^2)/(d_x^2*d_y^2));
 k1 = (1.6*dt)/d_x^2; 
 k2 = (1.6*dt)/d_y^2; 
 term1 = (1/(1+2*k1+2*k2)); 
 term2 = (k1*term1);
 term3 = (k2*term1); 
 w_opt = 1.5;
 
 kj = 1;
 kc = 0;
 T_new = T;
T_prev=T;
kl = 1;
fprintf('Solver 1 : Steady n Solver 2 : Unsteady n ' )
Solver = input('enter the number you want to select the solver :')
fprintf(' method 1 : Jacobi n method 2 : Gauss siedel n method 3 : SOR-g-s ')
method = input('enter the number you want to select the method :')
tic
 while error > 1e-4
      for i=2:nx-1
          for j = 2:ny-1
              if solver == 1
                if method == 1  
              T_new(i,j) = (1/k)*(((T(i-1,j) + T(i+1,j))/d_x^2)  + ((T(i,j-1) + T(i,j+1))/d_x^2));
              elseif method == 2
               T_new(i,j) = (1/k)*((T_new(i-1,j)+T(i+1,j))/d_x^2) + (1/k)*((T_new(i,j-1) + T(i,j+1))/d_y^2);  
              elseif method == 3
               T_new(i,j) =  (1-w_opt)*T(i,j) + w_opt*(((1/k)*((T_new(i-1,j)+T(i+1,j))/d_x^2) + (1/k)*((T_new(i,j-1) + T(i,j+1))/d_y^2)));                
                end  
              end
              if solver ==2
              if method == 1  
              T_new(i,j) =  ((term1)*T_prev(i,j)) + ((term2)*(T(i+1,j) + T(i-1,j))) + ((term3)*(T(i,j+1) + T(i,j-1)));
              elseif method == 2
               T_new(i,j) = ((term1)*T_prev(i,j)) + ((term2)*(T_new(i-1,j) + T(i+1,j))) + ((term3)*(T_new(i,j-1) + T(i,j+1)));   
              elseif method == 3
              T_new(i,j) = (1-w_opt)*T(i,j) + w_opt*(((term1)*T_prev(i,j)) + ((term2)*(T(i+1,j) + T(i-1,j))) + ((term3)*(T(i,j+1) + T(i,j-1))));                
              end
              end
          end
      end 
      error = max(max(abs(T_new - T)))
      if kj == 1
          fg = error;
      end
      if kj>=2
          loglog([kj-1,kj],[(fg),(error)],'color','r')
          axis([0 10000 1e-4 10000])
          hold on
          if method == 1
          legend('jacobi')
          elseif method == 2
              legend('Gauss-siedel')
          else
              legend('SOR-g-s')
          end
          title('convergence rate of iterative methods for Unsteady conuction equation  time @ Iteration @',[toc kj])
          xlabel('log(iterations)')
          ylabel('log(error)')
      end
      fg = error;
      kj = kj +1;
      kc = kc+1;
      pause(0.00000000001)
      T = T_new; 
      T_prev = T_new;
 end

Results :

Jacobi steady and unsteady :

Gauss siedel steady and unsteady :

SOR steady and unsteady :

Transient Explicit Results :

Number of Iterations : 1436.

Note :

Using function defination this execution would be simpler.

Observations :

1. Succcessive over relaxation method is faster than other two methods.

2. Explicit Transient takes less iterations than Implicit successive over relaxation.

3. Implicit approach takes more iterations and more time to execute.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.