双 Richards 方程双渗模型。 在裂隙发育完全的边坡,可以使用等效法将裂隙平均到基质中,使用两个里查兹方程来方便描述裂隙的渗流情况和基质的渗流情况,并考虑裂隙与基质的水交换。 从数值模拟的结果可以看出:当降雨强度较低时,以基质流入渗为主,水交换为从基质到裂隙; 当降雨强度较高时,以裂隙流(优势流)入渗为主,水交换为从裂隙到基质。 只有流体交换,无边坡折减
在裂隙发育的边坡渗流分析中,传统单Richards方程常捉襟见肘。想象裂隙像高速公路,基质如同乡间小道,二者的水力传导系数可能相差三个数量级。这时候双Richards方程双渗模型就派上用场了——它让两个渗流场在计算域中并存且相互对话。
咱们先看模型的核心结构。裂隙和基质各自拥有独立的Richards方程控制渗流:
def fracture_richards(h_f, h_m): C_f = dθ/dh(h_f) # 裂隙含水量导数 K_f = 1e-4 * np.exp(5*h_f) # 裂隙导水率 return C_f*dh_f/dt - div(K_f*grad(h_f + z)) + Γ(h_f, h_m) # 基质相控制方程 def matrix_richards(h_m, h_f): C_m = dθ/dh(h_m) K_m = 1e-7*(h_m>0 ? exp(2*h_m) : 1e-3) # 基质导水率 return C_m*dh_m/dt - div(K_m*grad(h_m + z)) - Γ(h_f, h_m)水交换项Γ是模型的关键创新点。这里采用拟稳态假设下的交换公式:
Γ = α*(hf - hm) # α是交换系数,与接触面积相关
但实际编码时会发现,直接显式计算Γ容易导致数值震荡。我们采用半隐式处理:
# 在时间步n到n+1的计算中 Γ = α * (h_f^{n+1} - h_m^{n}) # 裂隙项隐式,基质项显式这种不对称处理既保持稳定性,又避免完全隐式带来的耦合求解难题。代码实现时,需要特别注意裂隙和基质网格的映射关系——通常裂隙网格比基质粗糙,这里采用多尺度嵌套网格:
class DualMesh: def __init__(self): self.fracture_mesh = create_structured_grid(resolution=1.0) # 粗网格 self.matrix_mesh = create_structured_grid(resolution=0.1) # 细网格 self.mapping = create_interpolation_matrix() # 网格映射关系当处理暴雨入渗场景时,裂隙的"高速公路"效应开始显现。以下是一段入渗边界处理的代码片段:
def apply_rainfall(boundary_conditions, rain_intensity): for face in fracture_boundary: if is_infiltration_zone(face): q = min(rain_intensity, K_f_sat) # 入渗量不超过饱和导水率 boundary_conditions[face] = NeumannBC(q) for face in matrix_boundary: boundary_conditions[face] = NeumannBC(0) # 基质表面通常设为不透水数值模拟中观察到有趣的现象:当降雨强度低于基质饱和导水率时,水分优先从基质入渗,就像用吸管喝水;但暴雨来临时,裂隙瞬间成为主通道,此时裂隙压力升高,反而向基质"泄洪"。这种流向反转可以用相间压力梯度解释:
hf < hm → Γ为负 → 水流从基质流向裂隙
hf > hm → Γ为正 → 水流从裂隙流向基质
通过监测交换项的能量变化,我们能更直观理解这个过程:
energy_exchange = np.zeros(num_steps) for step in range(num_steps): solve_equations() energy_exchange[step] = np.sum(Γ * (h_f - h_m) * dx)这个能量积分量从负数转为正数的时刻,就是渗流主导权易手的临界点。实践发现,该转折点不仅与降雨强度相关,更受裂隙网络拓扑结构的影响——密集的裂隙网会显著降低临界降雨阈值。
模型虽未直接耦合力学分析,但其输出的孔隙压力场已为后续稳定性计算打下基础。毕竟,水压的跷跷板效应,才是滑坡启动的第一推手。