📄 slb.cpp
字号:
{
// f3.WriteString("8\n");
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
g_iProgress = 100; // 计算进度
f3.Close();
f4.Close();
}
void slb::slbyhsj()//射流泵排水采气优化设计
{
//喷嘴直径(0 To 100) [[[[ pzzj[100]
//喉道直径(0 To 100) [[[[ hdzj[100]
//D井产量(500) [[[[ djcl[500]
//D计算压力点数 [[[[ djsylds
//T地层 [[[[ tdiceng
//T井口 [[[[ tjingkou
//q测试 [[[[ qceshi
//p测试 [[[[ pceshi
//D循环方式 [[[[ dxhfs
//D损失系数 [[[[ dssxs
//D井下泵型号 [[[[ djxbxh
//JP型 [[[[ jpxing
//D动力液 [[[[ ddongliye
//D动力液循环方式 [[[[ ddlyxhfs
//D面积比 [[[[ dmjb
//D动环外内 [[[[ ddhwn
//D吸环外内 [[[[ dxhwn
//D返环外内 [[[[ dfhwn
//D动环内外 [[[[ ddhnw
//D吸环内外 [[[[ dxhnw
//D返环内外 [[[[ dfhnw
//D泵处温度 [[[[ dbcwd
//D喷嘴上流压力 [[[[ dpzslyl
//D预计排液量 [[[[ dyjpyl
//D井底流压 [[[[ djdly
//D最大产液量 [[[[ dzdcyl
//D泵的吸入压力 [[[[ dbdxryl
//D喷嘴面积0 [[[[ dpzmj0
//D喷嘴面积1 [[[[ dpzmj1
//D喷嘴面积2 [[[[ dpzmj2
//D泵的吸入压力0 [[[[ dbdxryl0
//D井的产液量 [[[[ djdcyl
//D井的产液量0 [[[[ djdcyl0
//D喷嘴号数 [[[[ dpzhs
//D喉道号数 [[[[ dhdhs
//D喷嘴面积 [[[[ dpzmj
//写入计算结果 [[[[ xrjsjg
//D泵型 [[[[ dbengxing
//D喉道面积 [[[[ dhdmj
//D喷嘴 [[[[ dpenzui
//D井下泵型 [[[[ djxbx
//D动力液量 [[[[ ddlyl
//D动力液量初值 [[[[ ddlylcz
//D吸入效率 [[[[ dxrxl
//D流量比 [[[[ dllb
//D流量比初值 [[[[ dllbcz
//D泵的排液量 [[[[ dbdpyl
//D返出压力 [[[[ dfcyl
//D压力比 [[[[ dylb
//D泵的排液量old [[[[ dbdpylold
//D气蚀流量 [[[[ dqsll
double pzzj[100], hdzj[100], djcl[500],DVW,Prs,tdiceng,Pwh;
double tjingkou,PLI,qceshi,pceshi,GWR,DVT,DIT,DOT,RR,DIC,DJP;
double GG,CO2,H2S,N2,GW,NaCl,Ppmax,Qpmax,HPp,CCA,CCB,Fw,Pb;
double dmjb,ddhwn,dxhwn,dfhwn,ddhnw,dxhnw;
double dfhnw,YH2S,PC,TC,TG,dbcwd,QP,QPW,QPO,dpzslyl,OG,dyjpyl;
double djdly,QB,Qomax,dzdcyl,QW,QO,QG,dbdxryl,NLG,dpzmj0;
double dpzmj1,dpzmj2,dbdxryl0,DLTP,djdcyl,djdcyl0,dpzmj,dhdmj;
double ddlyl,ddlylcz,dxrxl,dllb,dllbcz,dbdpyl,dfcyl,Fap,dylb;
double X1,X2,dbdpylold,QX,PY,dqsll,Kj,Ks,Kt,Kd,Ktd,Ic,Qtmax;
char gs1[300],temp[100];
CString title,title1,title2,jpxing,AA,AA1,AXYZ,jsff,ddongliye;
CString ddlyxhfs,fileDialogFilter2,fileDialogExt2,G4,xrjsjg;
CString dbengxing,dpenzui,djxbx,GC,templs1;
int k,djsylds,dxhfs,MMPF,dssxs,djxbxh,i,baizhi,J,CCO,NNZ,dpzhs;
int dhdhs,IJK,Ido;
// SetCursor(LoadCursor(NULL, IDC_WAIT));
//赋初值
KJ=0;KS=0;KT=0;KD=0;KTD=0;IC=0;
for(i=0;i<100;i++)
{
pzzj[i]=0;
hdzj[i]=0;
}
for(i=0;i<500;i++)
{
djcl[i]=0;
}
g_iProgress = 5; // 计算进度
ENDCOMPUTE;
DVW=0;Prs=0;tdiceng=0;Pwh=0;
tjingkou=0;PLI=0;qceshi=0;pceshi=0;GWR=0;DVT=0;DIT=0;DOT=0;RR=0;DIC=0;DJP=0;
GG=0;CO2=0;H2S=0;N2=0;GW=0;NaCl=0;Ppmax=0;Qpmax=0;HPp=0;CCA=0;CCB=0;Fw=0;Pb=0;
dmjb=0;ddhwn=0;dxhwn=0;dfhwn=0;ddhnw=0;dxhnw=0;
dfhnw=0;YH2S=0;PC=0;TC=0;TG=0;dbcwd=0;QP=0;QPW=0;QPO=0;dpzslyl=0;OG=0;dyjpyl=0;
djdly=0;QB=0;Qomax=0;dzdcyl=0;QW=0;QO=0;QG=0;dbdxryl=0;NLG=0;dpzmj0=0;
dpzmj1=0;dpzmj2=0;dbdxryl0=0;DLTP=0;djdcyl=0;djdcyl0=0;dpzmj=0;dhdmj=0;
ddlyl=0;ddlylcz=0;dxrxl=0;dllb=0;dllbcz=0;dbdpyl=0;dfcyl=0;Fap=0;dylb=0;
X1=0;X2=0;dbdpylold=0;QX=0;PY=0;dqsll=0;Kj=0;Ks=0;Kt=0;Kd=0;Ktd=0;Ic=0;Qtmax=0;
k=0;djsylds=0;dxhfs=0;MMPF=0;dssxs=0;djxbxh=0;i=0;baizhi=0;J=0;CCO=0;NNZ=0;dpzhs=0;
dhdhs=0;IJK=0;Ido;
qjyhsj qjyljsz;
LZXJD jslzjd;
zpjjdfx zpjjs;
yqsxz csjs;
djsylds = 25;
CString str;
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(1, 5);
DVW=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(2, 5);
Prs=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(3, 5);
tdiceng=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(4, 5);
Pwh=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(5, 5);
tjingkou=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(6, 5);
PLI=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(7, 5);
qceshi=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(8, 5);
pceshi=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(9, 5);
GWR=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(10, 5);
DVT=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(11, 5);
DIT=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(12, 5);
DOT=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(13, 5);
RR=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(14, 5);
DIC=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(15, 5);
DJP=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(16, 5);
GG=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(17, 5);
CO2=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
H2S=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
N2=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(20, 5);
GW=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(21, 5);
NaCl=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(22, 5);
Ppmax=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(23, 5);
Qpmax=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(24, 5);
HPp=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(25, 5);
NNZ=atoi(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(26, 5);
dxhfs=atoi(str);
MMPF=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page9.GetDlgItem(IDC_COMBO1))->GetCurSel();
MMPF=MMPF+1;
dssxs=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page9.GetDlgItem(IDC_COMBO2))->GetCurSel();
dssxs=dssxs+1;
djxbxh=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page9.GetDlgItem(IDC_COMBO3))->GetCurSel();
djxbxh=djxbxh+1;
i = 0;
jpxing = "";
CStdioFile f5;
CFileException exception5;
BOOL status4;
title=((CCVenusApp*)AfxGetApp())->m_strDataPath;
title=title+"\\射流泵.DDD";
status4 = f5.Open(title,CFile::modeRead, &exception5);
if (!status4)
{
char s[100];
sprintf(s, "Error opening file for reading. Code:%d",
exception5.m_cause);
AfxMessageBox(s);
return;
}
else
{
try
{
f5.ReadString(gs1,300);
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
do
{
i = i + 1;
try
{
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
title1=gs1;
baizhi=0;
title="";
for(J=0;J<=title1.GetLength();J++)
{
if( title1.Mid(J,1)==","||title1.Mid(J,1)=="\n")
{
baizhi=baizhi+1;
if(baizhi==1)
{
AA=title;
title="";
}
if(baizhi==2)
{
AA1=title;
}
}
else
{
title=title+title1.Mid(J,1);
}
}
if( i == djxbxh)
{
jpxing = AA1;
break;
}
}
while(AA1 != "[END]\n");
do
{
try
{
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
AXYZ=gs1;
if( AXYZ.Find(jpxing)!=-1)
{
break;
}
}
while(AXYZ!="[结束]\n");
if( AXYZ.Find(jpxing)!=-1)
{
try
{
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
AXYZ=gs1;
k=1;
do
{
try
{
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
title1=gs1;
if(title1=="[END]\n")
{
break;
}
baizhi=0;
title="";
for(J=0;J<=title1.GetLength();J++)
{
if( title1.Mid(J,1)==","||title1.Mid(J,1)=="\n")
{
baizhi=baizhi+1;
if(baizhi==1)
{
CCO=atoi(title);
title="";
}
if(baizhi==2)
{
CCA=atof(title);
title="";
}
if(baizhi==3)
{
CCB=atof(title);
title="";
}
}
else
{
title=title+title1.Mid(J,1);
}
}
if(CCA > 0)
{
pzzj[CCO] = CCA;
hdzj[CCO] = CCB;
}
}
while(k>0);
}
else
{
MessageBox(NULL, "喷嘴和喉道无参数,请更正!","参数错误",MB_ICONWARNING);
return;
}
}
f5.Close();
if( NNZ > 0 && pzzj[NNZ] == 0)
{
MessageBox(NULL, "井下射流泵参数错误,请输入后再计算!","射流泵参数",MB_ICONWARNING);
return;
}
if( MMPF == 1)
{
jsff = "Hagedorn和Brown多相流方法";
}
else if( MMPF == 2)
{
jsff = "Duns和Ros多相流方法";
}
else if( MMPF == 3)
{
jsff = "Orkiszewski多相流方法";
}
else if( MMPF == 4)
{
jsff = "Beggs和Brill多相流方法";
}
else if( MMPF == 5)
{
jsff = "Mukherjee和Brill多相流方法";
}
else if( MMPF == 6)
{
jsff = "SWPI和SPA多相流方法";
}
Fw = 1;
Pb = Prs;
ddongliye = "水";
//入井动态关系IPR(PLI, QB, Qomax, D最大产液量, q测试, p测试, Prs, Pb, Fw)
zpjjs.rjIPR(PLI,qceshi, pceshi, Prs, Pb, Fw);
QB=zpjjs.QB;
Qomax=zpjjs.Qomax;
dzdcyl=zpjjs.Qtmax;
PLI=zpjjs.PLIZZZ;
if( dxhfs == 0)
{
ddlyxhfs = "正";
}
else
{
ddlyxhfs = "反";
}
//获取井下射流泵损失系数Kj,Ks,Kt,Kd,Ktd和气蚀指数Ic
//射流泵损失系数(Kj, Ks, Kt, Kd, Ktd, Ic, GWR, 0.3, D面积比, D损失系数)
slbssxs(GWR, 0.3, dmjb, dssxs);
Kj=KJ;
Ks=KS;
Kt=KT;
Kd=KD;
Ktd=KTD;
Ic=IC;
//直径由mm变为m
DIT = DIT / 1000;
DIC = DIC / 1000;
DOT = DOT / 1000;
H2S = H2S / 100;
CO2 = CO2 / 100;
N2 = N2 / 100;
if( RR == 0)
{
RR = 0.0008;
}
if( dxhfs == 0)
{
//正循环泵流动通路
ddhwn = DIT;
dxhwn = DIC;
dfhwn = DIC;
ddhnw = 0;
dxhnw = 0;
dfhnw = DOT;
}
else
{
//反循环泵流动通路
dfhwn = DIT;
dxhwn = DIC;
ddhwn = DIC;
dfhnw = 0;
dxhnw = 0;
ddhnw = DOT;
}
//天然气的临界参数(PC, TC, GG, YH2S, CO2, "干气")
csjs.trqnjcs(GG, YH2S, CO2, 1);
PC=csjs.Pc;
TC=csjs.Tc;
tjingkou = tjingkou + 273.15;
tdiceng = tdiceng + 273.15;
TG = (tdiceng - tjingkou) / DVW; //温度梯度
//计算动力液压力(喷嘴上流压力)D喷嘴上流压力
dbcwd = tjingkou + TG * DJP;
QP = Qpmax * 0.9;
if( ddongliye == "水")
{
QPW = QP;
QPO = 0;
}
else
{
QPW = 0;
QPO = QP;
}
//多相流(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);
//计算吸入压力Ps
dyjpyl = 1;
//由Q求PWF(D井底流压, D预计排液量, PLI, QB, Qomax, D最大产液量, Prs, Pb, Fw)
djdly=zpjjs.YQPWF(dyjpyl, PLI, QB, Qomax, dzdcyl, Prs, Pb, Fw);
QW = dyjpyl * Fw;
QO = dyjpyl * (1 - Fw);
QG = QW * GWR;
//多相流(D泵的吸入压力, D井底流压, T地层, TG, QG, QW, QO, GG, GW, OG, DVW - DJP, D吸环外内, D吸环内外, RR, H2S, CO2, N2, NaCl, 0, -1, 1, MMPF)
dbdxryl=zpjjs.dxl(MMPF,djdly, tdiceng, TG, QG, QW, QO, GG, GW, OG, DVW - DJP, dxhwn, dxhnw, RR, H2S, CO2, N2, NaCl, 0, -1, 1);
//计算需用喷嘴面积Aj0
if( ddongliye == "水")
{
NLG = GW;
}
else
{
NLG = OG;
}
dpzmj0 = QP / 3.79 * pow((NLG * (1 + Kj) / (dpzslyl - dbdxryl)),0.5);
if( NNZ == 0)
{
for(i=1;i<=100;i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -