3
$\begingroup$

I am working on an assignment where I am determining the temperature distribution of a chip on a substrate. When I decrease the nodal spacing the results change drastically. The smaller the nodal spacing the larger the temperatures i get. However when the nodal spacing is really small as in .00001m the temperature is nearly 0. Should this happen? What should i look for in the code to possibly remedy this situation? I am using MATLAB.

Ok. Guess I need to add more info. I think the best way to show my equations is to show my code. I am fairly confident about the equations used at each node. I derived them all by hand. When I use a nodal spacing, delta of 0.003 I get really low temperatures. At a delta of 0.001 I get reasonable temperatures. I think think the reason is that at 0.003 meters there are not enough node with heat generation.

    %**********************************************
%--------Thermo Lab Numerical Project---------|
%-----------------Paul Fjare------------------|
%**********************************************
clear; clc
%Cooling of a silicon chip mounted in a dielectric
%substrate. 

ks=5; % W/m-K
kc=50;
ksc=(ks+kc)/2;

h=500; % W/m^2-K
qgen=10^7; %W/m^3
L=.027; % meters
H=.012;
Tamb=293.15; % temperature of coolant in Kelvin
delta=.003; % meters
N=100000; %iterations
B=h*delta/ks; %dimensionless
sectionL=L/3;
sectionH=H/4;
%Determine size of matrix
cols = round(L/delta + 1)    % Columns
rows = round(H/delta + 1)    % Rows
sectioncols=round(sectionL/delta+1)
sectionrows=round(sectionH/delta+1)

% Build beginning zeros matrix from size above
T = zeros([rows,cols]);
%T=80*ones([rows,cols]);

for i=1:N
    % 4 nodes conduction no heat gen
    for m = sectionrows+1:rows-1
        for n = 2:cols-1
            T(m,n) = 0.25 *(T(m,n+1) + T(m,n-1) + T(m+1,n) + T(m-1,n));
        end
    end
    %upper space between the chip and walls
        %left
        for m=2:sectionrows
            for n=2:sectioncols-1
                T(m,n)=0.25 *(T(m,n+1) + T(m,n-1) + T(m+1,n) + T(m-1,n));
            end
        end

        %right
        for m=2:sectionrows
            for n=2*sectioncols:cols-1
                T(m,n)=0.25 *(T(m,n+1) + T(m,n-1) + T(m+1,n) + T(m-1,n));
            end
        end

    %------chip------
    %top 
        for n=sectioncols+1:2*sectioncols-2
            T(1,n)=(T(m,n-1)+T(m,n+1)+2*T(m+1,n)+qgen*delta^2/kc+2*h*delta/kc)/(4+2*h*delta/kc);
        end
        %top corners
        for n=sectioncols
            T(1,n)=(ks*T(1,n-1)+kc*T(1,n+1)+ksc*T(2,n)+2*qgen*delta^2/4+2*h*delta*Tamb)/(ks+kc+ksc+2*h*delta);
        end
        for n=2*sectioncols-1
            T(1,n)=(ks*T(1,n+1)+kc*T(1,n-1)+ksc*T(2,n)+2*qgen*delta^2/4+2*h*delta*Tamb)/(ks+kc+ksc+2*h*delta);
        end


    %bottom and bottom corners 
    for m=sectionrows
        for n=sectioncols+1:2*sectioncols-2
            T(m,n)=(ks*T(m+1,n)+ksc*(T(m,n+1)+T(m,n-1))+kc*T(m-1,n)+qgen*delta^2/2)/(ks+2*ksc+kc);
        end
        %bottom corners
        for n=sectioncols
            T(m,n)=(ks*T(m,n-1)+ks*T(m+1,n)+ksc*T(m,n+1)+ksc*T(m-1,n)+qgen*delta^2/4+h*delta*Tamb)/(ks+2*ksc+ks+delta*h);
        end
        for n=2*sectioncols-1
            T(m,n)=(ks*T(m,n+1)+ks*T(m+1,n)+ksc*T(m,n-1)+ksc*T(m-1,n)+qgen*delta^2/4+h*delta*Tamb)/(ks+2*ksc+ks+delta*h);
        end
    end
    if sectionrows>2
        for m=2:sectionrows-1
            for n=sectioncols+1:2*sectioncols-2
                T(m,n) = 0.25 *(T(m,n+1) + T(m,n-1) + T(m+1,n) + T(m-1,n)+qgen*delta^2) ;
            end
        end
    end
    %chip sides
   if sectionrows>2

       for m=2:sectionrows-1
        for n=2*sectioncols-1
            T(m,n)=(ks*T(m,n+1)+ksc*(T(m+1,n)+T(m-1,n))+kc*T(m,n-1)+qgen*delta^2/2)/(ks+2*ksc+kc);
        end
        for n=sectioncols
             T(m,n)=(ks*T(m,n-1)+ksc*(T(m+1,n)+T(m-1,n))+kc*T(m,n+1)+qgen*delta^2/2)/(ks+2*ksc+kc);
        end
       end
    end
    %------end of chip-----


    %top of substrate between chip and walls
        %left
        for n=2:sectioncols-1
        T(1,n)=(T(1,n-1)+T(1,n+1)+2*T(1+1,n)+2*h*delta/ks)/(4+2*h*delta/ks);
        end
        %right
        for n=2*sectioncols:cols-1
        T(1,n)=(T(1,n-1)+T(1,n+1)+2*T(1+1,n)+2*h*delta/ks)/(4+2*h*delta/ks);
        end





    %upper left corner of substrate: node 1,1
        T(1,1)=(T(1,2)+T(2,1)+Tamb*B)/(2+B);
    %upper right corner of substrate: node 1,cols
        T(1,cols)=(T(1,cols-1)+T(2,cols)+Tamb*B)/(2+B);

    %left side of substrate
    for m=2:rows-1
        T(m,1)=(T(m-1,1)+T(m+1,1)+2*T(m,2))/4;
    end
    %right side of substrate
    for m=2:rows-1
        T(m,cols)=(T(m-1,cols)+T(m+1,cols)+2*T(m,cols-1))/4;
    end

    %lower left corner: node 5,1
    T(rows,1)=(T(rows-1,1)+T(rows,2))/2;
    %lower right corner: node 5,10
    T(rows,cols)=(T(rows-1,cols)+T(rows,cols-1))/2;


    %bottom of substrate
    for n=2:cols-1
    T(rows,n)=(T(rows,n-1)+T(rows,n+1)+2*T(rows-1,n))/4;
    end
