FEM-Course-Matlab/17.接触问题matlab有限元编程/fem-contact/Linear_Elasticity.m

76 lines
2.3 KiB
Matlab
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function [K, F] = Linear_Elasticity(Nodes, Elements,N_ID_p1, Boundary,Patch)
global E u SD q0
Ne=size(Elements,1);
Nnod=size(Nodes,1);
Width=1;%平面应力单元的厚度
% 初始化结果存储空间
K = zeros( 2 * Nnod , 2 * Nnod );
F = zeros( 2 * Nnod , 1 );
for i=1:Ne
ke=ele_stiff_matrix(i,Nodes,Elements,E,u,Width);
ENodes( : , 1 ) = Elements( i , : );
%组装为整体刚度阵
iEnum = size( ENodes , 1 ); % 单元的结点总数
iDOFnum = 2 * iEnum; % 单元的总自由度数
iDof = zeros( 2 * iEnum , 1 ); % 各节点自由度编号
for il=1:iEnum
inod = ENodes( il );
iDof( 2 * il-1 : 2 * il) = 2 * inod-1 : 2 * inod;
end
% 拼装ir为行局部编号, irg为对应整体编号
for ir = 1 : iDOFnum %row
irg = iDof( ir );
% ic为列局部编号, icg为对应整体编号
for ic = 1 : iDOFnum %column
icg = iDof( ic );
K( irg , icg ) = K( irg , icg ) + ke( ir , ic );
end
end
end
%施加荷载边界条件%均布荷载
% if Patch==2
% iLenElt = size(N_ID_p1,1); %均布荷载所在单元编号
% for ie = 1:iLenElt
% for ind = 1:2 % ind结点自由度编号
% iNode = N_ID_p1(ie,:); %获取单元结点
% irow = (iNode-1)*2+ind;
% Pe = UniLoad(ie,N_ID_p1,q0,Nodes,Elements,Width); % 3级子程序EquivalentLoad(ie)
%
% F(irow) = F(irow)+Pe(ind:2:end,:);
% end
% end
% end
if Patch==2
iLenElt = size(N_ID_p1,1); %均布荷载所在单元编号
for ie = 1:iLenElt
for ind = 1:2 % ind结点自由度编号
iNode = N_ID_p1(ie,:); %获取单元结点
irow = (iNode-1)*2+ind;
Pe = UniLoad(ie,N_ID_p1,q0,Nodes,Elements,Width); % 3级子程序EquivalentLoad(ie)
F(irow) = F(irow)+Pe(ind:2:end,:);
end
end
end
%施加支座边界条件
iBct = size( Boundary , 1 );
for ib = 1 : iBct
iNode = Boundary( ib , 1 ); % 结点编号
iType = Boundary( ib , 8 );
if iType == 1 % 固定点边界条件
for ind = 1 : 2
irow = ( iNode-1 ) * 2 + ind;
if ( Boundary( ib , ind + 1 ) == 1 )
K( irow , : ) = 0.0;
K( : , irow ) = 0.0;
K( irow , irow ) = 1.0; % 划零置一法
F(irow)=0.0;
% gKA( irow , irow ) = 1.0e+20; % 乘大数法
end
end
end
end