首页/文章/ 详情

【OpenSEES 单元系列】零长度单元(ZeroLength element)

1年前浏览6512

01

ZeroLength element

我经常收到很多同学问我关于零长度单元和两节点单元,这篇推文我想讲一讲我个人的理解。也欢迎大家补充。

零长度单元大概是因为被用的频率较高,而很多时候我们对其并不是很熟悉,所以会有一些不确定的问题。以下以问题的形式展开:

1)零长度单元长度一定为0么?

我个人的理解是,未必零长度单元的本质应该是没有长度概念的意思,而不是长度一定设为0,但为了更好的理解没有长度概念,我们又通常把长度设为0. 这句话很绕,希望大家可以明白。为了佐证这个,我们不妨看看零长度单元的源码。在zerolength.h 的头文件中确实定义了一个误差容许值,即:

    #include <Element.h>#include <Matrix.h>#include <Damping.h>// Tolerance for zero length of element#define  LENTOL 1.0e-6
             

    并在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 单元介绍中有涉略,可以参考:

      【STKO/OpenSEES]结果后处理& 支撑结构的模拟

      举一个例子,对于一个二维的case, 即三自由度,如果我们在一个纤维单元每一侧连接三个零长度单元,即ux uy rz 对应于全局坐标系,如果我赋予给ux uy 一个较大值,而rz赋予一个较小值,那么实际上这个操作就实现了下那位单元的弯矩释放(注意这里rz 也可以忽略,当他不是边界时)。其实大家仔细一想这个和abaqus coupling 是差不多的,我们couple ux and uy,就可以实现铰接的效果。当然在opensees 我们也可以使用equal DOF 等同实现。以上的案例只是为了说明,如果我们能够明白其中的逻辑关系,其实建模的手段我们是可以多样化的。比如在土结构相互中,我们也可以通过零长度单元实现接触。

      来源:xinchenxuan828
      非线性二次开发理论STKO
      著作权归作者所有,欢迎分享,未经许可,不得转载
      首次发布时间:2023-06-20
      最近编辑:1年前
      OpenSEES抗震笔记
      博士 Angus.Zhang
      获赞 52粉丝 87文章 52课程 1
      点赞
      收藏
      未登录
      1条评论
      晨曦
      签名征集中
      10月前
      请问零长单元模拟支座考虑阻尼的话是后面直接加上-doRayleigh 1就行了是吗,不用单独设置阻尼命令嘛?
      回复
      课程
      培训
      服务
      行家
      VIP会员 学习 福利任务 兑换礼品
      下载APP
      联系我们
      帮助与反馈