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

📄 slb.cpp

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