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

45 lines
1.3 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
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); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XLEN = norm(XT);%x1 x2<EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD>
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;%<EFBFBD><EFBFBD>ʽ3
%
% CHECK IMPENETRATION CONDITION
if (GAPN >= ZERO) || (GAPN <= -XLEN), return; end
%
% NATURAL COORDINATE AT CONTACT POINT
ALPHA = (ELXY(:,1) - ELXY(:,2))'*XT/XLEN;%<EFBFBD><EFBFBD>ʽ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 <EFBFBD><EFBFBD>ʽ16
% TT = [XT; -(ONE-ALPHA)*XT; -ALPHA*XT];
% PP = [ZERO; ZERO; -XN; XN];
% QQ = [ZERO; ZERO; -XT; XT];
CN = NN;%ȥ<EFBFBD><EFBFBD>-֮<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD>𲻴<EFBFBD>
% CN = NN - GAPN*QQ/XLEN;
% CT = TT + GAPN*PP/XLEN;
%
% CONTACT FORCE
FORCE = XLAMBN*CN;
% FORM STIFFNESS
STIFF = OMEGAN*(CN*CN');
end