f = element vector
kk = system matrix
ff = system vector
clear
nel=16;
% number of elements
nnel=4;
ndof=6;
nnode=25;
sdof=nnode*ndof;
edof=nnel*ndof;
emodule=3e6;
% elastic modulus
poisson=0.0;
t=3;
% Poisson's ratio
% plate thickness
nglxb=2; nglyb=2;
nglb=nglxb*nglyb;
nglxs=1; nglys=1;
ngls=nglxs*nglys;
gcoord=[0.0 0.0 0.0; 0.0 6.25 0.0; 0.0 12.5 0.0; 0.0 18.75 0.0;0.0 25.0 0.0;
4.34 0.0 -0.38;4.34 6.25 -0.38;4.34 12.5 -0.38;4.34 18.75 -0.38;4.34 25.0
-0.38;
8.55 0.0 -1.51;8.55 6.25 -1.51;8.55 12.5 -1.51;8.55 18.75 -1.51;8.55 25.0
-1.51;
12.5 0.0 -3.35;12.5 6.25 -3.35;12.5 12.5 -3.35;12.5 18.75 -3.35;12.5 25.0
-3.35;
16.1 0.0 -5.85;16.1 6.25 -5.85;16.1 12.5 -5.85;16.1 18.75 -5.85;16.1 25.0
-5.85];
gcoord=12.0*gcoord;
%----------------------- % input data for nodal connectivity for each element %-----------------------
nodes=[6 7 2 1; 7 8 3 2; 8 9 4 3; 9 10 5 4;
11 12 7 6; 12 13 8 7; 13 14 9 8; 14 15 10 9;
16 17 12 11; 17 18 13 12; 18 19 14 13; 19 20 15 14;
21 22 17 16; 22 23 18 17; 23 24 19 18; 24 25 20 19];
bcdof=[1 3 5 6
7 11 12
13 17 18
19 23 24
25 26 28 29 30 ...
31 33
56 58 60
61 63
86 88 90
91 93
bcval=zeros(size(bcdof));
ff=zeros(sdof,1);
kk=zeros(sdof,sdof);
% system matrix
disp=zeros(sdof,1);
index=zeros(edof,1);
% index vector
kinmtsb=zeros(3,edof);
matmtsb=zeros(3,3);
kinmtsm=zeros(3,edof);
matmtsm=zeros(3,3);
kinmtss=zeros(2,edof);
matmtss=zeros(2,2);
tr3d=zeros(edof,edof);
% transformation matrix
ff(3)=-613.6;
ff(9)=-1227.2;
ff(15)=-1227.2;
ff(21)=-1227.2;
ff(27)=-613.6;
ff(33)=-1227.2;
ff(39)=-2454.4;
ff(45)=-2454.4;
ff(51)=-2454.4;
ff(57)=-1227.2;
ff(63)=-1227.2;
ff(69)=-2454.4;
ff(75)=-2454.4;
ff(81)=-2454.4;
ff(87)=-1227.2;
ff(93)=-1227.2;
ff(99)=-2454.4;
ff(105)=-2454.4;
ff(111)=-2454.4;
ff(117)=-1227.2;
(123)=-613.6;
ff(129)=-1227.2;
ff(135)=-1227.2;
ff(141)=-1227.2;
ff(147)=-613.6;
%-------------------- % computation of element matrices and vectors and their assembly %---------------------
matmtsm=fematiso(1,emodule,poisson)*t;
matmtsb=fematiso(1,emodule,poisson)*t^3/12;
%%
%
%
[points,weights]=feglqd2(nglxs,nglys);
shearm=0.5*emodule/(1.0+poisson);
% shear modulus
shcof=5/6;
matmtss=shearm*shcof*t*[1 0; 0 1];
for iel=1:nel
for i=1:nnel
nd(i)=nodes(iel,i);
xcoord(i)=gcoord(nd(i),1);
ycoord(i)=gcoord(nd(i),2);
zcoord(i)=gcoord(nd(i),3);
end
%
%
%
[tr3d,xprime,yprime]=fetransh(xcoord,ycoord,zcoord,nnel);
%
k=zeros(edof,edof);
ke=zeros(edof,edof);
km=zeros(edof,edof);
kb=zeros(edof,edof);
ks=zeros(edof,edof);
%-----------------------------------------------------%
%-----------------------------------------------------for intx=1:nglxb
x=pointb(intx,1);
wtx=weightb(intx,1);
% weight in x-axis
for inty=1:nglyb
y=pointb(inty,2);
wty=weightb(inty,2) ;
% weight in y-axis
[shape,dhdr,dhds]=feisoq4(x,y);
jacob2=fejacob2(nnel,dhdr,dhds,xprime,yprime);
% compute Jacobian
detjacob=det(jacob2);
% determinant of Jacobian
invjacob=inv(jacob2);
kinmtsm=fekinesm(nnel,dhdx,dhdy);
%-------------------------------------------%
%-------------------------------------------kb=kb+kinmtsb'*matmtsb*kinmtsb*wtx*wty*detjacob;
km=km+kinmtsm'*matmtsm*kinmtsm*wtx*wty*detjacob;
end
end
%-----------------------------------------------------%
%-----------------------------------------------------for intx=1:nglxs
x=points(intx,1);
wtx=weights(intx,1);
% weight in x-axis
for inty=1:nglys
y=points(inty,2);
wty=weights(inty,2) ;
% weight in y-axis
[shape,dhdr,dhds]=feisoq4(x,y);
jacob2=fejacob2(nnel,dhdr,dhds,xprime,yprime);
% compute Jacobian
detjacob=det(jacob2);
% determinant of Jacobian
invjacob=inv(jacob2);
%---------------------------------------ks=ks+kinmtss'*matmtss*kinmtss*wtx*wty*detjacob;
end
end
%-------------------------------%
%-------------------------------k=km+kb+ks;
%----------------------------------------------%
%----------------------------------------------ke=tr3d'*k*tr3d;
index=feeldof(nd,nnel,ndof);% extract system dofs associated with element
kk=feasmbl1(kk,ke,index);
end
%------------------------------------%
%------------------------------------for i=1:sdof
if(abs(kk(i,i)) < 1e-5)
sum=0.0;
for j=1:sdof
sum=sum+abs(kk(i,j));
end
if (sum < 1e-5)
kk(i,i)=1;
end
end
end
%----------------------------%
%----------------------------[kk,ff]=feaplyc2(kk,ff,bcdof,bcval);
%---------------------------%
%---------------------------disp=kk\ff;
num=1:1:sdof;
displace=[num' disp]
%-------------------------------------------------------------%
Sub_routines
%%%%%%%%%%%%%%%%%
function [point2,weight2]=feglqd2(nglx,ngly)
%------------------------------------------------------------------%
Purpose:
%
%
Synopsis:
[point2,weight2]=feglqd2(nglx,ngly)
%
%
Variable Description:
%------------------------------------------------------------------%
initialization
point2=zeros(ngl,2);
weight2=zeros(ngl,2);
[pointx,weightx]=feglqd1(nglx);
[pointy,weighty]=feglqd1(ngly);
%
for intx=1:nglx
% quadrature in x-axis
point2(intx,1)=pointx(intx);
weight2(intx,1)=weightx(intx);
end
for inty=1:ngly
% quadrature in y-axis
point2(inty,2)=pointy(inty);
weight2(inty,2)=weighty(inty);
end
_______________________________________________________________________
function [matmtrx]=fematiso(iopt,elastic,poisson)
%-----------------------------------------------------------------------%
%
Purpose:
determine the constitutive equation for isotropic material
%
%
%
Synopsis:
[matmtrx]=fematiso(iopt,elastic,poisson)
%
%
Variable Description:
%-----------------------------------------------------------------------if iopt==1
% plane stress
poisson 0; ...
poisson
0
0; ...
(1-poisson)/2];
elseif iopt==2
% plane strain
poisson 0;
(1-poisson)
0;
(1-2*poisson)/2];
elseif iopt==3
% axisymmetry
poisson
poisson
(1-poisson)
poisson
poisson
0
else
poisson
0;
poisson
0;
(1-poisson)
0;
(1-2*poisson)/2];
% three-dimension
poisson
poisson
0;
poisson
(1-poisson)
poisson
poisson
poisson
(1-poisson)
0;
0;
(1-2*poisson)/2
(1-2*poisson)/2
0;
0;
(1-2*poisson)/2];
end
______________________________________________________________________
function [tr3d,xprime,yprime]=fetransh(xcoord,ycoord,zcoord,n)
%-------------------------------------------------------------%
%
%
Purpose:
Compute direction cosines between three-dimensional
local and global coordinate axes
%
%
%
Synopsis:
[tr3d,xprime,yprime]=fetransh(xcoord,ycoord,zcoord,n)
%
%
Variable Description:
%
%
%
%
Note:
The local x-axis is defined in the direction from the first node
%-------------------------------------------------------------------------%
%
%
v12x=xcoord(2)-xcoord(1);
v12y=ycoord(2)-ycoord(1);
v12z=zcoord(2)-zcoord(1);
l12=sqrt(v12x^2+v12y^2+v12z^2);
v23x=xcoord(3)-xcoord(2);
v23y=ycoord(3)-ycoord(2);
v23z=zcoord(3)-zcoord(2);
l23=sqrt(v23x^2+v23y^2+v23z^2);
v34x=xcoord(4)-xcoord(3);
v34y=ycoord(4)-ycoord(3);
v34z=zcoord(4)-zcoord(3);
l34=sqrt(v34x^2+v34y^2+v34z^2);
v14x=xcoord(4)-xcoord(1);
v14y=ycoord(4)-ycoord(1);
v14z=zcoord(4)-zcoord(1);
l14=sqrt(v14x^2+v14y^2+v14z^2);
v13x=xcoord(3)-xcoord(1);
v13y=ycoord(3)-ycoord(1);
v13z=zcoord(3)-zcoord(1);
l13=sqrt(v13x^2+v13y^2+v13z^2);
v1tx=v12y*v14z-v12z*v14y;
v1ty=v12z*v14x-v12x*v14z;
v1tz=v12x*v14y-v12y*v14x;
v1yx=v1ty*v12z-v1tz*v12y;
v1yy=v1tz*v12x-v1tx*v12z;
v1yz=v1tx*v12y-v1ty*v12x;
vxx=v12x/l12;
vxy=v12y/l12;
vxz=v12z/l12;
vyx=v1yx/sqrt(v1yx^2+v1yy^2+v1yz^2);
vyy=v1yy/sqrt(v1yx^2+v1yy^2+v1yz^2);
vyz=v1yz/sqrt(v1yx^2+v1yy^2+v1yz^2);
vzx=v1tx/sqrt(v1tx^2+v1ty^2+v1tz^2);
vzy=v1ty/sqrt(v1tx^2+v1ty^2+v1tz^2);
vzz=v1tz/sqrt(v1tx^2+v1ty^2+v1tz^2);
%
%
transformation matrix
%
for i=1:2*n
i1=(i-1)*3+1;
i2=i1+1;
i3=i2+1;
tr3d(i1,i1)=vxx;
tr3d(i1,i2)=vxy;
tr3d(i1,i3)=vxz;
tr3d(i2,i1)=vyx;
tr3d(i2,i2)=vyy;
tr3d(i2,i3)=vyz;
tr3d(i3,i1)=vzx;
tr3d(i3,i2)=vzy;
tr3d(i3,i3)=vzz;
end
%
%
%
alpa213=acos((l12^2+l13^2-l23^2)/(2*l12*l13));
alpa314=acos((l13^2+l14^2-l34^2)/(2*l13*l14));
alpa41y=2*atan(1)-alpa213-alpa314;
xprime(1)=0;
xprime(2)=l12;
yprime(1)=0;
yprime(2)=0;
xprime(3)=l13*cos(alpa213);
yprime(3)=l13*sin(alpa213);
xprime(4)=l14*sin(alpa41y);
yprime(4)=l14*cos(alpa41y);
_____________________________________________________________________
function [shapeq4,dhdrq4,dhdsq4]=feisoq4(rvalue,svalue)
%-----------------------------------------------------------------------%
Purpose:
%
%
%
Synopsis:
[shapeq4,dhdrq4,dhdsq4]=feisoq4(rvalue,svalue)
%
%
Variable Description:
%
%
Notes:
Purpose:
determine the Jacobian for two-dimensional mapping
%
%
Synopsis:
[jacob2]=fejacob2(nnel,dhdr,dhds,xcoord,ycoord)
%
%
Variable Description:
%-----------------------------------------------------------------------jacob2=zeros(2,2);
for i=1:nnel
jacob2(1,1)=jacob2(1,1)+dhdr(i)*xcoord(i);
jacob2(1,2)=jacob2(1,2)+dhdr(i)*ycoord(i);
jacob2(2,1)=jacob2(2,1)+dhds(i)*xcoord(i);
jacob2(2,2)=jacob2(2,2)+dhds(i)*ycoord(i);
end
________________________________________________________________________
function [dhdx,dhdy]=federiv2(nnel,dhdr,dhds,invjacob)
%-----------------------------------------------------------------------%
%
Purpose:
determine derivatives of 2-D isoparametric shape functions with
%
%
Synopsis:
[dhdx,dhdy]=federiv2(nnel,dhdr,dhds,invjacob)
%
%
Variable Description:
%-----------------------------------------------------------------------for i=1:nnel
dhdx(i)=invjacob(1,1)*dhdr(i)+invjacob(1,2)*dhds(i);
dhdy(i)=invjacob(2,1)*dhdr(i)+invjacob(2,2)*dhds(i);
end
_________________________________________________________________________
function [kinmtsb]=fekinesb(nnel,dhdx,dhdy)
%-------------------------------------------------------------------------%
Purpose:
%
%
%
Synopsis:
[kinmtsb]=fekinesb(nnel,dhdx,dhdy)
%
%
Variable Description:
%-------------------------------------------------------------------------for i=1:nnel
i1=(i-1)*6+1;
i2=i1+1;
i3=i2+1;
i4=i3+1;
i5=i4+1;
i6=i5+1;
kinmtsb(1,i5)=dhdx(i);
kinmtsb(2,i4)=-dhdy(i);
kinmtsb(3,i5)=dhdy(i);
kinmtsb(3,i4)=-dhdx(i);
kinmtsb(3,i6)=0;
end
_________________________________________________________________________
function [kinmtsm]=fekinesm(nnel,dhdx,dhdy)
%-----------------------------------------------------------------------%
Purpose:
%
%
%
%
Synopsis:
[kinmtsm]=fekinesm(nnel,dhdx,dhdy)
%
%
Variable Description:
%-----------------------------------------------------------------------for i=1:nnel
i1=(i-1)*6+1;
i2=i1+1;
i3=i2+1;
i4=i3+1;
i5=i4+1;
i6=i5+1;
kinmtsm(1,i1)=dhdx(i);
kinmtsm(2,i2)=dhdy(i);
kinmtsm(3,i1)=dhdy(i);
kinmtsm(3,i2)=dhdx(i);
kinmtsm(3,i6)=0.0;
end
__________________________________________________________________________
function [kinmtss]=fekiness(nnel,dhdx,dhdy,shape)
%-----------------------------------------------------------------------%
Purpose:
%
%
%
Synopsis:
[kinmtss]=fekiness(nnel,dhdx,dhdy,shape)
%
%
Variable Description:
%-----------------------------------------------------------------------for i=1:nnel
i1=(i-1)*6+1;
i2=i1+1;
i3=i2+1;
i4=i3+1;
i5=i4+1;
i6=i5+1;
kinmtss(1,i3)=dhdx(i);
kinmtss(1,i5)=shape(i);
kinmtss(2,i3)=dhdy(i);
kinmtss(2,i4)=-shape(i);
kinmtss(2,i6)=0.0;
end
_________________________________________________________________________
function [index]=feeldof(nd,nnel,ndof)
%---------------------------------------------------------%
%
Purpose:
Compute system dofs associated with each element
%
%
%
Synopsis:
[index]=feeldof(nd,nnel,ndof)
%
%
Variable Description:
%----------------------------------------------------------edof = nnel*ndof;
k=0;
for i=1:nnel
start = (nd(i)-1)*ndof;
for j=1:ndof
k=k+1;
index(k)=start+j;
end
end
________________________________________________________________________
function [kk]=feasmbl1(kk,k,index)
%---------------------------------------------------------%
%
Purpose:
Assembly of element matrices into the system matrix
%
%
%
Synopsis:
[kk]=feasmbl1(kk,k,index)
%
%
Variable Description:
kk - system matrix
- element matri
%----------------------------------------------------------edof = length(index);
for i=1:edof
ii=index(i);
for j=1:edof
jj=index(j);
kk(ii,jj)=kk(ii,jj)+k(i,j);
end
end
________________________________________________________________________
function [kk,ff]=feaplyc2(kk,ff,bcdof,bcval)
%---------------------------------------------------------%
%
Purpose:
Apply constraints to matrix equation [kk]{x}={ff}
%
%
%
Synopsis:
[kk,ff]=feaplybc(kk,ff,bcdof,bcval)
%
%
Variable Description:
%
%
respectively.
%----------------------------------------------------------n=length(bcdof);
sdof=size(kk);
for i=1:n
c=bcdof(i);
for j=1:sdof
kk(c,j)=0;
end
kk(c,c)=1;
ff(c)=bcval(i);
end
________