Files
3D_EDFM_SIM-X/core functions/程序整合及组分流部分代码/initalSchedule_2026.m
T
2026-03-13 11:24:41 +08:00

54 lines
2.0 KiB
Matlab

function [Weladd, pwf] = initalSchedule_2026(p, sw, cs, Wellc, f, well_schedules_k)
nWel = size(Wellc, 1);%井数
Weladd = 0;
pwf = zeros(1);
BW = f.Bw(p);
muW = f.muw(p);
Nc = f.Nc(cs);
krW = f.krw(sw,Nc);
BG = f.Bg(p);
muG = f.mug(p);
krG = f.krrg(sw,Nc);
Ygt = krG ./ (muG .* BG);%mu代表黏度
Ygj = krG ./ muG;
Ywt = krW ./ (muW .* BW);%mu代表黏度
Ywj = krW ./ muW;
for i = 1 : nWel
if strcmp(well_schedules_k{i,2},'open')
if strcmp(well_schedules_k{i,3},'pro') && strcmp(well_schedules_k{i,4},'const_q') %该井是生产井并定产生产
Weladd = Weladd + 1;
nper = Wellc{i,2}; %该井的射孔数量
jperf = zeros(nper,1);
Trans = zeros(nper,1);
Tnp = 0;
Tn = 0;
for j = 1 : nper
jperf(j) = Wellc{i,3}(j);%该射孔点在基质网格和裂缝单元全体中的序号
Tr = Wellc{i,4}(j);%该射孔点对应的生产指数(缺流度)
Trans(j) = Tr * (Ygt(jperf(j)) + Ywt(jperf(j)));%生产指数
Tnp = Tnp + Trans(j)*p(jperf(j));
Tn = Tn + Trans(j);
end
pwf(Weladd) = (Tnp - well_schedules_k{i,5}/86.4) / Tn;%说明井筒无限导流,压力为一个值
elseif strcmp(well_schedules_k{i,3},'inj') && strcmp(well_schedules_k{i,4},'const_q') %注入井,恒定注入量
Weladd = Weladd + 1;
nper = Wellc{i,2};
jperf = zeros(nper,1);
Trans = zeros(nper,1);
Tnp = 0;
Tn = 0;
for j = 1 : nper
jperf(j) = Wellc{i,3}(j);
Tr = Wellc{i,4}(j);
Trans(j) = Tr / BW(jperf(j)) * (Ygj(jperf(j)) + Ywj(jperf(j)));%多相流注入方程
Tnp = Tnp + Trans(j)*p(jperf(j));
Tn = Tn + Trans(j);
end
pwf(Weladd) = (Tnp + well_schedules_k{i,5}/86.4) / Tn;%与生产井正好反过来
else
continue
end
end
end
pwf = pwf';