end

 T=T; %temperature distribution in Kelvin
 TC=T-273.15 %temperature distribution in degrees Celsius

A picture of the physical situation is shown below.

$\endgroup$
  • 1
    $\begingroup$ I guess you are using Gauss-Seidel, because it is so simple to implement. But then, you should consider using an ADI method (en.wikipedia.org/wiki/Alternating_direction_implicit_method) like Douglas-Gunn or Douglas-Rachford (web.njit.edu/~matveev/documents/adi.pdf) instead. These methods are also simple to implement, and actually quite popular for the heat conduction equation. $\endgroup$ – Thomas Klimpel Apr 23 '12 at 10:34
  • 1
    $\begingroup$ It would really help if you could write out the PDE that you are solving, and the discretization scheme that you are using to solve it. $\endgroup$ – Paul Apr 23 '12 at 13:12
5
$\begingroup$

Your question is hard to answer because it doesn't provide enough information for a complete answer and also the labeling seems to indicate that you are using the Gauss-Seidel method to solve a linear system but you don't provide details about the problems you are having with it.

You may be experiencing difficulty with the Gauss-Seidel method. As the grid spacing decreases, there is an increase in the size of the linear system which means that the Gauss-Seidel method may take more iterations before it begins to converge. If you are using a fixed number of iterations, then you might try increasing the number of iterations to make sure that you aren't experiencing problems. Another option is to approximate the error by comparing the solution from the Gauss-Seidel method with the solution using Matlab's backslash operator which solves linear systems also. If they are different then there may be a problem with your Gauss-Seidel solver or you may not be running until you converge.

You might also be having problems with the problem that you are setting up. I suspect that you are modeling the temperature using Poisson's equation which might be written $-\Delta u = f$. The advantage of this form is that upon discretization, you get a positive definite system (which the Gauss-Seidel method will converge for). If you have a negative sign on the wrong side of your equation, I recommend multiplying so that you have this form. When you discretize this, you should have a $\frac{1}{h^2}$ factor and a matrix with twos on the diagonal (assuming 1D) and -1s above and below the diagonal. If you have the wrong number of $h$ factors appearing in your equation, then you might have the solution grow as $h$ decreases.

Perhaps you can clarify where your difficulties are and get a better answer.

$\endgroup$
  • $\begingroup$ I did find that with a smaller nodal spacing I had to increase the number of iterations. 100,000 iteration seems to work for all the nodal spacings i have used. I will have to write a routine that checks convergence. $\endgroup$ – pdfj Apr 23 '12 at 15:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.