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

📄 slbdtfx.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// Slbdtfx.cpp: implementation of the CSlbdtfx class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "cvenus.h"
#include "Slbdtfx.h"
#include"shlwapi.h"
#include "common.h"
#include "yqsxz.h"
#include "zpjjdfx.h"
#include "Slb.h"
#include "qjyhsj.h"
#include "LZXJD.h"



#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



extern	char	cGraphColor[][16];
extern	int		iGraphColorNum;
extern	int		g_iProgress ;	// 计算进度
extern	bool	bFinishThread;



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSlbdtfx::CSlbdtfx()
{
	g_iProgress = 0;
}

CSlbdtfx::~CSlbdtfx()
{

}

void CSlbdtfx::dtfx()
{
	double dblResult[20][200], dblCSZ[6][5];
	int iFXCount[6];
	// dblDVW, dblPrs, T地层, Pwh, T井口, dblPLI, q测试, p测试, GLR
	double dblDVW,dblPrs,dblTDC,dblPwh,dblTJK,dblPLI,dblQCS,dblPCS,dblGLR;
	// Pb, dblFW,dblDVT, dblDIT, dblDIC, dblRR, dblDIC, dblDJP,dblOG
	double dblPB,dblFW,dblDVT,dblDIT,dblDOT,dblRR,dblDIC,dblDJP,dblOG;
	//dblGG, dblCO2, dblDIC, dblN2, dblGW, dblNaCl, dblPft, NJ, NT, dblBx, dlylx
	double dblGG,dblCO2,dblH2S, dblN2,dblGW,dblNaCl,dblPft,dblBx,dblDlylx;
	// F井口压力, F地层压力, F产液指数, F气液比, F泵挂深度, F地面泵压,D损失系数
	double dblFPJK,dblFPDC,dblFCYZS,dblFQYB,dblFBGSD,dblFDMBY,dblDSSXS;
	// iMMPF,D井下泵型号
	int iMMPF,iDJXBXH,iNJ,iNT;

	dblDVW = 0;dblPrs = 0;dblTDC = 0;dblPwh = 0;
	dblTJK = 0;dblPLI = 0;dblQCS = 0;dblPCS = 0;dblGLR = 0;dblPB = 0;dblFW = 0;
	dblDVT = 0;dblDIT = 0;dblDOT = 0;dblRR = 0;dblDIC = 0;dblDJP = 0;dblOG = 0;
	dblGG = 0;dblCO2 = 0;dblH2S = 0;dblN2 = 0;dblGW = 0;dblNaCl = 0;
	dblPft = 0;dblBx = 0;dblDlylx = 0;dblFPJK = 0;
	dblFPDC = 0;dblFCYZS = 0;dblFQYB = 0;dblFBGSD = 0;dblFDMBY = 0;dblDSSXS = 0;

	int iTemp,iTemp01,iTemp02,iTemp03,iTemp04,iTemp05;
	CString strTemp,strTemp01,strTemp02,strTemp03;


	// dblDVW, dblPrs, T地层, Pwh, T井口, dblPLI, q测试, p测试, GLR,
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(1, 5);
	dblDVW=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(2, 5);
	dblPrs=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(3, 5);
	dblTDC=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(4, 5);
	dblPwh=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(5, 5);
	dblTJK=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(6, 5);
	dblPLI=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(7, 5);
	dblQCS=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(8, 5);
	dblPCS=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(9, 5);
	dblGLR=atof(strTemp);

	iTemp = 9;
	((CCVenusApp*)AfxGetApp())->m_pMainDlg->GetWindowText(strTemp01);
	if(StrStr(strTemp01, _T("气井排水采气")) == NULL)
	{
		iTemp++;
		strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp++, 5);
		dblPB=atof(strTemp);
		iTemp++;
		strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp++, 5);
		dblFW=atof(strTemp);
	}
	
	// dblDVT, dblDIT, dblDIC, dblRR, dblDIC, dblDJP
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblDVT=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblDIT=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblDOT=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblRR=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblDIC=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblDJP=atof(strTemp);

	// dblOG
	if(StrStr(strTemp01, _T("气井排水采气")) == NULL)
	{
		iTemp++;
		strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp++, 5);
		dblOG=atof(strTemp);
	}

	// dblGG, dblCO2, dblDIC, dblN2, dblGW, dblNaCl, dblPft, NJ, NT, dblBx, dlylx
	
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblGG=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblCO2=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblH2S=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblN2=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblGW=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblNaCl=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblPft=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	iNJ=atoi(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	iNT=atoi(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblBx=atof(strTemp);
	iTemp++;
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
	dblDlylx=atof(strTemp);

	for(iTemp01 = 0;iTemp01 < 6; iTemp01++)
	{
	   for(iTemp02 = 0;iTemp02 < 5; iTemp02++)
	   {
		   iTemp++;
		   strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(iTemp, 5);
		   dblCSZ[iTemp01][iTemp02]=atof(strTemp);
	   }
	}

	// F井口压力, F地层压力, F产液指数, F气液比, F泵挂深度, F地面泵压
	dblFPJK=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDC_SCHECK1))->GetCheck();
	dblFPDC=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDC_SCHECK2))->GetCheck();
	dblFCYZS=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDC_SCHECK3))->GetCheck();
	dblFQYB=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDC_SCHECK4))->GetCheck();
	dblFBGSD=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDC_SCHECK5))->GetCheck();
	dblFDMBY=((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDC_SCHECK6))->GetCheck();
	iMMPF=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDCBX_SLBD_DXL))->GetCurSel();
	iMMPF++;	  
	dblDSSXS = ((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDCBX_SLBD_SSXS))->GetCurSel();
	dblDSSXS++;
	iDJXBXH=((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page21.GetDlgItem(IDCBX_SLBD_BXH))->GetCurSel();
	iDJXBXH++;


	CString strJPX = _T("");	//JP型

	CStdioFile stdfDDD;
	CFileException fe;
	BOOL bStatus;
	CString strPath;
	TCHAR	szGS1[300];
	TCHAR	szTemp[100];
	CString strTitle, strTitle1,strAA,strAA1,strAA2,strAXYZ;
	double dblCCA = 0; 
	double dblCCB = 0;
	int iBaizhi,iCCO;
	double dblPzzj[100], dblHdzj[100];
	

	strPath = ((CCVenusApp*)AfxGetApp())->m_strDataPath;
	strPath += _T("\\射流泵.DDD");
	
	bStatus = stdfDDD.Open(strPath,CFile::modeRead, &fe);
	if (!bStatus)
	{
	   char szMsg[100];
	   sprintf(szMsg, "Error opening file for reading. Code:%d",
		   fe.m_cause);
	   AfxMessageBox(szMsg);
	   return;
	}
	else
	{

		try{
		   stdfDDD.ReadString(szGS1,300);
		   stdfDDD.ReadString(szGS1,300);
		}
		catch(CFileException fe)
		{
		   AfxMessageBox(_T("Error reading file"));
		   return;
		}

		iTemp01 = 0;
		do
		{
	       iTemp01++;
		   try
		   {
			   stdfDDD.ReadString(szGS1,300);
		   }
		   catch (CFileException exception5)
		   {
			   AfxMessageBox("Error reading file");
			   return;
		   }
		   strTitle1 = szGS1;
		   iBaizhi = 0;
		   strTitle = _T("");
		   for(iTemp02 = 0;iTemp02 <= strTitle1.GetLength();iTemp02++)
		   {  
			   if( strTitle1.Mid(iTemp02,1)=="," || strTitle1.Mid(iTemp02,1)=="\n")
			   {
				   iBaizhi = iBaizhi + 1;
				   if(iBaizhi == 1)
				   {
					   strAA1 = strTitle;
					   strTitle = "";
				   }
				   if(iBaizhi == 2)
				   {
					   strAA2 = strTitle;
				   }
			   }
			   else
			   {
				   strTitle = strTitle + strTitle1.Mid(iTemp02,1);			
			   }
		   }
		   if(iTemp01 == iDJXBXH)
		   {
			   strJPX = strAA2;
			   break;
		   }

		}while(strAA1 != "[END]\n");

		do
		{
		   try
		   {
			   stdfDDD.ReadString(szGS1,300);
		   }
		   catch (CFileException fe)
		   {
			   AfxMessageBox("Error reading file");
			   return;
		   }
		   strAXYZ = szGS1;
		   if(strAXYZ.Find(strJPX) != -1)
		   {
			   break;
		   }
		}
		while(strAXYZ != "[结束]\n");


		if(strAXYZ.Find(strJPX) != -1)
		{
		   try
		   {
			   stdfDDD.ReadString(szGS1,300);
		   }
		   catch (CFileException fe)
		   {
			   AfxMessageBox("Error reading file");
			   return;
		   }
		   strAXYZ = szGS1;
		   iTemp03 = 1;
		   do
		   {
			   try
			   {
				   stdfDDD.ReadString(szGS1,300);
			   }
			   catch (CFileException fe)
			   {
				   AfxMessageBox("Error reading file");
				   return;
			   }
			   strTitle1 = szGS1;
			   if(strTitle1 == "[END]\n")
			   {
				   break;
			   }
			   iBaizhi=0;
			   strTitle="";
			   for(iTemp02 = 0;iTemp02 <= strTitle1.GetLength();iTemp02++)
			   {  
				   
				   if( strTitle1.Mid(iTemp02,1)==","||strTitle1.Mid(iTemp02,1)=="\n")
				   {
					   iBaizhi=iBaizhi+1;
					   if(iBaizhi==1)
					   {
						   iCCO=atoi(strTitle);
						   strTitle="";
					   }
					   if(iBaizhi==2)
					   {
						   dblCCA=atof(strTitle);
						   strTitle="";
					   }
					   if(iBaizhi==3)
					   {
						   dblCCB=atof(strTitle);
						   strTitle="";
					   }
				   }
				   else
				   {
					   strTitle=strTitle+strTitle1.Mid(iTemp02,1);			
				   }
			   }
			   dblPzzj[iCCO] = dblCCA;
			   dblHdzj[iCCO] = dblCCB;
		   }
		   while(iTemp03 >0);
		}
		else
		{
		   MessageBox(NULL, "喷嘴和喉道无参数,请更正!","参数错误",MB_ICONWARNING);
		   return;
		}          

	}

	stdfDDD.Close();

	if( dblPzzj[iNJ] == 0 || dblHdzj[iNT] == 0)
	{
		MessageBox(NULL, "井下射流泵参数错误,请输入后再计算!","射流泵参数",MB_ICONWARNING);
		return;
	}

	for(iTemp01=1;iTemp01<=6;iTemp01++)
	{
	  for(iTemp02=1;iTemp02<=4;iTemp02++)
	  {
		  if(dblCSZ[iTemp01][iTemp02] == 0)
		  {
			  for(iTemp03=iTemp02+1;iTemp03<=5;iTemp03++)
			  {
				  if( dblCSZ[iTemp01][iTemp03] >= 0)
				  {
					  dblCSZ[iTemp01][iTemp02] = dblCSZ[iTemp01][iTemp03];
					  dblCSZ[iTemp01][iTemp03] = 0;
					  break;
				  }
			  }
		  }
	  }
	}
	
	for(iTemp01=1;iTemp01<=6;iTemp01++)
	{
	  iFXCount[iTemp01] = 0;
	  for(iTemp02=1;iTemp02<=5;iTemp02++)
	  {
		  if( dblCSZ[iTemp01][iTemp02] > 0)
		  {
			  iFXCount[iTemp01]++;
		  }
	  }
	}
   

/*

计算总数 = 0;
if( dblFPJK == 1)
{
	  计算总数 = 计算总数 + iFXCount[1];
}
if( fdcyl == 1)
{
	  计算总数 = 计算总数 + iFXCount[2];
}
if( fcyzs == 1)
{
	  计算总数 = 计算总数 + iFXCount[3];
}
if( fqsb == 1)
{
	  计算总数 = 计算总数 + iFXCount[4];
}
if( fbgsd == 1)
{
	  计算总数 = 计算总数 + iFXCount[5];
}
if( fdmby == 1)
{
	  计算总数 = 计算总数 + iFXCount[6];
}
*/
	
	CCommon comm;
	CString strJSFF;
	strJSFF = comm.DXLMethod(iMMPF);
	
	// 变换含水率,如果 dblFW=1 为排水采气,否则为采油
	dblFW = dblFW / 100;
	if(StrStr(strTemp01,_T("气井排水采气")) != NULL)
	{
		dblFW = 1;
	}


	if(dblFW < 0)	
		dblFW = 0;
	if(dblFW > 1)
		dblFW = 1;

	CString strCYCQ;
	if(dblFW == 1)
		strCYCQ = _T("排水采气");
	else
		strCYCQ = _T("采油");

	CString strDLY;
	if(dblDlylx == 0)
		strDLY = _T("水");
	else
		strDLY = _T("油");

	if(dblFW == 1)
		strDLY = _T("水");

	if(dblFW == 0)
		strDLY = _T("油");

	if(dblBx != 1)
		dblBx = 0;

	double dblRPO = 0;
	double dblRSO = 0;
	yqsxz csjs;
	
	if(dblFW == 1)
		dblPB = dblPrs;
	else if(dblPB <= 0)
	{
		dblRPO = dblGLR / (1 - dblFW);
		// Call 油的泡点压力和溶解气油比(Pb, RSO, dblGG, RPO, dblOG, T地层, dblPrs)
		csjs.ypdylhrjqyb(dblGG, dblRPO, dblOG, dblTDC, dblPrs);
		dblPB = csjs.Pb;
		dblRSO = csjs.RSO;
	}

	// Call 入井动态关系IPR(dblPLI, QB, Qomax, D最大产液量, q测试, p测试, dblPrs, Pb, dblFW)			
	zpjjdfx zpjjs;
	double dblQB = 0;
	double dblQoMax = 0;
	double dblQtMax = 0;

	zpjjs.rjIPR(dblPLI,dblQCS, dblPCS, dblPrs, dblPB, dblFW);
	dblQB = zpjjs.QB;
	dblQoMax = zpjjs.Qomax;
	dblQtMax = zpjjs.Qtmax;
	dblPLI = zpjjs.PLIZZZ;

	if(((CCVenusApp*)AfxGetApp())->m_cBaseFileLeft.IsEmpty())
	{	
		strTemp = ((CCVenusApp*)AfxGetApp())->GetOpenFileName(1);
		if(strTemp.IsEmpty()) return;
	}
	else
	{
		strTemp = ((CCVenusApp*)AfxGetApp())->m_cBaseFileLeft +  _T(".RSJ");
	}


	CStdioFile stdfRes;
	bStatus = stdfRes.Open(strTemp,CFile::modeCreate|CFile::modeWrite);
	if(!bStatus)
	{
	   TCHAR szMsg[100];
	   sprintf(szMsg, "Error opening file for reading. Code:%d",
		   fe.m_cause);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -