You are on page 1of 5

function planestress()

%====================================================================
%
PROGRAMME FOR THE ANALYSIS OF GRIDS
%-------------------------------------------------------------------%
MAIN PROGRAMME
%====================================================================
file1=input('INPUT FILE NAME: ','s');
linp=fopen(file1,'r');
file2=input('OUTPUT FILE NAME: ','s');
lout=fopen(file2,'w');
%-------------------------------------------------------------------% CALL INPUT FUNCTION inp1 FOR BASIC DATA AND MATERIAL PROPERTIES
%-------------------------------------------------------------------[nm,nj,nrj,ym,nu,nlj,th]=inp1(linp);
%-------------------------------------------------------------------% CALL INPUT FUNCTION inp2 FOR JOINT COORDINATES
%-------------------------------------------------------------------[x1,y1]=inp2(linp,nj);
%-------------------------------------------------------------------% CALL INPUT FUNCTION inp3 FOR MEMBER CONNECTIVITY & MEMBER AREA
%-------------------------------------------------------------------[elnn]=inp3(linp,nm);
%-------------------------------------------------------------------% CALL INPUT FUNCTION inp4 FOR RESTRAINT INFORMATION
%-------------------------------------------------------------------[nrl]=inp4(linp,nj,nrj);
%-------------------------------------------------------------------% CALL FUNCTION inp5 FOR LOADING INFORMATION
%-------------------------------------------------------------------[ac]=inp5(linp,nj,nlj);
%-------------------------------------------------------------------% CALL FUNCTION gsm FOR GLOBAL STIFFNESS MATRIX
%-------------------------------------------------------------------[gsm]=mgsm(linp,nm,nj,x1,y1,elnn,ym,nu,th);
%-------------------------------------------------------------------% CALL FUNCTION bc FOR BOUNDARY CONDITIONS
%-------------------------------------------------------------------[gsm]=bc(nrl,gsm,nj);
%-------------------------------------------------------------------% CALL FUNCTION bc1 FOR BOUNDARY CONDITIONS 2 LOAD VECTOR
%-------------------------------------------------------------------[ac]=bc1(nrl,ac,nj);
%-------------------------------------------------------------------% CALL FUNCTION disp FOR DISPLACEMENT
%-------------------------------------------------------------------[ac1]=disp(gsm,ac,nj,lout);
fclose(linp)
fclose(lout)
%=================================================================
%
FUNCTIONS
%=================================================================
%---------------------------------------------------------------%
FUNCTION inp1 FOR BASIC DATA
%---------------------------------------------------------------function [nm,nj,nrj,ym,nu,nlj,th]=inp1(linp);
dummy=fgets(linp);
tmp=str2num(fgets(linp));
[nm,nj,nrj,ym,nu,nlj,th]=deal(tmp(1),tmp(2),tmp(3),tmp(4),tmp(5),tmp(6),tmp(7));
return

%---------------------------------------------------------------%
FUNCTION inp2 FOR JOINT COORDINATES
%---------------------------------------------------------------function [x1,y1]=inp2(linp,nj);
dummy=fgets(linp);
for k=1:nj;
tmp=str2num(fgets(linp));
[f1,f2,f3]=deal(tmp(1),tmp(2),tmp(3));
x1(f1)=f2;
y1(f1)=f3;
end
return
%---------------------------------------------------------------%
FUNCTION inp3 FOR ELEMENT CONNECTIVITY
%---------------------------------------------------------------function [elnn]=inp3(linp,nm);
for j=1:4*nm;
elnn(j)=0;
end
dummy=fgets(linp);
for j=1:nm;
tmp=str2num(fgets(linp));
f1=tmp(1);
for i=1:4;
elnn(4*f1-4+i)=tmp(i+1);
end
end
return
%-------------------------------------------------------------------% FUNCTION inp4 FOR RESTRAINT INFORMATION
%-------------------------------------------------------------------function [nrl]=inp4(linp,nj,nrj);
for j=1:2*nj;
nrl(j)=0;
end
dummy=fgets(linp);
for j=1:nrj;
tmp=str2num(fgets(linp));
[jtno,xr,yr]=deal(tmp(1),tmp(2),tmp(3));
f1=jtno;
f2=xr;
f3=yr;
nrl(2*f1-1)=f2;
nrl(2*f1)=f3;
end
return
%-------------------------------------------------------------------% FUNCTION inp5 FOR LOADING INFORMATION
%-------------------------------------------------------------------function [ac]=inp5(linp,nj,nlj);
for j=1:2*nj;
ac(j)=0;
end
dummy=fgets(linp);
for j=1:nlj;
tmp=str2num(fgets(linp));
[d1,d2,d3]=deal(tmp(1),tmp(2),tmp(3));
ac(2*d1-1)=d2;
ac(2*d1)=d3;

