【课程】03 Richards方程数值解

1 模型结构

1.1 Richards方程

Z Z Z方向Richards方程
∂ θ ∂ t = ∂ ∂ z [ D ( θ ) ∂ θ ∂ z − K ( θ ) ] \frac{\partial \theta}{\partial t} = \frac{\partial}{\partial z}[D(\theta) \frac{\partial \theta}{\partial z} - K(\theta)] tθ=z[D(θ)zθK(θ)]

式中, D ( θ ) D(\theta) D(θ)为扩散率, K ( θ ) K(\theta) K(θ)为导水率

1.2 差分格式

∂ θ ∂ z = θ i + 1 2 j + 1 − θ i − 1 2 j + 1 Δ z \frac{\partial \theta}{\partial z} = \frac{\theta_{i+\frac{1}{2}}^{j+1}-\theta_{i-\frac{1}{2}}^{j+1}}{\Delta z} zθ=Δzθi+21j+1θi21j+1

∂ θ ∂ t = θ i j + 1 − θ i j Δ t \frac{\partial \theta}{\partial t} = \frac{\theta_{i}^{j+1}-\theta_{i}^{j}}{\Delta t} tθ=Δtθij+1θij

1.3 方程离散

θ i j + 1 − θ i j Δ t = [ D ( θ ) ∂ θ ∂ z − K ( θ ) ] i + 1 2 j + 1 − [ D ( θ ) ∂ θ ∂ z − K ( θ ) ] i − 1 2 j + 1 Δ z \frac{\theta_{i}^{j+1}-\theta_{i}^{j}}{\Delta t} = \frac{[D(\theta) \frac{\partial \theta}{\partial z} - K(\theta)]_{i+\frac{1}{2}}^{j+1} - [D(\theta) \frac{\partial \theta}{\partial z} - K(\theta)]_{i-\frac{1}{2}}^{j+1}}{\Delta z} Δtθij+1θij=Δz[D(θ)zθK(θ)]i+21j+1[D(θ)zθK(θ)]i21j+1

[ D ( θ ) ∂ θ ∂ z − K ( θ ) ] i + 1 2 j + 1 = D ( θ ) i + 1 2 j + 1 ( θ i + 1 2 j + 1 − θ i − 1 2 j + 1 Δ z ) i + 1 2 j + 1 − K ( θ ) i + 1 2 j + 1 = D ( θ ) i + 1 2 j + 1 θ i + 1 j + 1 − θ i j + 1 Δ z − K ( θ ) i + 1 2 j + 1 [D(\theta) \frac{\partial \theta}{\partial z} - K(\theta)]_{i+\frac{1}{2}}^{j+1} = D(\theta)_{i+\frac{1}{2}}^{j+1} (\frac{\theta_{i+\frac{1}{2}}^{j+1}-\theta_{i-\frac{1}{2}}^{j+1}}{\Delta z})_{i+\frac{1}{2}}^{j+1}- K(\theta)_{i+\frac{1}{2}}^{j+1} = D(\theta)_{i+\frac{1}{2}}^{j+1} \frac{\theta_{i+1}^{j+1}-\theta_{i}^{j+1}}{\Delta z}- K(\theta)_{i+\frac{1}{2}}^{j+1} [D(θ)zθK(θ)]i+21j+1=D(θ)i+21j+1(Δzθi+21j+1θi21j+1)i+21j+1K(θ)i+21j+1=D(θ)i+21j+1Δzθi+1j+1θij+1K(θ)i+21j+1

[ D ( θ ) ∂ θ ∂ z − K ( θ ) ] i − 1 2 j + 1 = D ( θ ) i − 1 2 j + 1 ( θ i + 1 2 j + 1 − θ i − 1 2 j + 1 Δ z ) i − 1 2 j + 1 − K ( θ ) i − 1 2 j + 1 = D ( θ ) i − 1 2 j + 1 θ i j + 1 − θ i − 1 j + 1 Δ z − K ( θ ) i − 1 2 j + 1 [D(\theta) \frac{\partial \theta}{\partial z} - K(\theta)]_{i-\frac{1}{2}}^{j+1} = D(\theta)_{i-\frac{1}{2}}^{j+1} (\frac{\theta_{i+\frac{1}{2}}^{j+1}-\theta_{i-\frac{1}{2}}^{j+1}}{\Delta z})_{i-\frac{1}{2}}^{j+1}- K(\theta)_{i-\frac{1}{2}}^{j+1} = D(\theta)_{i-\frac{1}{2}}^{j+1} \frac{\theta_{i}^{j+1}-\theta_{i-1}^{j+1}}{\Delta z}- K(\theta)_{i-\frac{1}{2}}^{j+1} [D(θ)zθK(θ)]i21j+1=D(θ)i21j+1(Δzθi+21j+1θi21j+1)i21j+1K(θ)i21j+1=D(θ)i21j+1Δzθij+1θi1j+1K(θ)i21j+1


