首页/文章/ 详情

有限元基础知识:改进Riks方法求解后屈曲问题

13天前浏览25

上次讲到后屈曲问题的解法:

有限元基础知识:非线性屈曲1

之前说了在非线性屈曲分析中,因为要捕捉后屈曲的snap-back(跳回失稳)等行为,就引入了一个算法,很多人统称叫弧长法,但很多软件中一般叫Riks与改进Riks方法(Modifed Riks)今天我们就来介绍一下改进Riks方法(下图为Abaqus中的样子) 

首先Riks是个人名(别去思考他有啥含义),其算法核心跟传统的Arc-length没有太大的区别,最大的区别在于当我们引入了一个加载系数的变量     后如何一个新的构建约束方程,传统Arc-length的办法为:画个圆弧(所以也被称为弧长法,然后那个弧长等于人为设定的一个增量),如下图所示: 

这么做其实也并没有啥太大的问题,就是算起来麻烦点,需要求解二元二次方程(每个元是个向量场,简单的语言哈哈)。所以Riks就搞出来了改进Riks方法,就非常的简单粗暴:让每一个迭代的增量和这一步初始的方向垂直,以此作为约束条件,效果就大概是下边这种:

 那么我们就多了一个方程(二元一次方程,点乘!):

 

在Abaqus这种成熟的商业软件中的实现会与教科书上有些不一样,效果好很多,以下简要介绍一下,并告诉大家其这么做的原因:

  1. 首先对载荷和位移进行归一化具体做法为
 
 

此操作将载荷      对整个向量的norm进行归一化,将位移向其最大的绝对值进行归一化,这个的好处在于,由于用户一般就是简简单单指定一个     作为计算参数,而载荷和位移数量级可能差异迥异,这里提一下,对于Modified Riks的每一步的第一个迭代,我们计算出来的     由于不存在上述约束条件了,回归到

 

这个条件,如果不进行归一化的话,这个     取多大呢,谁也不知道 (而一般情况下学术界不会考虑这个问题,大不了多试几个参数就行了)!

那么在归一化之后,上述的约束方程则变成了

 
 

其中

 

这样我们就可以非常轻松的得到    

 
2. 然后的问题就变成了这个       上的正负号怎么取了,这里其实众说纷纭,怎么干的都有,比较常用也是Abaqus中采用的方法就是
 

这个做法翻译过来就是让这一步的初始增量与上一步的累积增量的点乘是正的,也就是说”上一步的前进方向和这一步的初始大体在一样的趋势上“,不至于上一步往东,这一步往西。当然其实这种判断并不绝对,如果增量的     取得过大,下边这种情况也可能发生 

3. 然后就是这个分析步的后续迭代步了,正常的进程与牛顿法与传统牛顿法与教科书上的Arc-length都没啥两样,无非是: 

    1. 求切线刚度矩阵     2. 求     3. 求位移增量     4. 求解    5. 这里最大的不同就是现在对     与      要进行一波归一化,成为     ,4. 现在利用上述说的迭代的增量和这一步初始的方向垂直,就可以构造如下的约束方程

 

这里大家之前没见过的符号就两个,    其实就是每个迭代步的    , 这里主要为了和abaqus符号统一,并区分开    (这个经常用来表示累积的     增量),还有就是

 

其实就可以理解为对残余向量      也进行相应的归一化,逻辑非常的自洽。用图来表示就是这样的:

根据上述公式大家就可以轻松的求出来

 

然后正常更新就好:

 
 

循环往复直至收敛,这样我们就得到了载荷可上可下,位移可进可退的基于Modified Riks的后屈曲分析。


来源:大狗子说数值模拟
Abaqus非线性
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-09-24
最近编辑:13天前
大狗子说数值模拟
博士 传播国际一流的数值模拟算法
获赞 11粉丝 25文章 78课程 0
点赞
收藏
作者推荐

接触基础知识:从四叉树八叉树到K-d tree

上次说到了 接触基础知识:从二分到四叉树与八叉树说到了四叉树、八叉树与二分的关系,其实呢就是高维上的均匀二分法,那么其实在此之上还有一种变形,那就是K-D tree。K-D tree的问题其实主要是为了解决以下的问题:假设蓝框框是需要划分的几何空间,为了快速搜索,假定我们待检测的几何或者网格在一个维度上分布很广,而在另外一个维度上基本空间位置没啥变化,那么传统的四叉树与八叉树就会造成一定的问题。比如看下边这个图,虚线将空间划分为4等分(典型的2D空间中的四叉树),那么左边2个小三角型分别横跨左边上下两个,右边的两个也是横跨右边上下两个,这个时候如果有个接触检测的物体进入这些盒子都需要进行接触检测,显然不是我们想要的。 那么我们来看看改进的K-d tree是咋做的呢,K-d tree 顾名思义,他的意思就是 的树结构, 为空间维度,对于2D来说, , 对于3D来说, ,其实也是在各个维度上进行二分,这里乍一看,跟上述四叉树八叉树也没啥区别,但这里他有两个比较重要的特点(起码我认为重要):不一定均分不一定每个维度方面都分一般来说在三维中,按x→y→z→x循环选择分割维度,然后可以选择图形在该维度上的中位数作为分割点,确保树平衡,而且也并不一定每个维度都分割,比如像上述的结构,我们可以采用下边的方法 这样我们进行x方向的分割,并略过y方向的分割,因为如果像上述四叉树一样也进行y方向的分割无非是让格子变得更多,且每个格子里面物体的数量又不会减少(如上述四叉树),增加了存储又没带来啥好处。所以这里可以看到K-d tree 提供一种比传统四叉、八叉树更为灵活的方式,可以分别在各个维度上剖分,可以认为是四叉树八叉树的改进型,不过编码方面会稍微麻烦一点,下一次我会结合编码直接来说一下,然后大家怎么选用看自己的选择。另外,K-d tree还有一个大好处,因为他并不是对空间的均匀剖分,所以对于空间分布不均匀的情况也会效果更好一点,下图这个分布很不均匀的情况 用左边的四叉树,四个格子分别的单元数量(按照但凡有部分在就算属于这个格子的原则):左上:5右上:2左下:4右下:2换成K-d tree 后:左上:3右上:2左下:2右下:3可以看到存储的数量减少了很多,更重要的是后续在格子中做局部的接触检测的数量会减少,提高计算效率。最后总结一下:K-d tree和四叉、八叉树在查询效率和构建复杂度方面基本一致,但是K-d tree 可能更省内存,各个区域的划分可能更均衡,虽然理论上并不会改变计算复杂度的级别,但是实操起来对于一大堆数据的情况(特别是接触、动态的、不均匀的),往往能效率更高一些。来源:大狗子说数值模拟

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