0% found this document useful (0 votes)
29 views

Finite Element Method

This document describes two finite element method problems for solving a 2D Laplace equation. Problem 1 models heat conduction through a normal panel, while Problem 2 models heat conduction through a cracked panel. Both problems are solved for increasing mesh densities and the calculated energies are plotted. MATLAB code is provided to generate the finite element mesh, assemble the stiffness matrix and force vector, solve for nodal temperatures, and plot the results.

Uploaded by

Shourya Umang
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

Finite Element Method

This document describes two finite element method problems for solving a 2D Laplace equation. Problem 1 models heat conduction through a normal panel, while Problem 2 models heat conduction through a cracked panel. Both problems are solved for increasing mesh densities and the calculated energies are plotted. MATLAB code is provided to generate the finite element mesh, assemble the stiffness matrix and force vector, solve for nodal temperatures, and plot the results.

Uploaded by

Shourya Umang
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

Finite Element Method

2 Dimensional Laplace Problem

Shourya Umang
12678

Problem 1:

3
a=2

a11=10;
a12=a21=0;

b=2

a22=1;
r=10;

Problem 2:
1: u=0
2: qn=0
3: qn=10
4: qn=0

1= 2=3= 4: u=0

Problem 1:
a) N=2

b) N=4

c) N=8

d) N=100 ~ Exact Solution

Energy :

Energy
6
5
4
3

Series 1

2
1
0
N=2

N=4

N=8

N=100~ Exact

Problem 2:
a) N=4

b) N=8

c) N=100 ~ Exact

Energy:
1000
980
960
940
920
900

Energy Normal Panel

880

Energy Cracked Panel

860
840
820
800
N=4

N=8

N=100 ~ Exact

Appendix : MATLAB Code for solution


data2d

elem=zeros(2*Nx*Ny,9);

for k=1:(2*Nx*Ny)
if mod(k,2)~=0
elem(k,1)=floor((k+1)/2)+floor(k/(2*Nx));
elem(k,2)=elem(k,1)+1;
elem(k,3)=elem(k,2)+Nx+1;
elem(k,4)=(mod(elem(k,1),(Nx+1))*h)-1;
elem(k,5)=floor(elem(k,1)/(Nx+1))*d;
elem(k,6)=elem(k,4)+h;
elem(k,7)=elem(k,5);
elem(k,8)=elem(k,6);
elem(k,9)=elem(k,7)+d;

else
elem(k,3)=elem(k-1,1);
elem(k,1)=elem(k,3)+Nx+2;
elem(k,2)=elem(k,1)-1;
elem(k,8)=mod(elem(k,3),(Nx+1))*h-1;
elem(k,9)=floor(elem(k,3)/(Nx+1))*d;
elem(k,6)=elem(k,8);
elem(k,7)=elem(k,9)+d;
elem(k,4)=elem(k,6)+h;
elem(k,5)=elem(k,7);
end
end

K=zeros((Nx+1)*(Ny+1));
F=zeros((Nx+1)*(Ny+1),1);
alphas=zeros((Nx+1)*(Ny+1),1);

localk=[a(1,1)*d/(2*h) -a(1,1)*d/(2*h) 0; -a(1,1)*d/(2*h)


(a(1,1)*d/(2*h))+(a(2,2)*h/(2*d)) -a(2,2)*h/(2*d); 0 -a(2,2)*h/(2*d)
a(2,2)*h/(2*d)];

f=[1/6;1/6;1/6];

f=f.*(h*d*r);

for k=1:(2*Nx*Ny)

for i=1:3
for j=1:3
K(elem(k,i),elem(k,j))=K(elem(k,i),elem(k,j))+localk(i,j);
end
F(elem(k,i))=F(elem(k,i))+f(i);
end
end

