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

45 lines
1.3 KiB
Matlab

function [FORCE, STIFF] = cntelm2d(OMEGAN, ELXY)
%***********************************************************************
% SEARCH CONTACT POINT AND RETURN STIFFNESS AND RESIDUAL FORCE
% IF CONTACTED FOR NORMAL CONTACT
%***********************************************************************
%
ZERO = 0.D0; ONE = 1.D0; EPS = 1.E-6; P05 = 0.05; FORCE=[]; STIFF=[];
XT = ELXY(:,3)-ELXY(:,2); %切向量
XLEN = norm(XT);%x1 x2的距离
if XLEN < EPS, return; end
%
% UNIT NORMAL AND TANGENTIAL VECTOR
XT = XT/XLEN;
XN = [-XT(2); XT(1)];
%
% NORMAL GAP FUNCTION Gn = (X_s - X_1).N
GAPN = (ELXY(:,1)-ELXY(:,2))'*XN;%公式3
%
% CHECK IMPENETRATION CONDITION
if (GAPN >= ZERO) || (GAPN <= -XLEN), return; end
%
% NATURAL COORDINATE AT CONTACT POINT
ALPHA = (ELXY(:,1) - ELXY(:,2))'*XT/XLEN;%公式11
%
% OUT OF SEGMENT
if (ALPHA > ONE+P05) || (ALPHA < -P05), return; end
%
% CONTACT OCCURS IN THIS SEGMENT
XLAMBN = -OMEGAN*GAPN;
%
% DEFINE VECTORS
NN = [XN; -(ONE-ALPHA)*XN; -ALPHA*XN];%2*3 公式16
% TT = [XT; -(ONE-ALPHA)*XT; -ALPHA*XT];
% PP = [ZERO; ZERO; -XN; XN];
% QQ = [ZERO; ZERO; -XT; XT];
CN = NN;%去掉-之后的差别不大
% CN = NN - GAPN*QQ/XLEN;
% CT = TT + GAPN*PP/XLEN;
%
% CONTACT FORCE
FORCE = XLAMBN*CN;
% FORM STIFFNESS
STIFF = OMEGAN*(CN*CN');
end