📄 slb.cpp
字号:
// slb.cpp : implementation file
//
#include "stdafx.h"
#include "Cvenus.h"
#include "slb.h"
#include "math.h"
#include "zpjjdfx.h"
#include "qjyhsj.h"
#include "yqsxz.h"
#include "qjyhsj.h"
#include "LZXJD.h"
#include "qjyljs.h"
#include "yqsxz.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// slb
slb::slb()
{
}
slb::~slb()
{
}
extern char cGraphColor[][16];
extern int iGraphColorNum;
extern int g_iProgress ; // 计算进度
extern bool bFinishThread;
/////////////////////////////////////////////////////////////////////////////
// slb message handlers
void slb::slbjdfx()//射流泵排水采气节点分析
{ //根据最新版本修改
//喷嘴直径(100) [[[[ pzzj[100]
//喉道直径(100) [[[[ hdzj[100]
//结果(0 To 20, 0 To 200) [[[[ jieguo[20][200]
//分析参数个数(6) [[[[ fxcsgs[6]
//参数(6, 5) [[[[ canshu[6][5]
//T地层 [[[[ tdiceng
//T井口 [[[[ tjingkou
//q测试 [[[[ qceshi
//p测试 [[[[ pceshi
//F井口压力 [[[[ fjkyl
//F地层压力 [[[[ fdcyl
//F产液指数 [[[[ fcyzs
//F气水比 [[[[ fqsb
//F泵挂深度 [[[[ fbgsd
//F地面泵压 [[[[ fdmby
//D损失系数 [[[[ dssxs
//D井下泵型号 [[[[ djxbxh
//JP型 [[[[ jpxing
//D动力液 [[[[ ddly
//D计算压力点数 [[[[ djsylds
//P最大 [[[[ pzuida
//井口压力 [[[[ jkyl
//地层压力 [[[[ dcyl
//产液指数 [[[[ cyzs
//气水比 [[[[ qishuibi
//泵挂深度 [[[[ bgsd
//地面泵压 [[[[ dmby
//PLI未来 [[[[ pliwl
//QB未来 [[[[ qbwl
//Qomax未来 [[[[ qomaxwl
//Qtmax未来 [[[[ qtmaxwl
//Pb未来 [[[[ pbwl
//已经计算的点数 [[[[ yjjsdds
double PY[6], QX[6], BFB[6], pzzj[100], hdzj[100],DVW,Prs;
double jieguo[20][200],canshu[7][7],tdiceng,Pwh;
double tjingkou,PLI,qceshi,pceshi,GWR,DVT,DIT,DOT,RR,DIC,DJP;
double GG,CO2,H2S,N2,GW,NaCl,Pft,Bx,fjkyl,fdcyl,fcyzs;
double fqsb,fbgsd,fdmby,djxbxh,CCA,CCB,Fw,Pb;
double Ra,PC,TC,TG,TJP,AJ,DLTP,pzuida,PS,jkyl,dcyl,cyzs;
double qishuibi,bgsd,dmby,QS0,NDO,QS,QW,QO,QG,L1,L2,PN,PWF,OG;
double T0,QB,Qomax,Qtmax,Pcom,pliwl,qbwl,qomaxwl,qtmaxwl,pbwl;
double QSC,QN,QN0,QNW,QNO,NLG,DOL,DIL,Vf,M0,M,PD,H,X1,X2,P,Q;
double Q1,Q2,PI1,PI2,PO1,PO2,qxmax,pymax,Kj,Ks,Kt,Kd,Ktd,Ic;
int k,i,J,MMPF,baizhi,NJ,NT,djsylds,JJ,yjjsdds,IJ,K,dssxs,CCO,fxcsgs[7];
char gs1[300],temp[100];
CString title,title1,AA,jpxing,AA1,AA2,AXYZ,jsff,ddly,JPt;
CString fileDialogFilter2,fileDialogExt2,templs1,templs2;
CString fxcs0,fxcs,A,A1,A2;
int iColorIndex = 0; // 颜色索引 lzj
// SetCursor(LoadCursor(NULL, IDC_WAIT));
g_iProgress = 5; // 计算进度
ENDCOMPUTE;
//赋初值
KJ=0;KS=0;KT=0;KD=0;KTD=0;IC=0;
memset(PY, 0, sizeof(double) * 6);
memset(QX, 0, sizeof(double) * 6);
memset(BFB, 0, sizeof(double) * 6);
memset(pzzj, 0, sizeof(double) * 100);
memset(hdzj, 0, sizeof(double) * 100);
for(i=0; i < 20; i++)
{
for(J=0; J < 200; J++)
{
jieguo[i][J]=0;
}
}
memset(fxcsgs, 0, sizeof(int) * 7);
for(i = 0; i < 7;i++)
{
for(J = 0;J < 7; J++)
{
canshu[i][J]=0;
}
}
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;
Pft=0;Bx=0;fjkyl=0;fdcyl=0;fcyzs=0;fqsb=0;fbgsd=0;fdmby=0;djxbxh=0;CCA=0;
CCB=0;Fw=0;Pb=0;Ra=0;PC=0;TC=0;TG=0;TJP=0;AJ=0;DLTP=0;pzuida=0;PS=0;
jkyl=0;dcyl=0;cyzs=0;
qishuibi=0;bgsd=0;dmby=0;QS0=0;NDO=0;QS=0;QW=0;QO=0;QG=0;L1=0;L2=0;PN=0;PWF=0;OG=0;
T0=0;QB=0;Qomax=0;Qtmax=0;Pcom=0;pliwl=0;qbwl=0;qomaxwl=0;qtmaxwl=0;pbwl=0;
QSC=0;QN=0;QN0=0;QNW=0;QNO=0;NLG=0;DOL=0;DIL=0;Vf=0;M0=0;M=0;PD=0;H=0;X1=0;X2=0;P=0;Q=0;
Q1=0;Q2=0;PI1=0;PI2=0;PO1=0;PO2=0;qxmax=0;pymax=0;Kj=0;Ks=0;Kt=0;Kd=0;Ktd=0;Ic=0;
zpjjdfx zpjjs;
yqsxz csjs;
qjyhsj qjyljsz;
LZXJD lzxjdjs;
//打开数据文件,读入已知数据
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);
Pft=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(23, 5);
NJ=atoi(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(24, 5);
NT=atoi(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(25, 5);
Bx=atof(str);
k=25;
for(i=1;i<=6;i++)
{
for(J=1;J<=5;J++)
{
k=k+1;
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(k, 5);
canshu[i][J]=atof(str);
}
}
fjkyl=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_CHECK1))->GetCheck();
fdcyl=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_CHECK2))->GetCheck();
fcyzs=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_CHECK3))->GetCheck();
fqsb=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_CHECK4))->GetCheck();
fbgsd=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_CHECK5))->GetCheck();
fdmby=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_CHECK6))->GetCheck();
MMPF=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_COMBO1))->GetCurSel();
MMPF=MMPF+1;
dssxs=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.GetDlgItem(IDC_COMBO2))->GetCurSel();
dssxs=dssxs+1;
djxbxh=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page8.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)
{
AA1=title;
title="";
}
if(baizhi==2)
{
AA2=title;
}
}
else
{
title=title+title1.Mid(J,1);
}
}
if( i == djxbxh)
{
jpxing = AA2;
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);
}
}
pzzj[CCO] = CCA;
hdzj[CCO] = CCB;
}
while(k>0);
}
else
{
MessageBox(NULL, "喷嘴和喉道无参数,请更正!","参数错误",MB_ICONWARNING);
return;
}
}
f5.Close();
if( pzzj[NJ] == 0 || hdzj[NT] == 0)
{
MessageBox(NULL, "井下射流泵参数错误,请输入后再计算!","射流泵参数",MB_ICONWARNING);
return;
}
for(i=1;i<=6;i++)
{
for(J=1;J<=4;J++)
{
if( canshu[i][J] == 0)
{
for(int K=J+1;K<=5;K++)
{
if( canshu[i][K] >= 0)
{
canshu[i][J] = canshu[i][K];
canshu[i][K] = 0;
break;
}
}
}
}
}
for(i=1;i<=6;i++)
{
fxcsgs[i] = 0;
for(J=1;J<=5;J++)
{
if( canshu[i][J] > 0)
{
fxcsgs[i] = fxcsgs[i] + 1;
}
}
}
// 计算总数 = 0;
// if( fjkyl == 1)
// {
// 计算总数 = 计算总数 + fxcsgs[1];
// }
// if( fdcyl == 1)
// {
// 计算总数 = 计算总数 + fxcsgs[2];
// }
// if( fcyzs == 1)
// {
// 计算总数 = 计算总数 + fxcsgs[3];
// }
// if( fqsb == 1)
// {
// 计算总数 = 计算总数 + fxcsgs[4];
// }
// if( fbgsd == 1)
// {
// 计算总数 = 计算总数 + fxcsgs[5];
// }
// if( fdmby == 1)
// {
// 计算总数 = 计算总数 + fxcsgs[6];
// }
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 为排水采气,否则为采油
Fw = 1;
ddly = "水";
if( Bx != 1)
{
Bx = 0;
}
Pb = Prs;
//入井动态关系IPR(PLI, QB, Qomax, Qtmax, q测试, p测试, Prs, Pb, Fw)
zpjjs.rjIPR(PLI, qceshi, pceshi, Prs, Pb, Fw);
QB=zpjjs.QB;
Qomax=zpjjs.Qomax;
Qtmax=zpjjs.Qtmax;
PLI=zpjjs.PLIZZZ;
//打开保存计算结果的文件
/* fileDialogFilter2 ="Data files (*.RNJ)|*.RNJ|All files (*.*)|*.*||";
fileDialogExt2 = "RNJ";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -