function [F,Elem] = intForcesUL(Model,Elem,U,D_U,update_angle) % Initialize global vector of internal forces F = zeros(Model.neq,1); for i = 1:Model.nel % Lengths: Beginning of step, current, and step increment L_1 = Elem(i).L_1;%每个增量步开始时进行更新 L_c = elemLength(Elem(i),U); D_L = L_c - L_1; % 刚体位移角度增量(相对于增量步初始状态) rbr = elemAngleIncr(Elem(i),U,D_U);%rbr带有符号,增加正值,减少负值 %rbr为相对荷载步初始转角的单元刚性转角,即当前构型与荷载步初始时的构型的整体转角差(梁单元轴向角度) angle = Elem(i).angle_1 + rbr; % 更新单元刚体转角 if (update_angle) Elem(i).angle = angle; end % 局部坐标系-全局坐标系的坐标转换矩阵 c = cos(angle); s = sin(angle); rot = [ c -s 0 0 0 0; s c 0 0 0 0; 0 0 1 0 0 0; 0 0 0 c -s 0; 0 0 0 s c 0; 0 0 0 0 0 1 ]; % 形变转角,相对增量步初始构型 r1 = D_U(Elem(i).n1.dof(3)) - rbr; r2 = D_U(Elem(i).n2.dof(3)) - rbr; % 局部坐标下的位移向量增量,相对增量步初始构型 dl = [0; 0 ; r1; D_L; 0; r2];%没有y向变形,只有轴向和转动变形???因为y向的变形其实等同于转角,局部坐标系下不存在y向变形 % 局部坐标系下内力向量增量 D_fl = Elem(i).ke * dl; % 局部坐标系下总内力 fl = Elem(i).fi_1 + D_fl; % 更新Elem中局部坐标系总内力 Elem(i).fi = fl; % 内力从局部到全局的转换 fg = rot * fl; % 单元内力组装到整体内力矩阵中 gle = Elem(i).gle; F(gle) = F(gle) + fg; end end