for i=1:4
if gamma(i,2)==2
if i==1
for j=1:Nx+1
if j==1 | j==Nx+1
F(j)=F(j)+(gamma(i,1)*h/2);
else
F(j)=F(j)+(gamma(i,1)*h);
end
end
elseif i==2
for j=1:Ny+1
if j==1 | j==Ny+1
F((Nx+1)*j)=F((Nx+1)*j)+(gamma(i,1)*d/2);
else
F((Nx+1)*j)=F((Nx+1)*j)+(gamma(i,1)*d);
end
end
elseif i==3
for j=1:Nx+1
if j==1 | j==Nx+1
F(((Nx+1)*(Ny+1))-Nx-1+j)=F(((Nx+1)*(Ny+1))-Nx1+j)+(gamma(i,1)*h/2);
else
F(((Nx+1)*(Ny+1))-Nx-1+j)=F(((Nx+1)*(Ny+1))-Nx1+j)+(gamma(i,1)*h);
end
end
elseif i==4
for j=1:Ny+1
if j==1 | j==Ny+1
F(((j-1)*(Nx+1))+1)=F(((j1)*(Nx+1))+1)+(gamma(i,1)*d/2);
else
F(((j-1)*(Nx+1))+1)=F(((j1)*(Nx+1))+1)+(gamma(i,1)*d);

end
end
end
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:4
if gamma(i,2)==1
if i==1
for j=1:Nx+1
F(j)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=j
F(l)=F(l)-(K(l,j)*gamma(i,1));
end
K(l,j)=0;
K(j,l)=0;
end
K(j,j)=1;
end
elseif i==2
for j=1:Ny+1
F((Nx+1)*j)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=(Nx+1)*j
F(l)=F(l)-(K(l,(Nx+1)*j)*gamma(i,1));
end
K(l,(Nx+1)*j)=0;
K((Nx+1)*j,l)=0;
end
K((Nx+1)*j,(Nx+1)*j)=1;
end
elseif i==3
for j=1:Nx+1
F(((Nx+1)*(Ny+1))-Nx-1+j)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=((Nx+1)*(Ny+1))-Nx-1+j
F(l)=F(l)-(K(l,((Nx+1)*(Ny+1))-Nx1+j)*gamma(i,1));
end
K(l,((Nx+1)*(Ny+1))-Nx-1+j)=0;

K(((Nx+1)*(Ny+1))-Nx-1+j,l)=0;
end
K(((Nx+1)*(Ny+1))-Nx-1+j,((Nx+1)*(Ny+1))-Nx-1+j)=1;
end
elseif i==4
for j=1:Ny+1
F(((j-1)*(Nx+1))+1)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=((j-1)*(Nx+1))+1
F(l)=F(l)-(K(l,((j1)*(Nx+1))+1)*gamma(i,1));
end
K(l,((j-1)*(Nx+1))+1)=0;
K(((j-1)*(Nx+1))+1,l)=0;
end
K(((j-1)*(Nx+1))+1,((j-1)*(Nx+1))+1)=1;
end
end
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

alphas=K\F;

x=0;
y=0;
xnod=zeros(1,2);
k=1;
Z=zeros(1);

for i=1:Ny+1
for j=1:Nx+1
xnod(((i-1)*(Nx+1))+j,1)=x;
xnod(((i-1)*(Nx+1))+j,2)=y;
Z(j,i)=alphas(k);
k=k+1;
x=x+h;
end
x=0;
y=y+d;

end

x=0:h:h*Nx;
y=0:d:d*Ny;

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

for i=1:Nx+1
for j=1:Ny+1
Z(i,j)=alphas(k);
k=k+1;
end
end

figure
surf(X,Y,Z);
title('Normal Panel');
xlabel('x');
ylabel('y');
legend('u');

xx=zeros(1);
yy=zeros(1);
qx=zeros(1);
qy=zeros(1);

for i=1:Nx
for j=1:Ny+1
xx(j,i)=(X(j,i)+X(j,i+1))/2;
qx(j,i)=(Z(j,i+1)-Z(j,i))/(X(j,i+1)-X(j,i));
yy(j,i)=Y(j,i);
end
end

qx=qx.*a(1,1);

figure
surf(xx,yy,qx);
title('Normal Panel');
xlabel('x');
ylabel('y');
legend('q_x');

xx=zeros(1);
yy=zeros(1);

for i=1:Ny
for j=1:Nx+1
xx(i,j)=X(i,j);
yy(i,j)=(Y(i,j)+Y(i+1,j))/2;
qy(i,j)=(Z(i+1,j)-Z(i,j))/(Y(i+1,j)-Y(i,j));
end
end

