弹性力学平面应力问题
关键词: 稳态 线性 弹性力学 平面应力 应力场 耦合
本节以二维弹性力学平面应力问题为例,讲解如何使用 FEtch 系统对多节点自由度的线性椭圆型方程进行求解,以及如何基于位移这一基本变量实现应力这一梯度场的求解。
控制方程
微分形式
二维直角坐标系下,不考虑惯性力的作用,弹性平面应力问题的未知量服从如下偏微分方程
平衡方程 \(\frac{\partial \sigma_{x x}}{\partial x}+\frac{\partial \sigma_{x y}}{\partial y}+f_{x} = 0\ \left(\text{in } \Omega\right)\) \(\frac{\partial \sigma_{x y}}{\partial x}+\frac{\partial \sigma_{y y}}{\partial y}+f_{y} = 0 \ \left(\text{in } \Omega\right)\) 几何方程 \(\varepsilon_{x x}=\frac{\partial u}{\partial x}, \quad \varepsilon_{y y}=\frac{\partial v}{\partial y}, \quad \varepsilon_{x y}=\frac{\partial u}{\partial y}+\frac{\partial v}{\partial x}\) 本构方程(平面应力) \(\left(\begin{array}{c}\sigma_{x x} \\ \sigma_{y y} \\ \sigma_{x y} \end{array}\right)=\frac{E}{(1+\nu)(1-\nu)}\left(\begin{array}{ccc} 1 & \nu & 0 \\ \nu & 1 & 0 \\ 0 & 0 & (1-\nu) / 2 \end{array}\right)\left(\begin{array}{l} \varepsilon_{x x} \\ \varepsilon_{y y} \\ \varepsilon_{x y} \end{array}\right)\) 以上式子可以简记为 \(\nabla\boldsymbol{\cdot \sigma}+\boldsymbol{f}=\boldsymbol{0}\) \(\boldsymbol{\varepsilon}=\left(\nabla \boldsymbol{u}+\nabla^{T} \boldsymbol{u}\right) / 2\) \(\boldsymbol{\sigma}=\mathbf{D} \boldsymbol{\varepsilon}\) 其中, $u$、$v$ 为位移 $\boldsymbol{u}$ 的分量,$\varepsilon_{x x}$、$\varepsilon_{y y}$ 、 $\varepsilon_{x y}$ 为应变 $\boldsymbol{\varepsilon}$ 的分量,$\sigma_{x x}$ 、$\sigma_{y y}$ 、$\sigma_{x y}$ 为应力 $\boldsymbol{\sigma}$ 的分量,$f_{x}$ 、$f_{y}$ 为体力 $\boldsymbol{f}$ 的分量。$\nabla$ 为梯度算子,$\mathbf{D}$ 为刚度矩阵。参数 $E$ 为弹性模量, $\nu$ 为泊松比。 $x$、$y$ 为直角坐标系下的坐标分量。
边界条件
考虑两类边界条件:
第一类边界条件,给定位移 \(u=u_0,\ v=v_0 \ \left(\text{on } \Gamma_1\right)\)
第二类边界条件,给定外力 \(T_{x}=\left(\sigma_{x x},\sigma_{x y}\right)\cdot \mathbf{n}=t_x,\ T_{y}=\left(\sigma_{x y},\sigma_{y y}\right)\cdot \mathbf{n}=t_y \left(\text{on } \Gamma_2 \right)\)
其中,$u_0$ 、$v_0$ 为边界上的位移,$T_{x}$、$T_{y}$ 分别为边界力在 $x$ 和 $y$ 方向的分量。$\mathbf{n}$ 为边界上的单位外法向量。
弱形式
PDE 文件的编写依赖于待解偏微分方程的弱解方程。根据虚位移原理,对平衡方程两边分别乘以位移的变分并在求解区域内积分,得到其等效积分形式 \(\int_{\Omega}\left[\left(\frac{\partial \sigma_{x x}}{\partial x}+\frac{\partial \sigma_{x y}}{\partial y}+f_{x}\right) \delta u+\left(\frac{\partial \sigma_{x y}}{\partial x}+\frac{\partial \sigma_{y y}}{\partial y}+f_{y}\right) \delta v\right] d\Omega=0\) 对上式进行分部积分,得到弱形式 \(\int_{\Omega}\left(\sigma_{x x} \delta \varepsilon_{x x}+\sigma_{y y} \delta \varepsilon_{y y}+\sigma_{x y} \delta \varepsilon_{x y}\right) d\Omega \\=\int_{\Omega}\left(f_{x} \delta u+f_{y} \delta v\right) d\Omega+\int_{\Gamma_2}\left(T_{x} \delta u+T_{y} \delta v\right) d\Gamma \tag{1}\label{eq1}\)
将本构方程代入上式,即可得到以位移为基本未知量的弱形式。于是,此有限元问题的单元刚度矩阵由上式左边体积分部分形成,而单元载荷则包含上式右端体积分和边界积分两部分的贡献。
在求得了位移之后,利用本构方程和几何方程可以得到应力与位移的关系 \(\boldsymbol{\sigma}(\boldsymbol{u})=\mathbf{D} \boldsymbol{\varepsilon}(\boldsymbol{u})\) 应用最小二乘法,以待求应力 $\boldsymbol{\sigma}$ 与由位移求得的应力 $\boldsymbol{\sigma}_0(\boldsymbol{u})$ 的偏差为目标泛函,即 \(F(\boldsymbol{\sigma})=\int_{\Omega}[\boldsymbol{\sigma-\sigma_0}(\boldsymbol{u})]^{2} d \Omega\) 对 $F(\boldsymbol{\sigma})$ 取极值,由变分原理知需满足 $\delta F(\sigma) = 0$。于是有 \(\delta F(\boldsymbol{\sigma})=\int_{\Omega} 2 \delta \sigma^{\mathrm{T}}[\boldsymbol{\sigma}-\boldsymbol{\sigma}_0(\boldsymbol{u})] \mathrm{d} \Omega=0\) 整理得 \(\int_{\Omega} \boldsymbol{\sigma} \delta \boldsymbol{\sigma} d\Omega=\int_{\Omega} \boldsymbol{\sigma_{0}}(\boldsymbol{u}) \delta \boldsymbol{\sigma} d\Omega \tag{2}\label{eq2}\)
脚本编写
一个具体问题的有限元语言表述,通常需要包含 5 种类型的文件:PDE、FBC、MDI、GCN 和 NFE。下面依次给出详细介绍。
PDE 和 FBC 文件
位移场
对于式 $\eqref{eq1}$,以位移作为基本未知量,位移场的控制方程可以写成以下矩阵形式 \(KU=F \tag{3}\label{eq3}\) 其中,$K$ 为刚度矩阵,$U$ 为位移向量,$F$ 为载荷向量。该式即为最终需要求解的线性方程组。
基于有限元语言语法,将式 $\eqref{eq1}$ 的体积分部分,编写成了disp.pde 文件,具体内容如下。
disp.pde | 说明 |
---|---|
defi disp u v coor x y func exx eyy exy shap %1 %2 gaus %3 mate pe pv fu fv 1.0e10;0.3;0;0; $c6 fact = pe/(1.+pv)/(1.-pv) $c6 shear = (1.-pv)/2 func exx = +[u/x] eyy = +[v/y] exy = +[u/y]+[v/x] stif dist = +[exx;exx]*fact +[exx;eyy]*pv*fact +[eyy;exx]*pv*fact +[eyy;eyy]*fact +[exy;exy]*shear*fact load = +[u]*fu+[v]*fv end |
系统段落关键字(信息定义) 定义未知量 定义坐标分量 定义函数用于表达应变 定义采用的形函数 定义采用的积分方式 定义用到的材料参数和参数值 参数计算 参数计算 (空行) 系统段落关键字(函数定义) $\varepsilon_{x x}$ (空行) $\varepsilon_{y y}$ (空行) $\varepsilon_{x y}$ (空行) 系统段落关键字(单元刚度矩阵表达式定义) $K_e = \sigma_{x x} \delta \varepsilon_{x x}+\sigma_{y y} \delta \varepsilon_{y y}+\sigma_{x y} \delta \varepsilon_{x y}$ (空行) 单元载荷向量表达式, $F_e = f_{x} \delta u+f_{y} \delta v$ (空行) 系统关键字(文件结束) |
这里将 shap 行和 gaus 行的参数设为待定,参数值 %1、%2 和 %3 将从 MDI 文件中取得。
对于单元载荷向量中的边界积分部分,用 FBC 文件来描述(FBC 的命名习惯上常取对应 PDE 的文件名,disp.fbc)。将方程 $\eqref{eq1}$ 的边界积分项写入 FBC 文件如下。
disp.fbc | 说明 |
---|---|
defi disp u v coor x shap %1 %2 gaus %3 mate fu fv 0;100; stif dist = +[u;u]*0.0 load = +[u]*fu+[v]*fv end |
系统段落关键字(信息定义) 定义未知量 定义坐标分量 定义采用的形函数 定义采用的积分方式 定义用到的材料参数和参数值 (空行) 系统段落关键字(单元刚度矩阵表达式定义) 单元刚度矩阵为零矩阵 (空行) 单元载荷向量表达式, $F_e = T_{x} \delta u+T_{y} \delta v$ (空行) 系统关键字(文件结束) |
应力场
应力场只有体积分项而没有边界积分项,所以只需填写 PDE 文件。对应式 $\eqref{eq2}$,利用有限元语言语法编写的 PDE 文件如下(命名为 sdisp.pde)
sdisp.pde | 说明 |
---|---|
defi disp sxx,syy,sxy coor x y coef u,v shap %1 %2 gaus %3 mass %1 1.0 load fxx fyy fxy mate pe pv fu fv 1.0e10;0.3;0;0; $c6 fact = pe/(1.+pv)/(1.-pv) $c6 shear = (1.-pv)/2 stif $cv exx = {u/x} $cv eyy = {v/y} $cv exy = {u/y}+{v/x} $c6 fxx = +fact*exx+fact*pv*eyy $c6 fyy = +fact*pv*exx+fact*eyy $c6 fxy = +fact*shear*exy dist=+[sxx;sxx]*0.0 end |
系统段落关键字(信息定义) 定义未知量 定义坐标分量 声明耦合变量,引入已知的位移值 定义采用的形函数 定义采用的积分方式 定义单元的集中质量矩阵,对应 $\boldsymbol{\sigma} \delta \boldsymbol{\sigma}$ 定义单元的载荷向量表达式,对应 $\boldsymbol{\sigma_{0}}(\boldsymbol{u}) \delta \boldsymbol{\sigma}$ 定义材料参数和参数值,和 disp.pde 完全相同 参数计算 (空行) 系统段落关键字(单元刚度矩阵表达式定义) $\varepsilon_{x x}$ $\varepsilon_{y y}$ $\varepsilon_{x y}$ $\sigma_{x x}$ $\sigma_{y y}$ $\sigma_{x y}$ 由于 $\boldsymbol{\sigma} \delta \boldsymbol{\sigma}$ 写在了质量矩阵,刚度矩阵对应为零 (空行) 系统关键字(文件结束) |
注意,后面会看到,由于应力场计算直接使用了位移场的数据作为输入数据,所以,这里应力场 PDE 文件中 mate 行材料参数的定义必须和位移场 PDE 文件 mate 行的定义完全相同。
MDI 文件
MDI 文件负责组织不同场的 PDE 和 FBC 文件,声明程序具体使用的坐标系统、单元类型和积分方法。这里文件命名为 elas.mdi,具体内容如下。
elas.mdi | 说明 |
---|---|
2dxy #a 0 2 u v pde disp q4g2 fbc disp l2g2 #b 0 3 s1 s2 s3 pde sdisp q4g2 # |
在二维直角坐标系下求解 a 场,无初值,2 个自由度,自由度名称为 u、v 调用 disp.pde,4 节点四边形单元,2 点高斯积分 调用 disp.fbc,2 节点线单元,2 点高斯积分 b场,无初值,3 个自由度,自由度名称为 s1、s2、s3 调用 sdisp.pde,4 节点四边形单元,2 点高斯积分 (文件结束符,可留空) |
注意,同一个场的 PDE 和 FBC 的单元类型和积分方法需要保证匹配,否则会导致计算精度降低,甚至计算失败的情况发生。由于应力场计算使用了位移场的计算结果,所以单元类型需要和位移场保持一致。
对于弹性力学问题,理论上四边形单元的计算精度要明显好于三角形单元。因此,这里配合 2 点高斯积分,采用了四边形单元。
MDI 文件声明的单元类型和积分方式将以参数的形式传递给 PDE 和 FBC 文件中的的 %1、%2 和 %3。如果后续想要使用其他的单元类型或者积分方法,只需修改 MDI 文件即可。
GCN 文件
在这个例子中,有位移场和应力场两个场。除了对应的 PDE 和 FBC 文件,还要给出每个场使用的算法文件和计算的命令流程,这些信息由 GCN 文件给出。系统要求 GCN 与 MDI 文件同名,具体内容如下。
elas.gcn | 说明 |
---|---|
defi a ell b str a #startsin a #solvsin a #stress b a |
系统关键字 a 场,采用算法模板文件为 ell.nfe b 场,采用算法模板文件为 str.nfe,耦合 a 场 (空一行) 初始化 a 场 求解 a 场,用直接法求解器 求解作为 a 场梯度场的 b 场,直接用 a 场的输入数据 |
注意:stress 求解器是一种特殊化了的求解器,专门用于求解已知场的梯度场。它与 str.nfe 算法模板文件互相匹配。stress 求解器不必初始化(即不使用 #start*),而是直接使用与之耦合的 a 场的网格和材料数据作为输入数据。因此,后面我们会看到,GiD 前处理模板中没有为 b 场添加菜单选项。
NFE 文件
位移场
位移场使用了 ell 算法,系统会基于模板文件自动生成以下的 elasa.nfe 文件。如果用户有其他需要,可以在此基础上进一步地修改。
elasa.nfe | 说明 |
---|---|
defi stif s load f equation matrix = [s] forc = [f] solution u write(s,unod) u gidpost("u v",1.0) u(1),u(2) end |
DEFI段 定义刚度矩阵名为 s 定义载荷向量名为 f (空行) EQUATION段 方程组左端矩阵,对应式 $\eqref{eq3}$ 左侧 方程组右端向量,对应式 $\eqref{eq3}$ 右侧 (空行) SOLUTION段 定义求解的场向量 结果保存到临时文件 unod,供后续求应力场使用 将计算结果写入 GiD 后处理文件 (空行) 结束标记 |
应力场
通过已知位移求应力,应力场使用了 str 算法,系统会基于模板文件自动生成以下的 elasb.nfe 文件。
elasb.nfe | 说明 |
---|---|
defi stif s mass m load f coef u v equation var u v read(s,unod) u v matrix = [m] forc = [f] solution str gidpost("s1 s2 s3",1.0) str(1),str(2),str(3) end |
DEFI段 定义刚度矩阵名为 s 定义质量矩阵名为 m 定义载荷向量名为 f (空行) coef 语句 声明耦合变量 (空行) EQUATION段 定义耦合变量 从 a 场保存的 unod 文件读取耦合变量 u v 方程组左端矩阵为质量矩阵 方程组右端向量为载荷向量 (空行) SOLUTION段 定义求解的场向量 将计算结果写入 GiD 后处理文件 (空行) 结束标记 |
注意,NFE 文件的 coef 行,要保证与 PDE文件中 coef 行耦合场变量的数目和顺序保持一致,否则会出现信息传递错误。
算例1
边长为 $0.5\ \mathrm{m}\times1.0\ \mathrm{m}$ 的长方形薄板,底边的位移竖向固定,横向自由,两侧边自由,顶边施加分布荷载 $P$,不计材料重力影响,求薄板的变形和应力分布。具体参数值为 $E=1.0×10^{10}\ \mathrm{Pa}$,$\nu = 0.3$ ,$f_{x} = 0$, $f_{y} = 0$,$P = 100\ \mathrm{N/m}$(压力)。
前处理
填写材料参数文件
系统自动生成了 elas.mat 文件,用于设置材料参数。参数初始值全部为 PDE 和 FBC 文件给出的默认值。可根据具体问题进行修改。对于本算例,修改完成后的文件内容如下。由于应力场 b 计算直接使用了位移场 a 的网格数据作为输入数据,所以 MAT 文件中没有与 b 场相关的单元和参数选项。
elas.mat | 说明 |
---|---|
1 5 aeq4g2 num pe pv fu fv 1 1.0e10 0.3 0 0 # 1 3 all2g2 num fu fv 1 0 100 # |
4 节点四边形面单元 材料参数 参数值 分隔符 2 节点线形边界单元 材料参数 参数值 分隔符 |
赋单元材料号
材料以面单元的形式赋值
施加固定边界
底部左侧端点 $u$ 和 $v$ 全部约束
底部边界 $u$ 自由,$v$ 约束
其中:
u-I 为边界类型,-1 表示约束,1 表示自由
u-D 为相应的约束值或施加节点力
施加荷载
物体上部的荷载以线单元的形式施加
网格剖分
根据所开发程序的计算要求,采用四边形线性单元进行网格剖分。共使用了 50 个单元,66 个节点。
计算结果
位移分布
以下为位移分布图,依次表示 $u$ 和 $v$。均为线性变化,与理论值完全相符。
应力分布
以下为应力分布图,依次表示 $\sigma_{x x}$ 、$\sigma_{y y}$ 和 $\sigma_{x y}$ 。$\sigma_{y y}=-100\ \mathrm{Pa}$,呈均匀分布,和理论解完全相同。$\sigma_{x x}$ 和 $\sigma_{x y}$ 理论值为 0,而计算结果为 $10^{-11}$ 数量级,逼近于 0,误差极小。
算例2
正方形薄板,尺寸为 $2\ \mathrm{m}\times2\ \mathrm{m}$,中间有一小圆孔,半径为 $0.2\ \mathrm{m}$。在薄板四周施加分布荷载 $P$,求薄板的变形和应力分布。具体参数值同算例 1。
前处理
根据截面的对称性,取四分之一的区域进行模拟。
填写材料参数文件
因材料和荷载与算例 1 相同,所以仍使用算例 1 的 elas.mat 文件。
赋单元材料号
材料以面单元的形式赋值
施加固定边界
底部边界 $u$ 自由,$v$ 约束;左侧边界 $v$ 自由,$u$ 约束。
其中:
u-I 为边界类型,-1 表示约束,1 表示自由
u-D 为相应的约束值或施加节点力
施加荷载
物体上部的荷载以线单元的形式施加
网格剖分
根据所开发程序的计算要求,采用四边形线性单元进行网格剖分。共使用了 441 个单元,400 个节点。为提高计算精度,按 1.1:1 的比例,沿径向对小孔周围的网格进行了局部加密。
计算结果
位移分布
以下为位移分布图,依次表示 $u$ 和 $v$,以及径向位移 $r=\sqrt{u^2+v^2}$。结果与理论值完全相符。
应力分布
以下为应力分布图,依次表示 $\sigma_{x x}$ 、$\sigma_{y y}$ 和 $\sigma_{x y}$ 。其中法向应力的最大值为 $201\ \mathrm{Pa}$,和理论解 $2P=200\ \mathrm{Pa}$ 非常接近。