📄 qjyhsj.cpp
字号:
{
break;
}
QL = QL - DLTQ;
if( QL <= 5)
{
int result;
result=MessageBox(NULL, "该井在最大可用注气量下不能气举排液,是否增大注气量?","注气量不够",MB_YESNO);
if(result==IDYES)
{
qzzd = qzzd + 10000;
}
else
{
QL = qsheji;
if( QL == 0)
{
QL = 0.5 * Qtmax;
}
break;
}
}
}
while(shejishi=9999);
QL = int(QL);
}
else if( SJFF == 2 && qsheji > 0)
{
//根据设计排液量设计
QL = qsheji;
}
else
{
//根据最大排液量设计
QL = int(0.75 * Qtmax / 2) * 2;
}
//求启动压力下的注气压力梯度
ptidu[0] = pqidong;
for(i=1;i<=CSGDZZ;i++)
{
ptidu[i] = 0;
}
// 气井压力(Pcom, pqidong, tzhuqi, TG1, DVW, DIC, DOT, RR, 0, GG, 0, 1, H2S, N2, CO2, CSGDZZ, 1, -1);
Pcom=qjyljsz.qjyl(pqidong, tzhuqi, TG1, DVW, DIC, DOT, RR, 0, GG, 0, 1, H2S, N2, CO2, 0, CSGDZZ, 1, -1);
for(i=0;i<=CSGDZZ;i++)
{
pqqdtd[i] = ptidu[i];
}
DLTQQ = QL * 0.1;
do
{
//根据最大注气量设计,当须求注气量[Q注入] > 最大注气量[Q注最大] 时应减小排液量[QL]
qzhuru = 0;
do
{
//由于[注气量]会影响注气压力梯度,因此需要迭代
qjdzr = qzhuru;
do
{
//求设计排液量[QL]下需要的注气量[Q注入]
//求设计产量下的井底流压
// 由Q求PWF(PWF, QL, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw);
PWF=zpjjs.YQPWF(QL, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw);
//求设计产量下的井筒多相流压力梯度
QO = QL * (1 - Fw);
QW = QL * Fw;
QG = QL * GWR;
dtidu[0] = DVW;
ptidu[0] = PWF;
for(i=1;i<=CSGDZZ;i++)
{
dtidu[i] = 0;
ptidu[i] = 0;
}
// 多相流(P计算, PWF, tdiceng, TG, QG, QW, QO, GG, GW, OG, DVW, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, -1, 1, MMPF);
Pjs=zpjjs.dxl(MMPF,PWF, tdiceng, TG, QG, QW, QO, GG, GW, OG, DVW, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, -1, 1);
dshendu[0] = 0;
pitidu[0] = 0;
for(i=1;i<=CSGDZZ;i++)
{
dshendu[i] = int(10 * i * DVW / CSGDZZ);
dshendu[i]=dshendu[i]/ 10.0;
pitidu[i] = ptidu[CSGDZZ - i];
}
if( pitidu[1] > pjingkou)
{
//在设计产量下井能自喷
MessageBox(NULL, "该井能自喷,不需要用人工举升方法!","井能自喷",MB_ICONINFORMATION);
return;
}
// 主窗口.SSPanel1.FloodPercent = 主窗口.SSPanel1.FloodPercent + 5
// If 主窗口.SSPanel1.FloodPercent > 60 Then 主窗口.SSPanel1.FloodPercent = 60
//求工作压力下的注气压力梯度
for(i=1;i<=CSGDZZ;i++)
{
ptidu[i] = 0;
}
ptidu[0] = PIN;
// 气井压力(Pcom, PIN, tzhuqi, TG1, DVW, DIC, DOT, RR, qzhuru, GG, 0, 1, H2S, N2, CO2, CSGDZZ, 1, -1);
Pcom=qjyljsz.qjyl(PIN, tzhuqi, TG1, DVW, DIC, DOT, RR, qzhuru, GG, 0, 1, H2S, N2, CO2, 0, CSGDZZ, 1, -1);
for(i=0;i<=CSGDZZ;i++)
{
pqtidu[i] = ptidu[i];
}
// 主窗口.SSPanel1.FloodPercent = 主窗口.SSPanel1.FloodPercent + 5
// If 主窗口.SSPanel1.FloodPercent > 60 Then 主窗口.SSPanel1.FloodPercent = 60
//求注气点
pjszqd = 0;
dzqd = 0;
for(i=1;i<=CSGDZZ;i++)
{
H1 = dshendu[i - 1];
H2 = dshendu[i];
PI1 = pitidu[i - 1];
PI2 = pitidu[i];
PO1 = pqtidu[i - 1] - pgzyc;
PO2 = pqtidu[i] - pgzyc;
if( PI1 <= PO1 && PI2 >= PO2)
{
//求交点(pjszqd, dzqd, H1, H2, PI1, PO1, PI2, PO2);
jslzjd.qlzxjd(H1, H2, PI1, PO1, PI2, PO2);
pjszqd=jslzjd.Y;
dzqd=jslzjd.X;
if( pjszqd > 0)
{
k = int(100 * pjszqd);
pjszqd=double(k)/ 100.0;
}
if( dzqd > 0)
{
dzqd = int(dzqd + 0.5);
}
break;
}
}
if( pjszqd > 0 && (DVW - dzqd) > 50)
{
//有注气点则继续计算注气量
dtidu[0] = 0;
ptidu[0] = pjingkou;
for(i=1;i<=CSGDZZ;i++)
{
dtidu[i] = 0;
ptidu[i] = 0;
}
DLTMIN = 10000;
gbsjpl = "否";
NN = 0;
if( qzhuru > 0)
{
qzhuru = qzhuru / 4;
}
DLTQ = 5000;
scqldx = "";
bcqldx = "";
qzhuru = 0;
DLTQ = 500;
do
{
ENDCOMPUTE;
qzhuru = qzhuru + DLTQ;
qzql = int(QL * GWR + qzhuru);
// 多相流(pzxyy, pjingkou, tjingkou, TG, qzql, QW, QO, GG, GW, OG, dzqd, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1, MMPF);
pzxyy=zpjjs.dxl(MMPF,pjingkou, tjingkou, TG, qzql, QW, QO, GG, GW, OG, dzqd, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1);
if( pzxyy > pjszqd)
{
bcqldx = "偏小";
}
else
{
bcqldx = "偏大";
}
if( bcqldx == "偏大" && scqldx == "偏大")
{
DLTQ = -fabs(DLTQ);
}
else if( bcqldx == "偏小" && scqldx == "偏小")
{
DLTQ = fabs(DLTQ);
}
else if( bcqldx == "偏大" && scqldx == "偏小")
{
DLTQ = 0.618 * fabs(DLTQ);
}
else if( bcqldx == "偏小" && scqldx == "偏大")
{
DLTQ = -0.618 * fabs(DLTQ);
}
scqldx = bcqldx;
if( DLTMIN > fabs(pzxyy - pjszqd))
{
DLTMIN = fabs(pzxyy - pjszqd);
}
if( DLTMIN <= fabs(pzxyy - pjszqd) - 1 || NN >= 100)
{
//设计参数不合理,自动调整设计排量后再计算
gbsjpl = "是";
break;
}
if( DLTMIN < fabs(pzxyy - pjszqd))
{
NN = NN + 1;
}
if( fabs(pzxyy - pjszqd) < 0.1 && fabs(DLTQ) > 50)
{
if( DLTQ > 0)
{
DLTQ = 100;
}
else
{
DLTQ = -100;
}
}
else if( fabs(pzxyy - pjszqd) < 0.5 && fabs(DLTQ) > 250)
{
if( DLTQ > 0)
{
DLTQ = 250;
}
else
{
DLTQ = -250;
}
}
else if( fabs(pzxyy - pjszqd) < 1 && fabs(DLTQ) > 500)
{
if( DLTQ > 0)
{
DLTQ = 500;
}
else
{
DLTQ = -500;
}
}
else if( fabs(pzxyy - pjszqd) < 2 && fabs(DLTQ) > 1000)
{
if( DLTQ > 0)
{
DLTQ = 1000;
}
else
{
DLTQ = -1000;
}
}
} while(fabs(pzxyy - pjszqd) >= 0.05);
if( gbsjpl == "否")
{
break;
}
}
QL = 0.95 * QL;
if( QL < 5)
{
//排液量很小时(小于5)仍不能气举生产
MessageBox(NULL, "该井不能用气举排液,请选择其它的人工举升方法!","举升方法选择不当",MB_ICONINFORMATION);
return;
}
// 主窗口.SSPanel1.FloodPercent = 主窗口.SSPanel1.FloodPercent + 10
// If 主窗口.SSPanel1.FloodPercent > 60 Then 主窗口.SSPanel1.FloodPercent = 60
if((g_iProgress+=5)>90) g_iProgress = 90;
ENDCOMPUTE;
} while(shejishi=9999);
} while(fabs(qjdzr - qzhuru) >= 500);
if( SJFF == 1 && qzzd > 0 && DLTQQ > 0.25)
{
if( fabs(qzzd - qzhuru) < 100)
{
if( qzzd < qzhuru)
{
qzhuru = qzzd;
}
break;
}
else if( qzzd < qzhuru)
{
if( XDYN == 1)
{
DLTQQ = DLTQQ / 2;
XDYN = 0;
}
QL = QL - DLTQQ;
DXYN = 1;
}
else if( qzzd > qzhuru)
{
if( DXYN == 1)
{
DLTQQ = DLTQQ / 2;
DXYN = 0;
}
QL = QL + DLTQQ;
XDYN = 1;
}
}
else
{
break;
}
}
while(shejishi=9999);
QL = int(10 * QL);
QL=QL/ 10.0;
dfshendu[0][0] = 0;
pftidu[0][0] = pjingkou;
for(i=1;i<=CSGDZZ;i++)
{
dfshendu[0][i] = dzqd / CSGDZZ * i;
pftidu[0][i] = ptidu[i];
}
pftidu[0][CSGDZZ] = pjszqd;
// 主窗口.SSPanel1.FloodPercent = 60
g_iProgress = 90; // 计算进度
ENDCOMPUTE;
for(i=0;i<=CSGDZZ;i++)
{
dimtidu[i] = dtidu[i];
pimtidu[i] = ptidu[i];
}
qzhuru = int(qzhuru);
pjsyy = int(100 * pzxyy);
pjsyy=pjsyy/ 100.0;
//计算第一只阀的参数
//阀1深度
DGL = OG * (1 - Fw) + GW * Fw;
GS = DGL / 101.97;
ljym = int(100 * (DVW - pdiceng / DGL * 98));
ljym=ljym/ 100;
if( ljym <= 0)
{
fsd[1] = int((pqidong - pjingkou) / GS + 0.5);
}
else
{
fsd[1] = int((ljym + (pqidong - pjingkou) / GS - 50) + 0.5);
}
//阀1温度
fcwd[1] = int(100 * (tjingkou + TG * fsd[1] - 273.15)) / 100.0;
//阀1处最小油管压力
for(i=1;i<=CSGDZZ;i++)
{
if( dimtidu[i] >= fsd[1] && dimtidu[i - 1] <= fsd[1])
{
fczxyy[1] = pimtidu[i - 1] + (pimtidu[i] - pimtidu[i - 1]) / (dimtidu[i] - dimtidu[i - 1]) * (fsd[1] - dimtidu[i - 1]);
break;
}
}
fczxyy[1] = int(100 * fczxyy[1]);
fczxyy[1]=fczxyy[1]/ 100.0;
//阀1处套管压力
for(i=1;i<=CSGDZZ;i++)
{
if( dshendu[i] >= fsd[1] && dshendu[i - 1] <= fsd[1])
{
fcty[1] = pqtidu[i - 1] + (pqtidu[i] - pqtidu[i - 1]) / (dshendu[i] - dshendu[i - 1]) * (fsd[1] - dshendu[i - 1]);
pfa = pqqdtd[i - 1] + (pqqdtd[i] - pqqdtd[i - 1]) / (dshendu[i] - dshendu[i - 1]) * (fsd[1] - dshendu[i - 1]);
break;
}
}
fcty[1] = int(100 * fcty[1]);
fcty[1]=fcty[1]/ 100.0;
//阀1打开压力
fdkyl[1] = int(100 * fcty[1]);
fdkyl[1]=fdkyl[1]/ 100.0;
//求阀1最小注气量
QO = QL * (1 - Fw);
QW = QL * Fw;
qzhu = 0;
DLTQ = 500;
dtidu[0] = 0;
ptidu[0] = pjingkou;
for(i=1;i<=CSGDZZ;i++)
{
dtidu[i] = 0;
ptidu[i] = 0;
}
scqldx = "";
bcqldx = "";
DLTMIN = 10000;
NN = 0;
do
{
qzhu = qzhu + DLTQ;
if( qzhu < 0)
{
qzhu = 0;
DLTQ = fabs(DLTQ);
}
//多相流(pzxyy, pjingkou, tjingkou, TG, qzhu, QW, QO, GG, GW, OG, fsd(1), DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1, MMPF);
pzxyy=zpjjs.dxl(MMPF,pjingkou, tjingkou, TG, qzhu, QW, QO, GG, GW, OG, fsd[1], DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1);
if( pzxyy > fdkyl[1])
{
bcqldx = "偏小";
}
else
{
bcqldx = "偏大";
}
if( bcqldx == "偏大" && scqldx == "偏大")
{
DLTQ = -fabs(DLTQ);
}
else if( bcqldx == "偏小" && scqldx == "偏小")
{
DLTQ = fabs(DLTQ);
}
else if( bcqldx == "偏大" && scqldx == "偏小")
{
DLTQ = 0.618 * fabs(DLTQ);
}
else if( bcqldx == "偏小" && scqldx == "偏大")
{
DLTQ = -0.618 * fabs(DLTQ);
}
scqldx = bcqldx;
if( DLTMIN > fabs(pzxyy - fdkyl[1]))
{
DLTMIN = fabs(pzxyy - fdkyl[1]);
}
if( DLTMIN < fabs(pzxyy - fdkyl[1]))
{
NN = NN + 1;
}
if( NN > 50)
{
break;
}
if( fabs(pzxyy - fdkyl[1]) < 0.25 && fabs(DLTQ) > 100)
{
if( DLTQ > 0)
{
DLTQ = 100;
}
else
{
DLTQ = -100;
}
}
else if( fabs(pzxyy - fdkyl[1]) < 0.5 && fabs(DLTQ) > 200)
{
if( DLTQ > 0)
{
DLTQ = 200;
}
else
{
DLTQ = -200;
}
}
else if( fabs(pzxyy - fdkyl[1]) < 2 && fabs(DLTQ) > 300)
{
if( DLTQ > 0)
{
DLTQ = 300;
}
else
{
DLTQ = -300;
}
}
}
while(fabs(pzxyy - fdkyl[1]) >= 0.05);
fzql[1] = int(qzhu);
// 主窗口.SSPanel1.FloodPercent = 65
dfshendu[1][0] = 0;
pftidu[1][0] = pjingkou;
for(i=1;i<=CSGDZZ;i++)
{
dfshendu[1][i] = fsd[1] / CSGDZZ * i;
pftidu[1][i] =ptidu[i];
}
//校正注气量
fjzzql[1] = int(fzql[1] * 0.0544 * pow((GG * 1.8 * (fcwd[1] + 273.15)),0.5));
//计算阀的孔径
ljylb = pow((2 / (1 + KI)),(KI / (KI - 1)));
ylb = PL1T / fdkyl[1];
PR = fdkyl[1] / PC;
TR = (fcwd[1] + 273.15) / TC;
// 天然气偏差系数(Z, PR, TR);
Z=csjs.trqpcxs(PR, TR);//天然气偏差因子
XX = fjzzql[1] * pow((GG * (fcwd[1] + 273.15) * Z),0.5) / 4066 / fdkyl[1];
if( ylb >= ljylb)
{
YY = pow((KI / (KI - 1) * (pow(ylb,(2 / KI)) - pow(ylb,((KI + 1) / KI)))),0.5);
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -