Finite Element Method
Finite Element Method
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
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
880
860
840
820
800
N=4
N=8
N=100 ~ Exact
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);
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);
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');