⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slb.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -