45 lines
1.3 KiB
Matlab
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 |