饱和渗流中,渗透系数通常可以视为常数;非饱和土却不同,含水率与渗透系数都会随压力水头变化。降雨入渗时,某个高斯点的压力水头只要略有改变,就可能使该点的渗透系数跨越数个数量级,进而改变单元渗透矩阵。非饱和渗流计算的核心困难不是线性方程求解,而是本构参数与未知压力场之间的强非线性耦合。

本文以二维瞬态渗流为对象,采用压力水头作为基本未知量,依次说明质量守恒、Richards 方程、土水特征曲线、有限元弱式、时间离散和高斯点迭代。最后给出适合程序实现的收敛判据与排错清单。

开始前需要统一约定:水平向右,竖直向上;压力水头,非饱和区内通常有;总水头为;源项表示向土体内补水。

降雨入渗条件下的非饱和区、地下水位、有限元网格与渗流路径

一、从微元水量平衡到 Richards 方程

1. 质量守恒

取尺寸为、单位厚度的二维微元。令达西通量,通量方向按坐标正方向取正。微元内储水量的增加等于净流入量与源项之和,因此有

其中,为体积含水率,的量纲为。若程序使用节点流量而不是体积源强度,需要先根据单元面积和厚度完成量纲换算。

二维微元的水平与竖向水量收支

2. 达西定律与符号检查

各向异性介质中的达西定律写为

若材料主轴与坐标轴重合,则

负号表示水从高总水头流向低总水头。实现时最容易出错的是重力项:当轴向上时,;若程序把竖直坐标向下定义,重力项必须同步改变符号。

将式代入式,得到混合形式的 Richards 方程:

它同时适用于非饱和区和饱和区。非线性来自两个位置:储水关系和渗透关系。COMSOL 的 Richards 方程接口同样把压力作为未知量,并允许水力性质随饱和状态改变;这也是此类问题需要非线性迭代的根本原因。

二、土水特征曲线与非饱和渗透系数

1. 有效饱和度

定义有效饱和度

其中,分别为饱和与残余体积含水率。采用 van Genuchten 模型时,常写为

于是

控制进气吸力的尺度,控制曲线陡峭程度。van Genuchten 模型的连续形式不仅便于拟合试验数据,也能避免不连续斜率给数值迭代带来的额外困难。

2. 容水度

压力水头形式的容水度定义为

时,式对应

若程序以孔隙水压力为未知量,则

因此不能把针对压力水头标定的容水度直接用于孔压方程,否则会遗漏,导致储水项出现数量级错误。

3. Mualem–van Genuchten 渗透关系

各向同性时,非饱和渗透系数可写成

其中为饱和渗透系数。常用的 Mualem–van Genuchten 相对渗透系数为

为孔隙连通参数,常用初值为,但最终应由试验或可靠资料确定。原始研究表明,低含水率段的土水特征曲线会显著影响非饱和渗透系数预测,因此不能只关注接近饱和区的拟合效果。

三、有限元弱式

在区域内取试函数。把式乘以并分部积分,若边界入流通量定义为流入区域,可得

采用单元形函数插值

在一次线性化迭代中,单元容量矩阵和渗透矩阵分别为

重力项为

这些积分通常在高斯点计算。对四节点四边形单元,积分对应四个高斯点;每个点都要根据当前压力水头重新计算,再组装到单元矩阵中。

四、时间离散与非线性残量

使用后向欧拉格式,从时刻前进到。相比直接把离散,混合形式保留含水率增量:

离散残量可以写为

目标是求得。Celia 等人的研究指出,混合形式比单纯的压力水头形式更有利于保持质量守恒;时间项采用合适的集中处理还可减小非物理振荡。

五、高斯点本构更新与收敛

单元高斯点上的含水率和渗透系数更新,以及迭代误差收敛过程

1. Picard 迭代框架

在时间步的第次迭代中,以计算所有高斯点本构量,组装近似切线矩阵,然后求解增量:

为松弛系数。普通时间步可取;干湿交界面移动剧烈或迭代振荡时,可暂时减小到。完整 Newton 法还会把对残量的贡献放入雅可比矩阵,局部收敛更快,但实现和调试成本也更高。

2. 为什么不能只检查节点压力

当土体很干时,曲线可能非常陡。节点压力增量已经很小,不代表高斯点渗透系数已经稳定;反过来,绝对渗透系数极小时,单纯计算相对误差又容易被浮点噪声放大。因此建议同时监控三类指标。

压力水头增量:

高斯点渗透系数变化:

平衡残量:

只有三项同时满足

才接受当前时间步。容差必须结合单位、网格与材料曲线确定;调试初期可从的相对容差开始,再通过时间步和网格收敛试验收紧。只用于误差归一化,不应偷偷改变物理本构值。