qy=qy.*a(2,2);

figure
surf(xx,yy,qy);
title('Normal Panel');
xlabel('x');
ylabel('y');
legend('q_y');

Energy=0.5*alphas'*K*alphas

%%%%%%%%%%%%%%%%%
%%

CRACK

%%'

%%%%%%%%%%%%%%%%%

i=1;

for k=((Nx*Ny)+Nx+1):((Nx*Ny)+(2*Nx))
if mod(k,2)~=0
elem(k,1)=elem(k-2,2);
elem(k,2)=((Nx+1)*(Ny+1))+i;
i=i+1;
else
elem(k,3)=elem(k-1,1);
end
end

K=zeros(((Nx+1)*(Ny+1))+(floor(Nx/2)));
F=zeros(((Nx+1)*(Ny+1))+(floor(Nx/2)),1);

alphas=zeros(((Nx+1)*(Ny+1))+(floor(Nx/2)),1);

localk=[a(1,1)*d/(2*h) -a(1,1)*d/(2*h) 0; -a(1,1)*d/(2*h)


(a(1,1)*d/(2*h))+(a(2,2)*h/(2*d)) -a(2,2)*h/(2*d); 0 -a(2,2)*h/(2*d)
a(2,2)*h/(2*d)];

f=[1/6;1/6;1/6];

f=f.*(h*d*r);

for k=1:(2*Nx*Ny)
for i=1:3
for j=1:3
K(elem(k,i),elem(k,j))=K(elem(k,i),elem(k,j))+localk(i,j);
end
F(elem(k,i))=F(elem(k,i))+f(i);
end
end

for i=1:4
if gamma(i,2)==2
if i==1
for j=1:Nx+1
if j==1 | j==Nx+1
F(j)=F(j)+(gamma(i,1)*h/2);
else
F(j)=F(j)+(gamma(i,1)*h);
end
end
elseif i==2
for j=1:Ny+1
if j==1 | j==Ny+1
F((Nx+1)*j)=F((Nx+1)*j)+(gamma(i,1)*d/2);
else
F((Nx+1)*j)=F((Nx+1)*j)+(gamma(i,1)*d);
end
end
F(((Nx+1)*(Ny+1))+floor(Nx/2))=F(((Nx+1)*(Ny+1))+floor(Nx/2))+(gamma(i,1)*d/
2);
F((Nx+1)*((Ny/2)+1))=F((Nx+1)*((Ny/2)+1))-(gamma(i,1)*d/2);
elseif i==3
for j=1:Nx+1
if j==1 | j==Nx+1

F(((Nx+1)*(Ny+1))-Nx-1+j)=F(((Nx+1)*(Ny+1))-Nx1+j)+(gamma(i,1)*h/2);
else
F(((Nx+1)*(Ny+1))-Nx-1+j)=F(((Nx+1)*(Ny+1))-Nx1+j)+(gamma(i,1)*h);
end
end
elseif i==4
for j=1:Ny+1
if j==1 | j==Ny+1
F(((j-1)*(Nx+1))+1)=F(((j1)*(Nx+1))+1)+(gamma(i,1)*d/2);
else
F(((j-1)*(Nx+1))+1)=F(((j1)*(Nx+1))+1)+(gamma(i,1)*d);
end
end
end
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:4
if gamma(i,2)==1
if i==1
for j=1:Nx+1
F(j)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=j
F(l)=F(l)-(K(l,j)*gamma(i,1));
end
K(l,j)=0;
K(j,l)=0;
end
K(j,j)=1;
end
elseif i==2
for j=1:Ny+1
F((Nx+1)*j)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=(Nx+1)*j
F(l)=F(l)-(K(l,(Nx+1)*j)*gamma(i,1));

end
K(l,(Nx+1)*j)=0;
K((Nx+1)*j,l)=0;
end
K((Nx+1)*j,(Nx+1)*j)=1;
end

