📄 slb.cpp
字号:
dpzmj1 = 3.14159 / 4 * pow(pzzj[i],2);
dpzmj2 = 3.14159 / 4 * pow(pzzj[i + 1],2);
if( dpzmj1 <= dpzmj0 && dpzmj2 >= dpzmj0)
{
NNZ = i;
break;
}
}
}
if( NNZ == 0)
{
MessageBox(NULL, "井下射流泵参数错误,请输入后再计算!","射流泵参数",MB_ICONWARNING);
return;
}
dbdxryl0 = dbdxryl;
DLTP = Prs / djsylds;
for(i=1;i<=djsylds + 1;i++)
{
//计算在吸入压力下的井底流压及排水量
dbdxryl = DLTP * i;
do
{
djdcyl = djdcyl0;
QW = djdcyl * Fw;
QO = djdcyl * (1 - Fw);
QG = QW * GWR;
//多相流(D井底流压, D泵的吸入压力, D泵处温度, TG, QG, QW, QO, GG, GW, OG, DVW - DJP, D吸环外内, D吸环内外, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
djdly=zpjjs.dxl(MMPF,dbdxryl, dbcwd, TG, QG, QW, QO, GG, GW, OG, (DVW - DJP), dxhwn, dxhnw, RR, H2S, CO2, N2, NaCl, 0, 1, 1);
//由PWF求Q(D井的产液量0, D井底流压, PLI, QB, Qomax, D最大产液量, Prs, Pb, Fw)
djdcyl0=qjyljsz.ypwfqq(djdly, PLI, QB, Qomax, dzdcyl, Prs, Pb, Fw);
if( djdcyl0 <= 0)
{
djdcyl = 0;
break;
}
}
while(fabs(djdcyl - djdcyl0) / (djdcyl + 0.001) >= 0.0001);
djcl[i] = djdcyl;
}
//打开保存计算结果的文件
/* fileDialogFilter2 ="Data files (*.RDJ)|*.RDJ|All files (*.*)|*.*||";
fileDialogExt2 = "RDJ";
CFileDialog fileDialog2( FALSE,
fileDialogExt2, NULL,
0, fileDialogFilter2 );
fileDialog2.m_ofn.lpstrTitle="保存计算结果";
if( fileDialog2.DoModal() == IDCANCEL )
{
return;
} */
CStdioFile f3;
CFileException exception3;
BOOL status1;
templs1 = ((CCVenusApp*)AfxGetApp())->GetMyAppPath();
templs1 += "\\tempfile.txt";
status1 = f3.Open(templs1,CFile::modeCreate|CFile::modeWrite);
if (!status1)
{
char s[100];
sprintf(s, "Error opening file for reading. Code:%d",
exception3.m_cause);
AfxMessageBox(s);
return;
}
//写入基本参数
// title1="";
title1="\t\t$$射流泵排水采气优化设计结果$0\n";
try
{
f3.WriteString("\n");
f3.WriteString(title1);
f3.WriteString("\n");
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
title="";
title=title+"一、设计基本参数$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(title);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(DVW,95,temp);
G4 =G4+ " ⑴ 地层深度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(m)$12" + "\t" + "$14";
gcvt(GW,95,temp);
title=temp;
G4 = G4 + "\t" + " ⑵ 水相对密度=$13" + "\t" + "$12" + "\t" + title + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
g_iProgress = 15; // 计算进度
ENDCOMPUTE;
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(DJP,95,temp);
G4 =G4+ " ⑶ 泵挂深度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(m)$12" + "\t" + "$14";
gcvt(GG,95,temp);
G4 = G4 + "\t" + " ⑷ 气相对密度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(1000 * DIT,95,temp);
G4 =G4+ " ⑸ 油管内径=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(mm)$12" + "\t" + "$14";
gcvt(GWR,95,temp);
G4 = G4 + "\t" + " ⑹ 生产气水比=$13" + "\t" + "$12" + "\t" +temp + "$12" + "\t" + "(m^3/m^3)$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(1000 * DOT,95,temp);
G4 =G4+ " ⑺ 油管外径=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(mm)$12" + "\t" + "$14";
gcvt(100 * Fw,95,temp);
G4 = G4 + "\t" + " ⑻ 体积含水率=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(%)$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(1000 * DIC,95,temp);
G4 =G4+ " ⑼ 套管内径=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(mm)$12" + "\t" + "$14";
gcvt(Qpmax,95,temp);
G4 = G4 + "\t" + " ⑽ 泵最高排量=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(m^3/d)$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(Pwh,95,temp);
G4 =G4+ " ⑾ 井口压力=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(MPa)$12" + "\t" + "$14";
gcvt(HPp,95,temp);
G4 = G4 + "\t" + " ⑿ 泵额定功率=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(Kw)$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(Prs,95,temp);
G4 =G4+ " ⒀ 地层压力=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(MPa)$12" + "\t" + "$14";
gcvt(Ppmax,95,temp);
G4 = G4 + "\t" + " ⒁ 泵最高压力=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(MPa)$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(tjingkou - 273.15,95,temp);
G4 =G4+ " ⒂ 井口温度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(℃)$12" + "\t" + "$14";
gcvt(NNZ,95,temp);
title=temp;
title.TrimLeft();
G4 = G4 + "\t" + " ⒃ 选定喷嘴号=$13" + "\t" + "$12" + "\t" + " [" + title + "]$12" + "\t" + "$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G4="";
gcvt(tdiceng - 273.15,95,temp);
G4 =G4+ " ⒄ 地层温度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(℃)$12" + "\t" + "$14";
G4 = G4 + "\t" + " ⒅ 动力液循环=$13" + "\t" + "$12" + "\t" + " " + ddlyxhfs + "循环$12" + "\t" + "$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
if( Fw < 1)
{
G4="";
gcvt(OG,95,temp);
G4 =G4+ " ⒆ 油相对密度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "$12" + "\t" + "$14";
G4 = G4 + "\t" + " ⒇ 动力液类型=$13" + "\t" + "$12" + "\t" + " " + ddongliye + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
try
{
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
}
g_iProgress = 30; // 计算进度
ENDCOMPUTE;
title="";
title=title+"二、优化设计结果$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
title1="";
title1=title1+" 井下泵$7" + "\t" + "泵排水量$7" + "\t" + " 泵 效$7" + "\t" + "消耗功率$7" + "\t" + "动力液量$7" + "\t" + "工作压力$7" + "\t" + "上流压力$7" + "\t" + "吸入压力$7" + "\t" + "返出压力$7" + "\t" + "气蚀排量$7"+"\n";
title2="";
title2=title2+" 型 号$11" + "\t" + "(m^3/d)$11" + "\t" + " (%)$11" + "\t" + " (Kw)$11" + "\t" + "(m^3/d)$11" + "\t" + " (MPa)$11" + "\t" + " (MPa)$11" + "\t" + " (MPa)$11" + "\t" + " (MPa)$11" + "\t" + "(m^3/d)$11"+"\n";
try
{
f3.WriteString(title);
f3.WriteString(title1);
f3.WriteString(title2);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
for(dpzhs=NNZ - 1;dpzhs<=NNZ + 1;dpzhs++, g_iProgress +=20 )//计算3种喷嘴
{
for(dhdhs = dpzhs - 1;dhdhs<=dpzhs + 2;dhdhs++)//每种喷嘴选用4种喉道
{
ENDCOMPUTE;
if( pzzj[dpzhs] > 0 && hdzj[dhdhs] > 0)
{
k=int(10000 * pow((pzzj[dpzhs] / hdzj[dhdhs]),2));
dmjb = double(k) / 10000;
dpzmj = 3.14159 / 4 * pow(pzzj[dpzhs],2); //实际喷嘴的面积
xrjsjg = "是";
if( dhdhs == dpzhs - 1)
{
dbengxing = "X"; //面积比及泵型
}
else if( dhdhs == dpzhs)
{
// dbengxing = "A"; //面积比及泵型
dbengxing = "Α"; //面积比及泵型
}
else if( dhdhs == dpzhs + 1)
{
dbengxing = "B"; //面积比及泵型
}
else if( dhdhs == dpzhs + 2)
{
dbengxing = "C"; //面积比及泵型
}
dhdmj = dpzmj / dmjb; //喉道面积
switch(dpzhs)
{
case 1:
dpenzui = " 1";
break;
case 2:
dpenzui = " 2";
break;
case 3:
dpenzui = " 3";
break;
case 4:
dpenzui = " 4";
break;
case 5:
dpenzui = " 5";
break;
case 6:
dpenzui = " 6";
break;
case 7:
dpenzui = " 7";
break;
case 8:
dpenzui = " 8";
break;
case 9:
dpenzui = " 9";
break;
case 10:
dpenzui = " 10";
break;
case 11:
dpenzui = " 11";
break;
case 12:
dpenzui = " 12";
break;
case 13:
dpenzui = " 13";
break;
case 14:
dpenzui = " 14";
break;
case 15:
dpenzui = " 15";
break;
case 16:
dpenzui = " 16";
break;
case 17:
dpenzui = " 17";
break;
case 18:
dpenzui = " 18";
break;
case 19:
dpenzui = " 19";
break;
case 20:
dpenzui = " 20";
break;
}
djxbx = dpenzui + dbengxing; //井下泵型
for(i=1;i<=djsylds + 1;i++)
{
//主窗口.SSPanel1.FloodPercent = Int(1 + (4 * (D喷嘴号数 - NNZ + 1) + D喉道号数 - D喷嘴号数 + 1 + i / D计算压力点数) / 12 * 99)
//计算在吸入压力为Ps下的动力液压力D喷嘴上流压力及动力液量D动力液量
dbdxryl = DLTP * i;
if( ddlyl == 0)
{
ddlyl = 100;
}
for(IJK=1;IJK<=50;IJK++)
{
ddlylcz = ddlyl;
if( ddongliye == "水")
{
QPW = ddlylcz;
QPO = 0;
}
else
{
QPW = 0;
QPO = ddlylcz;
}
//多相流(D喷嘴上流压力, Ppmax, T井口, TG, 0, QPW, QPO, GG, GW, OG, DJP, D动环外内, D动环内外, RR, H2S, CO2, N2, NaCl, 0, 1, -1, MMPF)
dpzslyl=zpjjs.dxl(MMPF,Ppmax, tjingkou, TG, 0, QPW, QPO, GG, GW, OG, DJP, ddhwn, ddhnw, RR, H2S, CO2, N2, NaCl, 0, 1, -1);
ddlyl = 3.79 * dpzmj * pow(((dpzslyl - dbdxryl) / NLG / (1 + Kj)),0.5);
if( fabs(ddlyl - ddlylcz) / ddlyl < 0.001)
{
break;
}
}
if( ddlyl > Qpmax)
{
for(Ido=1;Ido<=20;Ido++)
{
Ppmax = Ppmax - 0.1;
if( ddongliye == "水")
{
QPW = Qpmax;
QPO = 0;
}
else
{
QPW = 0;
QPO = Qpmax;
}
//多相流(D喷嘴上流压力, Ppmax, T井口, TG, 0, QPW, QPO, GG, GW, OG, DJP, D动环外内, D动环内外, RR, H2S, CO2, N2, NaCl, 0, 1, -1, MMPF)
dpzslyl=zpjjs.dxl(MMPF,Ppmax, tjingkou, TG, 0, QPW, QPO, GG, GW, OG, DJP, ddhwn, ddhnw, RR, H2S, CO2, N2, NaCl, 0, 1, -1);
ddlyl = 3.79 * dpzmj * pow(((dpzslyl - dbdxryl) / NLG / (1 + Kj)),0.5);
if( ddlyl < Qpmax)
{
break;
}
}
}
//计算在吸入压力为Ps下的返出压力D返出压力及泵的吸入水量Qs
dxrxl = 1 / (1 + 0.0566 * pow((GWR / dbdxryl),1.2));
dllb = 1;
for(IJK=1;IJK<=50;IJK++)
{
dllbcz = dllb;
dbdpyl = ddlyl * dxrxl * dllb;
QG = dbdpyl * GWR;
if( ddongliye == "水")
{
QW = dbdpyl * Fw + ddlyl;
QO = dbdpyl * (1 - Fw);
}
else
{
QW = dbdpyl * Fw;
QO = dbdpyl * (1 - Fw) + ddlyl;
}
//多相流(D返出压力, Pwh, T井口, TG, QG, QW, QO, GG, GW, OG, DJP, D返环外内, D返环内外, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
dfcyl=zpjjs.dxl(MMPF,Pwh, tjingkou, TG, QG, QW, QO, GG, GW, OG, DJP, dfhwn, dfhnw, RR, H2S, CO2, N2, NaCl, 0, 1, 1);
if( dssxs < 6)
{
Fap = dbdxryl / dpzslyl;
//射流泵损失系数(Kj, Ks, Kt, Kd, Ktd, Ic, GWR, Fap, D面积比, D损失系数)
slbssxs(GWR, Fap, dmjb, dssxs);
Kj=KJ;
Ks=KS;
Kt=KT;
Kd=KD;
Ktd=KTD;
Ic=IC;
}
dylb = (dfcyl - dbdxryl) / (dpzslyl - dfcyl); //无因次压力比
X1 = (1 + Ktd) * pow(dmjb,2);
X2 = (1 - 2 * dmjb) * pow(dmjb,2) / pow((1 - dmjb),2) - X1;
dllb = X1 / X2 + pow((pow((X1 / X2),2) - (2 * dmjb - X1) / X2 + (1 + Kj) * dylb / X2 / (1 + dylb)),0.5); //无因次流量比
if( dllb <= 0)
{
dllb = 0;
dllbcz = 0;
break;
}
if( fabs((dllbcz - dllb) / (dllbcz + 0.0000001)) <= 0.001)
{
break;
}
}
dbdpyl = ddlyl * dxrxl * (dllb + dllbcz) / 2;
if( i > 1 && dbdpyl >= djcl[i] && dbdpylold <= djcl[i - 1])
{
//求交点(QX, PY, (i - 1) * DLTP, i * DLTP, D井产量(i - 1), D泵的排液量old, D井产量(i), D泵的排液量)
jslzjd.qlzxjd((i - 1) * DLTP, i * DLTP, djcl[i - 1], dbdpylold, djcl[i], dbdpyl);
QX=jslzjd.Y;
PY=jslzjd.X;
k=int(100 * PY);
dbdxryl = double(k) / 100;
k=int(10 * QX);
dbdpyl = double(k) / 10;
//计算气蚀流量
dqsll = dpzmj * (1 - dmjb) / dmjb / (pow(((GW * Fw + OG * (1 - Fw)) / dbdxryl),0.5) / 3.13 + GWR / dbdxryl / 157);
dllb = dbdpyl / ddlyl / dxrxl;
dylb = (dfcyl - dbdxryl) / (dpzslyl - dfcyl);
GC="";
gcvt(dbdpyl,95,temp);
GC=GC+djxbx + "\t" + temp;
k=int(100 * dylb * dllb * 100);
gcvt(double(k)/100,95,temp);
GC = GC+ "\t" + temp;
k=int(100 * Ppmax * ddlyl / 0.9 / 86.55);
gcvt(double(k)/100,95,temp);
GC = GC + "\t"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -