本文讨论小变形轴对称 THM 的 SNS-FEM 离散,包括光滑域几何、四个虚拟积分点、耦合残差与切线,以及机械体积力和 Darcy 重力项。公式按本文的符号与章节独立说明;验证记录与检查要求集中在第 14 节。
0. 物理范围与符号约定
本文采用以下假设:小应变、准静态、固定参考几何、单一均匀且各向同性的材料、不可压缩固体颗粒 K s → ∞ K_s\to\infty K s → ∞ ,以及标量 Biot 系数 b = 1 b=1 b = 1 。孔隙率及水力、热学系数取给定参考值,不随位置或当前未知量更新。机械体力允许是已知的空间和时间函数,但不依赖当前 Newton 未知量;Darcy 定律中的重力加速度采用给定常向量。含一般体力不意味着材料非均匀,也不意味着可把机械体力自动解释成作用于流体的加速度。
体力、重力加速度和混合物参考密度分别写为
f ( x , t ) = [ f r , f z ] T , g = [ g r , g z ] T , ρ = ( 1 − n ) ρ s + n ρ f . \boldsymbol f(\boldsymbol x,t)=[f_r,f_z]^T,
\qquad
\boldsymbol g=[g_r,g_z]^T,
\qquad
\rho=(1-n)\rho_s+n\rho_f. f ( x , t ) = [ f r , f z ] T , g = [ g r , g z ] T , ρ = ( 1 − n ) ρ s + n ρ f .
其中 f \boldsymbol f f 是单位总体积的机械体力 ,量纲为力/体积;g \boldsymbol g g 是重力加速度,量纲为长度/时间平方。纯重力时 f = ρ g \boldsymbol f=\rho\boldsymbol g f = ρ g ;z z z 轴向上时 g = [ 0 , − g ] T \boldsymbol g=[0,-g]^T g = [ 0 , − g ] T 。
注意: 若还含有其他机械体力,应将它加到 f \boldsymbol f f 中,但不得因此把 Darcy 定律中的 g \boldsymbol g g 替换为 f / ρ \boldsymbol f/\rho f / ρ 。后者会改变模型中流体受到的作用,不能仅由力学平衡方程推出。
本文使用以下物理符号:
在 b = 1 b=1 b = 1 的设定下,孔压耦合直接使用几何列向量 m \boldsymbol m m ,不再引入独立的张量型 Biot 参数:
m = [ 1 , 1 , 1 , 0 ] T , S = n K f , β T = 3 [ ( 1 − n ) α s + n α f ] , C T = ( 1 − n ) ρ s c s + n ρ f c f . \boldsymbol m=[1,1,1,0]^T,
\qquad S=\frac{n}{K_f},
\qquad \beta_T=3[(1-n)\alpha_s+n\alpha_f],
\qquad C_T=(1-n)\rho_sc_s+n\rho_fc_f. m = [ 1 , 1 , 1 , 0 ] T , S = K f n , β T = 3 [( 1 − n ) α s + n α f ] , C T = ( 1 − n ) ρ s c s + n ρ f c f .
材料参数不带光滑域下标 k k k 。 例如 n , K f , α s , α f , ρ s , ρ f , c s , c f , k f , γ f , k T , S , β T , C T n,K_f,\alpha_s,\alpha_f,\rho_s,\rho_f,c_s,c_f,k_f,\gamma_f,k_T,S,\beta_T,C_T n , K f , α s , α f , ρ s , ρ f , c s , c f , k f , γ f , k T , S , β T , C T 在整个计算域内相同。几何量 V k V_k V k 、局部矩阵 K a b k K_{ab}^k K ab k 、节点向量 U k \boldsymbol U_k U k 及积分点状态 σ k g ′ , C k g e p \boldsymbol\sigma'_{kg},C_{kg}^{\mathrm{ep}} σ k g ′ , C k g ep 仍保留位置索引。均匀材料的各积分点可以经历不同加载路径,因此应力、塑性变量和算法切线未必相同。
本构的四分量应力顺序为 [ r r , z z , θ θ , r z ] [rr,zz,\theta\theta,rz] [ rr , zz , θθ , rz ] ,应变的第 4 项使用工程剪应变 γ r z = 2 ε r z \gamma_{rz}=2\varepsilon_{rz} γ rz = 2 ε rz 。矩阵分量排列与张量所选基的排列必须明确对应,不能混用剪切应变因子。
水力传导系数 k f k_f k f 与导热系数 k T k_T k T 均为常标量。若程序接口需要二维矩阵,则分别传入 k f I 2 k_f I_2 k f I 2 与 k T I 2 k_T I_2 k T I 2 ;I 2 I_2 I 2 是二维单位矩阵,正文公式直接使用标量。以下 Darcy 重力采用给定竖向常量 g = [ 0 , − g ] T \boldsymbol g=[0,-g]^T g = [ 0 , − g ] T ,机械一般体力则允许是已知的 f ( x , t ) \boldsymbol f(\boldsymbol x,t) f ( x , t ) 。
1. 已确定的前提与光滑方案
采用小变形轴对称模型,不考虑绕轴扭转。材料采用第 0 节的均匀、各向同性及 b = 1 b=1 b = 1 设定。r , z r,z r , z 分别为径向、轴向坐标,r ≥ 0 r\geq0 r ≥ 0 ,θ \theta θ 表示环向角度。u , p , T u,p,T u , p , T 分别表示位移、孔隙水压力和温度;B B B 是将节点位移换算为应变的矩阵。位移、孔压和温度整体耦合求解:变形与孔压相互影响,温度变化影响变形和孔压。热对流可通过 Keyword.HeatAdvection 开关选择;第 8 节统一给出含重力的通量、残差和切线。 关闭时,温度方程不依赖位移和孔压;开启时,孔压通过 Darcy 速度影响温度,但仍不加入由变形率、孔压变化率直接产生的热量项,具体见第 8.5 节。实现时逐场检查绝对和相对残差,避免零载荷 patch 的零除;必要时将 Newton 更新减半重试,每次本构试算仍使用上一步已收敛状态。
已确定:所有光滑操作均按四边形子域的实际旋转体积加权。 计算按“平均矩阵(第 4 节)→ 梯度矩阵(第 5 节)→ 虚拟点矩阵(第 6 节)”的顺序展开。
下表汇总本文采用的构造。
2. 先看清光滑域,再区分面积、体积和组装
2.1 一个完整光滑域由哪些部分组成
先选一个网格节点 k k k 。在每个与它相连的三角形中,依次连接“节点 k k k —一侧边的中点—三角形的面积形心—另一侧边的中点”,得到一个四边形。
D k e D_{ke} D k e 是三角形 e e e 内的这一个四边形;D k D_k D k 是围绕节点 k k k 的所有这些四边形合在一起的区域。 下文把三角形 e e e 称为“母三角形”,只是说明 D k e D_{ke} D k e 属于哪个单元。
图 1。 左图中,所有蓝色四边形合起来才是 D k D_k D k 。右图只放大其中一个三角形:蓝色四边形是 D k e D_{ke} D k e ,其余部分属于该三角形另外两个顶点的光滑域。橙色轮廓表示同一个母三角形。一个完整光滑域通常跨越多个三角形,一个子域则只占其中一个三角形的一部分。计算光滑域的矩阵时,要用到这些母三角形的全部节点,包括图中位于蓝色区域外的三角形顶点。
2.2 面积、旋转体积与虚拟点距离
A k e A_{ke} A k e 是四边形 D k e D_{ke} D k e 在 r–z 平面内的面积;V k e V_{ke} V k e 是它绕 z 轴旋转一周后的体积。A k , V k A_k,V_k A k , V k 则分别表示完整光滑域的面积、旋转体积。因此,
A k = ∑ e ∋ k A k e , V k = ∑ e ∋ k V k e \boxed{A_k=\sum_{e\ni k}A_{ke},\qquad V_k=\sum_{e\ni k}V_{ke}} A k = e ∋ k ∑ A k e , V k = e ∋ k ∑ V k e
这里 e ∋ k e\ni k e ∋ k 表示“遍历所有包含节点 k k k 的三角形”。面积和体积都是标量,直接相加即可。
d A = d r d z , d V = 2 π r d A , d S = 2 π r d s . \mathrm{d}A=\mathrm{d}r\mathrm{d}z,\qquad \mathrm{d}V=2\pi r\,\mathrm{d}A,\qquad \mathrm{d}S=2\pi r\,\mathrm{d}s. d A = d r d z , d V = 2 π r d A , d S = 2 π r d s .
A k = ∫ D k d A , V k = ∫ D k 2 π r d A , ℓ k = A k / π . A_k=\int_{D_k}\,\mathrm{d}A,\qquad V_k=\int_{D_k}2\pi r\,\mathrm{d}A,\qquad \ell_k=\sqrt{A_k/\pi}. A k = ∫ D k d A , V k = ∫ D k 2 π r d A , ℓ k = A k / π .
r r r 是到旋转轴的距离,A k A_k A k 是二维面积,V k V_k V k 是旋转一周后的体积,ℓ k \ell_k ℓ k 是构造四个虚拟点矩阵时使用的偏移距离。式中的 d s \mathrm{d}s d s 是平面内的一小段边长,d S \mathrm{d}S d S 是这段边旋转后对应的表面积。当前轴对称代码用 virtualPointDistance = sqrt(domain.area/pi) 计算 ℓ k \ell_k ℓ k ,与径向坐标 r r r 区分。
轴对称内力、刚度等要按体积积分,但不能把代码中每一个面积都换成体积。 例如,ℓ k = A k / π \ell_k=\sqrt{A_k/\pi} ℓ k = A k / π 表示与光滑域面积相等的圆的半径;如果改为 V k / π \sqrt{V_k/\pi} V k / π ,结果的单位就不再是长度。
本文在体积和表面积分中统一保留 2 π 2\pi 2 π :长度用 m、应力用 kPa 时,等效节点力就是 kN。基本应变公式和半径在积分中的位置可参见 FEniCSx 轴对称弹性示例 ;下面有关 SNS 离散的讨论按本笔记中的几何与组装定义展开。
2.3 组装:按节点编号对齐,再相加
本文统一用 Assemble \operatorname{Assemble} Assemble 表示组装。它的意思就是:把对应节点自由度的行或列,按节点编号和自由度类型对齐,再相加。 刚度矩阵需要对齐行和列;B、N、E 只需对齐节点列,它们的应变、标量或梯度分量行保持原顺序。位移的径向与轴向分量、孔压、温度分别对应各自的位置。
例如,只看每个节点的一个标量贡献(数值仅用于示意)。三角形 1 的节点依次为 4、8、12,三角形 2 的节点依次为 4、12、19。按节点编号对应后,组装结果是:
这些数字只用于说明组装。三角形 1 的第 3 个节点和三角形 2 的第 2 个节点都是节点 12,所以对应的 7 和 11 要相加。刚度矩阵组装时,行和列都按这个规则对应。
图 1 说明的是“哪些四边形组成一个光滑域”;组装说明的是“这些单元或光滑域的矩阵怎样对应相加”。
2.4 后文共用的记号
下面几种记号会反复出现:
矩阵块 K a b k K_{ab}^{k} K ab k 的上标 k k k 表示光滑域 k k k 的局部贡献;不带这个上标的 K a b K_{ab} K ab 表示组装后的全局矩阵。下标 a , b a,b a , b 标记方程和未知量,具体对应见第 8 节。正文中的向量用粗体表示;B、N、E 等矩阵则保留与代码接近的字母写法。
本文的试函数(test function)统一使用字母 v,用下标区分方程、粗体区分向量与标量。 力学方程的试函数为虚位移向量 v u = [ v r , v z ] T \boldsymbol v_u=[v_r,v_z]^T v u = [ v r , v z ] T ,其中 v r , v z v_r,v_z v r , v z 分别是径向、轴向分量;孔压方程的试函数为标量 v p v_p v p ;温度方程的试函数为标量 v T v_T v T 。下标 u , p , T u,p,T u , p , T 标明所属方程,各方程中的试函数独立选取。每个弱式前都会说明其含义。
偏导数与标签分开写。 为避免歧义,本文将空间偏导直接展开,例如 ∂ N I ∂ r \frac{\partial N_I}{\partial r} ∂ r ∂ N I 、∂ p ∂ r \frac{\partial p}{\partial r} ∂ r ∂ p ,不用下标逗号表示求导。下列已命名离散量中保留的逗号只分隔标签或索引,不表示再求一次导数 :
上标中的 V , c V,\mathrm c V , c 、V , i n c o m p l e t e V,\mathrm{incomplete} V , incomplete 、a d v , g r a v \mathrm{adv,grav} adv , grav ,以及 K 33 A d v , g r a v K_{33\mathrm{Adv,grav}} K 33 Adv , grav 中的逗号,也只分隔方案或贡献标签。例如 n o u t , r n_{\mathrm{out},r} n out , r 表示外法向的径向分量,其含义与偏导运算不同。函数自变量、向量分量和并列公式之间的普通逗号仍按通常标点理解。
3. 四边形光滑子域的体积如何计算
3.1 三角形的体积可以用三角形中心计算
母三角形顶点为 i , j , l i,j,l i , j , l ,面积为 A e A_e A e ;r i , r j , r l r_i,r_j,r_l r i , r j , r l 是三个顶点的半径,r e c r_{ec} r ec 是三角形面积形心的半径,V e V_e V e 是该三角形旋转一周的体积。因为 r r r 在直边三角形上是线性函数,所以
r e c = r i + r j + r l 3 , V e = 2 π A e r e c r_{ec}=\frac{r_i+r_j+r_l}{3},\qquad V_e=2\pi A_e r_{ec} r ec = 3 r i + r j + r l , V e = 2 π A e r ec
是精确几何公式。
3.2 子域体积一般不是三角形体积的三分之一
本节用 x i e A = [ r i e A , z i e A ] T \boldsymbol x_{ie}^{A}=[r_{ie}^{A},z_{ie}^{A}]^T x i e A = [ r i e A , z i e A ] T 表示四边形子域 D i e D_{ie} D i e 的面积形心坐标向量 ,也就是把整个四边形看成均匀薄片时的重心坐标。下标 i i i 是子域所对应的节点编号,e e e 是母三角形编号;上标 A A A 表示按面积求平均。计算子域实际旋转体积时,使用的是面积形心的径向坐标 r i e A r_{ie}^{A} r i e A 。面积形心一般不同于四个顶点坐标的算术平均 ;后者在第 3.3 节记为 x i e v e r t i c e s \boldsymbol x_{ie}^{\mathrm{vertices}} x i e vertices 。
节点 i i i 对应的四边形依次连接“节点 i i i —边 i j ij ij 中点—三角形中心—边 i l il i l 中点”。它的面积确实是 A e / 3 A_e/3 A e /3 ,面积形心的坐标为:
x i e A = 22 x i + 7 x j + 7 x l 36 . \boldsymbol x_{ie}^{A}=\frac{22\boldsymbol x_i+7\boldsymbol x_j+7\boldsymbol x_l}{36}. x i e A = 36 22 x i + 7 x j + 7 x l .
这里 x i e A \boldsymbol x_{ie}^{A} x i e A 是子域 D i e D_{ie} D i e 的面积形心坐标,A i e = A e / 3 A_{ie}=A_e/3 A i e = A e /3 是子域面积,V i e V_{ie} V i e 是其真实旋转体积。因此
V i e = 2 π A e 3 22 r i + 7 r j + 7 r l 36 . \boxed{V_{ie}=2\pi\frac{A_e}{3}\frac{22r_i+7r_j+7r_l}{36}.} V i e = 2 π 3 A e 36 22 r i + 7 r j + 7 r l .
将四边形沿“节点—三角形中心”分成两个等面积小三角形后分别积分,即可得到这个结果。它满足
V i e + V j e + V l e = V e , V_{ie}+V_{je}+V_{le}=V_e, V i e + V j e + V l e = V e ,
但一般不满足 V i e = V e / 3 V_{ie}=V_e/3 V i e = V e /3 。对子域 i i i ,等式 V i e = V e / 3 V_{ie}=V_e/3 V i e = V e /3 成立的条件是 2 r i = r j + r l 2r_i=r_j+r_l 2 r i = r j + r l 。
例如,取三角形的三个顶点为 ( r , z ) = ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) (r,z)=(0,0),(1,0),(0,1) ( r , z ) = ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) ,按此顺序将顶点局部编号为 1 , 2 , 3 1,2,3 1 , 2 , 3 。三个子域面积相等,但旋转体积分配为
V 1 e V e = 7 36 , V 2 e V e = 22 36 , V 3 e V e = 7 36 . \frac{V_{1e}}{V_e}=\frac{7}{36},\qquad \frac{V_{2e}}{V_e}=\frac{22}{36},\qquad \frac{V_{3e}}{V_e}=\frac{7}{36}. V e V 1 e = 36 7 , V e V 2 e = 36 22 , V e V 3 e = 36 7 .
图 2。 左图按实际坐标画出三个子域,右图用相同颜色比较面积占比和体积占比。这里的分数只对应这个三角形,不是所有网格的固定分配比例。
远离旋转轴的子域,转一圈后扫过的体积更大。另外,轴线节点虽然 r i = 0 r_i=0 r i = 0 ,但它的光滑域仍向轴线外侧延伸,旋转后的体积不为零。
旧手稿中的子域体积计算错误: 旧手稿采用 2 π r e c A k e 2\pi r_{ec}A_{ke} 2 π r ec A k e ,相当于把母三角形的旋转体积平均分成三份,一般不等于各四边形子域的实际体积。本文按子域面积形心的半径计算实际旋转体积,公式见上文。
3.3 四个顶点的平均坐标不等于面积形心(注意)
上述四边形的顶点平均坐标记为 x i e v e r t i c e s \boldsymbol x_{ie}^{\mathrm{vertices}} x i e vertices ,其中上标 v e r t i c e s \mathrm{vertices} vertices 只标明“顶点平均”:
x i e v e r t i c e s = 14 x i + 5 x j + 5 x l 24 , \boldsymbol x_{ie}^{\mathrm{vertices}}=\frac{14\boldsymbol x_i+5\boldsymbol x_j+5\boldsymbol x_l}{24}, x i e vertices = 24 14 x i + 5 x j + 5 x l ,
四个顶点的平均坐标 x i e v e r t i c e s \boldsymbol x_{ie}^{\mathrm{vertices}} x i e vertices 一般不等于第 3.2 节定义的面积形心坐标 x i e A = [ r i e A , z i e A ] T \boldsymbol x_{ie}^{A}=[r_{ie}^{A},z_{ie}^{A}]^T x i e A = [ r i e A , z i e A ] T 。这里 i i i 是子域所对应的节点编号,e e e 是母三角形编号,上标 A A A 表示按面积求平均。x i e A \boldsymbol x_{ie}^{A} x i e A 是把整个四边形子域 D i e D_{ie} D i e 看成均匀薄片时的重心坐标,其中 r i e A r_{ie}^{A} r i e A 是计算该子域实际旋转体积所用的半径。
原 markdown 文件(本讨论整理前的技术笔记)记载,参考函数 Smooth_T3_axisym.m 使用 xc_sub=(x1+xm1+xc+xm3)/4 计算子域中心坐标,并使用 N_ino/center_SD_ino 计算 B 的环向应变行。按这条四点算术平均表达式,代码变量 xc_sub 对应本文的 x i e v e r t i c e s \boldsymbol x_{ie}^{\mathrm{vertices}} x i e vertices ,即四个顶点坐标的平均,一般不等于面积形心 x i e A \boldsymbol x_{ie}^{A} x i e A 。下面分析这两条表达式对环向应变的影响。
按照原 markdown 文件对 N_ino/center_SD_ino 的描述,若分子取型函数的精确面积平均,分母取四个顶点的平均半径,则两者不对应。对第 3.2 节的单三角形、节点 1 和 u r = r u_r=r u r = r ,由此得到 ε θ θ = 14 / 15 \varepsilon_{\theta\theta}=14/15 ε θθ = 14/15 ,正确值应为 1 1 1 。这一结果说明,混用型函数的面积平均与四顶点平均半径会导致环向应变误差。旧手稿中的“子域形心”采用的就是四顶点平均坐标;将其当作四边形子域的面积形心是错误的。
4. 平均 B 矩阵的三种构造
方法一、二都先用母三角形中心矩阵 B e B_e B e 近似单元内的 B,再分别按面积、旋转体积平均。方法三直接对原始 B 做精确旋转体积平均,本文采用方法三。
4.1 方法一:中心矩阵的面积平均(不采用)
对母单元中心矩阵做面积平均,会产生轴对称不平衡内力,因此不采用。 下面给出构造及反例。
母三角形 e e e 的中心半径为 r e c r_{ec} r ec ,中心处的型函数值为 1 / 3 1/3 1/3 。节点 I I I 的径向、轴向位移对应的两列为
B e , I = [ ∂ N I ∂ r 0 0 ∂ N I ∂ z 1 3 r e c 0 ∂ N I ∂ z ∂ N I ∂ r ] . B_{e,I}=\begin{bmatrix}
\dfrac{\partial N_I}{\partial r}&0\\[10pt]
0&\dfrac{\partial N_I}{\partial z}\\[10pt]
\dfrac{1}{3r_{ec}}&0\\[10pt]
\dfrac{\partial N_I}{\partial z}&\dfrac{\partial N_I}{\partial r}
\end{bmatrix}. B e , I = ∂ r ∂ N I 0 3 r ec 1 ∂ z ∂ N I 0 ∂ z ∂ N I 0 ∂ r ∂ N I .
B e B_e B e 由三个节点的列块组成,应变分量顺序为 [ r r , z z , θ θ , r z ] [rr,zz,\theta\theta,rz] [ rr , zz , θθ , rz ] ,第 4 项为工程剪应变。对各四边形子域按面积加权,得到
B ‾ k A = 1 A k Assemble e ∋ k [ A k e B e ] . \overline B_k^A=\frac{1}{A_k}\operatorname*{Assemble}_{e\ni k}\left[A_{ke}B_e\right]. B k A = A k 1 e ∋ k Assemble [ A k e B e ] .
反例: 四个角点为 ( 1 , 0 ) , ( 3 , 0 ) , ( 3 , 2 ) , ( 1 , 2 ) (1,0),(3,0),(3,2),(1,2) ( 1 , 0 ) , ( 3 , 0 ) , ( 3 , 2 ) , ( 1 , 2 ) ,内部点为 ( 1.7 , 0.8 ) (1.7,0.8) ( 1.7 , 0.8 ) ;将内部点与四角连接,得到四个三角形。长度单位为 m,孔压、体力均为零,施加均匀应力
σ r r = σ θ θ = 1 k P a , σ z z = σ r z = 0. \sigma_{rr}=\sigma_{\theta\theta}=1\ \mathrm{kPa},\qquad
\sigma_{zz}=\sigma_{rz}=0. σ rr = σ θθ = 1 kPa , σ zz = σ rz = 0.
外边界施加与该应力对应的面力,内部节点没有外荷载,其合内力应为零。孔压为零时,有效应力 σ ′ \boldsymbol\sigma' σ ′ 等于总应力;各光滑域的骨架内力为
f u , k s k e l = V k ( B ‾ k A ) T σ ′ . \boldsymbol f_{u,k}^{\mathrm{skel}}=V_k(\overline B_k^A)^T\boldsymbol\sigma'. f u , k skel = V k ( B k A ) T σ ′ .
组装后,内部节点的径向内力为 3.4867281154 k N 3.4867281154\ \mathrm{kN} 3.4867281154 kN ,正确值应为零 。这就是该面积平均方法不满足力平衡的反例。
4.2 方法二:中心矩阵的旋转体积平均
仍用同一套 B e B_e B e ,改用各子域的实际旋转体积加权:
B ‾ k V , c = 1 V k Assemble e ∋ k [ V k e B e ] . \overline B_k^{V,\mathrm c}=\frac{1}{V_k}\operatorname*{Assemble}_{e\ni k}\left[V_{ke}B_e\right]. B k V , c = V k 1 e ∋ k Assemble [ V k e B e ] .
上标 c \mathrm c c 表示使用母单元中心值。该方法保持组装后的 B 体积积分:
Assemble k [ V k B ‾ k V , c ] = Assemble e [ V e B e ] . \operatorname*{Assemble}_k\left[V_k\overline B_k^{V,\mathrm c}\right]
=\operatorname*{Assemble}_e\left[V_eB_e\right]. k Assemble [ V k B k V , c ] = e Assemble [ V e B e ] .
对每个母单元,中心环向值满足
V e 1 3 r e c = 2 π A e 3 = ∫ e N I r d V . V_e\frac{1}{3r_{ec}}=\frac{2\pi A_e}{3}
=\int_e\frac{N_I}{r}\,\mathrm{d}V. V e 3 r ec 1 = 3 2 π A e = ∫ e r N I d V .
其余三行的 T3 型函数导数为常数,因此组装后的积分与原始 B 的体积积分相同。应力处处相同时,该方法与原始轴对称 T3 得到相同的节点内力。 在上述反例中,内部节点径向内力为 − 1.8 × 1 0 − 15 k N -1.8\times10^{-15}\ \mathrm{kN} − 1.8 × 1 0 − 15 kN ,即舍入误差范围内的零。
这里保持的是组装后的积分;单个四边形子域内的环向值仍采用母单元中心近似。
4.3 方法三:原始 B 的精确旋转体积平均(本文采用)
直接积分原始位置相关矩阵 B ( r , z ) B(r,z) B ( r , z ) :
B ‾ k V = 1 V k Assemble e ∋ k [ ∫ D k e B ( r , z ) d V ] . \boxed{\overline B_k^V=\frac{1}{V_k}\operatorname*{Assemble}_{e\ni k}
\left[\int_{D_{ke}}B(r,z)\,\mathrm{d}V\right].} B k V = V k 1 e ∋ k Assemble [ ∫ D k e B ( r , z ) d V ] .
B 的第 3 行计算环向应变 ε θ θ = u r / r \varepsilon_{\theta\theta}=u_r/r ε θθ = u r / r 。 其径向位移列的原始系数为 N I / r N_I/r N I / r ,精确平均后记为 h ‾ k I V \overline h_{kI}^V h k I V :
h ‾ k I V = 1 V k ∑ e ∋ k ∫ D k e N I r d V = 2 π V k ∑ e ∋ k ∫ D k e N I d A . \boxed{\overline h_{kI}^V
=\frac{1}{V_k}\sum_{e\ni k}\int_{D_{ke}}\frac{N_I}{r}\,\mathrm{d}V
=\frac{2\pi}{V_k}\sum_{e\ni k}\int_{D_{ke}}N_I\,\mathrm{d}A.} h k I V = V k 1 e ∋ k ∑ ∫ D k e r N I d V = V k 2 π e ∋ k ∑ ∫ D k e N I d A .
这里用 d V = 2 π r d A \mathrm{d}V=2\pi r\,\mathrm{d}A d V = 2 π r d A 抵消了 1 / r 1/r 1/ r 。右端虽写成面积积分,除数仍为真实体积 V k V_k V k ,所以仍是旋转体积平均。节点 I I I 不属于某个母单元时,该单元对该系数的贡献为零。
对本文的“节点—边中点—单元中心—另一边中点”四边形,节点 k , j , l k,j,l k , j , l 按母三角形顺序排列,有
∫ D k e [ N k , N j , N l ] d A = A e 108 [ 22 , 7 , 7 ] . \boxed{\int_{D_{ke}}[N_k,N_j,N_l]\,\mathrm{d}A=\frac{A_e}{108}[22,7,7].} ∫ D k e [ N k , N j , N l ] d A = 108 A e [ 22 , 7 , 7 ] .
平均矩阵第 3 行的径向位移列取 h ‾ k I V \overline h_{kI}^V h k I V ,轴向位移列取零。第 1、2、4 行的型函数导数为常数,其精确体积平均与方法二相同。
图 3。 第 1 步采用方法三,第 4 步使用每点 V k / 4 V_k/4 V k /4 的体积权重。有效应力由本构更新得到,输入的位移、温度增量均从上一步已收敛状态算起 。四个虚拟点的骨架内力分别计算后组装,孔压内力另行组装。
5. 光滑梯度的构造
第 4 节已给出平均矩阵 B ‾ k V \overline B_k^V B k V ;本节构造径向、轴向两个梯度矩阵。它们是分别计算的离散量,最后在第 6.1 节组合成虚拟点矩阵。下面依次说明梯度的记号、输入矩阵和计算公式。
5.1 梯度的记号与节点列排列
径向、轴向梯度矩阵分别记为 G B , r , k V G_{B,r,k}^V G B , r , k V 、G B , z , k V G_{B,z,k}^V G B , z , k V ,上标 V V V 表示体积加权。下标依次标明矩阵种类 B、方向 r 或 z、光滑域编号 k k k ;逗号只分隔标签,不表示求导。后面的 G E , r , k V , G E , z , k V G_{E,r,k}^V,G_{E,z,k}^V G E , r , k V , G E , z , k V 也采用这一顺序。
B ^ \widehat B B 表示梯度积分所使用的母单元矩阵,其取值在第 5.2 节给出。积分前,各母单元矩阵的列都按光滑域 k k k 的节点顺序排列;该单元不含的节点对应列补零 。
∂ D k \partial D_k ∂ D k 是光滑域边界,n o u t = [ n o u t , r , n o u t , z ] T \boldsymbol n_{\mathrm{out}}=[n_{\mathrm{out},r},n_{\mathrm{out},z}]^T n out = [ n out , r , n out , z ] T 是其单位外法向,两个分量分别对应径向、轴向。
5.2 梯度计算所用的母单元中心矩阵
本文在每个母三角形内取 B ^ = B e \widehat B=B_e B = B e ,其中 B e B_e B e 是第 4.1 节的母单元中心矩阵,并按第 5.1 节对齐节点列。 对属于该三角形的节点 I I I ,中心点 ( r e c , z e c ) (r_{ec},z_{ec}) ( r ec , z ec ) 处有
N I ( r e c , z e c ) = 1 3 , N I r ∣ ( r e c , z e c ) = 1 3 r e c . N_I(r_{ec},z_{ec})=\frac13,\qquad
\left.\frac{N_I}{r}\right|_{(r_{ec},z_{ec})}=\frac{1}{3r_{ec}}. N I ( r ec , z ec ) = 3 1 , r N I ( r ec , z ec ) = 3 r ec 1 .
因此,B ^ \widehat B B 的第 3 行径向位移列取 1 / ( 3 r e c ) 1/(3r_{ec}) 1/ ( 3 r ec ) ,轴向位移列取零;其余行使用该 T3 单元的常数型函数导数。
每个母三角形内部的 B ^ \widehat B B 是常数,相邻三角形的取值一般不同。第 5.3 节的公式计入这些跨单元的差别。不能仅因各母单元内的矩阵为常数,就把光滑梯度设为零。
5.3 体积加权梯度与径向修正
先用一般矩阵场 B B B 推导,暂不指定其离散取值。在下列积分存在时,径向光滑梯度定义为 ∂ B / ∂ r \partial B/\partial r ∂ B / ∂ r 的体积平均。
乘积法则:
2 π r ∂ B ∂ r = ∂ ( 2 π r B ) ∂ r − 2 π B . 2\pi r\frac{\partial B}{\partial r}
=\frac{\partial(2\pi rB)}{\partial r}-2\pi B. 2 π r ∂ r ∂ B = ∂ r ∂ ( 2 π r B ) − 2 π B .
将它代入体积平均,再对每个矩阵分量使用二维散度定理 ,得到
1 V k ∫ D k ∂ B ∂ r d V = 1 V k ∫ D k ∂ B ∂ r 2 π r d A = 1 V k ∫ D k [ ∂ ( 2 π r B ) ∂ r − 2 π B ] d A = 1 V k [ ∫ ∂ D k 2 π r B n o u t , r d s − ∫ D k 2 π B d A ] . \begin{aligned}
\frac{1}{V_k}\int_{D_k}\frac{\partial B}{\partial r}\,\mathrm{d}V
&=\frac{1}{V_k}\int_{D_k}\frac{\partial B}{\partial r}\,2\pi r\,\mathrm{d}A\\
&=\frac{1}{V_k}\int_{D_k}
\left[\frac{\partial(2\pi rB)}{\partial r}-2\pi B\right]\mathrm{d}A\\
&=\frac{1}{V_k}\left[
\int_{\partial D_k}2\pi rB\,n_{\mathrm{out},r}\,\mathrm{d}s
-\int_{D_k}2\pi B\,\mathrm{d}A\right].
\end{aligned} V k 1 ∫ D k ∂ r ∂ B d V = V k 1 ∫ D k ∂ r ∂ B 2 π r d A = V k 1 ∫ D k [ ∂ r ∂ ( 2 π r B ) − 2 π B ] d A = V k 1 [ ∫ ∂ D k 2 π r B n out , r d s − ∫ D k 2 π B d A ] .
这就是径向修正项的来源。轴向推导相同,但 r r r 不随 z z z 变化,因此没有对应的域内修正项。对跨单元分片不连续的 B B B ,这里的导数按包含单元间跳跃的弱导数理解。
注意: 若直接代入原始环向项,域内积分含有 ∫ N I / r d A \int N_I/r\,\mathrm{d}A ∫ N I / r d A 。当子域沿轴线有一段边界,且 N I N_I N I 在该段非零时,这个积分对数发散,没有有限值。
离散计算时,将边界项和域内项中的 B B B 同时替换为第 5.2 节的母单元中心矩阵 B ^ \widehat B B 。其中的 1 / ( 3 r e c ) 1/(3r_{ec}) 1/ ( 3 r ec ) 有限,可避免上述奇异性,得到
G B , r , k V = 1 V k [ ∫ ∂ D k 2 π r B ^ n o u t , r d s − ∫ D k 2 π B ^ d A ] , \boxed{G_{B,r,k}^{V}=\frac{1}{V_k}\left[\int_{\partial D_k}2\pi r\widehat B\,n_{\mathrm{out},r}\,\mathrm{d}s-\int_{D_k}2\pi\widehat B\,\mathrm{d}A\right],} G B , r , k V = V k 1 [ ∫ ∂ D k 2 π r B n out , r d s − ∫ D k 2 π B d A ] ,
G B , z , k V = 1 V k ∫ ∂ D k 2 π r B ^ n o u t , z d s . \boxed{G_{B,z,k}^{V}=\frac{1}{V_k}\int_{\partial D_k}2\pi r\widehat B\,n_{\mathrm{out},z}\,\mathrm{d}s.} G B , z , k V = V k 1 ∫ ∂ D k 2 π r B n out , z d s .
注意: 边界积分和域内积分必须使用第 5.2 节给定的同一套 B ^ \widehat B B 。域内积分按 Assemble e ∋ k [ 2 π A k e B e ] \operatorname*{Assemble}_{e\ni k}\left[2\pi A_{ke}B_e\right] Assemble e ∋ k [ 2 π A k e B e ] 组装,不能替换成 2 π A k B ‾ k V 2\pi A_k\overline B_k^V 2 π A k B k V 。
均匀应变再现检查: 给节点施加位移场 u r = ε r 0 r u_r=\varepsilon_{r0}r u r = ε r 0 r 、u z = ε z 0 z + u z 0 u_z=\varepsilon_{z0}z+u_{z0} u z = ε z 0 z + u z 0 ,其中 ε r 0 , ε z 0 , u z 0 \varepsilon_{r0},\varepsilon_{z0},u_{z0} ε r 0 , ε z 0 , u z 0 均为常数,应得到恒定应变
ε 0 = [ ε r 0 , ε z 0 , ε r 0 , 0 ] T . \boldsymbol\varepsilon_0=[\varepsilon_{r0},\varepsilon_{z0},\varepsilon_{r0},0]^T. ε 0 = [ ε r 0 , ε z 0 , ε r 0 , 0 ] T .
此时 B ^ U k = ε 0 \widehat B\boldsymbol U_k=\boldsymbol\varepsilon_0 B U k = ε 0 在光滑域内处处相同,径向、轴向应变梯度都应为零。以非零的 ε 0 \boldsymbol\varepsilon_0 ε 0 为例,省略径向公式的第二项却会得到
G B , r , k V , i n c o m p l e t e U k = 1 V k [ ∫ ∂ D k 2 π r B ^ n o u t , r d s ] U k = 1 V k ∫ ∂ D k 2 π r ( B ^ U k ) n o u t , r d s = 2 π V k [ ∫ ∂ D k r n o u t , r d s ] ε 0 = 2 π V k [ ∫ D k ∂ r ∂ r d A ] ε 0 = 2 π V k [ ∫ D k 1 d A ] ε 0 = 2 π A k V k ε 0 ≠ 0 . \begin{aligned}
G_{B,r,k}^{V,\mathrm{incomplete}}\boldsymbol U_k
&=\frac{1}{V_k}\left[\int_{\partial D_k}2\pi r\widehat B\,n_{\mathrm{out},r}\,\mathrm{d}s\right]\boldsymbol U_k\\
&=\frac{1}{V_k}\int_{\partial D_k}2\pi r(\widehat B\boldsymbol U_k)n_{\mathrm{out},r}\,\mathrm{d}s\\
&=\frac{2\pi}{V_k}\left[\int_{\partial D_k}r n_{\mathrm{out},r}\,\mathrm{d}s\right]\boldsymbol\varepsilon_0\\
&=\frac{2\pi}{V_k}\left[\int_{D_k}\frac{\partial r}{\partial r}\,\mathrm{d}A\right]\boldsymbol\varepsilon_0\\
&=\frac{2\pi}{V_k}\left[\int_{D_k}1\,\mathrm{d}A\right]\boldsymbol\varepsilon_0\\
&=\frac{2\pi A_k}{V_k}\boldsymbol\varepsilon_0\ne\boldsymbol 0.
\end{aligned} G B , r , k V , incomplete U k = V k 1 [ ∫ ∂ D k 2 π r B n out , r d s ] U k = V k 1 ∫ ∂ D k 2 π r ( B U k ) n out , r d s = V k 2 π [ ∫ ∂ D k r n out , r d s ] ε 0 = V k 2 π [ ∫ D k ∂ r ∂ r d A ] ε 0 = V k 2 π [ ∫ D k 1 d A ] ε 0 = V k 2 π A k ε 0 = 0 .
这里先代入 B ^ U k = ε 0 \widehat B\boldsymbol U_k=\boldsymbol\varepsilon_0 B U k = ε 0 ,将常量应变提出积分;再用二维散度定理将边界积分转为面积积分,并利用 ∂ r / ∂ r = 1 \partial r/\partial r=1 ∂ r / ∂ r = 1 。上标 i n c o m p l e t e \mathrm{incomplete} incomplete 表示漏掉径向第二项的计算结果。也就是说,本来没有变化的应变会被算成有径向变化,四个虚拟点的应力和刚度因此受到影响。加上第二项后,结果才为零。
使用完整公式后,两个应变梯度均为零;第 4.3 节的平均矩阵也给出 ε 0 \boldsymbol\varepsilon_0 ε 0 。因此,第 6.1 节由平均矩阵加减梯度项构造的四个虚拟点,都得到同一个正确的均匀应变。
压力、温度所用的 E 矩阵及其体积加权梯度见第 7 节。
6. 四个虚拟点、V/4 与真实体积积分
6.1 四个虚拟点及其体积权重
按已确定的体积加权方案,使用第 4.3 节的平均矩阵和第 5.3 节的近似梯度,四个虚拟点的 B 矩阵写为:
B ~ k 1 = B ‾ k V − ℓ k G B , r , k V , B ~ k 2 = B ‾ k V + ℓ k G B , r , k V , B ~ k 3 = B ‾ k V − ℓ k G B , z , k V , B ~ k 4 = B ‾ k V + ℓ k G B , z , k V . \begin{aligned}
\widetilde B_{k1}&=\overline B_k^V-\ell_kG_{B,r,k}^V,\qquad \widetilde B_{k2}=\overline B_k^V+\ell_kG_{B,r,k}^V,\\
\widetilde B_{k3}&=\overline B_k^V-\ell_kG_{B,z,k}^V,\qquad \widetilde B_{k4}=\overline B_k^V+\ell_kG_{B,z,k}^V.
\end{aligned} B k 1 B k 3 = B k V − ℓ k G B , r , k V , B k 2 = B k V + ℓ k G B , r , k V , = B k V − ℓ k G B , z , k V , B k 4 = B k V + ℓ k G B , z , k V .
W k g = V k / 4 , 1 4 ∑ g = 1 4 B ~ k g = B ‾ k V . W_{kg}=V_k/4,\qquad \frac14\sum_{g=1}^4\widetilde B_{kg}=\overline B_k^V. W k g = V k /4 , 4 1 g = 1 ∑ 4 B k g = B k V .
W k g W_{kg} W k g 是第 g g g 个虚拟点的体积积分权重,单位是体积。点 1、2、3、4 依次对应径向负、径向正、轴向负、轴向正的偏移。四个点的权重都为正,四个 B 相加除以四,正好得到平均的 NS 矩阵。下文的 r k r_k r k 表示光滑域 k k k 的中心节点到旋转轴的距离,r g r_g r g 表示示意点的径向坐标(省略所属光滑域 k k k )。每个虚拟点分别保存一套塑性状态变量。
用了 V k / 4 V_k/4 V k /4 ,就不能再乘 2 π r g 2\pi r_g 2 π r g 。 因为计算体积时已经乘过半径,再乘就是重复计算。本文的权重也不能用 2 π r g A k / 4 2\pi r_gA_k/4 2 π r g A k /4 替代:若四个点围绕节点对称布置,四个权重之和是 2 π r k A k 2\pi r_kA_k 2 π r k A k ,通常不等于光滑域的实际体积 V k V_k V k ,轴线附近还可能出现零权重或负权重。
6.2 “四点乘体积”并不自动等于真实域上的精确积分
如果希望四个点精确计算随位置变化的 B 所产生的积分,仅让四个权重之和等于 V k V_k V k 还不够。例如,计算刚度时,B 的分量会两两相乘,会出现位置偏移量的平方,因此还要检查这些平方项的积分是否正确。即使只看面积为 A k A_k A k 、半径为 ℓ k \ell_k ℓ k 的均匀二维圆盘,四个等权点放在圆周上时,径向偏移量的平方平均值也是(δ r g \delta r_g δ r g 是第 g g g 点相对圆盘中心的径向坐标差,δ r \delta r δr 是盘内一般位置的同类坐标差):
1 4 ∑ g δ r g 2 = ℓ k 2 2 , \frac14\sum_g\delta r_g^2=\frac{\ell_k^2}{2}, 4 1 g ∑ δ r g 2 = 2 ℓ k 2 ,
真实圆盘区域在积分下标中记为 d i s k \mathrm{disk} disk ,它满足
1 A k ∫ d i s k δ r 2 d A = ℓ k 2 4 . \frac{1}{A_k}\int_{\mathrm{disk}}\delta r^2\,\mathrm{d}A=\frac{\ell_k^2}{4}. A k 1 ∫ disk δ r 2 d A = 4 ℓ k 2 .
四点规则给出的二阶矩是上述圆盘精确值的两倍,因此它不精确积分该圆盘的二阶矩。ℓ k = A k / π \ell_k=\sqrt{A_k/\pi} ℓ k = A k / π 配合四个等权点,规定了 SNS 梯度项对刚度的贡献大小。保留这一布点与权重,也就保留了原 SNS 的梯度稳定化构造。
本文保留 ℓ k = A k / π \ell_k=\sqrt{A_k/\pi} ℓ k = A k / π 的点距和每点 V k / 4 V_k/4 V k /4 的权重。
6.3 靠轴线的“负半径虚拟点”如何理解
本文采用位于 r ≥ 0 r\geq0 r ≥ 0 区域的非退化 T3 网格,因此母单元面积 A e > 0 A_e>0 A e > 0 、中心半径 r e c > 0 r_{ec}>0 r ec > 0 ,光滑域实际旋转体积 V k > 0 V_k>0 V k > 0 。预计算 B 及其梯度时,分母来自这些真实几何量。虚拟点的 B 直接按第 6.1 节的四个公式组合,无须在虚拟点坐标处重新求型函数。即使示意图上出现 r k − ℓ k < 0 r_k-\ell_k<0 r k − ℓ k < 0 ,这个示意半径也不进入 N / r N/r N / r 求值或积分权重;内力计算使用组合后的矩阵和正权重 V k / 4 V_k/4 V k /4 。
注意: 虚拟点矩阵按第 6.1 节直接组合。不要在负半径处重新求型函数,也不能将示意半径改成 ∣ r g ∣ \lvert r_g\rvert ∣ r g ∣ 后用于求值或积分。
7. 温度应变,以及压力、温度梯度如何处理
7.1 保留 SNS 的四点 E 矩阵
本文用 SNS 虚拟点矩阵计算渗流和热传导。为区分不同的 E,本文记原始 T3 型函数梯度为 E e = ∇ N e E_e=\nabla N_e E e = ∇ N e ,常数 NS 矩阵为 E ‾ k \overline E_k E k ,SNS 虚拟点矩阵为 E ~ k g \widetilde E_{kg} E k g ;其中 k , g k,g k , g 分别标明光滑域和虚拟点。四点矩阵由平均 E 加减相应方向的梯度项得到。
热传导使用四点 E ~ k g \widetilde E_{kg} E k g ,热容量使用原始 T3 型函数。关闭热对流时,温度方程不依赖 u , p u,p u , p ;开启后,仍用四点 E ~ k g \widetilde E_{kg} E k g 计算 Darcy 速度和温度梯度,新增项见第 8.5 节。温度方程不额外加入 PPP 项,E 中的 SNS 梯度项保留。节点光滑在瞬态导热中也可能出现积分不足造成的数值问题,保留这些梯度项有依据,见 Cui 等关于稳态与瞬态导热的研究 。
7.2 体积平均的温度与其梯度
采用前面的体积方案,统一定义
N ‾ k V = 1 V k Assemble e ∋ k [ ∫ D k e N e d V ] , E ‾ k V = 1 V k Assemble e ∋ k [ ∫ D k e ∇ N e d V ] . \begin{aligned}
\overline N_k^V&=\frac{1}{V_k}\operatorname*{Assemble}_{e\ni k}\left[\int_{D_{ke}}N_e\,\mathrm{d}V\right],\\
\overline E_k^V&=\frac{1}{V_k}\operatorname*{Assemble}_{e\ni k}\left[\int_{D_{ke}}\nabla N_e\,\mathrm{d}V\right].
\end{aligned} N k V E k V = V k 1 e ∋ k Assemble [ ∫ D k e N e d V ] , = V k 1 e ∋ k Assemble [ ∫ D k e ∇ N e d V ] .
T3 的 ∇ N e \nabla N_e ∇ N e 在母单元内为常数,后一式可以直接用子域体积加权。注意: E ‾ k V \overline E_k^V E k V 是“先求导、再平均”,不应当对已经存为常数的 N ‾ k V \overline N_k^V N k V 直接求导而得到零。
这里 ∇ = ( ∂ r , ∂ z ) T \nabla=(\partial_r,\partial_z)^T ∇ = ( ∂ r , ∂ z ) T ,∂ r , ∂ z \partial_r,\partial_z ∂ r , ∂ z 分别表示对 r , z r,z r , z 求偏导。E ‾ r , k V \overline E_{r,k}^V E r , k V 、E ‾ z , k V \overline E_{z,k}^V E z , k V 分别是平均梯度矩阵 E ‾ k V \overline E_k^V E k V 的第一行、第二行。继续定义
N ~ k 1 = N ‾ k V − ℓ k E ‾ r , k V , N ~ k 2 = N ‾ k V + ℓ k E ‾ r , k V , N ~ k 3 = N ‾ k V − ℓ k E ‾ z , k V , N ~ k 4 = N ‾ k V + ℓ k E ‾ z , k V . \begin{aligned}
\widetilde N_{k1}&=\overline N_k^V-\ell_k\overline E_{r,k}^V,\qquad \widetilde N_{k2}=\overline N_k^V+\ell_k\overline E_{r,k}^V,\\
\widetilde N_{k3}&=\overline N_k^V-\ell_k\overline E_{z,k}^V,\qquad \widetilde N_{k4}=\overline N_k^V+\ell_k\overline E_{z,k}^V.
\end{aligned} N k 1 N k 3 = N k V − ℓ k E r , k V , N k 2 = N k V + ℓ k E r , k V , = N k V − ℓ k E z , k V , N k 4 = N k V + ℓ k E z , k V .
Δ ε k g t h = α s m N ~ k g Δ T k , m = [ 1 , 1 , 1 , 0 ] T . \Delta\boldsymbol\varepsilon_{kg}^{\mathrm{th}}=\alpha_s\boldsymbol m\widetilde N_{kg}\Delta\boldsymbol T_k,\qquad \boldsymbol m=[1,1,1,0]^T. Δ ε k g th = α s m N k g Δ T k , m = [ 1 , 1 , 1 , 0 ] T .
α s \alpha_s α s 是固体的线膨胀系数;m = [ 1 , 1 , 1 , 0 ] T \boldsymbol m=[1,1,1,0]^T m = [ 1 , 1 , 1 , 0 ] T 将标量热膨胀量放入三个正应变分量,并使剪应变为零。Δ ε k g t h \Delta\boldsymbol\varepsilon_{kg}^{\mathrm{th}} Δ ε k g th 是第 g g g 个虚拟点的热应变增量,上标 t h \mathrm{th} th 表示热应变。这里的 N ~ k g \widetilde N_{kg} N k g 将节点温度增量换算成该点用于计算热应变的温度增量。它由平均温度矩阵加减梯度项得到,不需要判断虚拟点落在哪个三角形里,再去求那个三角形的型函数。
均匀温升时必须有 N ‾ k V 1 = 1 \overline N_k^V\boldsymbol 1=1 N k V 1 = 1 、E ‾ k V 1 = 0 \overline E_k^V\boldsymbol 1=\boldsymbol 0 E k V 1 = 0 ,其中 1 \boldsymbol 1 1 是与节点数量对应的全 1 列向量,所以四个虚拟点获得相同热应变。在本文均匀材料假设下,无初始应力、无机械体力、无额外机械约束,且孔压保持 p = 0 p=0 p = 0 时,自由膨胀位移为 u r = α s Δ T r , u z = α s Δ T z u_r=\alpha_s\Delta T r,\ u_z=\alpha_s\Delta T z u r = α s Δ T r , u z = α s Δ T z (Δ T \Delta T Δ T 为均匀温升)。此时总应变减去热应变得到的机械应变为零,包括环向分量。注意: 不排水升温可能产生孔压,不能直接套用这一自由膨胀检查。
7.3 压力、温度的梯度没有 N/r 行
压力和温度的梯度仍然只有径向和轴向两个分量。轴对称给扩散方程带来的半径因子,已经包含在体积积分中。以热传导项为例:D D D 表示整个 r–z 计算域,k T k_T k T 是常标量导热系数,v T v_T v T 是温度方程弱式中的标量试函数,在规定温度的边界上为零。它不是温度 T T T ,也不是时间步温度增量 Δ T \Delta T Δ T :
∫ D ( ∇ v T ) T k T ∇ T 2 π r d A . \int_D(\nabla v_T)^Tk_T\nabla T\,2\pi r\,\mathrm{d}A. ∫ D ( ∇ v T ) T k T ∇ T 2 π r d A .
上式已经考虑圆柱坐标的影响,不能再给热传导或 Darcy 的梯度矩阵添加一个类似机械环向应变的 N / r N/r N / r 行,也不需要在刚度里重复增加 1 / r 1/r 1/ r 项。
E 的体积加权梯度同样需要径向修正。 记 G E , r , k V , G E , z , k V G_{E,r,k}^{V},G_{E,z,k}^{V} G E , r , k V , G E , z , k V 为计算四点 E 时使用的径向、轴向变化矩阵。对 E 应用第 5.3 节的乘积法则与散度定理,得到
G E , r , k V = 1 V k [ ∫ ∂ D k 2 π r E ^ n o u t , r d s − ∫ D k 2 π E ^ d A ] , G E , z , k V = 1 V k ∫ ∂ D k 2 π r E ^ n o u t , z d s . \begin{aligned}
G_{E,r,k}^{V}&=\frac{1}{V_k}\left[\int_{\partial D_k}2\pi r\widehat E\,n_{\mathrm{out},r}\,\mathrm{d}s-\int_{D_k}2\pi\widehat E\,\mathrm{d}A\right],\\
G_{E,z,k}^{V}&=\frac{1}{V_k}\int_{\partial D_k}2\pi r\widehat E\,n_{\mathrm{out},z}\,\mathrm{d}s.
\end{aligned} G E , r , k V G E , z , k V = V k 1 [ ∫ ∂ D k 2 π r E n out , r d s − ∫ D k 2 π E d A ] , = V k 1 ∫ ∂ D k 2 π r E n out , z d s .
这里 E ^ \widehat E E 在每个母三角形内取该单元的 E e E_e E e ;各矩阵的节点列同样先按光滑域 k k k 的节点顺序排列,缺少的列补零 。它不含 N / r N/r N / r ,而且在直边 T3 内是常数,所以新增的面积积分可以按各子域精确求和。没有 N / r N/r N / r ,不代表可以省略径向修正:这个修正来自体积权重中的 r。 若积分时的 E ^ \widehat E E 处处相同,径向公式中的两项恰好抵消,结果为零。
例如前两个虚拟点使用
E ~ k 1 = E ‾ k V − ℓ k G E , r , k V , E ~ k 2 = E ‾ k V + ℓ k G E , r , k V . \widetilde E_{k1}=\overline E_k^V-\ell_kG_{E,r,k}^{V},\qquad \widetilde E_{k2}=\overline E_k^V+\ell_kG_{E,r,k}^{V}. E k 1 = E k V − ℓ k G E , r , k V , E k 2 = E k V + ℓ k G E , r , k V .
第 3、4 点分别减去、加上轴向项 ℓ k G E , z , k V \ell_kG_{E,z,k}^{V} ℓ k G E , z , k V 。这里算的是相邻单元 E 值的空间变化,不是对已经存成常数的 E ‾ k V \overline E_k^V E k V 直接求导。热应变中用于构造四点温度的 E ‾ k V \overline E_k^V E k V 仍按第 7.2 节使用。
8. 内力、残差与刚度应该怎样一起修改
下面逐块说明单一均匀、各向同性且 b = 1 b=1 b = 1 时的公式。矩阵块下标中的 1 , 2 , 3 1,2,3 1 , 2 , 3 依次对应位移、孔压、温度:第一个数字表示方程,第二个数字表示求导的未知量;关闭对流时各块的实际正负号见第 8.4 节,开启后的新增项见第 8.5 节。m = [ 1 , 1 , 1 , 0 ] T \boldsymbol m=[1,1,1,0]^T m = [ 1 , 1 , 1 , 0 ] T 是几何列向量,用来取三个法向应变之和,或将同一标量放入三个法向分量;孔压耦合使用它并不引入额外的材料参数。
所有光滑域使用同一组材料参数,但各虚拟点的应力、塑性变量和算法切线 C k g e p C_{kg}^{\mathrm{ep}} C k g ep 可以不同。C k g e p C_{kg}^{\mathrm{ep}} C k g ep 是本构返回的 4 × 4 4\times4 4 × 4 算法切线矩阵,即有效应力对机械应变试算增量的导数;上标 e p \mathrm{ep} ep 表示弹塑性,处于弹性时它就是弹性矩阵。因此这里保留状态索引 k g kg k g ,不能因材料均匀就把所有积分点的切线当作同一常矩阵。局部矩阵仍按节点编号组装。
8.1 骨架内力、K11 与 K13
Δ ε k g m e c h = B ~ k g Δ U k − α s m N ~ k g Δ T k , \Delta\boldsymbol\varepsilon_{kg}^{\mathrm{mech}}=\widetilde B_{kg}\Delta\boldsymbol U_k-\alpha_s\boldsymbol m\widetilde N_{kg}\Delta\boldsymbol T_k, Δ ε k g mech = B k g Δ U k − α s m N k g Δ T k ,
f u , k s k e l = ∑ g W k g B ~ k g T σ k g ′ , \boldsymbol f_{u,k}^{\mathrm{skel}}=\sum_gW_{kg}\widetilde B_{kg}^T\boldsymbol\sigma'_{kg}, f u , k skel = g ∑ W k g B k g T σ k g ′ ,
K 11 k = ∑ g W k g B ~ k g T C k g e p B ~ k g , K 13 k = ∑ g W k g B ~ k g T C k g e p α s m N ~ k g . K_{11}^k=\sum_gW_{kg}\widetilde B_{kg}^TC_{kg}^{\mathrm{ep}}\widetilde B_{kg},\qquad K_{13}^k=\sum_gW_{kg}\widetilde B_{kg}^TC_{kg}^{\mathrm{ep}}\alpha_s\boldsymbol m\widetilde N_{kg}. K 11 k = g ∑ W k g B k g T C k g ep B k g , K 13 k = g ∑ W k g B k g T C k g ep α s m N k g .
Δ ε k g m e c h \Delta\boldsymbol\varepsilon_{kg}^{\mathrm{mech}} Δ ε k g mech 是扣除热应变后的机械应变增量,上标 m e c h \mathrm{mech} mech 表示机械部分;f u , k s k e l \boldsymbol f_{u,k}^{\mathrm{skel}} f u , k skel 是光滑域 k k k 的骨架内力贡献,下标 u u u 表示力学方程。K 11 k K_{11}^k K 11 k 是该域的力学切线贡献,K 13 k K_{13}^k K 13 k 是温度经热应变影响力学方程的耦合贡献。由于总应变要扣除热应变,温度项带负号,因此全局矩阵中的对应块是 − K 13 -K_{13} − K 13 。内力与切线必须使用同一组 B ~ k g , N ~ k g , W k g \widetilde B_{kg},\widetilde N_{kg},W_{kg} B k g , N k g , W k g 。
J2、DP 等本构均使用这一组装形式。每轮 Newton 迭代都从上一个已收敛时间步的状态出发,由 UMAT 计算本轮试算的应力和算法切线。只有当前时间步收敛后,才保存四个虚拟点的本构状态,供下一步使用。MEX 使用预先算好的几何矩阵、组装所需的材料参数和最新算法切线,不负责本构更新。
8.2 K12 与 K21:使用平均矩阵
定义型函数的体积积分行向量 I N , k V I_{N,k}^V I N , k V ;这里的 I I I 只是积分结果的名称,不是单位矩阵,也不是节点编号:
I N , k V = Assemble e ∋ k [ ∫ D k e N e 2 π r d A ] . I_{N,k}^{V}=\operatorname*{Assemble}_{e\ni k}\left[\int_{D_{ke}}N_e\,2\pi r\,\mathrm{d}A\right]. I N , k V = e ∋ k Assemble [ ∫ D k e N e 2 π r d A ] .
则
K 12 k = ( B ‾ k V ) T m I N , k V , K 21 k = ( K 12 k ) T . \boxed{K_{12}^k=(\overline B_k^V)^T\boldsymbol m I_{N,k}^{V},\qquad K_{21}^k=(K_{12}^k)^T.} K 12 k = ( B k V ) T m I N , k V , K 21 k = ( K 12 k ) T .
此处使用第 4.3 节的平均矩阵 B ‾ k V \overline B_k^V B k V ;它在光滑域内为常数,可以移到积分外面,剩下只对原始 T3 的 N 积分。这里不需要计算四个虚拟点处的原始 T3 型函数。按第 6 节的加减梯度写法,B ‾ k V \overline B_k^V B k V 也正好等于四个 B ~ k g \widetilde B_{kg} B k g 的平均。组装后仍有 K 21 = K 12 T K_{21}=K_{12}^T K 21 = K 12 T 。
由第 7.2 节的 N ‾ k V = I N , k V / V k \overline N_k^V=I_{N,k}^{V}/V_k N k V = I N , k V / V k ,K 12 k K_{12}^k K 12 k 等价于 V k ( B ‾ k V ) T m N ‾ k V V_k(\overline B_k^V)^T\boldsymbol m\overline N_k^V V k ( B k V ) T m N k V 。
注意: 将面积平均 N ‾ k A \overline N_k^A N k A 乘以 V k V_k V k ,通常不等于所需的体积积分。
机械方程中的孔压项保持 − K 12 P -K_{12}\boldsymbol P − K 12 P ,流体方程中的变形项保持 K 21 Δ U K_{21}\Delta\boldsymbol U K 21 Δ U 。即使孔压处处相同,总应力中的 − p m -p\boldsymbol m − p m 及边界上施加的力仍需共同满足平衡。规定孔压仍不会自动施加机械壁面压力 。
8.3 储水、热容量、温度引起的孔压变化与扩散
令
M k V = Assemble e ∋ k [ ∫ D k e N e T N e d V ] , M_k^V=\operatorname*{Assemble}_{e\ni k}\left[\int_{D_{ke}}N_e^TN_e\,\mathrm{d}V\right], M k V = e ∋ k Assemble [ ∫ D k e N e T N e d V ] ,
这里 M k V M_k^V M k V 就是把原始 T3 型函数的乘积按体积积分后得到的矩阵 (但注意积分区域不是一整个三角形)。以下材料系数在整个域内相同,均不带 k k k ;下标 s , f s,f s , f 分别标记固体颗粒、孔隙流体:
S = n K f , S=\frac{n}{K_f}, S = K f n ,
β T = 3 [ ( 1 − n ) α s + n α f ] , C T = ( 1 − n ) ρ s c s + n ρ f c f . \beta_T=3[(1-n)\alpha_s+n\alpha_f],\qquad C_T=(1-n)\rho_sc_s+n\rho_fc_f. β T = 3 [( 1 − n ) α s + n α f ] , C T = ( 1 − n ) ρ s c s + n ρ f c f .
则
K 22 S k = S M k V , K 23 k = β T M k V , K 33 X k = C T M k V , K_{22S}^k=SM_k^V,\qquad K_{23}^k=\beta_TM_k^V,\qquad K_{33X}^k=C_TM_k^V, K 22 S k = S M k V , K 23 k = β T M k V , K 33 X k = C T M k V ,
K 22 P k = k f γ f ∑ g W k g E ~ k g T E ~ k g , K 33 G k = k T ∑ g W k g E ~ k g T E ~ k g . K_{22P}^k=\frac{k_f}{\gamma_f}\sum_gW_{kg}\widetilde E_{kg}^T\widetilde E_{kg},\qquad K_{33G}^k=k_T\sum_gW_{kg}\widetilde E_{kg}^T\widetilde E_{kg}. K 22 P k = γ f k f g ∑ W k g E k g T E k g , K 33 G k = k T g ∑ W k g E k g T E k g .
K 22 S K_{22S} K 22 S 、K 22 P K_{22P} K 22 P 分别为储水、Darcy 流动矩阵,K 23 K_{23} K 23 为温度引起流体含量变化的耦合矩阵,K 33 X K_{33X} K 33 X 、K 33 G K_{33G} K 33 G 分别为热容量、热传导矩阵。下标字母 S , P , X , G S,P,X,G S , P , X , G 沿用代码中的矩阵名称,不是额外的物理变量。轴对称模型仍有三个法向应变和应力分量。这里 m T m = 3 \boldsymbol m^T\boldsymbol m=3 m T m = 3 ,所以体应变及热膨胀中的三个法向分量包含环向分量,不能因计算域是 r–z 平面就把 3 改为 2。
8.3.1 含重力的 Darcy 通量与流体弱式
在本文 b = 1 b=1 b = 1 的假设下,流体体积守恒和 Darcy 定律为
∂ ε v ∂ t + S ∂ p ∂ t − β T ∂ T ∂ t + ∇ ⋅ q f = 0 , q f = − k f γ f ( ∇ p − ρ f g ) . \frac{\partial\varepsilon_v}{\partial t}
+S\frac{\partial p}{\partial t}
-\beta_T\frac{\partial T}{\partial t}
+\nabla\cdot\boldsymbol q_f=0,
\qquad
\boldsymbol q_f=-\frac{k_f}{\gamma_f}(\nabla p-\rho_f\boldsymbol g). ∂ t ∂ ε v + S ∂ t ∂ p − β T ∂ t ∂ T + ∇ ⋅ q f = 0 , q f = − γ f k f ( ∇ p − ρ f g ) .
上述时间导数均在固定参考位置取值。γ f \gamma_f γ f 是参考流体重度;在“关闭重力”的数值测试中令 g = 0 \boldsymbol g=\boldsymbol0 g = 0 ,不能同时把分母中的参考 γ f \gamma_f γ f 设为零 。这里的 k f k_f k f 是常标量。
为简写,定义在整个域内相同的标量水力迁移率
H f : = k f γ f , H_f:=\frac{k_f}{\gamma_f}, H f := γ f k f ,
这里 H f H_f H f 是标量,单位为 m 2 / ( P a s ) \mathrm{m^2/(Pa\,s)} m 2 / ( Pa s ) ,不是水力传导系数 k f k_f k f 本身。下式中的乘法是标量与向量相乘;若使用矩阵接口,对应的矩阵为 H f I 2 H_f I_2 H f I 2 。虚拟点上的通量为
q f , k g = − H f E ~ k g P k + ρ f H f g , W k g = V k / 4. \boxed{
\boldsymbol q_{f,kg}
=-H_f\widetilde E_{kg}\boldsymbol P_k
+\rho_fH_f\boldsymbol g,
\qquad W_{kg}=V_k/4.
} q f , k g = − H f E k g P k + ρ f H f g , W k g = V k /4.
这里压力梯度、重力驱动力和通量均用径向、轴向两个分量表示;没有环向梯度行。
重力贡献为什么带负号
设 v p v_p v p 为孔压方程中的标量试函数,在规定孔压的边界上为零。边界流量以入流为正,即 q f ⋅ n o u t = − q ‾ i n \boldsymbol q_f\cdot\boldsymbol n_{\mathrm{out}}=-\overline q_{\mathrm{in}} q f ⋅ n out = − q in 。因此
0 = ∫ D v p ( ∂ t ε v + S ∂ t p − β T ∂ t T ) d V − ∫ D ( ∇ v p ) T q f d V − ∫ Γ q v p q ‾ i n d S = ∫ D v p ( ∂ t ε v + S ∂ t p − β T ∂ t T ) d V + ∫ D ( ∇ v p ) T H f ∇ p d V − ∫ D ( ∇ v p ) T H f ρ f g d V − ∫ Γ q v p q ‾ i n d S . \begin{aligned}
0={}&\int_D v_p
\left(\partial_t\varepsilon_v+S\partial_tp-\beta_T\partial_tT\right)\,\mathrm dV
-\int_D(\nabla v_p)^T\boldsymbol q_f\,\mathrm dV
-\int_{\Gamma_q}v_p\overline q_{\mathrm{in}}\,\mathrm dS\\
={}&\int_D v_p
\left(\partial_t\varepsilon_v+S\partial_tp-\beta_T\partial_tT\right)\,\mathrm dV
+\int_D(\nabla v_p)^TH_f\nabla p\,\mathrm dV\\
&-\int_D(\nabla v_p)^TH_f\rho_f\boldsymbol g\,\mathrm dV
-\int_{\Gamma_q}v_p\overline q_{\mathrm{in}}\,\mathrm dS.
\end{aligned} 0 = = ∫ D v p ( ∂ t ε v + S ∂ t p − β T ∂ t T ) d V − ∫ D ( ∇ v p ) T q f d V − ∫ Γ q v p q in d S ∫ D v p ( ∂ t ε v + S ∂ t p − β T ∂ t T ) d V + ∫ D ( ∇ v p ) T H f ∇ p d V − ∫ D ( ∇ v p ) T H f ρ f g d V − ∫ Γ q v p q in d S .
这一弱式同时确定了以下四项的正负号:压力扩散为正、重力驱动力为负、温度引起的流体含量变化为负、规定入流在残差中为负。
注意: 即使 g \boldsymbol g g 为常向量,也不能因局部 ∇ ⋅ ( H f ρ f g ) = 0 \nabla\cdot(H_f\rho_f\boldsymbol g)=0 ∇ ⋅ ( H f ρ f g ) = 0 就删除重力弱式项;边界总通量的定义中包含重力部分。
采用与扩散矩阵相同的四点算子,定义
K 22 P k = ∑ g W k g E ~ k g T H f E ~ k g , G p , k = ∑ g W k g E ~ k g T H f ρ f g , G p = Assemble k [ G p , k ] . \begin{aligned}
K_{22P}^k&=\sum_gW_{kg}\widetilde E_{kg}^TH_f\widetilde E_{kg},\\
\boldsymbol G_{p,k}&=\sum_gW_{kg}\widetilde E_{kg}^TH_f\rho_f\boldsymbol g,
\qquad
\boldsymbol G_p=\operatorname*{Assemble}_k[\boldsymbol G_{p,k}].
\end{aligned} K 22 P k G p , k = g ∑ W k g E k g T H f E k g , = g ∑ W k g E k g T H f ρ f g , G p = k Assemble [ G p , k ] .
从直接通量形式也可核对该符号:
− ∑ g W k g E ~ k g T q f , k g = K 22 P k P k − G p , k . -\sum_gW_{kg}\widetilde E_{kg}^T\boldsymbol q_{f,kg}
=K_{22P}^k\boldsymbol P_k-\boldsymbol G_{p,k}. − g ∑ W k g E k g T q f , k g = K 22 P k P k − G p , k .
8.4 关闭热对流时:残差、总量与增量
令 S P P P S_{\mathrm{PPP}} S PPP 表示已经乘上稳定化系数的 PPP 矩阵。下面把残差 R \boldsymbol R R 定义为各方程左端减右端,平衡时 R \boldsymbol R R 为零;R u , R p , R T \boldsymbol R_u,\boldsymbol R_p,\boldsymbol R_T R u , R p , R T 分别为力学、流体质量、能量方程的残差向量。f u s k e l \boldsymbol f_u^{\mathrm{skel}} f u skel 是组装后的骨架内力,F u e x t = F u Γ + F u b o d y \boldsymbol F_u^{\mathrm{ext}}=\boldsymbol F_u^\Gamma+\boldsymbol F_u^{\mathrm{body}} F u ext = F u Γ + F u body 包括面力与第 12.4 节的体力贡献,上标 e x t \mathrm{ext} ext 表示外荷载。先写出 Keyword.HeatAdvection = false 时的残差,作为第 8.5 节加入对流的对照:
R u = f u s k e l − K 12 P − F u e x t , R p = K 21 Δ U + ( K 22 S + S P P P ) Δ P − K 23 Δ T + Δ t ( K 22 P P − G p ) − Q p s t e p , R T = K 33 X Δ T + Δ t K 33 G T − Q T s t e p . \begin{aligned}
\boldsymbol R_u&=\boldsymbol f_u^{\mathrm{skel}}-K_{12}\boldsymbol P-\boldsymbol F_u^{\mathrm{ext}},\\
\boldsymbol R_p&=K_{21}\Delta\boldsymbol U+(K_{22S}+S_{\mathrm{PPP}})\Delta\boldsymbol P-K_{23}\Delta\boldsymbol T+\Delta t(K_{22P}\boldsymbol P-\boldsymbol G_p)-\boldsymbol Q_p^{\mathrm{step}},\\
\boldsymbol R_T&=K_{33X}\Delta\boldsymbol T+\Delta tK_{33G}\boldsymbol T-\boldsymbol Q_T^{\mathrm{step}}.
\end{aligned} R u R p R T = f u skel − K 12 P − F u ext , = K 21 Δ U + ( K 22 S + S PPP ) Δ P − K 23 Δ T + Δ t ( K 22 P P − G p ) − Q p step , = K 33 X Δ T + Δ t K 33 G T − Q T step .
Q p s t e p , Q T s t e p \boldsymbol Q_p^{\mathrm{step}},\boldsymbol Q_T^{\mathrm{step}} Q p step , Q T step 分别是本步的节点流体体积和热量贡献,包含边界通量及可选域内源项;本文模型的域内源项为零。流入或加入为正,没有荷载时为零。代码分别使用 dt*Load.Fp、dt*Load.FT。速率随时间变化时,backward Euler 使用步末速率乘 Δ t \Delta t Δ t ,一般不是精确的时间积分。对上述残差按节点未知量 [ U ; P ; T ] [\boldsymbol U;\boldsymbol P;\boldsymbol T] [ U ; P ; T ] 求导,得到全局切线矩阵 K K K :
K = [ K 11 − K 12 − K 13 K 21 K 22 S + S P P P + Δ t K 22 P − K 23 0 0 K 33 X + Δ t K 33 G ] . K=\begin{bmatrix}
K_{11}&-K_{12}&-K_{13}\\
K_{21}&K_{22S}+S_{\mathrm{PPP}}+\Delta tK_{22P}&-K_{23}\\
0&0&K_{33X}+\Delta tK_{33G}
\end{bmatrix}. K = K 11 K 21 0 − K 12 K 22 S + S PPP + Δ t K 22 P 0 − K 13 − K 23 K 33 X + Δ t K 33 G .
重力项 − Δ t G p -\Delta t\boldsymbol G_p − Δ t G p 已显式写在流体残差中,不再重复并入 Q p s t e p \boldsymbol Q_p^{\mathrm{step}} Q p step ;它是水力驱动力,不是注入流体的体积源。给定参考密度、导率、几何和重力时,G p \boldsymbol G_p G p 与当前未知量无关,故上述流体切线块不变。关闭热对流不等于关闭机械体力或 Darcy 重力。
机械方程的孔压项、Darcy 项使用当前孔压总量 P \boldsymbol P P ,储水与 PPP 项使用当前时间步的孔压增量 Δ P \Delta\boldsymbol P Δ P 。PPP 项不额外乘 Δ t \Delta t Δ t 。在本节关闭对流的情况下,温度方程不依赖位移和孔压,所以 K 31 , K 32 K_{31},K_{32} K 31 , K 32 为零。
8.5 开启热对流后:温度残差和切线怎样变化
8.5.1 温度方程与假设
加入 Darcy 流体携带的热量后,轴对称温度方程为
C T ∂ T ∂ t + ρ f c f q f ⋅ ∇ T − ∇ ⋅ ( k T ∇ T ) = Q T . C_T\frac{\partial T}{\partial t}+\rho_f c_f\boldsymbol q_f\cdot\nabla T-\nabla\cdot(k_T\nabla T)=Q_T. C T ∂ t ∂ T + ρ f c f q f ⋅ ∇ T − ∇ ⋅ ( k T ∇ T ) = Q T .
C T , k T C_T,k_T C T , k T 见第 8.3 节,c f c_f c f 是流体单位质量比热容。时间导数在固定参考位置取值;固定几何下用节点温度的 backward Euler 差分计算。本节将参考 ρ f c f \rho_f c_f ρ f c f 视为给定常量。Q T Q_T Q T 是可选的单位总体积、单位时间热源,正值表示加热;本文模型取 Q T = 0 Q_T=0 Q T = 0 。该简化热模型不另加机械体力功、塑性耗散或流动耗散项。
q f = [ q f ( r ) , q f ( z ) ] T \boldsymbol q_f=[q_f^{(r)},q_f^{(z)}]^T q f = [ q f ( r ) , q f ( z ) ] T 是相对固体、按介质总截面积计算的 Darcy 体积通量。其含重力形式为
q f = − k f γ f ( ∇ p − ρ f g ) . \boldsymbol q_f=-\frac{k_f}{\gamma_f}(\nabla p-\rho_f\boldsymbol g). q f = − γ f k f ( ∇ p − ρ f g ) .
由于使用的是 Darcy 通量,对流项前面不再额外乘孔隙率。轴对称下,对流项仍为
q f ⋅ ∇ T = q f ( r ) ∂ T ∂ r + q f ( z ) ∂ T ∂ z . \boldsymbol q_f\cdot\nabla T=q_f^{(r)}\frac{\partial T}{\partial r}+q_f^{(z)}\frac{\partial T}{\partial z}. q f ⋅ ∇ T = q f ( r ) ∂ r ∂ T + q f ( z ) ∂ z ∂ T .
没有额外的 q f ( r ) T / r q_f^{(r)}T/r q f ( r ) T / r 项。 积分中的 2 π r 2\pi r 2 π r 由体积权重考虑;这里不对非保守形式的对流项作分部积分。
8.5.2 从弱式到四个虚拟积分点
沿用第 7.3 节的温度试函数 v T v_T v T ,新增的弱式贡献为
∫ D v T ρ f c f q f ⋅ ∇ T 2 π r d r d z . \int_D v_T\rho_f c_f\boldsymbol q_f\cdot\nabla T\,2\pi r\,\mathrm{d}r\mathrm{d}z. ∫ D v T ρ f c f q f ⋅ ∇ T 2 π r d r d z .
对流项不作分部积分。设光滑域 k k k 涉及 n n o d e , k n_{\mathrm{node},k} n node , k 个节点,标量试函数 v T v_T v T 与温度采用相同的光滑型函数 N ~ k g \widetilde N_{kg} N k g 插值。在虚拟点 g g g ,
( ∇ T ) k g = E ~ k g T k , q f , k g = − k f γ f ( E ~ k g P k − ρ f g ) , W k g = V k 4 . \begin{aligned}
(\nabla T)_{kg}&=\widetilde E_{kg}\boldsymbol T_k,\\
\boldsymbol q_{f,kg}&=-\frac{k_f}{\gamma_f}(\widetilde E_{kg}\boldsymbol P_k-\rho_f\boldsymbol g),
\qquad W_{kg}=\frac{V_k}{4}.
\end{aligned} ( ∇ T ) k g q f , k g = E k g T k , = − γ f k f ( E k g P k − ρ f g ) , W k g = 4 V k .
N ~ k g \widetilde N_{kg} N k g 、E ~ k g \widetilde E_{kg} E k g 沿用第 7.2、7.3 节的 SNS 矩阵,尺寸分别为 1 × n n o d e , k 1\times n_{\mathrm{node},k} 1 × n node , k 、2 × n n o d e , k 2\times n_{\mathrm{node},k} 2 × n node , k 。P k , T k \boldsymbol P_k,\boldsymbol T_k P k , T k 是当前试算孔压、温度的节点总值。Darcy 速度与温度梯度使用同一个点的 E ~ k g \widetilde E_{kg} E k g 。
分别取各节点对应的光滑型函数作为试函数 v T v_T v T ,将四点积分得到的各节点贡献排成列向量,得到局部对流残差
f T , k a d v ( P k , T k ) = ρ f c f ∑ g = 1 4 W k g N ~ k g T [ q f , k g T E ~ k g T k ] . \boxed{
\boldsymbol f_{T,k}^{\mathrm{adv}}(\boldsymbol P_k,\boldsymbol T_k)
=\rho_f c_f\sum_{g=1}^{4}W_{kg}\widetilde N_{kg}^{T}
\left[\boldsymbol q_{f,kg}^{T}\widetilde E_{kg}\boldsymbol T_k\right].
} f T , k adv ( P k , T k ) = ρ f c f g = 1 ∑ 4 W k g N k g T [ q f , k g T E k g T k ] .
上标 a d v \mathrm{adv} adv 表示对流贡献。此向量含 n n o d e , k n_{\mathrm{node},k} n node , k 个分量,尚未乘时间步长。沿用第 6 节的四点近似,每点权重为 V k / 4 V_k/4 V k /4 ,不再乘 2 π r 2\pi r 2 π r 或虚拟点半径 ;V k V_k V k 已是光滑域旋转后的体积。
8.5.3 分别对温度和孔压求导
用 δ T k , δ P k \delta\boldsymbol T_k,\delta\boldsymbol P_k δ T k , δ P k 表示当前试算值的独立扰动,与时间步增量 Δ T k , Δ P k \Delta\boldsymbol T_k,\Delta\boldsymbol P_k Δ T k , Δ P k 区分。几何、参考材料系数和给定重力固定时,
δ q f , k g = − k f γ f E ~ k g δ P k , δ ( ∇ T ) k g = E ~ k g δ T k . \begin{aligned}
\delta\boldsymbol q_{f,kg}&=-\frac{k_f}{\gamma_f}\widetilde E_{kg}\delta\boldsymbol P_k,\\
\delta(\nabla T)_{kg}&=\widetilde E_{kg}\delta\boldsymbol T_k.
\end{aligned} δ q f , k g δ ( ∇ T ) k g = − γ f k f E k g δ P k , = E k g δ T k .
对速度与温度梯度的乘积求导,两部分都要保留:
δ f T , k a d v = ρ f c f ∑ g = 1 4 W k g N ~ k g T [ q f , k g T E ~ k g δ T k − ( E ~ k g T k ) T k f γ f E ~ k g δ P k ] . \begin{aligned}
\delta\boldsymbol f_{T,k}^{\mathrm{adv}}
=\rho_f c_f\sum_{g=1}^{4}W_{kg}\widetilde N_{kg}^{T}
\Bigg[&\boldsymbol q_{f,kg}^{T}\widetilde E_{kg}\delta\boldsymbol T_k\\
&-(\widetilde E_{kg}\boldsymbol T_k)^T
\frac{k_f}{\gamma_f}\widetilde E_{kg}\delta\boldsymbol P_k\Bigg].
\end{aligned} δ f T , k adv = ρ f c f g = 1 ∑ 4 W k g N k g T [ q f , k g T E k g δ T k − ( E k g T k ) T γ f k f E k g δ P k ] .
因此,新增的两个局部矩阵为
K 33 A d v k = ∂ f T , k a d v ∂ T k = ρ f c f ∑ g = 1 4 W k g N ~ k g T q f , k g T E ~ k g , \boxed{
K_{33\mathrm{Adv}}^k
=\frac{\partial\boldsymbol f_{T,k}^{\mathrm{adv}}}{\partial\boldsymbol T_k}
=\rho_f c_f\sum_{g=1}^{4}W_{kg}\widetilde N_{kg}^{T}
\boldsymbol q_{f,kg}^{T}\widetilde E_{kg},
} K 33 Adv k = ∂ T k ∂ f T , k adv = ρ f c f g = 1 ∑ 4 W k g N k g T q f , k g T E k g ,
K 32 A d v k = ∂ f T , k a d v ∂ P k = − ρ f c f ∑ g = 1 4 W k g N ~ k g T ( E ~ k g T k ) T k f γ f E ~ k g . \boxed{
K_{32\mathrm{Adv}}^k
=\frac{\partial\boldsymbol f_{T,k}^{\mathrm{adv}}}{\partial\boldsymbol P_k}
=-\rho_f c_f\sum_{g=1}^{4}W_{kg}\widetilde N_{kg}^{T}
(\widetilde E_{kg}\boldsymbol T_k)^T\frac{k_f}{\gamma_f}\widetilde E_{kg}.
} K 32 Adv k = ∂ P k ∂ f T , k adv = − ρ f c f g = 1 ∑ 4 W k g N k g T ( E k g T k ) T γ f k f E k g .
两者都是 n n o d e , k × n n o d e , k n_{\mathrm{node},k}\times n_{\mathrm{node},k} n node , k × n node , k 矩阵,尚未乘 Δ t \Delta t Δ t ,分别对应代码中的 K33Adv、K32Adv。前者固定孔压、对温度求导;后者固定温度、对孔压求导。两部分都需要加入 Newton 切线。K 33 A d v K_{33\mathrm{Adv}} K 33 Adv 必须使用含重力的完整通量;固定参考密度、导率和重力时,K 32 A d v K_{32\mathrm{Adv}} K 32 Adv 的公式不新增重力项,因为重力通量对孔压的偏导数为零。
K 32 A d v K_{32\mathrm{Adv}} K 32 Adv 不是 K 23 T K_{23}^T K 23 T : 前者来自孔压对 Darcy 速度的影响,后者来自温度对流体含量的影响。对流矩阵一般不对称。
8.5.4 时间离散、全局残差和切线分块
按第 2.3 节的规则组装:
f T a d v = Assemble k [ f T , k a d v ] , K 33 A d v = Assemble k [ K 33 A d v k ] , K 32 A d v = Assemble k [ K 32 A d v k ] . \begin{aligned}
\boldsymbol f_T^{\mathrm{adv}}&=\operatorname*{Assemble}_{k}[\boldsymbol f_{T,k}^{\mathrm{adv}}],\\
K_{33\mathrm{Adv}}&=\operatorname*{Assemble}_{k}[K_{33\mathrm{Adv}}^k],\qquad
K_{32\mathrm{Adv}}=\operatorname*{Assemble}_{k}[K_{32\mathrm{Adv}}^k].
\end{aligned} f T adv K 33 Adv = k Assemble [ f T , k adv ] , = k Assemble [ K 33 Adv k ] , K 32 Adv = k Assemble [ K 32 Adv k ] .
当前程序将温度方程整体乘以 Δ t \Delta t Δ t 。因此,开启对流后的温度残差为
R T = K 33 X Δ T + Δ t [ K 33 G T + f T a d v ( P , T ) ] − Q T s t e p . \boxed{
\boldsymbol R_T
=K_{33X}\Delta\boldsymbol T
+\Delta t\left[K_{33G}\boldsymbol T+\boldsymbol f_T^{\mathrm{adv}}(\boldsymbol P,\boldsymbol T)\right]
-\boldsymbol Q_T^{\mathrm{step}}.
} R T = K 33 X Δ T + Δ t [ K 33 G T + f T adv ( P , T ) ] − Q T step .
对流使用孔压、温度的当前总值 ,热容量项使用温度增量。力学和流体残差的公式仍见第 8.4 节。
用 K o f f K^{\mathrm{off}} K off 表示第 8.4 节的无对流矩阵,在同一个当前试算状态 计算。加入对流后,
K = K o f f + Δ t [ 0 0 0 0 0 0 0 K 32 A d v K 33 A d v ] . \boxed{
K=K^{\mathrm{off}}+\Delta t
\begin{bmatrix}
0&0&0\\
0&0&0\\
0&K_{32\mathrm{Adv}}&K_{33\mathrm{Adv}}
\end{bmatrix}.
} K = K off + Δ t 0 0 0 0 0 K 32 Adv 0 0 K 33 Adv .
矩阵中的 0 0 0 表示相应尺寸的零块。K 31 K_{31} K 31 仍为零,K 32 K_{32} K 32 一般不再为零。 固定 P , T \boldsymbol P,\boldsymbol T P , T 时,位移不直接改变对流项;在完整方程组中,位移仍可通过孔压间接影响温度。
定义纯重力通量和对应对流部分
q f g r a v = ρ f H f g , K 33 A d v , g r a v k = ρ f c f ∑ g W k g N ~ k g T ( q f g r a v ) T E ~ k g , \boldsymbol q_f^{\mathrm{grav}}=\rho_fH_f\boldsymbol g,
\qquad
K_{33\mathrm{Adv,grav}}^k
=\rho_fc_f\sum_gW_{kg}\widetilde N_{kg}^T
(\boldsymbol q_f^{\mathrm{grav}})^T\widetilde E_{kg}, q f grav = ρ f H f g , K 33 Adv , grav k = ρ f c f g ∑ W k g N k g T ( q f grav ) T E k g ,
f T , k a d v , g r a v ( T k ) = K 33 A d v , g r a v k T k . \boldsymbol f_{T,k}^{\mathrm{adv,grav}}(\boldsymbol T_k)
=K_{33\mathrm{Adv,grav}}^k\boldsymbol T_k. f T , k adv , grav ( T k ) = K 33 Adv , grav k T k .
完整通量对孔压是仿射函数,因此正确恒等式是
f T a d v ( P , T ; g ) = K 33 A d v ( P ; g ) T = K 32 A d v ( T ) P + f T a d v , g r a v ( T ) . \boxed{
\begin{aligned}
\boldsymbol f_T^{\mathrm{adv}}(\boldsymbol P,\boldsymbol T;\boldsymbol g)
&=K_{33\mathrm{Adv}}(\boldsymbol P;\boldsymbol g)\boldsymbol T\\
&=K_{32\mathrm{Adv}}(\boldsymbol T)\boldsymbol P
+\boldsymbol f_T^{\mathrm{adv,grav}}(\boldsymbol T).
\end{aligned}
} f T adv ( P , T ; g ) = K 33 Adv ( P ; g ) T = K 32 Adv ( T ) P + f T adv , grav ( T ) .
注意: 无重力形式的 f T a d v = K 32 A d v P \boldsymbol f_T^{\mathrm{adv}}=K_{32\mathrm{Adv}}\boldsymbol P f T adv = K 32 Adv P 仅在重力对流贡献为零时成立;无重力是其充分条件。采用含重力的 K33Adv 后,dt*K33Adv*Trial.T 已包含完整对流残差,不得再加 dt*fAdvGrav。若选择用 dt*K32Adv*P 组装对流残差,则必须补上 dt*fAdvGrav;这仍是同一残差的另一种写法。
开启热对流、孔压和温度同时作为未知量求解时,对流项含孔压梯度与温度梯度的双线性乘积,使方程组具有非线性耦合,即使固体采用线弹性模型。每轮 Newton 和每次 line search 试算都要更新这两个矩阵;几何仍可预计算,本构历史管理不变。
8.5.5 开关、边界与静水检查
Keyword.HeatAdvection = false 只去掉热对流贡献,机械体力和 Darcy 重力项仍保留。对流项不作分部积分;热流边界指定的是传导热流。若改为规定包含流体携热的总热流,需要相应调整弱式中的边界项,使其与新的边界条件一致。
有重力时,P = 0 \boldsymbol P=\boldsymbol0 P = 0 只使压力梯度为零,通常并不使 Darcy 通量为零:
P = 0 ⟹ q f , k g = ρ f H f g . \boldsymbol P=\boldsymbol0
\ \Longrightarrow\;
\boldsymbol q_{f,kg}=\rho_fH_f\boldsymbol g. P = 0 ⟹ q f , k g = ρ f H f g .
原 markdown 文件中四种 patch 的零通量结论仅适用于测试同时设置 g = 0 \boldsymbol g=\boldsymbol0 g = 0 的情况 。材料参数固定时,由公式可得下表:
可用静水条件检查 Darcy 方程中各项的符号。若 z z z 轴向上、g = [ 0 , − g ] T \boldsymbol g=[0,-g]^T g = [ 0 , − g ] T ,且 ρ f \rho_f ρ f 为常数,令
p ( r , z ) = p r e f − ρ f g ( z − z r e f ) , T = T r e f . p(r,z)=p_{\mathrm{ref}}-\rho_fg(z-z_{\mathrm{ref}}),
\qquad T=T_{\mathrm{ref}}. p ( r , z ) = p ref − ρ f g ( z − z ref ) , T = T ref .
当离散梯度算子能准确计算上述线性压力场的梯度时,有
E ~ k g P k = ρ f g , q f , k g = 0 , K 22 P P − G p = 0 . \widetilde E_{kg}\boldsymbol P_k=\rho_f\boldsymbol g,
\quad \boldsymbol q_{f,kg}=\boldsymbol0,
\quad K_{22P}\boldsymbol P-\boldsymbol G_p=\boldsymbol0. E k g P k = ρ f g , q f , k g = 0 , K 22 P P − G p = 0 .
通过上述等式,可以核对重力项与扩散项是否使用了相同的离散梯度算子,以及两项的正负号是否正确。
注意: 这项检查针对Darcy 通量和流体扩散残差 ;完整的机械自重平衡还要求初始有效应力、边界面力与体力 ρ g \rho\boldsymbol g ρ g 满足力学平衡。若测试从上述静水压力场开始,且当前时间步保持该压力场不变,则 Δ P = 0 \Delta\boldsymbol P=0 Δ P = 0 ;若初始孔压全为零,当前时间步才施加静水压力,就不能要求储水和 PPP 增量残差自动为零。
若光滑梯度算子能准确计算线性压力场的梯度,上述静水检查中的通量和扩散残差应在浮点舍入误差范围内为零。若结果非零,应先核对 E ~ k g P k \widetilde E_{kg}\boldsymbol P_k E k g P k 给出的压力梯度是否正确,不能仅凭残差非零就认定重力项的符号有误。
9. 加入半径后,哪些积分需要增加高斯点
在直边 T3 上,r r r 与 N i N_i N i 都是物理坐标的线性函数。因此 r N i rN_i r N i 是二次多项式,r N i N j rN_iN_j r N i N j 是三次多项式。
本文用 Q4(四节点双线性四边形)型函数描述子域几何,采用 3 × 3 3\times3 3 × 3 Gauss 点。这里 J J J 是从四边形自然坐标到 ( r , z ) (r,z) ( r , z ) 的几何映射 Jacobian 矩阵,det J \det J det J 是积分换元的面积比例因子。2 × 2 2\times2 2 × 2 表示两个自然坐标方向各用 2 个点,共 4 点;3 × 3 3\times3 3 × 3 同理为 9 点。积分中加入 r r r 后,r N i N j det J rN_iN_j\det J r N i N j det J 在四边形自然坐标下一般会出现四次项,因此 2 × 2 2\times2 2 × 2 Gauss 点不能保证精确。这里 Q4 只描述积分子域的几何,物理场仍由原始 T3 型函数插值。2 × 2 2\times2 2 × 2 Gauss 点计算 r N i rN_i r N i 仍然足够,但计算储水、热容量和 PPP 所需的 r N i N j rN_iN_j r N i N j 就不一定够了。
原 markdown 文件还记录了下面的积分核对例子:母三角形为 ( 1 , 0 ) , ( 3 , 0 ) , ( 2 , 1 ) (1,0),(3,0),(2,1) ( 1 , 0 ) , ( 3 , 0 ) , ( 2 , 1 ) ,节点 1 子域为 ( 1 , 0 ) , ( 2 , 0 ) , ( 2 , 1 / 3 ) , ( 1.5 , 1 / 2 ) (1,0),(2,0),(2,1/3),(1.5,1/2) ( 1 , 0 ) , ( 2 , 0 ) , ( 2 , 1/3 ) , ( 1.5 , 1/2 ) ,N 1 = ( 3 − r − z ) / 2 N_1=(3-r-z)/2 N 1 = ( 3 − r − z ) /2 。不含公共因子 2 π 2\pi 2 π 时,
∫ D 1 e r N 1 2 d A = 505 2592 ≈ 0.19483024691358025. \int_{D_{1e}}rN_1^2\,\mathrm{d}A=\frac{505}{2592}\approx0.19483024691358025. ∫ D 1 e r N 1 2 d A = 2592 505 ≈ 0.19483024691358025.
相关四边形积分统一使用 3 × 3 3\times3 3 × 3 Gauss 点。 对本文的直边子域和常材料系数,9 个点足以精确计算上述多项式积分。
若被积函数是常数,直接乘体积就能得到精确结果。
注意: 若被积函数包含随位置变化的 N 或 N T N N^TN N T N ,一般不能先按面积积分,再乘一个平均半径,因为对一般随位置变化的被积函数 f ( r , z ) f(r,z) f ( r , z ) ,∫ r f d A \int r f\,\mathrm{d}A ∫ r f d A 不等于 r ‾ A ∫ f d A \overline r^A\int f\,\mathrm{d}A r A ∫ f d A 。这里 r ‾ A = ∫ r d A / ∫ d A \overline r^A=\int r\,\mathrm{d}A/\int\mathrm{d}A r A = ∫ r d A / ∫ d A 是该积分域的面积平均半径。
10. PPP 的旋转体积平均
PPP 指 Polynomial Pressure Projection,即多项式压力投影稳定化;它比较压力与其所在母三角形内的平均压力。本文用 Π e V \Pi_e^V Π e V 表示旋转体积平均,以一个常数近似该三角形内的压力。这个平均值按母三角形计算,不按整个节点光滑域计算。
母三角形的旋转体积平均压力定义如下。此处将三角形顶点局部编号为 1 , 2 , 3 1,2,3 1 , 2 , 3 ,i ∈ { 1 , 2 , 3 } i\in\{1,2,3\} i ∈ { 1 , 2 , 3 } ;r i , N i r_i,N_i r i , N i 分别是同一顶点的半径、型函数。
Π e V p = ∫ e p d V V e , Π e V N i = ( r 1 + r 2 + r 3 ) + r i 4 ( r 1 + r 2 + r 3 ) . \Pi_e^V p=\frac{\int_e p\,\mathrm{d}V}{V_e},\qquad \Pi_e^V N_i=\frac{(r_1+r_2+r_3)+r_i}{4(r_1+r_2+r_3)}. Π e V p = V e ∫ e p d V , Π e V N i = 4 ( r 1 + r 2 + r 3 ) ( r 1 + r 2 + r 3 ) + r i .
对应的 PPP 稳定项可以写为
S P P P = Assemble k { Assemble e ∋ k [ c P P P ∫ D k e ( N e − Π e V N e ) T ( N e − Π e V N e ) d V ] } . S_{\mathrm{PPP}}=\operatorname*{Assemble}_k\left\{\operatorname*{Assemble}_{e\ni k}\left[c_{\mathrm{PPP}}\int_{D_{ke}}(N_e-\Pi_e^VN_e)^T(N_e-\Pi_e^VN_e)\,\mathrm{d}V\right]\right\}. S PPP = k Assemble { e ∋ k Assemble [ c PPP ∫ D k e ( N e − Π e V N e ) T ( N e − Π e V N e ) d V ] } .
c P P P c_{\mathrm{PPP}} c PPP 是由同一组固定弹性参考参数和稳定化倍率确定的常数,在所有光滑域中相同,不随塑性切线更新。Π e V N e \Pi_e^VN_e Π e V N e 表示对 N e N_e N e 的三个分量分别求同一种平均。均匀压力与其平均值之差为零,因此 S P P P S_{\mathrm{PPP}} S PPP 乘均匀压力向量得到零。当前残差中实际使用的是 S P P P Δ P S_{\mathrm{PPP}}\Delta\boldsymbol P S PPP Δ P ,所以均匀孔压增量使稳定化残差为零。 当前孔压均匀,但上一个已收敛时间步的孔压可能不均匀,因此两者之差可能不均匀,PPP 稳定化残差就不一定为零。若压力不均匀,压力与这个体积平均值之差,在整个母三角形上的体积积分仍为零(注意:PPP 对应的二次型是压力与平均值之差的平方 的体积积分乘以稳定化系数)。如果用一个常数近似母三角形内的压力,那么体积平均压力能使“压力与该常数之差的平方”的体积积分最小。
温度方程不添加 PPP 项。
11. 轴线条件、本构分量和结果输出
11.1 轴线上只约束径向位移,轴向位移可以不为零
u r u_r u r 是径向位移,u z u_z u z 是轴向位移。在轴线 r = 0 r=0 r = 0 上施加 u r = 0 u_r=0 u r = 0 ,表示轴线上的点仍留在轴线上,但它们可以沿 z 方向移动,所以 u z u_z u z 不必为零。 例如圆柱受压时,轴线上的点可以产生轴向沉降。只在边界条件规定了轴向位移的位置,对 u z u_z u z 施加相应约束;不能因为一个点在轴线上,就把它的两个位移都固定。这也是 FEniCSx 轴对称示例 中分别处理径向、轴向约束的做法。
按本文的矩阵构造,轴线节点不需要计算 N I / 0 N_I/0 N I /0 ,所用几何分母均为正,见第 6.3 节。 仍须施加轴线的 u r = 0 u_r=0 u r = 0 ,但无需为计算矩阵而预先删除径向位移列。
下面的关系用于检查光滑解,不是额外的节点位移条件。 对轴线附近光滑的轴对称解,有
lim r → 0 u r r = ∂ u r ∂ r ∣ r = 0 , σ r r = σ θ θ , σ r z = 0 at r = 0. \lim_{r\to0}\frac{u_r}{r}=\left.\frac{\partial u_r}{\partial r}\right|_{r=0},\qquad \sigma_{rr}=\sigma_{\theta\theta},\qquad \sigma_{rz}=0\quad\text{at }r=0. r → 0 lim r u r = ∂ r ∂ u r r = 0 , σ rr = σ θθ , σ rz = 0 at r = 0.
第一项说明环向应变在轴线处应取有限极限;后两项说明轴线上径向、环向正应力相等,r–z 剪应力为零。它们没有要求 u z = 0 u_z=0 u z = 0 ,也没有要求环向应变为零。普通离散解未必逐点精确满足这些关系,应通过结果和网格加密检查,不要额外给节点规定这些应力值。
同样,光滑的孔压、温度场在轴线上满足 ∂ p ∂ r = ∂ T ∂ r = 0 \frac{\partial p}{\partial r}=\frac{\partial T}{\partial r}=0 ∂ r ∂ p = ∂ r ∂ T = 0 ,表示径向梯度为零,不是孔压或温度本身等于零。 对当前各向同性材料及竖向重力(g r = 0 g_r=0 g r = 0 ),这也意味着轴线上没有径向流量和传导热流量。轴线旋转后没有表面积,通常无需在那里另外施加非零面通量。
刚体运动的检查也要对应轴对称几何:所有节点沿 z 方向平移相同距离,应变为零;给所有节点相同的径向位移,则会改变各节点环的周长,不能把它当作零应变的刚体平移 。
11.2 3D 本构接口与环向应变
轴对称本构接口的四个有效应力分量为 [ σ r r ′ , σ z z ′ , σ θ θ ′ , σ r z ′ ] T [\sigma'_{rr},\sigma'_{zz},\sigma'_{\theta\theta},\sigma'_{rz}]^T [ σ rr ′ , σ zz ′ , σ θθ ′ , σ rz ′ ] T 。三维 J2、DP UMAT 的坐标 1、2、3 对应 r , z , θ r,z,\theta r , z , θ ,输入输出仍用六分量,切线为 6 × 6 6\times6 6 × 6 。update_axisymmetric_material 将另外两个剪切分量补零,调用 UMAT 后提取前四个应力、塑性应变分量及切线的 4 × 4 4\times4 4 × 4 子块。应变继续使用工程剪应变。第三个法向应变必须传入环向应变,不能继续按平面应变设成零,也不能按平面应力把环向应力设成零。
四个虚拟点仍属于同一材料,使用相同的材料参数,但它们的塑性发展过程可以不同。PEEQ 表示等效塑性应变。四点采用等权,数组中的第 5 项保存四个虚拟点结果的算术平均值。第 5 项始终只用于存平均结果,不是另一个需要调用本构的积分点。
11.3 材料假设与轴对称几何
本文使用单一均匀、各向同性材料,b = 1 b=1 b = 1 、K s → ∞ K_s\to\infty K s → ∞ 。不需要各向异性材料的方向转换。
第 8.2、8.3 节已经按上述材料假设简化。 孔压耦合使用 m \boldsymbol m m ,储水系数为 S = n / K f S=n/K_f S = n / K f ,β T \beta_T β T 与 C T C_T C T 使用统一的常参数表达式。这些简化来自材料假设;B、E 的几何构造、应变分量对应和积分中的 2 π r 2\pi r 2 π r 则来自轴对称。
11.4 应力、沉降与误差的显示
当前采用应力拉伸为正、孔压受压为正的约定,考虑孔压项后的总应力为
σ = σ ′ − p m . \boldsymbol\sigma=\boldsymbol\sigma'-p\boldsymbol m. σ = σ ′ − p m .
这里 σ \boldsymbol\sigma σ 表示四分量 Voigt 列向量。因此 σ r r = σ r r ′ − p \sigma_{rr}=\sigma'_{rr}-p σ rr = σ rr ′ − p 、σ z z = σ z z ′ − p \sigma_{zz}=\sigma'_{zz}-p σ zz = σ zz ′ − p 、σ θ θ = σ θ θ ′ − p \sigma_{\theta\theta}=\sigma'_{\theta\theta}-p σ θθ = σ θθ ′ − p ,而剪应力 σ r z = σ r z ′ \sigma_{rz}=\sigma'_{rz} σ rz = σ rz ′ 不含孔压项。当前轴对称程序在 cal_Fint 中计算四点有效应力的平均值,并按上式考虑节点孔压,得到用于绘图的总应力;绘图函数直接读取已保存的 State.stress。组装内力和耦合矩阵时仍使用第 8 节的积分公式。
图仍画在 r O z rOz r O z 平面上,颜色表示的物理量不乘 2 π r 2\pi r 2 π r 。但统计平均沉降、平均 PEEQ 或整体误差时,应根据需要,用旋转后的表面积或体积加权。例如 footing 的表面平均沉降记为 u ‾ z Γ \overline u_z^{\Gamma} u z Γ ,Γ \Gamma Γ 是 r–z 平面内代表 footing 接触面的边界线:
u ‾ z Γ = ∫ Γ u z 2 π r d s ∫ Γ 2 π r d s , \overline u_z^{\Gamma}=\frac{\int_\Gamma u_z\,2\pi r\,\mathrm{d}s}{\int_\Gamma2\pi r\,\mathrm{d}s}, u z Γ = ∫ Γ 2 π r d s ∫ Γ u z 2 π r d s ,
将各节点的取值直接相加再除以节点数,一般不等于这个表面平均值。计算最大值则不需要加权。当前已输出环向应力,可用于检查轴线附近的结果,以及传给本构的各分量是否对应正确。
12. 外荷载、斜边与圆弧法向压力
12.1 等效节点力需要旋转表面积
这里 Γ \Gamma Γ 泛指需要施加荷载的边界线,N I N_I N I 表示节点 I I I 的型函数在该边界上的取值,F I Γ \boldsymbol F_I^\Gamma F I Γ 是这条边界对节点 I I I 的径向、轴向等效力:
F I Γ = ∫ Γ N I t 2 π r d s , t = [ t r , t z ] T . \boxed{\boldsymbol F_I^\Gamma=\int_\Gamma N_I\boldsymbol t\,2\pi r\,\mathrm{d}s,\qquad \boldsymbol t=[t_r,t_z]^T.} F I Γ = ∫ Γ N I t 2 π r d s , t = [ t r , t z ] T .
t \boldsymbol t t 是旋转表面单位面积上的面力,也就是 traction,两个分量分别沿径向、轴向。若壁面压力 p w p_w p w 以受压为正,则
t = − p w n o u t . \boldsymbol t=-p_w\boldsymbol n_{\mathrm{out}}. t = − p w n out .
n o u t \boldsymbol n_{\mathrm{out}} n out 是所计算固体域的单位外法向 ,上标或下标中的 o u t \mathrm{out} out 表示向外。
注意: 内腔边界的外法向指向腔内,不能统一认定它都指向圆心外侧。规定孔压与施加机械压力依然是两件事,必须分别设置。
对任意直线斜边,将两个端点局部编号为 1 , 2 1,2 1 , 2 ,对应半径为 r 1 , r 2 r_1,r_2 r 1 , r 2 ,边长为 L L L ;这个例子中的 Γ \Gamma Γ 就是该直边。若面力 t \boldsymbol t t 的径向、轴向分量沿该边都为常数,使用线性边型函数可得精确结果
F 1 Γ = 2 π L 6 ( 2 r 1 + r 2 ) t , F 2 Γ = 2 π L 6 ( r 1 + 2 r 2 ) t . \boldsymbol F_1^\Gamma=\frac{2\pi L}{6}(2r_1+r_2)\boldsymbol t,\qquad \boldsymbol F_2^\Gamma=\frac{2\pi L}{6}(r_1+2r_2)\boldsymbol t. F 1 Γ = 6 2 π L ( 2 r 1 + r 2 ) t , F 2 Γ = 6 2 π L ( r 1 + 2 r 2 ) t .
除非两端半径相同,否则两个节点分得的力不相等。这个常值面力的例子使用二点 Gauss 就足够;若面力沿边变化,需要根据函数形式增加积分点,或使用自适应数值积分。边界流量、热流量按 d S \mathrm{d}S d S 积分;体力、热源按 d V \mathrm{d}V d V 积分。
12.2 折线边界上的法向压力
本文采用直线段逼近圆弧,与 cal_Fu 的直边网格接口一致。各段使用自己的长度、半径和外法向,按第 12.1 节积分;通过加密边界网格逼近圆弧。
图 4。 这是实心物体外表面的示例。左图的法向随圆弧位置变化;右图故意用很粗的折线,每条直边上的两根红箭头相互平行。绿箭头均表示正压力,方向与各自的固体外法向相反。两边都是在 r O z rOz r O z 平面看旋转体的边界。本文采用右图的逐段直线边处理。
注意: 若积分点仍在直线弦上,却使用真实圆的法向,就是把两种几何处理混在一起,所得荷载不等于沿真实圆弧积分的结果。即使单独把荷载改为沿圆弧积分,只要三角形单元仍使用直边,单元内部计算采用的仍是直边几何。
用圆筒或球壳算例检查边界网格加密后的结果。
12.3 轴向节点力可以直接求和,径向节点力要怎样理解
轴向节点力之和可以直接与三维物体的轴向总力比较。径向则不同:平面网格的一个节点旋转后是一整圈,这一圈不同位置的径向方向并不相同。程序中的径向节点力表示使这一圈向内或向外运动的力,通常称为“径向广义力”。把这些数值相加,不能当作沿某个固定水平方向的三维合力。
例如半径为 R c y l R_{\mathrm{cyl}} R cyl 、高度为 L L L 的外圆柱壁受均匀压力,程序中的径向力合计为 − 2 π R c y l L p w -2\pi R_{\mathrm{cyl}}Lp_w − 2 π R cyl L p w 。但从三维看,圆周两侧的水平力方向相反,完整一圈的水平合力为零。对半径为 R s p h R_{\mathrm{sph}} R sph 的半球面,轴向压力合力可以用压力乘圆形投影面积,即 p w π R s p h 2 p_w\pi R_{\mathrm{sph}}^2 p w π R sph 2 ,来核对大小,正负号由实际法向决定。
轴对称荷载区域由其旋转后的几何确定:触及 r = 0 r=0 r = 0 的顶面区间旋转后是圆形 footing,不触及轴线的区间旋转后是环形 footing。原来的条形 footing 几何不能只把 x 改为 r 就认为物理问题相同。
12.4 机械体积力与等效节点力
准静态力学平衡方程为
∇ ⋅ σ + f = 0 , σ = σ ′ − p 1 . \nabla\cdot\boldsymbol\sigma+\boldsymbol f=\boldsymbol0,
\qquad \boldsymbol\sigma=\boldsymbol\sigma'-p\boldsymbol1. ∇ ⋅ σ + f = 0 , σ = σ ′ − p 1 .
此处 σ \boldsymbol\sigma σ 为应力张量,1 \boldsymbol1 1 为二阶单位张量;对应第 11.4 节的 Voigt 写法为 − p m -p\boldsymbol m − p m 。力学方程的试函数取为虚位移向量 v u = [ v r , v z ] T \boldsymbol v_u=[v_r,v_z]^T v u = [ v r , v z ] T ,并在规定位移的边界上使相应分量为零。将平衡方程与 v u \boldsymbol v_u v u 作点积并在域内积分,再对散度项作分部积分,得到
∫ D ε ( v u ) : σ d V − ∫ D v u ⋅ f d V − ∫ Γ t v u ⋅ t ‾ d S = 0 , d V = 2 π r d A , d S = 2 π r d s . \int_D\boldsymbol\varepsilon(\boldsymbol v_u):\boldsymbol\sigma\,\mathrm dV
-\int_D\boldsymbol v_u\cdot\boldsymbol f\,\mathrm dV
-\int_{\Gamma_t}\boldsymbol v_u\cdot\overline{\boldsymbol t}\,\mathrm dS=0,
\qquad
\mathrm dV=2\pi r\,\mathrm dA,
\quad \mathrm dS=2\pi r\,\mathrm ds. ∫ D ε ( v u ) : σ d V − ∫ D v u ⋅ f d V − ∫ Γ t v u ⋅ t d S = 0 , d V = 2 π r d A , d S = 2 π r d s .
机械外荷载分为体力和面力两部分:
F u e x t = F u b o d y + F u Γ , F u , I b o d y = ∫ D N I f ( x , t ) 2 π r d A . \boldsymbol F_u^{\mathrm{ext}}
=\boldsymbol F_u^{\mathrm{body}}+\boldsymbol F_u^\Gamma,
\qquad
\boldsymbol F_{u,I}^{\mathrm{body}}
=\int_D N_I\boldsymbol f(\boldsymbol x,t)\,2\pi r\,\mathrm dA. F u ext = F u body + F u Γ , F u , I body = ∫ D N I f ( x , t ) 2 π r d A .
每个节点仍只有径向、轴向两个体力分量;没有额外的环向节点体力分量或 N I / r N_I/r N I / r 体力项 。环向效应已通过机械应变算子和应力虚功处理。
按四边形子域组装,在母单元 e e e 上令 N u , e = N e ⊗ I 2 N_{u,e}=N_e\otimes I_2 N u , e = N e ⊗ I 2 。这里 ⊗ \otimes ⊗ 表示矩阵的 Kronecker 积 ,I 2 I_2 I 2 是 2 × 2 2\times2 2 × 2 单位矩阵。它把标量型函数复制到径向和轴向两个分量;对 N e = [ N 1 , N 2 , N 3 ] N_e=[N_1,N_2,N_3] N e = [ N 1 , N 2 , N 3 ] ,有
N u , e = [ N 1 0 N 2 0 N 3 0 0 N 1 0 N 2 0 N 3 ] . N_{u,e}=
\begin{bmatrix}
N_1&0&N_2&0&N_3&0\\
0&N_1&0&N_2&0&N_3
\end{bmatrix}. N u , e = [ N 1 0 0 N 1 N 2 0 0 N 2 N 3 0 0 N 3 ] .
这与自由度顺序 [ u r 1 , u z 1 , u r 2 , u z 2 , … ] T [u_{r1},u_{z1},u_{r2},u_{z2},\ldots]^T [ u r 1 , u z 1 , u r 2 , u z 2 , … ] T 一致。因此
F u b o d y = Assemble k Assemble e ∋ k [ ∫ D k e N u , e T f ( x , t ) d V ] . \boxed{
\boldsymbol F_u^{\mathrm{body}}
=\operatorname*{Assemble}_{k}
\operatorname*{Assemble}_{e\ni k}
\left[\int_{D_{ke}}N_{u,e}^{T}\boldsymbol f(\boldsymbol x,t)\,\mathrm dV\right].
} F u body = k Assemble e ∋ k Assemble [ ∫ D k e N u , e T f ( x , t ) d V ] .
注意: 这些子域构成对计算域的划分,不能又把母单元全域积分重复加一次。空间变化体力直接在实际子域内部的 Gauss 点 求值;不需要到可能处于负半径的 SNS 虚拟点上计算外场。应根据体力函数的空间变化检查积分精度,不能保证原来的 3 × 3 3\times3 3 × 3 Gauss 规则对任意体力函数都能精确积分。
当光滑域内 f k \boldsymbol f_k f k 为空间常向量时,可复用第 8.2 节定义的型函数体积积分行向量 I N , k V I_{N,k}^{V} I N , k V 。将该域涉及的节点按局部顺序编号,简记
I N , k V = [ a 1 , a 2 , … ] , a I = ∫ D k N I d V , d V = 2 π r d A . I_{N,k}^{V}=[a_1,a_2,\ldots],
\qquad a_I=\int_{D_k}N_I\,\mathrm dV,
\qquad \mathrm dV=2\pi r\,\mathrm dA. I N , k V = [ a 1 , a 2 , … ] , a I = ∫ D k N I d V , d V = 2 π r d A .
这里 N I N_I N I 是节点 I 在相邻母单元上的连续分片 T3 型函数;不包含该节点的单元上取零。上述写法正是第 8.2 节先对子域积分、再按节点列组装的结果。I N , k V I_{N,k}^{V} I N , k V 是积分行向量,I 2 I_2 I 2 才是单位矩阵 ;前者的上标 V 表示体积积分,不是乘方。
于是体力贡献简化为
F u , k b o d y = [ ( I N , k V ) T ⊗ I 2 ] f k . \boldsymbol F_{u,k}^{\mathrm{body}}
=\left[(I_{N,k}^{V})^T\otimes I_2\right]\boldsymbol f_k. F u , k body = [ ( I N , k V ) T ⊗ I 2 ] f k .
其 Kronecker 积及乘法展开为
[ ( I N , k V ) T ⊗ I 2 ] f k = [ a 1 0 0 a 1 a 2 0 0 a 2 ⋮ ⋮ ] [ f r , k f z , k ] = [ a 1 f r , k a 1 f z , k a 2 f r , k a 2 f z , k ⋮ ] . \left[(I_{N,k}^{V})^T\otimes I_2\right]\boldsymbol f_k
=\begin{bmatrix}
a_1&0\\0&a_1\\
a_2&0\\0&a_2\\
\vdots&\vdots
\end{bmatrix}
\begin{bmatrix}f_{r,k}\\f_{z,k}\end{bmatrix}
=\begin{bmatrix}
a_1f_{r,k}\\a_1f_{z,k}\\
a_2f_{r,k}\\a_2f_{z,k}\\
\vdots
\end{bmatrix}. [ ( I N , k V ) T ⊗ I 2 ] f k = a 1 0 a 2 0 ⋮ 0 a 1 0 a 2 ⋮ [ f r , k f z , k ] = a 1 f r , k a 1 f z , k a 2 f r , k a 2 f z , k ⋮ .
若该光滑域涉及 n n o d e , k n_{\mathrm{node},k} n node , k 个节点,中间矩阵的尺寸为 2 n n o d e , k × 2 2n_{\mathrm{node},k}\times2 2 n node , k × 2 ,结果是 2 n n o d e , k × 1 2n_{\mathrm{node},k}\times1 2 n node , k × 1 的节点力向量。每个节点得到 a I f k a_I\boldsymbol f_k a I f k ,依次排列径向、轴向分量;这只是矩阵组装的紧凑写法,不增加新的物理假设。a I a_I a I 的量纲为体积,乘以单位总体积的力后,得到节点力。
纯重力、均匀参考密度时只需代入 f k = ρ g \boldsymbol f_k=\rho\boldsymbol g f k = ρ g 。这里保留 f k \boldsymbol f_k f k 的 k,是标记局部外荷载,不是材料参数下标;均匀材料仍允许一般机械体力随空间变化。对这种变化体力应使用前面的积分式,不能用一个中心值代替整个积分。
机械残差仍按左端减右端定义:
R u = f u s k e l − K 12 P − F u Γ − F u b o d y . \boxed{
\boldsymbol R_u
=\boldsymbol f_u^{\mathrm{skel}}-K_{12}\boldsymbol P
-\boldsymbol F_u^\Gamma-\boldsymbol F_u^{\mathrm{body}}.
} R u = f u skel − K 12 P − F u Γ − F u body .
体力是当前时刻的准静态力,不乘 Δ t \Delta t Δ t 。当 f ( x , t ) \boldsymbol f(\boldsymbol x,t) f ( x , t ) 、参考密度及几何均不依赖当前未知量时,它不增加 K 11 , K 12 , K 13 K_{11},K_{12},K_{13} K 11 , K 12 , K 13 的导数项。对于随变形变化的体力、更新密度或随动荷载,必须另行线性化,不能继续沿用这个“无附加切线”结论。
13. 哪些数据可以预计算,哪些 MEX 需要重新编译
在本文的固定网格下,面积、实际体积、型函数的体积积分、B/E 及其梯度、虚拟点矩阵、自由度编号和边界几何都可以只算一次、保存起来供后面使用。材料参数应单独读取;试算应力、塑性变量和算法切线则随本构更新,不能当作固定的几何数据。
注意: 开启热对流后,K 33 A d v K_{33\mathrm{Adv}} K 33 Adv 取决于当前孔压,K 32 A d v K_{32\mathrm{Adv}} K 32 Adv 取决于当前温度梯度;它们须在每轮 Newton 和每次 line search 候选试算时更新,即使固体是线弹性也不能直接当作常数矩阵重复使用。
轴对称 MEX 需按本文的几何与材料接口重新编译,并支持可变的节点数、单元数。平面 MEX 的几何字段和积分公式不同,不能直接复用。
给定常重力和固定参考系数时,G p \boldsymbol G_p G p 与纯重力对流矩阵可以预计算;随时间变化的机械体力应在当前时刻更新,空间变化部分在实际子域内积分。完整 K 33 A d v K_{33\mathrm{Adv}} K 33 Adv 仍随当前孔压更新。
14. 检查要求与已有验证记录
验证范围: 第 14.2 节汇总原 markdown 文件中无重力实现的测试记录;本次整理沿用这些记录和 Smooth_T3_axisym.m 的代码摘录,未重跑 MATLAB 算例或重新核查该函数源码。记录时轴对称 MEX 尚未编译。通用检查要求列于第 14.1 节,新增体力、重力实现的验证项目列于第 14.3 节,运行结果留待补充。
14.1 通用检查要求
下表列出离散实现的通用检查项目及适用条件。
14.2 原 markdown 文件记录的已有检查结果
早期小程序记录包括:子域实际体积、参考函数的 14 / 15 14/15 14/15 环向应变问题、母单元中心矩阵按面积平均产生的不平衡内力,以及 2 × 2 2\times2 2 × 2 与 3 × 3 3\times3 3 × 3 Gauss 积分的差异。还记录了当时无重力实现的矩阵块、残差符号、机械与温升 patch、零模式等检查,并据此确定精确平均环向行。
该文件记载,当时的模板通过了 40 个机械与温升 patch,以及菱形零模式、非零孔压边界、传热、PPP、矩阵块残差差分和 J2/DP 加载—保持—卸载检查;球壳算例完成了四级网格加密及解析位移比较。
2026-09-14 加入无重力热对流后,该文件还记录了四种 patch 在修改前、关闭对流、开启对流三种情况下的 12 次运行:保存状态、残差及除运行时间外的 Newton 记录逐项一致。非均匀孔压、温度下,对流向量与独立四点计算的相对差异不超过 1.4 × 1 0 − 15 1.4\times10^{-15} 1.4 × 1 0 − 15 ;温度残差对孔压、温度的有限差分相对误差不超过 4.0 × 1 0 − 11 4.0\times10^{-11} 4.0 × 1 0 − 11 。
14.3 体力与重力的新增检查要求
含体力和重力的实现按下表检查空间离散、边界条件和求解过程。
15. 已确定的策略与实现顺序
以下列出本文采用的离散策略与实现顺序。
光滑与体积,已确定: 所有光滑操作均按体积加权。使用四边形子域的实际旋转体积,不用母三角形旋转体积的 1 / 3 1/3 1/3 ,也不用四个顶点的平均半径代替子域面积形心半径。
矩阵构造,已确定: 按第 4.3 节计算平均 B,按第 5.3、7.3 节计算 B、E 的梯度,再按第 6.1、7.1 节构造虚拟点矩阵。
SNS 四点,已确定: 保留ℓ k = A k / π \ell_k=\sqrt{A_k/\pi} ℓ k = A k / π 的点距,每点权重为 V k / 4 V_k/4 V k /4 ,不重新布点或改成不等权。
THM 矩阵与残差,已确定: 按已确定的几何与光滑方案使用第 8 节的公式。第 8.2、8.3 节使用均匀各向同性、b = 1 b=1 b = 1 的简化材料公式,残差与切线使用同一套几何矩阵和积分,并用数值扰动核对。
积分与 PPP,已确定: 四边形采用 3 × 3 3\times3 3 × 3 Gauss 点;PPP 改用母三角形的体积平均压力,其积分按实际旋转体积计算,系数仍根据固定弹性模量计算。
轴线与材料: 在轴线上施加 u r = 0 u_r=0 u r = 0 ,u z u_z u z 只按实际的轴向位移边界条件约束;采用第 0 节的单一均匀、各向同性且 b = 1 b=1 b = 1 的材料设定。
边界,已确定: 用直线段逼近圆弧,各段使用自己的外法向,面力积分乘 2 π r 2\pi r 2 π r 。
热对流: 用 Keyword.HeatAdvection 开关选择。按第 8.5 节使用四个虚拟积分点,Darcy 速度与温度梯度均用 E ~ k g \widetilde E_{kg} E k g ,试函数用 N ~ k g \widetilde N_{kg} N k g 插值,每点权重为 V k / 4 V_k/4 V k /4 。温度残差、对温度的切线、对孔压的切线同时加入,保持非线性本构接口。
按第 14 节进行检查:基础机械与温升 patch 先设体力、重力为零,所有节点规定 p = 0 p=0 p = 0 ;再用有解析解的非均匀轴对称算例检查网格加密效果。