非饱和土有限元渗流计算:控制方程、离散与非线性迭代
饱和渗流中,渗透系数通常可以视为常数;非饱和土却不同,含水率与渗透系数都会随压力水头变化。降雨入渗时,某个高斯点的压力水头只要略有改变,就可能使该点的渗透系数跨越数个数量级,进而改变单元渗透矩阵。非饱和渗流计算的核心困难不是线性方程求解,而是本构参数与未知压力场之间的强非线性耦合。
本文以二维瞬态渗流为对象,采用压力水头作为基本未知量,依次说明质量守恒、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 | 读取网格、材料、初始条件和边界条件 |
时间步自适应通常比单纯提高最大迭代次数更有效:若连续几个时间步只需少量迭代,可以适度放大;若迭代超过上限、误差振荡或边界状态频繁切换,则应回滚并减小。
八、常见不收敛原因
| 现象 | 常见原因 | 优先处理方法 |
|---|---|---|
| 第一个时间步立即发散 | 初始场与边界条件不协调 | 先求稳态初始场,或缓慢加载边界 |
| 压力振荡、渗透系数来回跳变 | 时间步过大,过陡 | 减小时间步并使用松弛更新 |
| 节点压力收敛但流量不稳定 | 只检查了 | 增加高斯点与残量判据 |
| 水量误差持续累积 | 时间项、边界通量或单位错误 | 用式分项核对 |
| 饱和线附近难以收敛 | 本构关系在附近不光滑 | 检查分段函数及一阶导数连续性 |
| 干燥区矩阵病态 | 过小、网格质量差 | 改善网格,使用缩放和稳健预条件 |
| 降雨通量导致正压力异常增长 | 未实现通量—压力边界切换 | 加入积水与径流判定 |
九、验证顺序
程序完成后,不应直接用复杂边坡算例判断正确性。建议按以下顺序验证:
- 静水压力场:无源、无流边界下,总水头应保持常数;
- 饱和稳态渗流:令,与线性达西渗流结果比较;
- 一维入渗:检查湿润锋位置、含水率分布和累计入渗量;
- 时间步收敛:逐次减半,比较关键点压力与总入渗量;
- 网格收敛:加密网格后,结果应趋于稳定;
- 全局质量守恒:每个时间步及整个计算时段都应记录水量误差。
验证通过后,再引入分层土、各向异性、降雨切换边界和渗出面。这样可以把“控制方程错误”“材料参数错误”和“边界算法错误”分开定位。
十、总结
二维非饱和瞬态渗流有限元程序可以归纳为一条清晰主线:
其中最关键的实现细节有三点:使用含水率增量表达时间项;在每次迭代中更新高斯点的、和;同时检查压力增量、渗透系数变化、残量与全局水量平衡。只要这四层检查能够闭合,程序的稳定性和可解释性都会明显提高。
参考资料
- van Genuchten, M. Th. (1980). A Closed-form Equation for Predicting the Hydraulic Conductivity of Unsaturated Soils.
- Celia, M. A., Bouloutas, E. T., & Zarba, R. L. (1990). A General Mass-Conservative Numerical Solution for the Unsaturated Flow Equation.
- COMSOL. About Richards’ Equation.
- MOOSE PorousFlow. Capillary Pressure and the van Genuchten Relationship.





