3 负体积错误导致计算终止:Error Negative Volume in solid element

LS-DYNA 仿真出现 Error Negative Volume in solid element 错误如何解决

  • 5466
请先 登录 后评论

最佳答案

在材料发生大变形,尤其是对软材料,计算单元会被破坏产生负体积错误,负体积错误会在尚未达到材料失效标准前就出现。在没有对网格进行平滑和重绘处理下,拉格朗日网格对大变形有限制。如果 *CONTROL_TIMESTEP 中的 ERODE 未设置为 1,并且 *CONTROL_TERMINATION 中 DTMIN 未设置为非零常数(这两个关键字的设置是删除大变形单元,继续计算),则会负体积错误会导致计算中断,无法继续。不过,即使设置了 ERODE 和 DTMIN,一些情况下也会因为出现负体积错误,导致计算中断。

处理负体积错误的一般方法如下:

  1. 在高应力下,加强材料的应力 - 应变曲线,这个方法直接、简单、高效
  2. 优化初始网格
  3. 减小时间步因子,默认是 0.9,可以改小一些
  4. 在容易出现大变形的地方将网格 refine
  5. 避免采用全积分体单元(算法 2 和 3),这会导致大变形和大扭曲的情况下计算相对不稳定
  6. 采用默认的单元算法(单点体单元),采用沙漏控制 type4 和 5。泡沫的沙漏控制算法为:在低速冲击问题中采用 type6,系数为 1;在高速冲击问题中采用 type2 和 3
  7. 避免太高的局部接触力(不要将 force 施在单一 node 上,最好分散到几个 node 上以 pressure 的方式等效施加),尝试调整间隙,降低接触刚度或降低时间步
  8. 采用 ALE 或是 Euler 单元算法,用流固耦合功能代替接触,控制网格质量
  9. 尝试使用 EFG 算法(*SECTION_SOLID_EFG)
  10. 126 号材料,设置 elform=0
  11. 在泡沫接触计算中,采用 *contact 中的选项卡 B,关闭 shooting node logic
  12. 泡沫材料网格划分采用四面体网格,单元算法为 10,虽然这样会导致材料相对比较刚性。增大材料(泡沫材料 57 号材料)的阻尼系数,推荐采用系数为 0.5
  13. 采用双精度计算,有些情况下也可以避免负体积

另外可以参考一下:Negative Volume in soft materials

请先 登录 后评论

其它 8 个回答

Boom - 研究生
擅长:LS-DYNA,AUTODYN

最近看到有不少这样的问题,一般出现负体积,节点速度无限大,都可以通过缩短求解时间,减小时间步长,增加接触刚度等这几种方法去试一试。

1. 负体积是由于 element 本身产生大变形造成自我体积的内面跑到外面接着被判断为负体积。因而,负体积多是网格畸变造成的,与网格质量以及材料、载荷条件都有关系。有可能的原因和解决的方法一般有:

(1)尝试减小时间步长从 0.9 减小到 0.6 或更小。(注意太小得到的结果不一定可信)

(2)材料模型参数设置有问题,选择合适的材料本构。

(3)局部接触力太大(不要将力施在单一 node 上,最好分散到几个 node 上以 pressure 的方式等效施加),尝试调整间隙,降低接触刚度或降低时间步。

(4)沙漏模式的变形积累,尝试改用全积分单元。

(5)在容易出现大变形的地方将网格细化。

(6)材料刚度不够,可能也会出现负体积。

2. 节点速度无限大与接触,材料参数,网格形状等等都可能有关系,解决的方法一般有:

(1)网格质量太差,重分网格;

(2)材料本构及状态方程的参数输入格式出错,检查 K 文件;

(3)输入的参数量纲不一致,仔细检查

(4)自定义的子程序存在问题,如岩石爆破中只考虑压,不考虑拉等

(5)材料太软,计算网格畸变,如在淤泥中爆炸~

(6)接触定义出错。"

请先 登录 后评论
杨紫 - 研究生
擅长:LS-DYNA

借鉴经验:

时间步长急剧变小,可能是因为单元产生了严重的畸变而导致的负体积现象,如果采用的是四面体单元,你可以用网格重划分的方法来解决。如果你采用的是六面体单元,那目前就没有很有效的方法,可以试一下 *ELEMENT_SOLID_EFG,那对机器的要求相对就会比较高了。

请先 登录 后评论
Abrtr - 研究生
擅长:AUTODYN

负体积多是网格畸变造成的,和网格质量以及材料、载荷条件都有关系。

可能的原因和解决的方法大概有几种:

1 材料参数设置有问题,

2 选择合适的材料模式

3 沙漏模式的变形积累,

4 尝试改为全积分单元

5 太高的局部接触力,尝试调整间隙,

6 降低接触刚度或降低时间步

另外也可以采用 ALE 或是 Euler 单元算法,用流固耦合功能代替接触,控制网格质量,例如在承受压力的单元在受压方向比其他方向尺寸长

请先 登录 后评论
叶正梗 - 研究生

出现负体积是一件很痛苦的事情,尤其是算到一半,如果计算的结果已经满足你想要的数据,劝你不要弄下去了。

如果,你非要坚持下去,最直接的办法,重新建模型,调整网格大小,但是这样并不能保证,一定不会出现负体积。

自己慢慢摸索吧。

高手和凡人的差距往往就体现在划分网格的水平之上!

请先 登录 后评论
侯玉林 - 研究生

1: 察看你的边界约束条件是否正确

2: 调整时间间隔,缩短时间步长

3: 把单点积分该为全积分

4: 重新选择一下你的材料模型。

请先 登录 后评论
杨杨 - 研究生

1 负体积原因是雅阁比矩阵的行列式值为负值,一般减小时间步长参数,增加材料刚度,改变单元质量都可以的!

2 如果是金属材料出现负体积,主要是单元质量问题,建议重新划分网格,但如果是非金属,这是常见现象,不一定是网格问题,可以寻求其他的方法,

3 发生的原因有可能是因为有 initial penetration. 所以因该先检查是不是有 initial penetration:

再来如果是少数的节点受力也因为力量集中造成负体积,所以这时候就可以把接触的网格划分细一点

另外如果是用 hex element 会有 Hourglass 的情形,可以检查一下 Hourglass energy 或者是两个物体刚性相差太多, 像是 foam 的材料, 可以在 foam 的表面加一层 shell element 增加 solid element 的自由度与刚性

4 实体包壳的作法可以用 HM 的 find face 厚度其实只要很薄一层(0.1mm 就可以了)

建议可以用不同的壳后测试一下,看看两个有什么不同,如果差不多的话,当然是用比较薄的厚度

材料方面我是用 mat_3 or mat_9 null, 重量可以跟实体的参数是一样的,另外不去设定 contact

请先 登录 后评论
北极光 - 研究生
擅长:AUTODYN

删除该单元

970 key manaul 里面在 restart input data 下……

使用方法是重启动时用的,就是在某一步中用 sw1 中止,然后生成。r 重启动文件,删除不需要的单元,然后计算……

应该是 *delete_element_solid:

下面的参数是 node set No.

请先 登录 后评论
未来会来

调整了 timestep 之后就变成了 solid element failed。

请先 登录 后评论