θ i j + 1 − θ i j Δ t = 1 Δ z [ D ( θ ) i + 1 2 j + 1 θ i + 1 j + 1 − θ i j + 1 Δ z − K ( θ ) i + 1 2 j + 1 − D ( θ ) i − 1 2 j + 1 θ i j + 1 − θ i − 1 j + 1 Δ z + K ( θ ) i − 1 2 j + 1 ] \frac{\theta_{i}^{j+1}-\theta_{i}^{j}}{\Delta t} = \frac{1}{\Delta z}[D(\theta)_{i+\frac{1}{2}}^{j+1} \frac{\theta_{i+1}^{j+1}-\theta_{i}^{j+1}}{\Delta z}- K(\theta)_{i+\frac{1}{2}}^{j+1}-D(\theta)_{i-\frac{1}{2}}^{j+1} \frac{\theta_{i}^{j+1}-\theta_{i-1}^{j+1}}{\Delta z}+ K(\theta)_{i-\frac{1}{2}}^{j+1}] Δtθij+1θij=Δz1[D(θ)i+21j+1Δzθi+1j+1θij+1K(θ)i+21j+1D(θ)i21j+1Δzθij+1θi1j+1+K(θ)i21j+1]

Δ t D ( θ ) i − 1 2 j + 1 Δ z 2 θ i − 1 j + 1 + { 1 + Δ t Δ z 2 [ D ( θ ) i + 1 2 j + 1 − D ( θ ) i − 1 2 j + 1 ] } θ i j + 1 − Δ t D ( θ ) i + 1 2 j + 1 Δ z 2 θ i + 1 j + 1 = θ i j − Δ t Δ z K ( θ ) i + 1 2 j + 1 + Δ t Δ z K ( θ ) i − 1 2 j + 1 \frac{\Delta t D(\theta)_{i-\frac{1}{2}}^{j+1}}{{\Delta z}^2}\theta_{i-1}^{j+1}+\{1+\frac{\Delta t}{{\Delta z}^2}[D(\theta)_{i+\frac{1}{2}}^{j+1}-D(\theta)_{i-\frac{1}{2}}^{j+1}]\}\theta_i^{j+1}-\frac{\Delta t D(\theta)_{i+\frac{1}{2}}^{j+1}}{{\Delta z}^2}\theta_{i+1}^{j+1} = \theta_i^j-\frac{\Delta t}{\Delta z}K(\theta)_{i+\frac{1}{2}}^{j+1}+\frac{\Delta t}{\Delta z}K(\theta)_{i-\frac{1}{2}}^{j+1} Δz2ΔtD(θ)i21j+1θi1j+1+{1+Δz2Δt[D(θ)i+21j+1D(θ)i21j+1]}θij+1Δz2ΔtD(θ)i+21j+1θi+1j+1=θijΔzΔtK(θ)i+21j+1+ΔzΔtK(θ)i21j+1


A i θ i − 1 j + 1 + B i θ i j + 1 + C i θ i + 1 j + 1 = D i A_i\theta_{i-1}^{j+1} + B_i\theta_{i}^{j+1}+C_i\theta_{i+1}^{j+1}=D_i Aiθi1j+1+Biθij+1+Ciθi+1j+1=Di
式中
A i = Δ t Δ z 2 D ( θ ) i − 1 2 j + 1 A_i = \frac{\Delta t }{{\Delta z}^2}D(\theta)_{i-\frac{1}{2}}^{j+1} Ai=Δz2ΔtD(θ)i21j+1

B i = 1 + Δ t Δ z 2 [ D ( θ ) i + 1 2 j + 1 − D ( θ ) i − 1 2 j + 1 ] B_i = 1+\frac{\Delta t}{{\Delta z}^2}[D(\theta)_{i+\frac{1}{2}}^{j+1}-D(\theta)_{i-\frac{1}{2}}^{j+1}] Bi=1+Δz2Δt[D(θ)i+21j+1D(θ)i21j+1]