end
return
%-------------------------------------------------------------------% FUNCTION gsm FOR GLOBAL STIFFNESS MATRIX
%-------------------------------------------------------------------function [gsm]=mgsm(linp,nm,nj,x1,y1,elnn,ym,nu,th);
for j=1:2*nj;
for k=1:2*nj;
gsm(j,k)=0;
end
end
for i=1:nm;
j1=elnn(4*i-3);
j2=elnn(4*i-2);
j3=elnn(4*i-1);
j4=elnn(4*i);
x(1)=x1(j1);
x(2)=x1(j2);
x(3)=x1(j3);
x(4)=x1(j4);
y(1)=y1(j1);
y(2)=y1(j2);
y(3)=y1(j3);
y(4)=y1(j4);
%-------------------------------------------------------------------% CALL FUNCTION elementstiffness FOR ELEMENT STIFFNESS MATRIX
%-------------------------------------------------------------------[ke]=elementstiffness(x,y,ym,nu,th);
ir(1)=(2*j1-1);
ir(2)=(2*j1);
ir(3)=(2*j2-1);
ir(4)=(2*j2);
ir(5)=(2*j3-1);
ir(6)=(2*j3);
ir(7)=(2*j4-1);
ir(8)=(2*j4);
ic=ir;
for j=1:8;
ir1=ir(j);
for k=1:8;
ic1=ic(k);
gsm(ir1,ic1)=gsm(ir1,ic1)+ke(j,k);
end
end
end
return
%-------------------------------------------------------------------% FUNCTION elementstiffness FOR ELEMENT STIFFNESS MATRIX
%-------------------------------------------------------------------function [ke]=elementstiffness(x,y,ym,nu,th);
for i=1:8;
for j=1:8;
ke(i,j)=0;
end;
end;
[D]=constitutive(ym,nu);
for k=1:4;
if k==1;
s=-1/sqrt(3);

