力学基础回顾:应力与应变

各位同学,咱们今天聊聊力学基础。别急着翻书,这部分其实挺有意思的。我刚开始做第一性原理计算那会儿,总觉得力学是搞结构的人该操心的,跟咱搞材料的没啥关系。结果第一次算弹性常数,算出来的结果跟实验差了一倍多,查了半天才发现是应力定义搞混了。嗯,从那以后,我再也不敢小看这些基础概念了。

应力的概念

说白了,应力就是单位面积上承受的力。你想想看,一根铁棒,你两头拉它,内部自然会产生抵抗的力。这个力除以截面积,就是应力。

数学上,应力张量可以写成:

σ = [σxx  σxy  σxz]
    [σyx  σyy  σyz]
    [σzx  σzy  σzz]

这里有个小细节——应力张量是对称的。为什么?因为力矩平衡。我在项目中遇到过有人把非对角元写反了,结果算出来的弹性常数全是负的,折腾了两天才找到原因。

我的习惯:写代码时,应力张量我只存6个独立分量:σxx, σyy, σzz, σyz, σxz, σxy。这样既省内存,又不容易出错。

应变的概念

应变描述的是形变程度。同样一根铁棒,拉长多少相对于原长,就是应变。

应变张量也是对称的:

ε = [εxx  εxy  εxz]
    [εyy  εyz]
    [εzz]

注意,工程上用的剪切应变γxy = 2εxy。这个坑我踩过——用VASP算完应变能,直接拿γxy去拟合,结果死活对不上。后来才发现,VASP输出的是张量应变,不是工程应变。

避坑指南:我曾经因为混淆张量应变和工程应变,浪费了整整一周的计算资源。记住:能量对应变的一阶导是应力,二阶导是弹性常数。这里用的应变必须是张量应变。

胡克定律

最简单的形式:σ = E·ε。E是杨氏模量。但这是针对一维情况。实际材料是三维的,一个方向的拉伸会引起其他方向的收缩,这就是泊松效应。

我记得刚学那会儿,觉得胡克定律太简单了,不就是个线性关系嘛。后来发现,真正难的是搞清楚这个线性关系在三维空间里怎么表达。

广义胡克定律

三维情况下,应力和应变通过一个四阶张量联系起来:

σij = Cijkl · εkl

这个Cijkl就是弹性刚度张量。它有81个分量,但利用对称性,可以简化到21个独立分量(对于三斜晶系)。

你想想看,81个分量减到21个,省了多少事!

核心要点:弹性常数计算的核心,就是求这个Cijkl。第一性原理计算通过计算不同应变下的能量变化,拟合出这些常数。

弹性刚度矩阵与柔度矩阵

为了方便,我们通常用Voigt记号把四阶张量写成6×6的矩阵:

张量下标 Voigt记号
11 1
22 2
33 3
23, 32 4
13, 31 5
12, 21 6

这样,广义胡克定律就变成了:

[σ1]   [C11 C12 C13 C14 C15 C16] [ε1]
[σ2]   [C21 C22 C23 C24 C25 C26] [ε2]
[σ3] = [C31 C32 C33 C34 C35 C36] [ε3]
[σ4]   [C41 C42 C43 C44 C45 C46] [ε4]
[σ5]   [C51 C52 C53 C54 C55 C56] [ε5]
[σ6]   [C61 C62 C63 C64 C65 C66] [ε6]

柔度矩阵S是刚度矩阵C的逆矩阵:S = C⁻¹。工程上常用的杨氏模量、剪切模量、泊松比,都可以从S矩阵里提取出来。

实用技巧:我一般先算C矩阵,再求逆得到S矩阵。从S矩阵提取工程常数特别方便:E1 = 1/S11,G12 = 1/S66,ν12 = -S12/S11。

不同晶系的弹性矩阵有不同形式。比如立方晶系只有3个独立常数:C11, C12, C44。六方晶系有5个:C11, C12, C13, C33, C44。这个对称性分析,在做计算前一定要搞清楚,不然会多算很多不必要的应变。

注意:我曾经帮人检查一个计算,他给立方晶系算了9个应变,结果有6个是冗余的。白白浪费了GPU机时。所以,算之前先分析晶系对称性,能省一半以上的计算量。

下面这张图总结了本章的知识脉络:

弹性常数计算力学基础 应力 σij 应变 εij 胡克定律 σ = E·ε 广义胡克定律 σij = Cijkl · εkl Voigt记号:6×6矩阵 刚度矩阵 C 柔度矩阵 S = C⁻¹ 工程常数:E, G, ν 从S矩阵提取

这张图把整个知识脉络串起来了。从应力和应变出发,经过胡克定律到广义胡克定律,再通过Voigt记号简化为矩阵形式,最后得到工程上常用的弹性常数。每一步都有它的物理意义和实用价值。

好了,力学基础就回顾到这儿。这些概念虽然基础,但真的很重要。我每次开始一个新材料的弹性常数计算,都会先花半小时把晶系对称性和独立常数个数理清楚。磨刀不误砍柴工嘛。


专注资料整理