文件头
该材料模型输入为应变、材料参数、模型状态,输出为应力、雅可比矩阵,供 COMSOL 使用。
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#ifdef _MSC_VER
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
文件头里这些定义我只能看懂定义了MIN、和MAX
函数主体
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 D[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] = E0, par[1] = nu0, ...
int *nStates, // Input: Number of states, scalar
double *states) {
// States, nStates-vector
该计算应力结果的函数的输入有:
e[6]:格林-朗格朗日应变张量,以 Voigt 顺序存储,xx, yy, zz, yz, zx, xy。
s[6]: 皮奥拉·基尔霍夫应力,以 Voigt 顺序存储,xx, yy, zz, yz, zx, xy。
以上两者都是定义在参考构型上的。
D[6][6]: 应力-应变的雅可比矩阵。
nPar: 材料模型参数个数。
par: 材料模型参数数组。
nStates:状态数量。
states:状态数组。
在 COMSOL 软件中的外部材料选择类型“广义应力-应变关系”,就确定了输入量和输出量,还要求自定义材料属性明细,在里面,可以定义材料参数。在这个案例中,材料参数有10个:
E 0 , ν 0 E_0,\nu_0 E0,ν0:初始杨氏模量、泊松比
stchelp1、stchelp2、stchelp3:三个主拉伸伸长率
κ 0 \kappa_0 κ0:初始损伤阈值
A t , B t , A c , B c A_t,B_t,A_c,B_c At,Bt,Ac,Bc:模型中其它参数。(模型详情见上一篇)
int i, j;
double E0, nu0, stch[3], kappa0, At, Bt, Ac, Bc, kappa, ep[3], evol, lambLame, muLame;
double sp[