📄 qjyhsj.cpp
字号:
// qjyhsj.cpp : implementation file
//
#include "stdafx.h"
#include "Cvenus.h"
#include "qjyhsj.h"
#include "yqsxz.h"
#include "zpjjdfx.h"
#include "qjyljs.h"
#include "LZXJD.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// qjyhsj
extern double ptidu[1000],dtidu[1000];
qjyhsj::qjyhsj()
{
}
qjyhsj::~qjyhsj()
{
}
extern char cGraphColor[][16];
extern int iGraphColorNum;
extern int g_iProgress ; // 计算进度
extern bool bFinishThread;
/////////////////////////////////////////////////////////////////////////////
// qjyhsj message handlers
void qjyhsj::qjyhsjjs() //气举优化设计
{
//D深度[200] [[[[ dshendu[200]
//PI梯度[200] [[[[ pitidu[200]
//DF深度[10][200] [[[[ dfshendu[10][200]
//PF梯度[10][200] [[[[ pftidu[10][200]
//DIM梯度[200] [[[[ dimtidu[200]
//PIM梯度[200] [[[[ pimtidu[200]
//PQ启动梯度[200] [[[[ pqqdtd[200]
//PQ梯度[200] [[[[ pqtidu[200]
//阀处套压[10] [[[[ fcty[10]
//阀处最小油压[10] [[[[ fczxyy[10]
//阀深度[10] [[[[ fsd[10]
//阀处温度[10] [[[[ fcwd[10]
//阀打开压力[10] [[[[ fdkyl[10]
//阀注气量[10] [[[[ fzql[10]
//阀校正注气量[10] [[[[ fjzzql[10]
//阀孔径[10] [[[[ fkj[10]
//阀孔径1[10] [[[[ fkj1[10]
//油管效应[10] [[[[ ygxy[10]
//阀处最大油压[10] [[[[ fczdyy[10]
//阀打开压力15[10] [[[[ fdkyl15[10]
//阀打开压力25[10] [[[[ fdkyl25[10]
//阀充氮压力[10] [[[[ fcdyl[10]
//阀充氮压力15[10] [[[[ fcdyl15[10]
//阀充氮压力25[10] [[[[ fcdyl25[10]
//油管效应系数[10] [[[[ ygxyxs[10]
//C油管效应系数[100] [[[[ cygxyxs[100]
//阀型号[100] [[[[ fxh[100]
//可用气举阀个数 [[[[ kyqjfgs
//P地层 [[[[ pdiceng
//T地层 [[[[ tdiceng
//P井口 [[[[ pjingkou
//T井口 [[[[ tjingkou
//qcscl [[[[ qceshi
//pcsyl [[[[ pceshi
//T注气 [[[[ tzhuqi
//P启动 [[[[ pqidong
//Q设计 [[[[ qsheji
//P工作压差 [[[[ pgzyc
//Q注最大 [[[[ qzzd
//NN阀 [[[[ nnfa
//阀型 [[[[ faxing
//N管段 [[[[ nguanduan
//P梯度 [[[[ ptidu[2000]
//D梯度 [[[[ dtidu[2000]
//P计算注气点 [[[[ pjszqd
//D注气点 [[[[ dzqd
//改变设计排量 [[[[ gbsjpl
//Q注入 [[[[ qzhuru
//Q假定注入 [[[[ qjdzr
//上次气量大小 [[[[ scqldx
//本次气量大小 [[[[ bcqldx
//Q总气量 [[[[ qzql
//P最小油压 [[[[ pzxyy
//P计算油压 [[[[ pjsyy
//L静液面 [[[[ ljym
//P阀 [[[[ pfa
//Q注 [[[[ qzhu
//临界压力比 [[[[ ljylb
//压力比 [[[[ ylb
//假定油管效应 [[[[ jdygxy
//阀只数 [[[[ fzs
//上流压力 [[[[ slyl
double dshendu[200],pitidu[200]; //井产出流体在油管内的流动梯度
double dfshendu[10][200], pftidu[10][200]; //井产出流体在油管内的流动梯度
double dimtidu[200], pimtidu[200]; //气举压力梯度
double pqqdtd[200]; //在启动压力下的注气压力梯度
double pqtidu[200]; //在注气压力下的注气压力梯度
double fcty[10], fczxyy[10], fsd[10], fcwd[10], fdkyl[10], fzql[10];
double fjzzql[10], fkj[10], fkj1[10], ygxy[10], fczdyy[10], fdkyl15[10];
double fdkyl25[10], fcdyl[10], fcdyl15[10], fcdyl25[10];
double DHOLE[100],ygxyxs[10], cygxyxs[100];
double pjszqd,dzqd,qzhuru,qjdzr,qzql,pzxyy,pjsyy,ljym,pfa,qzhu;
double ljylb,jdygxy,slyl,Pjs;
CString fxh[100],gd1,fileDialogFilter2,fileDialogExt2,feng[50];
CString caption,gbsjpl,scqldx,bcqldx,title,title1,AA,JSFF,CYCQ;
char gs1[10000],Temp[100],Temp1[100];
int kyqjfgs,CSGDZZ,fzs,MMPF,nnfa,i,J,baizhi,NN;
double DVW,pdiceng,tdiceng,pjingkou,tjingkou,qceshi,pceshi;
double Pb,Fw,DVT,DIT,DOT,RR,DIC,OG,GG,CO2,H2S,N2,KI,GW,NaCl;
double PIN,tzhuqi,pqidong,qsheji,pgzyc,qzzd,GWR,PLI,TG,TG1;
double PC,TC,Pcom,QL,DLTQ,QO,QW,QG,PMF,PWF,DLTQQ,H1,H2,PI1,PI2,PO1;
double PO2,DLTMIN,XDYN,DXYN,DGL,GS,ylb,PR,TR,Z,XX,YY,LS,A;
double CCA,CCB,Qomax,Qtmax,QB,PL1T;
CString A01,A02,A03,A33,A04,A05,A06,A07,A08,A09,A10,A11,A12,A13,A14;
CString A15,A16,DNZF,AA1,faxing,AXYZ,templs1;
int shejishi,KK,NJ,SJFF,k,CCO;
int iColorIndex = 0; // 颜色索引 lzj
// SetCursor(LoadCursor(NULL, IDC_WAIT));
//赋初值
for(i=0;i<200;i++)
{
dshendu[i]=0;
pitidu[i]=0;
dimtidu[i]=0;
pimtidu[i]=0;
pqqdtd[i]=0; //在启动压力下的注气压力梯度
pqtidu[i]=0; //在注气压力下的注气压力梯度
}
for(i=0;i<10;i++)
{
for(J=0;J<200;J++)
{
dfshendu[i][J]=0;
pftidu[i][J]=0;
}
}
for(i=0;i<10;i++)
{
fcty[i]=0; fczxyy[i]=0; fsd[i]=0; fcwd[i]=0; fdkyl[i]=0; fzql[i]=0;
fjzzql[i]=0; fkj[i]=0; fkj1[i]=0; ygxy[i]=0; fczdyy[i]=0; fdkyl15[i]=0;
fdkyl25[i]=0; fcdyl[i]=0; fcdyl15[i]=0; fcdyl25[i]=0;ygxyxs[10]=0;
}
for(i=0;i<100;i++)
{
DHOLE[i]=0;
cygxyxs[i]=0;
}
pjszqd=0;dzqd=0;qzhuru=0;qjdzr=0;qzql=0;pzxyy=0;pjsyy=0;ljym=0;pfa=0;
qzhu=0;ljylb=0;jdygxy=0;slyl=0;Pjs=0;kyqjfgs=0;CSGDZZ=0;fzs=0;MMPF=0;
nnfa=0;i=0;J=0;baizhi=0;NN=0;DVW=0;pdiceng=0;tdiceng=0;pjingkou=0;
tjingkou=0;qceshi=0;pceshi=0;Pb=0;Fw=0;DVT=0;DIT=0;DOT=0;RR=0;DIC=0;
OG=0;GG=0;CO2=0;H2S=0;N2=0;KI=0;GW=0;NaCl=0;PIN=0;tzhuqi=0;pqidong=0;
qsheji=0;pgzyc=0;qzzd=0;GWR=0;PLI=0;TG=0;TG1=0;PC=0;TC=0;Pcom=0;QL=0;
DLTQ=0;QO=0;QW=0;QG=0;PMF=0;PWF=0;DLTQQ=0;H1=0;H2=0;PI1=0;PI2=0;PO1=0;
PO2=0;DLTMIN=0;XDYN=0;DXYN=0;DGL=0;GS=0;ylb=0;PR=0;TR=0;Z=0;XX=0;YY=0;
LS=0;A=0;CCA=0;CCB=0;Qomax=0;Qtmax=0;QB=0;PL1T=0;shejishi=0;KK=0;NJ=0;
SJFF=0;k=0;CCO=0;
yqsxz csjs;
zpjjdfx zpjjs;
qjyljs qjyljsz;
LZXJD jslzjd;
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);
pdiceng=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);
pjingkou=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);
GG=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(16, 5);
CO2=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(17, 5);
H2S=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
N2=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
KI=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);
PIN=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(23, 5);
tzhuqi=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(24, 5);
pqidong=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(25, 5);
qsheji=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(26, 5);
pgzyc=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(27, 5);
qzzd=atof(str);
MMPF=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page4.GetDlgItem(IDC_COMBO1))->GetCurSel();
MMPF=MMPF+1;
SJFF=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page4.GetDlgItem(IDC_COMBO2))->GetCurSel();
SJFF=SJFF+1;
nnfa=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page4.GetDlgItem(IDC_COMBO3))->GetCurSel();
nnfa=nnfa+1;
i = 0;
kyqjfgs = 0;
CStdioFile f5;
CFileException exception5;
BOOL status4;
A01=((CCVenusApp*)AfxGetApp())->m_strDataPath;
A01=A01+"\\气举阀.DDD";
status4 = f5.Open(A01,CFile::modeRead, &exception5);
g_iProgress = 5; // 计算进度
ENDCOMPUTE;
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 == nnfa)
{
faxing = AA1;
break;
}
}
while(AA != "[END]\n");
do
{
try
{
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
AXYZ=gs1;
if( AXYZ.Find(faxing)!=-1)
{
break;
}
}
while(AXYZ!="[结束]\n");
if( AXYZ.Find(faxing)!=-1)
{
try
{
f5.ReadString(gs1,300);
}
catch (CFileException exception5)
{
AfxMessageBox("Error reading file");
return;
}
AXYZ=gs1;
k=1;
do
{
kyqjfgs = kyqjfgs + 1;
fxh[kyqjfgs] = faxing;
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)
{
DHOLE[kyqjfgs] = CCA;
cygxyxs[kyqjfgs] = CCB;
}
else
{
kyqjfgs = kyqjfgs - 1;
}
}
while(k>0);
}
else
{
MessageBox(NULL, "气举阀无参数,请更正!","气举阀无参数",MB_ICONWARNING);
return;
}
}
f5.Close();
switch(MMPF)
{
case 1:
JSFF = "Hagedorn和Brown多相流方法";
break;
case 2:
JSFF = "Duns和Ros多相流方法";
break;
case 3:
JSFF = "Orkiszewski多相流方法";
break;
case 4:
JSFF = "Beggs和Brill多相流方法";
break;
case 5:
JSFF = "Mukherjee和Brill多相流方法";
break;
case 6:
JSFF = "SWPI和SPA多相流方法";
break;
}
g_iProgress = 15; // 计算进度
ENDCOMPUTE;
//入井动态关系
Pb = pdiceng;
Fw=1;
// 入井动态关系IPR(PLI, QB, Qomax, Qtmax, qceshi, pceshi, pdiceng, Pb, Fw);
zpjjs.rjIPR(PLI, qceshi, pceshi, pdiceng, Pb, Fw);
QB=zpjjs.QB;
Qomax=zpjjs.Qomax;
Qtmax=zpjjs.Qtmax;
PLI=zpjjs.PLIZZZ;
//变换数据
H2S = H2S / 100;
CO2 = CO2 / 100;
N2 = N2 / 100;
if( RR == 0)
{
RR = 0.05 / DIT;
}
DIT = DIT / 1000;
DOT = DOT / 1000;
DIC = DIC / 1000;
tjingkou = tjingkou + 273.15;
tdiceng = tdiceng + 273.15;
tzhuqi = tzhuqi + 273.15;
TG = (tdiceng - tjingkou) / DVW;
TG1 = (tdiceng - tzhuqi) / DVW;
ldiv_t DVWshang;
DVWshang=ldiv(long(DVW),50);
if( DVWshang.quot == DVW / 50)
{
CSGDZZ = DVWshang.quot;
}
else
{
CSGDZZ = DVWshang.quot + 1;
}
// 天然气的临界参数(PC, TC, GG, H2S, CO2, "干气");
csjs.trqnjcs(GG, H2S, CO2,1);//临界参数
PC=csjs.Pc;//对比压力
TC=csjs.Tc;//对比温度
if( pgzyc <= 0)
{
pgzyc = 0;
}
if( pgzyc >= 1.5)
{
pgzyc = 1.5;
}
qzzd = 10000 * qzzd;
//根据设计方法确定排液量
if( SJFF == 1 && qzzd > 0)
{
//根据最大注气量设计
for(i=1;i<=CSGDZZ;i++)
{
ptidu[i] = 0;
}
// 气井压力(Pcom, PIN, tzhuqi, TG1, DVW, DIC, DOT, RR, qzzd, GG, 0, 1, H2S, N2, CO2, 0, 1, -1);
Pcom=qjyljsz.qjyl(PIN, tzhuqi, TG1, DVW, DIC, DOT, RR, qzzd, GG, 0, 1, H2S, N2, CO2, 0, 0, 1, -1);
// 由PWF求Q(QL, Pcom + pgzyc, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw);
QL=ypwfqq(Pcom + pgzyc, PLI,QB,Qomax,Qtmax,pdiceng, Pb, Fw);
DLTQ = 0.01 * QL;
shejishi=9999;
do
{
QO = QL * (1 - Fw);
QW = QL * Fw;
QG = QL * GWR + qzzd;
// Call 多相流(PMF, pjingkou, tjingkou, TG, QG, QW, QO, GG, GW, OG, DVT, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1, MMPF)
PMF=zpjjs.dxl(MMPF,pjingkou, tjingkou, TG, QG, QW, QO, GG, GW, OG, DVT, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1);
// Call 由Q求PWF(PWF, QL, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw)
PWF=zpjjs.YQPWF(QL, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw);
if( PMF + pgzyc < PWF)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -