Challenge

Week 5.1 - Mid term project - Solving the steady and unsteady 2D heat conduction problem

AIM: -

To solve the 2D heat conduction problem for the steady and unsteady state using Jacobi, gauss seidel, and successive over-relaxation iterative techniques.

MAT LAB CODE: -

There is 2 MATLAB code written separately for steady and unsteady conditions. But for both conditions’ inputs are the same, while programming it is assumed that, the domain is the surface of area (1mX1m). Discretized into 10 nodes both horizontally and vertically. Constant values like alpha and time step 'data, by keeping the explicit condition in mind. Relaxation factor omega is also assumed while programming only.

Inputs: -

Top boundary temperature

600 K

Bottom Boundary temperature

900 K

Left Boundary temperature

400 K

Right Boundary temperature

800 K

error

1e-4

Steady-State 2D Heat conduction: -

 

<!-- [if !supportLists]-->·         <!--[endif]-->First inputs are defined into variables and the temperature array is created.

<!-- [if !supportLists]-->·         <!--[endif]-->Boundary conditions are introduced into the temperature array, and at corners, boundary values are averaged.

<!-- [if !supportLists]-->·         <!--[endif]-->Constants like alpha, omega, tolerance are defined to run the iteration.

<!-- [if !supportLists]-->·         <!--[endif]-->Input must be provided by the user, to choose the iterative method.

<!-- [if !supportLists]-->·         <!--[endif]-->The if-else loop is used to solve the equation using the selected (input from the user) iterative technique.

<!-- [if !supportLists]-->·         <!--[endif]-->while loop is used to run the iterative technique till the required accuracy is achieved.

<!-- [if !supportLists]-->·         <!--[endif]-->Two for loop is used to calculate the temperature values at every node at each iterative step.

<!-- [if !supportLists]-->·         <!--[endif]-->Finally, the temperature distribution graph is obtained using 'conturf' command.

MAT LAB Code

 

% Domain and discretization length

number_node = 10;

domain_length = 1;

 

%value of x and y at nodes in a discretization plane

x = linspace (0, domain_length,number_node);

y = linspace (0, domain_length,number_node);

dx = domain_length/(number_node-1);

dy = domain_length/(number_node-1);

 

 

% Let define a temperature value at all nodes with initial guess 300k

T = 300*ones(number_node,number_node);

 

% Initial boundary conditions at left and right

T (1: end,1) = 400;

T (1: end,end) = 800;

 

% Initial boundary conditions at bottom and top

T (end,1: end) = 900;

T (1,1: end) = 600;

 

%average values of T at corner boundaries

T (1,1) = 500;

T(end,1) = 650;

T (1, end) = 700;

T (end, end) = 850;

 

%copy of Temperature to compute to compute

T_old = T;

 

%constant

K = (2*(dx^2+dy^2))/(dx^2*dy^2);

omega = 1.2;

 

% to enter while loop initialize error value randomly

error = 10;

tol = 1e-4;

no_iteration = 0;

 

method = input ('Enter (1) for Jacobi, (2) for gauss seidel, (3) for sos');

if method == 1

    while(error>tol)

        for i = 2: number_node-1

            for j = 2: number_node-1

            term1 = (T_old (i+1, j) +T_old(i-1, j))/dx^2;

            term2 = (T_old (i, j+1) +T_old(i, j-1))/dy^2;

            T(i,j) = (term1+term2)/K;

            end

        end

        error = max(max(abs(T_old-T)));

       

        % to upadte the previous velcity with new velocity

        %got from the iteration

        T_old = T;

        no_iteration = no_iteration+1;

       

    end

elseif method == 2

    while(error>tol)

        for i = 2:number_node-1

            for j = 2:number_node-1

            term1 = (T_old(i+1,j)+T(i-1,j))/dx^2;

            term2 = (T_old(i,j+1)+T(i,j-1))/dy^2;

            T(i,j) = (term1+term2)/K;

            end

        end

        error = max(max(abs(T_old-T)));

       

        % to upadte the previous velcity with new velocity

        %got from the iteration

        T_old = T;

        no_iteration = no_iteration+1;

    end

   

else

    while(error>tol)

        for i = 2:number_node-1

            for j = 2:number_node-1

            term1 = (T_old(i+1,j)+T(i-1,j))/dx^2;

            term2 = (T_old(i,j+1)+T(i,j-1))/dy^2;

            T(i,j) = ((1-omegha)*T_old(i,j))+(omegha*((term1+term2)/K));

            end

        end

        error = max(max(abs(T_old-T)));

       

        % to update the previous velocity with new velocity

        %got from the iteration

        T_old = T;

        no_iteration = no_iteration+1;

       

    end

end

 

% to visualize the result

 

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

contourf(X,Y,T)

colorbar

set(gca,'ydir','reverse')

Unsteady-State 2D Heat conduction: -