C i = − Δ t Δ z 2 D ( θ ) i + 1 2 j + 1 C_i = -\frac{\Delta t }{{\Delta z}^2}D(\theta)_{i+\frac{1}{2}}^{j+1} Ci=Δz2ΔtD(θ)i+21j+1

D i = θ i j − Δ t Δ z [ K ( θ ) i + 1 2 j + 1 − K ( θ ) i − 1 2 j + 1 ] D_i = \theta_i^j-\frac{\Delta t}{\Delta z}[K(\theta)_{i+\frac{1}{2}}^{j+1}-K(\theta)_{i-\frac{1}{2}}^{j+1}] Di=θijΔzΔt[K(θ)i+21j+1K(θ)i21j+1]

采用半隐式解法,用 j j j时刻的 D D D K K K代替 j + 1 j+1 j+1时刻的值,采用上游迁移法
K i ± 1 2 = K i + K i ± 1 2 K_{i \pm \frac{1}{2}}=\frac{K_i+K_{i\pm1}}{2} Ki±21=2Ki+Ki±1

D i ± 1 2 = D i + D i ± 1 2 D_{i \pm \frac{1}{2}}=\frac{D_i+D_{i\pm1}}{2} Di±21=2Di+Di±1

2 模型条件

2.1 边界条件

上下边界可以是土壤含水率固定值或时间序列 θ ( t ) \theta(t) θ(t),在三对角矩阵的第一行和最后一行添加。

2.2 初始条件

θ x 0 = θ 0 \theta_x^0 = \theta_0 θx0=θ0

2.3 K ( θ ) K(\theta) K(θ)

非饱和土壤导水率 K K K与土壤水吸力 s s s、或与土壤含水率 θ \theta θ的关系,常根据实测结果拟合为经验公式。常用的经验公式形式有
K ( θ ) = K t ( θ θ s ) m 或 K ( θ ) = K t ( θ − θ 0 θ s − θ 0 ) m K(\theta) = K_t(\frac{\theta}{\theta_s})^m 或 K(\theta)=K_t(\frac{\theta - \theta_0}{\theta_s - \theta_0})^m K(θ)=Kt(θsθ)mK(θ)=Kt(θsθ0θθ0)m

K ( θ ) = K t e − β ( θ s − θ ) K(\theta) = K_t e^{-\beta(\theta_s-\theta)} K(θ)=Kteβ(θsθ)

式中, K t K_t Kt为饱和导水率, θ s \theta_s θs为饱和含水率, θ 0 \theta_0 θ0为某一特征含水率, m m m为经验常数。

2.4 D ( θ ) D(\theta) D(θ)

定义非饱和土壤水的扩散率 D ( θ ) D(\theta) D(θ)为导水率 K ( θ ) K(\theta) K(θ)和比水容量 C ( θ ) C(\theta) C(θ)的比值,即
D ( θ ) = K ( θ ) C ( θ ) = K ( θ ) / d θ d ψ m D(\theta)=\frac{K(\theta)}{C(\theta)}=K(\theta)/\frac{d\theta}{d\psi_m} D(θ)=C(θ)K(θ)=K(θ)/dψmdθ
显然,非饱和土壤水的扩散率 D D D同样是土壤含水率 θ \theta θ的或基质势 ψ m \psi_m ψm的函数。其函数关系必须通过试验测定,常用的经验公式形式有
D ( θ ) = a e b θ D(\theta) = ae^{b\theta} D(θ)=aebθ

D ( θ ) = D 0 ( θ θ s ) m D(\theta) = D_0(\frac{\theta}{\theta_s})^m D(θ)=D0(θsθ)m

D ( θ ) = D 0 e − β ( θ 0 − θ ) D(\theta) = D_0e^{-\beta(\theta_0-\theta)} D(θ)=D0eβ(θ0θ)

式中, θ 0 \theta_0 θ0为某一特征含水率, a a a b b b D 0 D_0 D0 m m m β \beta β为经验常数,取决于土壤质地和结构。

3 模型求解

3.1 三对角矩阵

