This commit is contained in:
xinxiao
2026-03-13 11:24:41 +08:00
commit 04e2bb29c7
238 changed files with 29102 additions and 0 deletions
@@ -0,0 +1,96 @@
function [eqs, qomf, qofm, qwmf, qwfm, Awell, qwell] = eqsOW_MB(state, state0, dt, r, f, os, Wellc, Weladd, pwf, WelChg)
p = state.p;
sw = state.sw;
p0 = state0.p;
sw0 = state0.sw;
[p, sw] = intADI(p, sw);
% z方向上的位势
%
%z进行处理
z=r.z;
z = intADIz(z);
% Dosi是地面标况下测得的油相密度Dwsi是地面标况下测得的水相密度
% Water Props
BW = f.Bw(p);
muW = f.muw(p);
krW = f.krw(sw);
pcOW = 0;
if f.ifpcow
pcOW = f.pcow(sw);
end
pw = p - pcOW;
dpW = os.grad(pw);
dzw=1e-6*9.8*f.Dwsi*os.grad(z./BW); %
upc = (double(dpW+dzw)<=0);
mobW = os.faceUpstr(upc, krW) .* os.faceAvg(1./(BW.*muW));
bWvW = -r.T .* mobW .* dpW;
% Oil Props
BO = f.Bo(p);
muO = f.muo(p);
krO = f.kro(sw);
dpO = os.grad(p);
dzo=1e-6*9.8*f.Dosi*os.grad(z./BO); %
upc = (double(dpO+dzo)<=0);
mobO = os.faceUpstr(upc, krO) .* os.faceAvg(1./(BO.*muO));
bOvO = -r.T .* mobO .* dpO;
% z方向上的位势
%
%z进行处理
z=r.z;
z = intADIz(z);
% Dosi是地面标况下测得的油相密度Dwsi是地面标况下测得的水相密度
dzo=1e-6*9.8*f.Dosi*os.grad(z./BO); %
dzw=1e-6*9.8*f.Dwsi*os.grad(z./BW); %
% dzo=0.01*os.grad(z./BO); %
% dzw=0.01*os.grad(z./BW); %
bOvO = -r.T .* mobO .* (dpO+dzo);
bWvW=-r.T .* mobW .* (dpW+dzw);
% transfer function (OW)
[qomf, qofm, qwmf, qwfm] = transFunc(r, krO, krW, BO, muO, BW, muW, p, pw);
qomf=qomf*dt;
qofm=qofm*dt;
qwmf=qwmf*dt;
qwfm=qwfm*dt;
% well equation
[Awell, qwell] = WellEquation(r, f, p.val, sw.val, Wellc, Weladd, pwf, WelChg);
Awell=Awell*dt;
qwell=qwell*dt;
% Accumulation term
PV = r.V .* r.por(p);
PV0 = r.V .* r.por(p0);
Ar_w = 1/dt .* (PV .* (sw ./ BW) - PV0 .* (sw0 ./ f.Bw(p0)));
Ar_o = 1/dt .* (PV .* ((1 - sw) ./ BO) - PV0 .* ((1 - sw0) ./ f.Bo(p0)));
% Water Equation
eqs{1} = (-os.div(bWvW) - Ar_w)*dt;
% eqs{1} = -os.div(bWvW) - Ar_w;
% Oil Equation
eqs{2} = (-os.div(bOvO) - Ar_o)*dt;
% eqs{2} = -os.div(bOvO) - Ar_o;
% Rw = Ar_w.val - qwell(1 : r.nc);
% Ro = Ar_o.val - qwell(r.nc+1 : 2*r.nc);
% PVv = PV.val;
% % PV_all = sum(PVv);
% Bwa = mean(BW.val);
% Boa = mean(BO.val);
% MBw = abs(Bwa * dt * (sum(Rw)/PV_all));
% MBo = abs(Boa * dt * (sum(Ro)/PV_all));
@@ -0,0 +1,189 @@
function [eqs, Awell, qwell,PVv, Bga, Bwa] = eqsOW_MB_2014(state, state0, dt, r, f, os, Wellc, Weladd, pwf, WelChg, well_schedules_k)
p = state.p;
sw = state.sw;
cs = state.cs;
cb = state.cb;
p0 = state0.p;
sw0 = state0.sw;
cs0 = state0.cs;
cb0 = state0.cb;
[p, sw, cs, cb] = intADI(p, sw, cs, cb);
% z方向上的位势
% 由于当深度发生变化时,流体的密度也会发生变化,因此不能简单得处理成折算压力的情况计算
%对位势z进行处理
z=r.z;
z = intADIz(z);
% Dosi是地面标况下测得的油相密度,Dwsi是地面标况下测得的水相密度
% % % % 应力敏感系数
% % % exp_paramter_1 = -0.04;
% % % reference_pressure = 20;
% % % stress_factor = exp(exp_paramter_1*(p-reference_pressure));
Nc0 = f.Nc(cs0);
Nc = f.Nc(cs);
% Water Props
BW = f.Bw(p);
muW = f.muw(p);
krW = f.krw(sw, Nc);
pcOW = 0;
if f.ifpcgl
pcOW = f.pcgl(sw);
end
pw = p - pcOW+f.chemistry_potential;
dpW = os.grad(pw);
% dzw=1e-6*9.8*f.Dwsi*os.grad(z./BW); %水相位势梯度
dzw=0;
dpW = dpW+dzw;
upc = (double(dpW)<=0);%一定要是折算压力!
mobW = os.faceUpstr(upc, krW) .* os.faceAvg(1./(BW.*muW));
% mobW = os.faceUpstr(upc, krW) .* os.faceAvg(1./(BW.*muW)) .* os.faceAvg(stress_factor);
% 针对启动压力梯度的平滑处理
if f.p_grad_threshold ~= 0
pcOW0 = f.pcgl(sw0);
pw0 = p0 - pcOW0+f.chemistry_potential;
dpW0 = os.grad(pw0);
dzw0=0;
dpW0 = dpW0+dzw0;
pW_grad = r.T.*dpW0./r.flowArea;
ratio = smooth_relu_stable(pW_grad, f.p_grad_threshold);
else
ratio = 1;
end
bWvW = -r.T .* mobW .* (dpW).*ratio;
% 孔隙度
pore = r.por(p);
% 表活剂
mobW_s = os.faceUpstr(upc, krW.*cs) .* os.faceAvg(1./(BW.*muW));
bWvW_s = -r.T .* mobW_s .* dpW;
dcs = os.grad(cs);
upc_s = (double(dcs)<=0);
mobW_s_diff = os.faceUpstr(upc_s, pore.*sw) .* os.faceAvg(1./(BW));
diff_s = -r.T_diff .*mobW_s_diff .* dcs;
% 盐
mobW_b = os.faceUpstr(upc, krW.*cb) .* os.faceAvg(1./(BW.*muW));
bWvW_b = -r.T .* mobW_b .* dpW;
dcb = os.grad(cb);
upc_b = (double(dcb)<=0);
mobW_b_diff = os.faceUpstr(upc_b, pore.*sw) .* os.faceAvg(1./(BW));
diff_b = -r.T_diff.*mobW_b_diff.*dcb;
% gas Props
BG = f.Bg(p);
muG = f.mug(p);
krG = f.krrg(sw, Nc);
dpG = os.grad(p);
% dzg=1e-6*9.8*f.Dgsi*os.grad(z./BG); %油相位势梯度
dzg=0;
dpG = dpG+dzg;
upc = (double(dpG)<=0);%一定要是折算压力,否则出错!
mgbG = os.faceUpstr(upc, krG) .* os.faceAvg(1./(BG.*muG));
% mobO = os.faceUpstr(upc, krO) .* os.faceAvg(1./(BO.*muO)).* os.faceAvg(stress_factor);
% 针对启动压力梯度的平滑处理
if f.p_grad_threshold ~= 0
dp0 = os.grad(p0);
dzg0=0;
dp0 = dp0+dzg0;
pG_grad = r.T.*dpG./r.flowArea;
pG_grad_new = smooth_relu_stable(pG_grad, f.p_grad_threshold);
bGvG = -r.matrixflag.*f.gas_prop.Kn_modified_factor.* mgbG.* pG_grad_new.*r.flowArea ...
-(1-r.matrixflag).* mgbG.* pG_grad_new.*r.flowArea; % Knudsen 扩散影响
else
bGvG = -r.matrixflag.*f.gas_prop.Kn_modified_factor.*r.T .* mgbG .* dpG ...
-(1-r.matrixflag).*r.T .* mgbG .* dpG; % Knudsen 扩散影响
end
% 非达西流发生仅发生在裂缝网格内
% Forchheimer_factor = 1/(1+kf/mug*beta*density_g*v_gf)
BG0 = f.Bg(p0);muG0 = f.mug(p0);krG0 = f.krrg(sw0,Nc0);dpG0 = os.grad(p0);
dzg0=0;
upc0 = (double(dpG0+dzg0)<=0);%一定要是折算压力,否则出错!
mgbG0 = os.faceUpstr(upc0, krG0) .* os.faceAvg(1./(BG0.*muG0));
% mobO = os.faceUpstr(upc, krO) .* os.faceAvg(1./(BO.*muO)).* os.faceAvg(stress_factor);
v_gf = -(1-r.matrixflag).*r.T .* mgbG0 .* dpG0./r.flowArea;
density_g = f.Dgsi./BG0;
Forchheimer_factor = 1./(1+(1-r.matrixflag).*r.perm./os.faceAvg(muG0).*f.gas_prop.beta_non_Darcy_flow.*os.faceAvg(density_g).*abs(v_gf));
% 分别有基质系统的应力敏感系数 和 裂缝系统的应力敏感系数
stress_factor = r.matrixflag.*exp(f.gas_prop.stress_factor_matrix*(os.faceAvg(p0)-f.gas_prop.stress_factor_ref_pressure))...
+(1-r.matrixflag).*exp(f.gas_prop.stress_factor_fracture*(os.faceAvg(p0)-f.gas_prop.stress_factor_ref_pressure));
% 采用简单的叠加处理
bWvW = bWvW.*stress_factor.*Forchheimer_factor;
bGvG = bGvG.*stress_factor.*Forchheimer_factor;
% z方向上的位势
% 由于当深度发生变化时,流体的密度也会发生变化,因此不能简单得处理成折算压力的情况计算
%对位势z进行处理
% z=r.z;
% z = intADIz(z);
% Dosi是地面标况下测得的油相密度,Dwsi是地面标况下测得的水相密度
% dzo=0.01*os.grad(z./BO); %油相位势梯度
% dzw=0.01*os.grad(z./BW); %水相位势梯度
% bOvO = -r.T .* mobO .* (dpO+dzo);
% bWvW=-r.T .* mobW .* (dpW+dzw);
% transfer function (OW)
% [qomf, qofm, qwmf, qwfm] = transFunc(r, krO, krW, BO, muO, BW, muW, p, pw);
% well equation
[Awell, qwell] = WellEquation(r, f, p.val, sw.val, cs.val, cb.val, Wellc, Weladd, pwf, WelChg, well_schedules_k);
% Awell=dt*Awell;
% qwell=dt*qwell;
% langmuir 等温吸附
V_CH4=r.rpt.*r.V.*(1-r.por(p)).*r.rock_density.*f.gas_prop.VL.*p/f.gas_prop.PL./(1+p/f.gas_prop.PL);
V_CH4_0=r.rpt.*r.V.*(1-r.por(p)).*r.rock_density.*f.gas_prop.VL.*p0/f.gas_prop.PL./(1+p0/f.gas_prop.PL);
% Accumulation term
PV = r.V .* r.por(p);
PV0 = r.V .* r.por(p0);
RV = r.V .* (1-r.por(p));
RV0 = r.V .* (1-r.por(p0));
Ar_w = 1/dt*(PV .* (sw ./ BW) - PV0 .* (sw0 ./ f.Bw(p0)));
Ar_g = 1/dt*(PV .* ((1 - sw) ./ BG) - PV0 .* ((1 - sw0) ./ f.Bg(p0)) + (V_CH4-V_CH4_0));
Ar_w_s = 1/dt*(PV .* (sw.*cs./ BW) - PV0 .* (sw0.*cs./ f.Bw(p0))+...
r.rock_density*(RV.*f.cs_absorb(cs)-RV0.*f.cs_absorb(cs0)));
Ar_w_b = 1/dt*(PV .* (sw.*cb./ BW) - PV0 .* (sw0.*cb0./ f.Bw(p0))+...
r.rock_density*(RV.*f.cb_absorb(cb)-RV0.*f.cb_absorb(cb0)));
% Water Equation
eqs{1} = (-os.div(bWvW) - Ar_w);
% 使基质考虑重力,裂缝不考虑重力
% eqs{1} = (-os.div(-r.T .* mobW .* dpW)-r.rpt.*os.div(-r.T .* mobW .* dzw) - Ar_w)*dt;
% eqs{1} = (-os.div(-r.T .* mobW .* dpW) - Ar_w)*dt;
% eqs{1} = -os.div(bWvW) - Ar_w;
% Oil Equation
eqs{2} = (-os.div(bGvG) - Ar_g);
% eqs{2} = (-os.div(-r.T .* mobO .* dpO)-r.rpt.*os.div(-r.T .* mobO .* dzo) - Ar_o)*dt;
% eqs{2} = (-os.div(-r.T .* mobO .* dpO) - Ar_o)*dt;
eqs{3} = (-os.div(bWvW_s+diff_s) - Ar_w_s);
eqs{4} = (-os.div(bWvW_b+diff_b) - Ar_w_b);
%
PVv = PV.val;
Bwa = BW.val;
Bga = BG.val;
% eqs{2} = -os.div(bOvO) - Ar_o;
% Rw = Ar_w.val - qwell(1 : r.nc);
% Ro = Ar_o.val - qwell(r.nc+1 : 2*r.nc);
% PVv = PV.val;
% % PV_all = sum(PVv);
% Bwa = mean(BW.val);
% Boa = mean(BO.val);
% MBw = abs(Bwa * dt * (sum(Rw)/PV_all));
% MBo = abs(Boa * dt * (sum(Ro)/PV_all));
@@ -0,0 +1,187 @@
function [eqs, Awell, qwell,PVv, Bga, Bwa] = eqsOW_MB_2014(state, state0, dt, r, f, os, Wellc, Weladd, pwf, WelChg, well_schedules_k)
p = state.p;
sw = state.sw;
cs = state.cs;
cb = state.cb;
p0 = state0.p;
sw0 = state0.sw;
cs0 = state0.cs;
cb0 = state0.cb;
[p, sw, cs, cb] = intADI(p, sw, cs, cb);
% z方向上的位势
%
%z进行处理
z=r.z;
z = intADIz(z);
% Dosi是地面标况下测得的油相密度Dwsi是地面标况下测得的水相密度
% % % %
% % % exp_paramter_1 = -0.04;
% % % reference_pressure = 20;
% % % stress_factor = exp(exp_paramter_1*(p-reference_pressure));
Nc0 = f.Nc(cs0);
Nc = f.Nc(cs);
% Water Props
BW = f.Bw(p);
muW = f.muw(p);
krW = f.krw(sw, Nc);
pcOW = 0;
if f.ifpcgl
pcOW = f.pcgl(sw);
end
pw = p - pcOW +f.chemistry_cof*log(cb0);
dpW = os.grad(pw);
% dzw=1e-6*9.8*f.Dwsi*os.grad(z./BW); %
dzw=0;
dpW = dpW+dzw;
upc = (double(dpW)<=0);%
mobW = os.faceUpstr(upc, krW) .* os.faceAvg(1./(BW.*muW));
% mobW = os.faceUpstr(upc, krW) .* os.faceAvg(1./(BW.*muW)) .* os.faceAvg(stress_factor);
%
if f.p_grad_threshold ~= 0
pcOW0 = f.pcgl(sw0);
pw0 = p0 - pcOW0+f.chemistry_cof*log(cb0);
dpW0 = os.grad(pw0);
dzw0=0;
dpW0 = dpW0+dzw0;
pW_grad0 = r.T_diff./r.flowArea.*dpW0;
ratioW = smooth_relu_stable(pW_grad0, f.p_grad_threshold);
else
ratioW = 1;
end
bWvW = -r.T .* mobW .* (dpW).*ratioW;
%
pore = r.por(p);
%
mobW_s = os.faceUpstr(upc, krW.*cs) .* os.faceAvg(1./(BW.*muW));
bWvW_s = -r.T .* mobW_s .* dpW;
dcs = os.grad(cs);
upc_s = (double(dcs)<=0);
mobW_s_diff = os.faceUpstr(upc_s, pore.*sw) .* os.faceAvg(1./(BW));
diff_s = -r.T_diff .*mobW_s_diff .* dcs;
%
mobW_b = os.faceUpstr(upc, krW.*cb) .* os.faceAvg(1./(BW.*muW));
bWvW_b = -r.T .* mobW_b .* dpW;
dcb = os.grad(cb);
upc_b = (double(dcb)<=0);
mobW_b_diff = os.faceUpstr(upc_b, pore.*sw) .* os.faceAvg(1./(BW));
diff_b = -r.T_diff.*mobW_b_diff.*dcb;
% gas Props
BG = f.Bg(p);
muG = f.mug(p);
krG = f.krrg(sw, Nc);
dpG = os.grad(p);
% dzg=1e-6*9.8*f.Dgsi*os.grad(z./BG); %
dzg=0;
dpG = dpG+dzg;
upc = (double(dpG)<=0);%
mgbG = os.faceUpstr(upc, krG) .* os.faceAvg(1./(BG.*muG));
% mobO = os.faceUpstr(upc, krO) .* os.faceAvg(1./(BO.*muO)).* os.faceAvg(stress_factor);
%
if f.p_grad_threshold ~= 0
dpG0 = os.grad(p0);
dzg0=0;
dpG0 = dpG0+dzg0;
pG_grad0 = r.T_diff./r.flowArea.*dpG0;
ratioG = smooth_relu_stable(pG_grad0, f.p_grad_threshold);
else
ratioG = 1;
end
% Knudsen
bGvG = -r.matrixflag.*f.gas_prop.Kn_modified_factor.*r.T .* mgbG .* dpG.*ratioG ...
-(1-r.matrixflag).*r.T .* mgbG .* dpG.*ratioG;
% 西
% Forchheimer_factor = 1/(1+kf/mug*beta*density_g*v_gf)
BG0 = f.Bg(p0);muG0 = f.mug(p0);krG0 = f.krrg(sw0,Nc0);dpG0 = os.grad(p0);
dzg0=0;
upc0 = (double(dpG0+dzg0)<=0);%
mgbG0 = os.faceUpstr(upc0, krG0) .* os.faceAvg(1./(BG0.*muG0));
% mobO = os.faceUpstr(upc, krO) .* os.faceAvg(1./(BO.*muO)).* os.faceAvg(stress_factor);
v_gf = -(1-r.matrixflag).*r.T .* mgbG0 .* dpG0./r.flowArea;
density_g = f.Dgsi./BG0;
Forchheimer_factor = 1./(1+(1-r.matrixflag).*r.perm./os.faceAvg(muG0).*f.gas_prop.beta_non_Darcy_flow.*os.faceAvg(density_g).*abs(v_gf));
%
stress_factor = r.matrixflag.*exp(r.stress_factor_matrix*(os.faceAvg(p0)-r.stress_factor_ref_pressure))...
+(1-r.matrixflag).*exp(r.stress_factor_fracture*(os.faceAvg(p0)-r.stress_factor_ref_pressure));
%
bWvW = bWvW.*stress_factor.*Forchheimer_factor;
bGvG = bGvG.*stress_factor.*Forchheimer_factor;
% z方向上的位势
%
%z进行处理
% z=r.z;
% z = intADIz(z);
% Dosi是地面标况下测得的油相密度Dwsi是地面标况下测得的水相密度
% dzo=0.01*os.grad(z./BO); %
% dzw=0.01*os.grad(z./BW); %
% bOvO = -r.T .* mobO .* (dpO+dzo);
% bWvW=-r.T .* mobW .* (dpW+dzw);
% transfer function (OW)
% [qomf, qofm, qwmf, qwfm] = transFunc(r, krO, krW, BO, muO, BW, muW, p, pw);
% well equation
[Awell, qwell] = WellEquation(r, f, p.val, sw.val, cs.val, cb.val, Wellc, Weladd, pwf, WelChg, well_schedules_k);
% Awell=dt*Awell;
% qwell=dt*qwell;
% langmuir
V_CH4=r.rpt.*r.V.*(1-r.por(p)).*r.rock_density.*f.gas_prop.VL.*p/f.gas_prop.PL./(1+p/f.gas_prop.PL);
V_CH4_0=r.rpt.*r.V.*(1-r.por(p)).*r.rock_density.*f.gas_prop.VL.*p0/f.gas_prop.PL./(1+p0/f.gas_prop.PL);
% Accumulation term
PV = r.V .* r.por(p);
PV0 = r.V .* r.por(p0);
RV = r.V .* (1-r.por(p));
RV0 = r.V .* (1-r.por(p0));
Ar_w = 1/dt*(PV .* (sw ./ BW) - PV0 .* (sw0 ./ f.Bw(p0)));
Ar_g = 1/dt*(PV .* ((1 - sw) ./ BG) - PV0 .* ((1 - sw0) ./ f.Bg(p0)) + (V_CH4-V_CH4_0));
Ar_w_s = 1/dt*(PV .* (sw.*cs./ BW) - PV0 .* (sw0.*cs./ f.Bw(p0))+...
r.rock_density*(RV.*f.cs_absorb(cs)-RV0.*f.cs_absorb(cs0)));
Ar_w_b = 1/dt*(PV .* (sw.*cb./ BW) - PV0 .* (sw0.*cb0./ f.Bw(p0))+...
r.rock_density*(RV.*f.cb_absorb(cb)-RV0.*f.cb_absorb(cb0)));
% Water Equation
eqs{1} = (-os.div(bWvW) - Ar_w);
% 使
% eqs{1} = (-os.div(-r.T .* mobW .* dpW)-r.rpt.*os.div(-r.T .* mobW .* dzw) - Ar_w)*dt;
% eqs{1} = (-os.div(-r.T .* mobW .* dpW) - Ar_w)*dt;
% eqs{1} = -os.div(bWvW) - Ar_w;
% Oil Equation
eqs{2} = (-os.div(bGvG) - Ar_g);
% eqs{2} = (-os.div(-r.T .* mobO .* dpO)-r.rpt.*os.div(-r.T .* mobO .* dzo) - Ar_o)*dt;
% eqs{2} = (-os.div(-r.T .* mobO .* dpO) - Ar_o)*dt;
eqs{3} = (-os.div(bWvW_s+diff_s) - Ar_w_s);
eqs{4} = (-os.div(bWvW_b+diff_b) - Ar_w_b);
%
PVv = PV.val;
Bwa = BW.val;
Bga = BG.val;
% eqs{2} = -os.div(bOvO) - Ar_o;
% Rw = Ar_w.val - qwell(1 : r.nc);
% Ro = Ar_o.val - qwell(r.nc+1 : 2*r.nc);
% PVv = PV.val;
% % PV_all = sum(PVv);
% Bwa = mean(BW.val);
% Boa = mean(BO.val);
% MBw = abs(Bwa * dt * (sum(Rw)/PV_all));
% MBo = abs(Boa * dt * (sum(Ro)/PV_all));
@@ -0,0 +1,56 @@
function [eqs, qomf, qofm, qwmf, qwfm, Awell, qwell] = equa_process(state, state0, dt, r, f, os, Wellc, Weladd, pwf, WelChg)
p = state.p;
sw = state.sw;
p0 = state0.p;
sw0 = state0.sw;
[p, sw] = intADI(p, sw);
% Water Props
BW = f.Bw(p);%
muW = f.muw(p);%
krW = f.krw(sw);%
pcOW = 0;%ifpcow=0
if f.ifpcow
pcOW = f.pcow(sw);
end
pw = p - pcOW;%
dpW = os.grad(pw);%
upc = (double(dpW)<=0);%flag
mobW = os.faceUpstr(upc, krW) .* os.faceAvg(1./(BW.*muW));%
bWvW = -r.T .* mobW .* dpW;%**
% Oil Props
BO = f.Bo(p);%
muO = f.muo(p);%
krO = f.kro(sw);%
dpO = os.grad(p);%
upc = (double(dpO)<=0);%flag
mobO = os.faceUpstr(upc, krO) .* os.faceAvg(1./(BO.*muO));%
bOvO = -r.T .* mobO .* dpO;
% z方向上的位势
%
%z进行处理
z=r.z;
z = intADIz(z);
% Dosi是地面标况下测得的油相密度Dwsi是地面标况下测得的水相密度
dzo=f.Dosi*os.grad(z./BO); %
dzw=f.Dwsi*os.grad(z./BW); %
% transfer function (OW)
[qomf, qofm, qwmf, qwfm] = transFunc(r, krO, krW, BO, muO, BW, muW, p, pw);
% well equation
[Awell, qwell] = WellEquation(r, f, p.val, sw.val, Wellc, Weladd, pwf, WelChg);
% z的取法
% Water Equation
eqs{1} = -os.div(bWvW+dzo) - r.V/dt .* (r.por(p) .* (sw ./ BW) - r.por(p0) .* (sw0 ./ f.Bw(p0)));
% Oil Equation
eqs{2} = -os.div(bOvO+dzw) - r.V/dt .* (r.por(p) .* ((1 - sw) ./ BO) - r.por(p0) .* ((1 - sw0) ./ f.Bo(p0)));
end