和朋友探讨将多个节点约束起来的方法时,想起了多年前在硕士毕业论文中用到的刚性域。
当需要让一组节点具有共同自由度的时候,通常采用的方法是利用CP命令将节点进行耦合,但问题来了,耦合是“一对一”的,即一个节点只能存在于一个耦合对里 ,否则计算的时候会报错。那么若要实现多对一的“自由度绑定”应该如何处理呢?
在处理对实体单元建立的箱梁截面施加弯矩的问题上,可以利用cerig命令,将截面所有节点的自由度绑定到平面外的一个节点上,使该截面的位移、转角都和该节点的相同——由此就可以把对截面施加弯矩转变成对节点施加弯矩——这样通过节点力F命令就可以搞定了。
et,4,21 !首先建立mass21单元,用来建立刚性域
……KPMAX= !设置当前最大关键点编号为变量,清空该变量*get,KPMAX,kp,0,num,max !得到当前最大关键点编号k,KPMAX+1,x,y,z !建立一个新的关键点,并给出关键点的坐标(在要建立刚性域的相关节点旁边)ksel,s,,,KPMAX+1 ! 选择刚刚建立的关键点kplottype,4 !设置单元属性real,1 !这是一个空的实常数kmesh,all !划分网格,形成节点
allselnsel,s,loc,x,x,y+dy !选择欲建立刚性域的节点组(这里是一个平面内的所有节点)nplot CERIG,node(x,y,0),ALL,ALL, , , , !建立刚性域,node()里是刚才建立的那个节点的坐标
命令说明
CERIG, MASTE, SLAVE, Ldof, Ldof2, Ldof3, Ldof4, Ldof5
参数:MASTE,主要节点;
SLAVE, 从属节点;
Ldof,约束方程从属节点所使用的自由度。选项:ALL、UXYZ、RXYZ、UX、UY、UZ、ROTX、ROTY、ROTZ
ALL:对于3D单元,生成基于UX、UY、UZ、ROTX、ROTY、ROTZ的6个约束方程;若是2D单元,生成基于UX、UY、ROTZ的三个约束方程。
UXYZ:平移自由度。对于3D单元,生成基于从属节点UX、UY、UZ自由度和主节点UX、UY、UZ、ROTX、ROTY、ROTZ自由度的三个约束方程;对于2D单元,生成基于从属节点UX、UY自由度和主节点UX、UY、ROTZ自由度的一个方程。
RXYZ:转动自由度。对于3D单元,生成基于ROTX、ROTY、ROTZ的三个方程;对于2D单元,生成基于ROTZ的一个约束方程。
UX、UY、UZ、ROTX、ROTY、ROTZ 节点的六个自由度
这是对箱梁截面建立了刚性域之后的效果:
这里又引出了另一个问题,既然刚性域的功能是“自动生成约束方程”,那么直接用建立刚性域的方法,将下图各个两单元中的5,6,7,8四个节点自由度全部约束起来,可否用刚性域来实现呢?
有空的时候玩玩,朋友去实践了,静候他的佳音^_^
来源:十千牛