三对角矩阵 A x = B Ax=B Ax=B形式如下:
( 1 0 0 0 … … … … … … 0 A 2 B 2 C 2 A 3 B 3 C 3 A 4 B 4 C 4 A n − 2 B n − 2 C n − 2 A n − 1 B n − 1 C n − 1 0 … … … … … … 0 0 0 1 ) ⏟ A ( θ 1 θ 2 θ 3 θ 4 θ 5 θ n − 2 θ n − 1 θ n ) ⏟ x = ( θ 1 ( t ) D 2 D 3 D 4 D 5 D n − 2 D n − 1 θ n ( t ) ) ⏟ B \underbrace{\begin{pmatrix} 1&0&0&0&\dots&\dots&\dots&\dots&\dots&\dots&0\\[4pt] A_{2}&B_{2}&C_{2}\\[4pt] & A_{3}&B_{3}&C_{3}\\[4pt] & & A_{4}&B_{4}&C_{4} \\[4pt] \\[4pt] & & &&&&&&\\[4pt] & & &&&&&&\\[4pt] & & &&&&&&\\[4pt] & & &&&&&&\\[4pt] & &&&&&& A_{n-2}&B_{n-2}&C_{n-2} \\[4pt] & & &&&&&&A_{n-1}&B_{n-1}&C_{n-1} \\[4pt] 0&\dots &\dots &\dots&\dots&\dots&\dots&0 & 0 &0 &1 \\[4pt] \end{pmatrix}}_{A} \underbrace{\begin{pmatrix} \theta_{1} \\[4pt] \theta_{2} \\[4pt] \theta_{3} \\[4pt] \theta_{4} \\[4pt] \theta_{5} \\[4pt] \\[4pt] \\[4pt] \\[4pt] \\[4pt] \theta_{n-2} \\[4pt] \theta_{n-1} \\[4pt] \theta_{n} \\[4pt] \end{pmatrix}}_{x}=\underbrace{\begin{pmatrix} \theta_{1}(t) \\[4pt] D_{2} \\[4pt] D_{3} \\[4pt] D_{4} \\[4pt] D_{5} \\[4pt] \\[4pt] \\[4pt] \\[4pt] \\[4pt] D_{n-2} \\[4pt] D_{n-1} \\[4pt] \theta_{n}(t) \\[4pt] \end{pmatrix}}_{B} A 1A200B2A30C2B3A40C3B4C4An20Bn2An10Cn2Bn100Cn11 x θ1θ2θ3θ4θ5θn2θn1θn =B θ1(t)D2D3D4D5Dn2Dn1θn(t)

3.2 各参数取值

参数含义取值
Z土柱深度1m
T模拟时间1h
dz空间步长1cm
dt时间步长0.0001h
θ 1 \theta_1 θ1上边界土壤含水量0.30
θ s \theta_s θs饱和土壤含水量0.45
θ 0 \theta_0 θ0初始土壤含水量0.17
K t K_t Kt饱和导水率16.72m/h
m k m_k mk导水率经验常数13
a a a扩散率经验常数20.019
b b b扩散率经验常数212.3804

3 求解结果

3.1 计算结果

result

3.2 MATLAB模型代码

%========================================================

%程序说明
%创建时间:2020.12.22
%最后修改时间:2020.12.28
%程序目标:求Richards方程数值解
%离散方法:半隐式法
%边界条件:土壤含水率固定值或时间序列$\theta(t)$
%上边界:上边界取第一类边界条件,$\theta = \theta_1$
%下边界:底部土壤含水量恒定,等于饱和土壤含水量,$\theta = \theta_s$
%初始条件:
%$\theta_x^0 = \theta_0$
%上游迁移法计算K(i+-1/2)、D(i+-1/2)
%$K(\theta) = K_t(\frac{\theta}{\theta_s})^m$
%$D(\theta) = a*e^{b\theta}$
%方程及结果:https://lujiabo98.github.io/2020/12/22/Course03/

%=========================================================

%变量定义及初始化
clc,clear;

%Z:土柱深度,m,T:时间,s,dz:空间步长,m,dt:时间步长,s,theta_1:上边界土壤含水量,theta_s:饱和土壤含水量,theta_0:初始土壤含水量,theta_r:土壤干旱体积含水量
Z=1; T=1*3600; dz=0.01; dt=0.0001*3600; theta_1 = 0.3; theta_s = 0.45; theta_0 = 0.17; theta_r = 0.132;
%K_t:饱和导水率,m/s; m_k:导水率经验常数; a:扩散率经验常数; b:扩散率经验常数;
K_t = 6.72/3600; m_k = 3; a = 0.019; b = 12.3804;

%n:土柱分段数,N:断面数即theta_i变量数,lambda:网格比,t:时间分段数
n=Z/dz; N=n+1; lambda=dt/dz^2; t = round(T/dt);

