01
ZeroLength element
我经常收到很多同学问我关于零长度单元和两节点单元,这篇推文我想讲一讲我个人的理解。也欢迎大家补充。
零长度单元大概是因为被用的频率较高,而很多时候我们对其并不是很熟悉,所以会有一些不确定的问题。以下以问题的形式展开:
1)零长度单元长度一定为0么?
我个人的理解是,未必。零长度单元的本质应该是没有长度概念的意思,而不是长度一定设为0,但为了更好的理解没有长度概念,我们又通常把长度设为0. 这句话很绕,希望大家可以明白。为了佐证这个,我们不妨看看零长度单元的源码。在zerolength.h 的头文件中确实定义了一个误差容许值,即:
// Tolerance for zero length of element
并在zerolength.cpp中检查了用户输入的零长度的单元的长度是否小于这个限值:
// Check that length is zero within tolerance
const Vector &end1Crd = theNodes[0]->getCrds();
const Vector &end2Crd = theNodes[1]->getCrds();
Vector diff = end1Crd - end2Crd;
double L = diff.Norm();
double v1 = end1Crd.Norm();
double v2 = end2Crd.Norm();
double vm;
vm = (v1<v2) ? v2 : v1;
if (L > LENTOL*vm)
opserr << "WARNING ZeroLength::setDomain(): Element " << this->getTag() << " has L= " << L <<
", which is greater than the tolerance\n";
顺理成章似乎零长度单元只要赋予的有限长度,似乎不可行。但是当我们仔细阅读源码,发现,这里如果用户输入的零长度单元的长度大于了限值之外,除了输入警告之外,并没有采取任何其他的措施。换句话说,这里check零长度单元的代码只是为了提醒用户,但不代表单元无法继续执行,只有当随之出现return 才会是代码终止。因此,零长度单元是可以有长度的,只是这个长度不影响计算结果,因此为了更好的理解,我们应该认为零长度单元是一个没有长度概念的单元。这里也可想想零长度截面单元源码默认的单元长度为单位1.
2)零长度单元长度方向是什么?
其实这个本来不是一个问题的,opensees 零长度单元的给的注意事项如下:
NOTE:
If the optional orientation vectors are not specified, the local element axes coincide with the global axes. Otherwise the local z-axis is defined by the cross product between the vectors x and yp vectors specified on the command line.
仔细阅读下,也就是是默认的方向是与全局坐标系是一致的。那么接下来的问题就是,我们在什么情况下需要用到自己定义零长度单元的方向。答案也很简单,就是我们希望期待的零长度单元的受力方向无法用全局坐标系表示。比如,我们希望零长度在与x 轴45°方向承担力,这时我们就是自己输入这个方向,-orient 1 1 0 -1 1 0. 从第一个问题的解答,我们很容易可以这样想,如果零长度假想的长度方向就是受力方向,就更容易理解了。如下图,在STKO 中剪力用一个零长度单元莫您支撑的情况的:
我们建立一个局部坐标系直接赋予给这个零长度单元即可,其操作和abaqus 是一致的。那么我们建立的模型就可以和truss 模拟支撑或者twonodeLink 模拟支撑的结果是在几何非线性不强的情况下是一致的。
3)零长度单元有哪些用处?
零长度单元实际上是一个很活用的单元。大家可以想象下,我们可以在一个纤维单元一侧连接多个零长度单元,就可以轻松实现塑性铰,铰接,和刚接等边界问题。这类问题在之前的hingebeam 单元介绍中有涉略,可以参考:
举一个例子,对于一个二维的case, 即三自由度,如果我们在一个纤维单元每一侧连接三个零长度单元,即ux uy rz 对应于全局坐标系,如果我赋予给ux uy 一个较大值,而rz赋予一个较小值,那么实际上这个操作就实现了下那位单元的弯矩释放(注意这里rz 也可以忽略,当他不是边界时)。其实大家仔细一想这个和abaqus coupling 是差不多的,我们couple ux and uy,就可以实现铰接的效果。当然在opensees 我们也可以使用equal DOF 等同实现。以上的案例只是为了说明,如果我们能够明白其中的逻辑关系,其实建模的手段我们是可以多样化的。比如在土结构相互中,我们也可以通过零长度单元实现接触。