3. 质量平衡复核

非线性迭代收敛后还应检查整个区域的水量平衡:

其中

若残量已经很小而仍持续累积,应优先检查时间项是否使用了含水率增量、边界通量符号、积分权重、单元厚度和节点流量分配,而不是盲目增加迭代次数。

六、边界条件的程序表达

1. 定水头边界

给定。必须确认输入量究竟是孔压、压力水头还是总水头,三者不能混用。施加本质边界后,应同步修改矩阵与右端项,避免只覆盖解向量而破坏平衡方程。

2. 流量边界

给定法向入流。降雨强度并不总能全部转化为入渗通量:当表面达到饱和或所需入渗能力不足时,边界可能需要从给定通量切换为给定压力,并把剩余水量计为地表径流。

3. 无流边界

。在弱式中它属于自然边界,不需要额外装配边界向量,但仍要确认模型底部是否真的可以视为不透水层。

4. 渗出面

渗出面通常同时包含压力约束与单向出流条件,边界范围会随解变化。若直接把整个潜在渗出边界固定为零压力,往往会高估排水范围;更稳妥的做法是在每次非线性迭代后更新活动边界集合。

七、建议的程序流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
读取网格、材料、初始条件和边界条件
计算初始高斯点 θ、C、K

for n = 0 ... nstep - 1
取 ψ^(0) = ψ^n

for m = 0 ... iter_max - 1
for 每个单元
for 每个高斯点
插值得到 ψ_g
更新 Se_g、θ_g、C_g、K_g
计算容量、渗透、重力和源项贡献
end for
组装全局残量 R 和切线矩阵 A
end for

施加本质边界
求解 A Δψ = -R
更新 ψ^(m+1) = ψ^(m) + ω Δψ
重新计算 η_ψ、η_K、η_R

if 三项均收敛
接受 ψ^(m+1)
exit
end if
end for

if 未收敛
减小 Δt,回滚到 ψ^n 后重算
else
检查全局水量平衡
输出节点压力、高斯点饱和度与通量
根据迭代次数调整下一步 Δt
end if
end for

时间步自适应通常比单纯提高最大迭代次数更有效:若连续几个时间步只需少量迭代,可以适度放大;若迭代超过上限、误差振荡或边界状态频繁切换,则应回滚并减小

八、常见不收敛原因

现象常见原因优先处理方法
第一个时间步立即发散初始场与边界条件不协调先求稳态初始场,或缓慢加载边界
压力振荡、渗透系数来回跳变时间步过大,过陡减小时间步并使用松弛更新
节点压力收敛但流量不稳定只检查了增加高斯点与残量判据
水量误差持续累积时间项、边界通量或单位错误用式分项核对
饱和线附近难以收敛本构关系在附近不光滑检查分段函数及一阶导数连续性
干燥区矩阵病态过小、网格质量差改善网格,使用缩放和稳健预条件
降雨通量导致正压力异常增长未实现通量—压力边界切换加入积水与径流判定

九、验证顺序

程序完成后,不应直接用复杂边坡算例判断正确性。建议按以下顺序验证:

  1. 静水压力场:无源、无流边界下,总水头应保持常数;
  2. 饱和稳态渗流:令,与线性达西渗流结果比较;
  3. 一维入渗:检查湿润锋位置、含水率分布和累计入渗量;
  4. 时间步收敛:逐次减半,比较关键点压力与总入渗量;
  5. 网格收敛:加密网格后,结果应趋于稳定;
  6. 全局质量守恒:每个时间步及整个计算时段都应记录水量误差。

验证通过后,再引入分层土、各向异性、降雨切换边界和渗出面。这样可以把“控制方程错误”“材料参数错误”和“边界算法错误”分开定位。

十、总结

二维非饱和瞬态渗流有限元程序可以归纳为一条清晰主线:

其中最关键的实现细节有三点:使用含水率增量表达时间项;在每次迭代中更新高斯点的;同时检查压力增量、渗透系数变化、残量与全局水量平衡。只要这四层检查能够闭合,程序的稳定性和可解释性都会明显提高。

参考资料

  1. van Genuchten, M. Th. (1980). A Closed-form Equation for Predicting the Hydraulic Conductivity of Unsaturated Soils.
  2. Celia, M. A., Bouloutas, E. T., & Zarba, R. L. (1990). A General Mass-Conservative Numerical Solution for the Unsaturated Flow Equation.
  3. COMSOL. About Richards’ Equation.
  4. MOOSE PorousFlow. Capillary Pressure and the van Genuchten Relationship.