t=-1/sqrt(3);
elseif k==2;
s=1/sqrt(3);
t=-1/sqrt(3);
elseif k==3;
s=1/sqrt(3);
t=1/sqrt(3);
else
s=-1/sqrt(3);
t=1/sqrt(3);
end
%-------------------------------------------------------------------% CALL FUNCTION FOR B MATRIX
%-------------------------------------------------------------------[b]=bmatrix(x,y,s,t);
[D]=constitutive(ym,nu);
[J1,detJ]=Jacobian(x,y,s,t);
ke=ke+b'*D*b*detJ*th;
end
return
%-------------------------------------------------------------------% FUNCTION FOR B MATRIX
%-------------------------------------------------------------------function [b]=bmatrix(x,y,s,t);
[dns,dnt]=dershape(s,t);
[J1,detJ]=Jacobian(x,y,s,t);
[dnx,dny]=dershape1(J1,dns,dnt);
b=[dnx(1) 0 dnx(2) 0 dnx(3) 0 dnx(4) 0
0 dny(1) 0 dny(2) 0 dny(3) 0 dny(4)
dny(1) dnx(1) dny(2) dnx(2) dny(3) dnx(3) dny(4) dnx(4)];
return
%-------------------------------------------------------------------% FUNCTION FOR SHAPE FUNCTION DERIVATIVE
%-------------------------------------------------------------------function [dns,dnt]=dershape(s,t);
dns(1)=-0.25*(1-t);
dnt(1)=-0.25*(1-s);
dns(2)=0.25*(1-t);
dnt(2)=-0.25*(1+s);
dns(3)=0.25*(1+t);
dnt(3)=0.25*(1+s);
dns(4)=-0.25*(1+t);
dnt(4)=0.25*(1-s);
return
%-------------------------------------------------------------------% FUNCTION FOR JACOBIAN MATRIX
%-------------------------------------------------------------------function [J1,detJ]=Jacobian(x,y,s,t);
J(1,1)=-0.25*(1-t)*x(1)+0.25*(1-t)*x(2)+0.25*(1+t)*x(3)-0.25*(1+t)*x(4);
J(1,2)=-0.25*(1-t)*y(1)+0.25*(1-t)*y(2)+0.25*(1+t)*y(3)-0.25*(1+t)*y(4);
J(2,1)=-0.25*(1-s)*x(1)-0.25*(1+s)*x(2)+0.25*(1+s)*x(3)+0.25*(1-s)*x(4);
J(2,2)=-0.25*(1-s)*y(1)-0.25*(1+s)*y(2)+0.25*(1+s)*y(3)+0.25*(1-s)*y(4);
J1=inv(J);
detJ=det(J);
return
%-------------------------------------------------------------------% FUNCTION FOR DERIVATVES OF SHAPE FUNCTIONS W.R.TO X AND Y
%--------------------------------------------------------------------

function [dnx,dny]=dershape1(J1,dns,dnt);
dnx(1)=J1(1,1)*dns(1)+J1(1,2)*dnt(1);
dnx(2)=J1(1,1)*dns(2)+J1(1,2)*dnt(2);
dnx(3)=J1(1,1)*dns(3)+J1(1,2)*dnt(3);
dnx(4)=J1(1,1)*dns(4)+J1(1,2)*dnt(4);
dny(1)=J1(2,1)*dns(1)+J1(2,2)*dnt(1);
dny(2)=J1(2,1)*dns(2)+J1(2,2)*dnt(2);
dny(3)=J1(2,1)*dns(3)+J1(2,2)*dnt(3);
dny(4)=J1(2,1)*dns(4)+J1(2,2)*dnt(4);
return
%-------------------------------------------------------------------% FUNCTION FOR CONSTITUTIVE MATRIX
%-------------------------------------------------------------------function [D]=constitutive(ym,nu);
D=(ym/(1-nu^2))*[1 nu 0
nu 1 0
0 0 (1-nu)/2];
return
%-------------------------------------------------------------------% FUNCTION bc FOR BOUNDARY CONDITIONS FOR GSM
%-------------------------------------------------------------------function [gsm]=bc(jrl,gsm,nj);
for i=1:2*nj;
if jrl(i)==1;
for j=1:2*nj;
gsm(i,j)=0;
gsm(j,i)=0;
end
end
end
for i=1:2*nj;
if gsm(i,i)==0;
gsm(i,i)=1.0;
end
end
return
%-------------------------------------------------------------------% FUNCTION bc FOR BOUNDARY CONDITIONS FOR ac
%-------------------------------------------------------------------function [ac]=bc1(nrl,ac,nj);
for i=1:2*nj;
if nrl(i)==1;
ac(i)=0;
end
end
return
%-------------------------------------------------------------------% FUNCTION bc FOR BOUNDARY CONDITIONS FOR ac
%-------------------------------------------------------------------function [ac1]=disp(gsm,ac,nj,lout);
ac1=gsm\ac';
fprintf(lout,'\nDISPLACEMENT OF NODE');
fprintf(lout,'\n NODE NO. Dx
Dy');
for i=1:nj
fprintf(lout,'\n %d
%10.8f
%10.8f',i,ac1(2*i-1),ac1(2*i));
end
return

You might also like