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

📄 qjyhsj.cpp

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