76 lines
2.3 KiB
Matlab
76 lines
2.3 KiB
Matlab
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
|
||
|