在结构力学仿真中访问外部材料模型

作者 Ed Gonzalez

2015年 12月 1日

您可能会希望能在结构力学仿真中指定由用户定义的材料模型。COMSOL Multiphysics® 5.2 版本支持您访问来自外部库的材料模型以及由您自己编程的材料函数。本篇博客中,我们将通过执行 Mazars 损伤模型来演示这一新功能。

指定用户定义材料模型的新方法

在 COMSOL Multiphysics 中,您可以在模拟实体结构变形时访问各种预定义材料模型,比如塑性、粘弹性、蠕变和超弹性材料模型等。

您可以从内置的本构定律开始,直接在用户界面中基于应力或应变不变量、流动法则、或蠕变法则开发您自己的材料模型;您还可以根据其他偏微分方程组 (PDE) 或分布式常微分方程组 (ODE) 来拓展给定的材料模型。但如果您的材料模型包含无法用标准变量、不变量或其他 PDE 表示的非线性表达式组呢?

最新的 COMSOL Multiphysics 5.2 版本为您提供了指定用户定义材料模型的全新方法。在结构力学分析中,您现在能够完整定义一种非线性应力-应变关系,或在已有的弹性材料中加入非弹性应变贡献项。固体力学接口新增的两项特征进一步补充了此功能:线弹性材料节点下的外部应变子节点和 外部应力-应变关系材料模型。

在 COMSOL Multiphysics 模型开发器中访问外部材料、外部应力和外部应力-应变节点。
模型树中的外部材料、外部应变和外部应力-应变关系节点。

借助这些新功能,我们将能执行由 C 语言编译的外部材料函数。对于由其他编程语言编写的材料函数,您还可以利用 C 代码为其编写一个包裹函数,轻松对老旧代码进行复用。

除了编译您自己的材料模型,您还能以附加产品的形式将模型分发给您的同事及客户。您甚至能使用 App 开发器开发易于使用的 App,加入您的外部材料函数,并将其分发给您的同事及客户。

新功能的使用

我们在 App 库中新增了外部材料示例,结构力学模型,旨在演示该功能的使用。示例包括一个模型文件、一个 C 语言源文件,和一个针对 64 位 Windows® 操作系统编译并链接至此系统的共享动态链接库 (DLL)。(如希望在 Linux® 操作系统和 MAC OS X 中运行模型,将需要额外的编译及链接)。

在第一个示例中,我们解释了如何为各向同性线弹性材料编写 C 代码,并通过简单的单轴测试对比了它与内置线弹性材料的仿真结果。第二个示例更加真实,演示了如何通过执行非线性材料模型来计算混凝土中的损伤。

我们将重点分析第二个示例。

使用 Mazars 损伤模型进行混凝土分析

利用初始弹性变形来表征脆性材料在力学载荷下的变形。移去载荷后,材料将回到它的原始状态。但如果超过了临界应力或应变水平,材料将在弹性阶段后进入非线性开裂阶段。

达到临界值后,开裂将开始生长并扩展,直到材料破裂。开裂的发生及生长对混凝土结构的失效有重要影响,目前有几种理论对此进行了解释。在连续性损伤力学理论中,“损伤”变量表示由于开裂生长造成的劣化量。损伤变量控制了材料刚度的衰减。

Mazars 混凝土损伤模型使用各向同性标量损伤变量 d 来表征混凝土内的开裂行为。本构应力-应变关系的输入变量为:

\sigma = (1-d)C:\epsilon

其中,\sigma 是应力张量、C 是弹性矩阵、\epsilon 是应变张量。

材料表现为一种线弹性固体,损伤变量为零代表未受损,变量接近 1 代表完全受损。

利用 COMSOL Multiphysics 的标准变量来计算损伤变量的开始和演化难度较高。这是为什么呢?它需要根据主应力和主应变记下之前的步骤,并对变量进行有条件控制。为了解决这一限制,我们在一个外部材料函数中执行了 Mazars 损伤模型,并加入 C 代码方便进行查看和修改。C 代码包括对几个变量和 for-循环的定义,并使用状态变量来记录之前步骤的损伤。

用于计算 Mazars 损伤模型的代码。
用于计算 Mazars 损伤模型的外部材料函数只包含 100 多行代码。

下图显示了使用 Mazars 损伤模型计算的单轴应力-应变响应。结果与《混凝土的力学行为》一书中的发现极为契合。

单轴应力-应变响应绘图。
单轴应力-应变响应绘图。

下一步

  • 下载教程模型: 外部材料示例,结构力学
  • 如希望更详细地了解如何在不同操作系统内进行 C 代码编译,欢迎阅读《COMSOL Multiphysics 参考手册》中的“使用外部材料”部分
  • 对 Mazars 损伤模型感兴趣吗?您可以阅读以下文章:
    • J. Reynouard et al., “Modeling the Macroscopic Behavior of Concrete”, in Mechanical Behavior of Concrete, ed. J. Reynouard, J. Torrenti, and G. Pijaudier-Cabot. 63-119, Wiley 2010
    • J. Mazars et al., “Local Second Gradient Models and Damage Mechanics: 1D Post-Localization Studies in Concrete Specimens”, in Bifurcations, Instabilities, Degradation in Geomechanics, ed. G. Exadaktylos and I. Vardoulakis. 127-142, Springer 2007

Microsoft 和 Windows 是微软公司或其子公司在美国和/或其他国家或地区的注册商标或商标。

Linux 是 Linus Torvalds 的注册商标。

Mac OS 是 Apple Inc. 在美国和其他国家或地区的注册商标。


评论 (2)

正在加载...
岑 陈
岑 陈
2022-06-06

您好,我想请教一下定义外部材料的C语言程序中的相关问题。
EXPORT int eval(double e[6], // Input: Green-Lagrange strain tensor components in Voigt order (xx,yy,zz,yz,zx,xy)
double s[6], // Output: Second Piola-Kirchhoff stress components in Voigt order (xx,yy,zz,yz,zx,xy)
double Jac[6][6], // Output: Jacobian of stress with respect to strain, 6-by-6 matrix in row-major order
int *nPar, // Input: Number of material model parameters, scalar
double *par, // Input: Parameters: par[0] = E, par[1] = nu, par[2] = sigyYs0, par[3] = ETiso
int *nStates1, // Input: Number of states, scalar
double *states1, // Internal state: Plastic strain tensor components in Voigt order (xx,yy,zz,yz,zx,xy)
int *nStates2, // Input: Number of states, scalar
double *states2, // Internal state: Accumulated effective plastic strain
int *nStates3, // Input: Number of states, scalar
double *states3)

这段程序里的参数,输入输出是软件内部固定的,还是用户自定义的

Min Zhang
Min Zhang
2022-06-14

你对应comsol下的mph文件看就知道答案了,可以加一下联系方式,交流一下,我也在做这个,q:939060709

浏览 COMSOL 博客