问题描述
我实现了一种用于“结构力学”的外部材料,但我的模型无法求解。解决方法
外部材料一般通过 C 语言编码,然后被编译到共享库中,供 COMSOL Multiphysics 在运行时使用。如果您在编译外部材料代码时遇到问题,请参阅 COMSOL Multiphysics 安装手册中的如何编写和连接外部材料模型一节。外部材料的用途有两个方面:- 计算用于确定内力和外力是否达到平衡的机械应力。
- 计算应力对应变的导数(雅可比),从而使方程求解器可以迭代以建立力平衡。
- 建立一个尽可能小的模型,最好使用单一的网格单元。
- 对模型施加位移控制的载荷。这样,您就可以精确控制输入外部材料代码中的应变。此外,如果您要实现的材料模型包含软化,请务必使用位移控制的模型。
- 使用简单的变形情况,例如单轴拉伸和纯剪切。
应力计算
您需要对一些与应力计算有关的事项进行检查:- 如果外部材料在单轴载荷下表现良好,但在其他变形模式下失效或产生不正确的结果,请确保在外部材料代码中使用了正确的剪切应变分量定义和顺序。
- 您的代码中是否存在被零除的风险?在分析开始时,外部材料可能会调用零位移场(零应变),因此需要添加保护性代码,以避免可能出现的问题。
- 许多非弹性材料模型都需要局部迭代来计算应力,这通常被称为应力更新算法。COMSOL Multiphysics 不会去控制这些局部迭代,因此,密切关注您实现的迭代方法的健壮性非常重要。是否存在数值溢出的风险?在蠕变模型中,应力通常大于一次幂关系。在局部迭代过程中,未收敛的应力可能相当高,以至于提高到幂指数关系时产生溢出。在代码中添加安全措施来识别这些类型的问题会很有帮助。
- 如果您认为应力更新算法有问题,可以使用 C 语言中的 fprintf 语句将局部迭代中的信息打印到单独的文件中。但是要小心,这可能会产生大量的输出。
雅可比矩阵计算
雅可比矩阵不正确的一个标志是,模型在分析过程中的一部分运行没有问题,但随后会出现收敛问题。这种现象表明雅可比矩阵的非弹性部分不正确,您可以使用以下几种方法来识别并纠正与雅可比矩阵计算有关的问题:- 首先必须指出的是,在许多情况下,一个稍微偏离正确雅可比矩阵的近似雅可比矩阵通常足以达到收敛。这只会影响收敛速度,而不影响解的精度。
- 导致收敛问题的最常见原因是没有正确定义雅可比矩阵。从形式上看,雅可比矩阵是第二类皮奥拉-基尔霍夫应力对格林-拉格朗日应变(或对变形梯度)的导数。必须计算导数,使其与计算应力所采用的应力更新算法一致。
- 和应力更新算法一样,请密切关注剪切应变的定义和顺序。
- 在求等效应力等物理量的微分时,一个常见的陷阱是忽略应力张量的对称性。在使用压缩的矢量格式处理应力和应变时,可能会出现问题。
- 应力对应变的微分可能相当复杂(且容易出错),您可以尝试对雅可比矩阵表达式进行受控简化。
- 如果雅可比项的表达式非常复杂,您可以使用 fprintf 语句将值打印到单独的文件中,然后与手动计算的值进行比较。但是请小心,这可能会产生大量的输出。
一般建议
由于应力计算或雅可比矩阵计算存在问题,有时很难确定外部材料代码是否失败。基于应变场的数值扰动来实现雅可比矩阵可能是一种有效的做法。Miehe 于 1996 年提出了一种扰动技术,用六个额外的应力计算来代替雅可比矩阵计算。这项技术在计算上可能非常昂贵,但在外部材料开发过程中非常有用。此外,还请注意,本软件针对本构建模中经常出现的许多张量和矢量运算提供了一个实用程序函数库,可以帮助您减少自己编写相应功能代码所花费的时间。请参阅 Structural Mechanics Module User's Guide 中的 Using External Materials 一节。关于如何在 COMSOL Multiphysics 中实现外部材料的演示,我们提供了许多资料供您参考,例如:外部材料示例,结构力学 演示模型,COMSOL Multiphysics 软件提供一个丰富的材料模型集合,在每个版本中,我们都会不断添加更多的内置材料模型,当前版本中现在可能已经包含您正在作为外部材料编码的材料特性。参考文献
Miehe, C., "Numerical computation of algorithmic (consistent) tangent moduli in large-strain computational inelasticity", Comp. Meth. Appl. Mech. Engng., Vol 134, No. 3-4, pp. 223-240, Aug 1996.
本文内容来自 COMSOL 知识库,点击“”,获取实现外部材料的演示的案例模型。