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