Inputs are defined into variables and the temperature array is created. Boundary conditions are introduced into the temperature array, and at corners, boundary values are averaged. Constants like alpha, omega, tolerance are defined to run the iteration. Here a user must provide, one or two inputs. The first input is to whether solve the problem using an explicit approach or an implicit approach. If an implicit approach is selected, then the user must provide another input, to select the iterative technique. The if-else loop is used to solve the equation using the selected (input from the user) approach and iterative technique. For loop is used to run the iteration for a large number of times to reach steady-state conditions. While loop is used to run the iterative technique till the required accuracy is achieved. Two for loop is used to calculate the temperature values at every node at each iterative step. Finally, a temperature distribution graph is obtained using 'conturf' command.

MAT LAB Code

% Domain and discretization length

number_node = 10;

domain_length = 1;

 

%value of x and y at nodes in a discretization plane

x = linspace(0,domain_length,number_node);

y = linspace(0,domain_length,number_node);

dx = (domain_length/number_node-1);

dy = (domain_length/number_node-1);

dt = 1/10;

 

 

% Let define a temperature value at all nodes with initial guess 300k

T = 300*ones(number_node,number_node);

 

% Initia boundary conditions at left and right

T(1:end,1) = 400;

T(1:end,end) = 800;

% Initia boundary conditions at bottom and top

T(end,1:end) = 900;

T(1,1:end) = 600;

%average values of T at corner boundaries

T(1,1) = 500;

T(end,1) = 650;

T(1,end) = 700;

T(end,end) = 850;

 

%copy of Temperature to compute for previous space terms

T_old = T;

 

% copy of T for previous time_step

T_prev = T;

 

%constants

alpha = 1.5;

omegha = 1.15;

K1 = (alpha*dt)/(dx^2);

K2 = (alpha*dt)/(dy^2);

iteration = 0;

 

 

approach = input('Enter 1 for implicit or Enter 2 for explicit')

 

if approach == 1

    method = input('Enter 1 for jacobi or 2 for gauss siedel or 3 for sos')

    if method == 1

        for nt = 1:1500

            error = 10;

            tol = 1e-4;

            while(error>tol)

                for i = 2:number_node-1

                    for j = 2:number_node-1

                        term1 = 1/(1+(2*K1)+(2*K2));

                        term2 = K1*(T_old(i+1,j)+T_old(i-1,j));

                        term3 = K2 *(T_old(i,j+1)+T_old(i,j-1));

                        T(i,j) = term1*(T_prev(i,j)+term2+term3);

                    end

                end

                iteration = iteration+1;

                error = max(max((abs(T_old-T))));

                T_old = T;

            end

            T_prev = T;

        end

    elseif method ==2

        for nt = 1:1500

            error = 10;

            tol = 1e-4;

            while(error>tol)

                for i = 2:number_node-1

                    for j = 2:number_node-1

                        term1 = 1/(1+(2*K1)+(2*K2));

                        term2 = K1*(T_old(i+1,j)+T(i-1,j));

                        term3 = K2 *(T_old(i,j+1)+T(i,j-1));

                        T(i,j) = term1*(T_prev(i,j)+term2+term3);

                    end

                end

                iteration = iteration+1;

                error = max(max(abs(T_old-T)));

                T_old = T;

               

            end

            T_prev = T;

        end

    else

        for nt = 1:1500

            error = 10;

            tol = 1e-4;

            while(error>tol)

                for i = 2:number_node-1

                    for j = 2:number_node-1

                        term1 = 1/(1+(2*K1)+(2*K2));

                        term2 = K1*(T_old(i+1,j)+T(i-1,j));

                        term3 = K2 *(T_old(i,j+1)+T(i,j-1));

                        term4 = term1*(T_prev(i,j)+term2+term3);

                        T(i,j)=(1-omegha)*T_old(i,j)+(omegha*term4);

                    end

                end

                iteration = iteration+1;

                error = max(max(abs(T_old-T)));

                T_old = T;

            end

            T_prev = T;

        end

    end

else

     for nt = 1:1500

        for i = 2:number_node-1

            for j = 2:number_node-1

                term1 = K1*(T_prev(i+1,j)-2*T_prev(i,j)+T_prev(i-1,j));

                term2 = K2*(T_prev(i,j+1)-2*T_prev(i,j)+T_prev(i,j-1));

                T(i,j) = T_prev(i,j)+term1+term2;

            end

        end

        % to update the previous timestep value with new timestep value

        %got from the iteration

        T_prev = T;

        iteration = iteration+1;

    end

end

 

% to visualize the result

 

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

figure(1)

contourf(X,Y,T)

colorbar

set(gca,'ydir','reverse')

RESULT: -

Steady-State analysis:

<!-- [if !supportLists]-->·         <!--[endif]-->Jacobi

<!-- [if !supportLists]-->·         <!--[endif]-->Gauss-Siedel

<!-- [if !supportLists]-->·         <!--[endif]-->Successive over relaxation

Unsteady analysis:

Out of a number of iterations,1500 iterations is due to time step

<!-- [if !supportLists]-->·         <!--[endif]-->Jacobi

<!-- [if !supportLists]-->·         <!--[endif]-->Gauss-Siedel

<!-- [if !supportLists]-->·         <!--[endif]-->Successive over relaxation

 

Explicit

1500 iterations are due to time step

According to CFL stability criteria, K1+K2<0>

 

 

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.