%x:theta_i解向量,B:三对角矩阵方程的常数项,I,J,M:三对角矩阵A的三列,K,D:非饱和土壤导水率和扩散率
x=zeros(1,N); B=zeros(1,N); I=zeros(1,N); J=zeros(1,N-1); M=zeros(1,N-1); K=zeros(1,N); D=zeros(1,N);
%K,D:非饱和土壤导水率和扩散率K(i+-1/2)、D(i+-1/2),K_p=K(i+1/2),K_m=K(i-1/2),D_p=D(i+1/2),D_m=D(i-1/2)
K_p=zeros(1,N); K_m=zeros(1,N); D_p=zeros(1,N); D_m=zeros(1,N);

%theta为模拟时段内的土壤含水量过程,X:土壤含水量组合矩阵
theta = zeros(t+1,N); X=zeros(N,t+1);

%初始化theta_i解向量x
for i=1:1:N
    x(i) = theta_0;
end

%上下边界土壤含水量初始化
x(1) = theta_1;
x(N) = theta_s;

%将初始时刻的解向量放入组合矩阵中存储
X(:,1)=x';

%初始化B,I,J,K向量
B(1) = x(1); B(N) = x(N);
I(1) = 1; I(N) = 1;
J(1) = 0; M(N-1) = 0;

%初始化非饱和土壤导水率K(thtea)和扩散率D(theta)
K = K_t * (x / theta_s).^m_k;
D = a * exp(b * x) * 10^(-4) /60;

%=========================================================
%程序主体部分
for k=1:1:t  %按时间层循环
    
    %上游迁移法计算K(i+-1/2)、D(i+-1/2)
    K_p = K; K_m(1) = K(1); K_m(2:end) = K(1:end-1);
    D_p = D; D_m(1) = D(1); D_m(2:end) = D(1:end-1);
    
    %B,I,J向量赋值
    %B(i)为D_i = \theta_i^j-\frac{\Delta t}{\Delta z}[K(\theta)_{i+\frac{1}{2}}^{j+1}-K(\theta)_{i-\frac{1}{2}}^{j+1}]
    B = x - dz * lambda * (K_p - K_m);
    B(1) = x(1); B(N) = x(N);
    
    %三对角矩阵顶角向量I赋值,I(i)为方程组系数B(i)
    I = 1 + lambda * (D_p - D_m);
    I(1) = 1; I(N) = 1;
    
    %三对角矩阵上一向量J赋值,J(i)为方程组系数C(i)
    J = - lambda * D_p(1:end-1);
    J(1) = 0;
    
    %三对角矩阵下一向量M赋值,M(i)为方程组系数A(i)
    M = lambda * D_m(2:end);
    M(N-1) = 0;    
    
    %组合I,J,M向量得到三对角矩阵A
    A = diag(I) + diag(J,1) + diag(M,-1);
    
    %解五对角矩阵差分方程组,并以列形式存储在组合矩阵X中
    X(:,k+1) = A\B';
    
    %这一次的解作为下一次循环的初始值
    x=X(:,k+1)';
    
    %更新非饱和土壤导水率K(thtea)和扩散率D(theta)
    K = K_t * (x / theta_s).^m_k;
    D = a * exp(b * x) * 10^(-4) /60;
end  

%=========================================================
%结果输出
%从组合矩阵X中提取出土壤含水量
%X的每一列表示一个时段的计算结果
%theta的每一行表示一个时段的计算结果

theta = X'; 

%绘制出土壤含水量三维图
figure(1);
mesh(theta);
xlabel('断面n/1cm');
ylabel('时间t/0.0001h');
zlabel('土壤含水量');
%=========================================================

4 参考文献

[1]土壤水动力学,1987.3

[2]李映强.赤红壤非饱和土壤水扩散率及其影响因素[J].华南农业大学学报,1998(02):3-5.

作者简介

很高兴认识您!
我叫卢家波,河海大学水文学及水资源博士研究生,研究兴趣为高效洪水淹没预测、洪水灾害预警、机器学习、替代模型和降阶模型。
变化环境下,极端洪水事件多发,我希望能通过研究为水灾害防御做出贡献,为人民服务。
欢迎交流讨论和研究合作,vx Jiabo_Lu
主页 https://lujiabo98.github.io
简历 https://lujiabo98.github.io/file/CV_JiaboLu_zh.pdf
博客 https://blog.csdn.net/weixin_43012724?type=blog
来信请说明博客标题及链接,谢谢。

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢家波

如果对你有帮助,请我喝杯茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值