F(((Nx+1)*(Ny+1))+floor(Nx/2))=gamma(i,1);
for l=1:((Nx+1)*(Ny+1))+floor(Nx/2)
if l~=((Nx+1)*(Ny+1))+floor(Nx/2)
F(l)=F(l)(K(l,((Nx+1)*(Ny+1))+floor(Nx/2))*gamma(i,1));
end
K(l,((Nx+1)*(Ny+1))+floor(Nx/2))=0;
K(((Nx+1)*(Ny+1))+floor(Nx/2),l)=0;
end
K(((Nx+1)*(Ny+1))+floor(Nx/2),((Nx+1)*(Ny+1))+floor(Nx/2))=1;

elseif i==3
for j=1:Nx+1
F(((Nx+1)*(Ny+1))-Nx-1+j)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=((Nx+1)*(Ny+1))-Nx-1+j
F(l)=F(l)-(K(l,((Nx+1)*(Ny+1))-Nx1+j)*gamma(i,1));
end
K(l,((Nx+1)*(Ny+1))-Nx-1+j)=0;
K(((Nx+1)*(Ny+1))-Nx-1+j,l)=0;
end
K(((Nx+1)*(Ny+1))-Nx-1+j,((Nx+1)*(Ny+1))-Nx-1+j)=1;
end
elseif i==4
for j=1:Ny+1
F(((j-1)*(Nx+1))+1)=gamma(i,1);
for l=1:(Nx+1)*(Ny+1)
if l~=((j-1)*(Nx+1))+1
F(l)=F(l)-(K(l,((j1)*(Nx+1))+1)*gamma(i,1));
end
K(l,((j-1)*(Nx+1))+1)=0;
K(((j-1)*(Nx+1))+1,l)=0;
end

K(((j-1)*(Nx+1))+1,((j-1)*(Nx+1))+1)=1;
end
end
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

alphas=K\F;

x=0;
y=0;
xnod=zeros(1,2);
k=1;
Z=zeros(1);

for i=1:Ny+1
for j=1:Nx+1
xnod(((i-1)*(Nx+1))+j,1)=x;
xnod(((i-1)*(Nx+1))+j,2)=y;
Z(j,i)=alphas(k);
k=k+1;
x=x+h;
end
x=0;
y=y+d;
end

x=0:h:h*Nx;
k=1;
y0=0;

while k<=(Ny+2)
y(k)=y0;
if k==((Ny/2)+1)
k=k+1;

y(k)=y(k-1);
end
k=k+1;
y0=y0+d;
end

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

k=1;

for i=1:Ny+2
if i==((Ny/2)+2)
k=k-(Nx+1);
end
for j=1:Nx+1
Z(i,j)=alphas(k);
k=k+1;
end
end

for k=1:(Nx/2)
Z(((Ny/2)+2),mod((((Nx+1)*(Ny/2))+(Nx/2)+1),(Ny+1))+k)=alphas(((Nx+1)*(Ny+1)
)+k);
end

Energy_crack=0.5*alphas'*K*alphas

%'

figure
surf(X,Y,Z);
title('Cracked Panel');
xlabel('x');
ylabel('y');
legend('u');

xx=zeros(1);
yy=zeros(1);
qx=zeros(1);
qy=zeros(1);

for i=1:Nx
for j=1:Ny+2
xx(j,i)=(X(j,i)+X(j,i+1))/2;
qx(j,i)=(Z(j,i+1)-Z(j,i))/(X(j,i+1)-X(j,i));
yy(j,i)=Y(j,i);
end
end

qx=qx.*a(1,1);

figure
surf(xx,yy,qx);
title('Cracked Panel');
xlabel('x');
ylabel('y');
legend('q_x');

xx=zeros(1);
yy=zeros(1);

for i=1:(Ny/2)+1
for j=1:Nx+1
xx(i,j)=X(i,j);
yy(i,j)=(Y(i,j)+Y(i+1,j))/2;
qy(i,j)=(Z(i+1,j)-Z(i,j))/(Y(i+1,j)-Y(i,j));
end
end

for i=(Ny/2)+2:Ny+1
for j=1:Nx+1
xx(i,j)=X(i,j);
yy(i,j)=(Y(i,j)+Y(i+1,j))/2;
qy(i,j)=(Z(i+1,j)-Z(i,j))/(Y(i+1,j)-Y(i,j));
end
end

qy=qy.*a(2,2);

figure
surf(xx,yy,qy);
title('Cracked Panel');
xlabel('x');

ylabel('y');
legend('q_y');

You might also like