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

📄 qjdtfx.cpp

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

#include "stdafx.h"
#include "cvenus.h"
#include "Qjdtfx.h"


#include "yqsxz.h"
#include "zpjjdfx.h"
#include "qjyljs.h"
#include "common.h"

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


#define		PDC 110	// P地层 大于不可(溢出) 196M


extern	char	cGraphColor[][16];
extern	int		iGraphColorNum;
extern	int		g_iProgress ;	// 计算进度
extern	bool	bFinishThread;
extern double	ptidu[1000],dtidu[1000];

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


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

CQjdtfx::~CQjdtfx()
{

}

void CQjdtfx::Dtfx()
{

	double dblCSZ[7][5];
	double dblQSL[500], dblRLC[500],dblGSD[500],dblPGDXL[500],dblPGZQ[500];
	double dblDVW,dblPDC,dblTDC,dblPJK,dblTJK,dblPLIYS,dblQCS,dblPCS,dblGWRYS;
	double dblDVT,dblDITYS,dblDOT,dblRR,dblDIC;
	double dblGG,dblCO2,dblH2S,dblN2,dblGW,dblNaCl,dblPIN,dblQIN,dblPGZYC;
	int iMMPF, iPFXCS[7];
	

	dblDVW = 0; dblPDC =0; dblTDC = 0; dblPJK = 0; dblTJK = 0;
	dblPLIYS = 0; dblQCS = 0; dblPCS = 0; dblGWRYS = 0;
	dblDVT = 0; dblDITYS = 0; dblDOT = 0; dblRR = 0; dblDIC = 0;
	dblGG = 0; dblCO2 = 0; dblH2S = 0; dblN2 = 0; dblGW = 0; dblNaCl = 0;
	dblPIN = 0; dblQIN = 0; dblPGZYC = 0;


	int iTemp,iTemp01,iTemp02,iTemp03;
	CString strTemp;
	double dblTemp = 0;


	for(iTemp01 = 0; iTemp01 < 7; iTemp01++)
	{
		for(iTemp02 = 0; iTemp02 < 5; iTemp02++)
		{
			dblCSZ[iTemp01][iTemp02] = 0;
		}
	}


	for(iTemp01 = 0; iTemp01 < 500; iTemp01++)
	{
		dblGSD[iTemp01] = 0;
		dblPGDXL[iTemp01] = 0;
		dblPGZQ[iTemp01] = 0;
		dblQSL[iTemp01] = 0;
		dblRLC[iTemp01] = 0;

	}


	for(iTemp01 = 0; iTemp01 < 7; iTemp01++)
		iPFXCS[iTemp01] = 0;
	
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(1, 5);
	dblDVW = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(2, 5);
	dblPDC = 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);
	dblPJK = 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);
	dblPLIYS = 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);
	dblGWRYS = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(10, 5);
	dblDVT = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(11, 5);
	dblDITYS = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(12, 5);
	dblDOT = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(13, 5);
	dblRR=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(14, 5);
	dblDIC = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(15, 5);
	dblGG=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(16, 5);
	dblCO2 = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(17, 5);
	
	dblH2S=atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
	dblN2 = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
	dblGW = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(20, 5);
	dblNaCl = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(21, 5);
	dblPIN = atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(22, 5);
	dblQIN =atof(strTemp);
	strTemp = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(22, 5);
	dblPGZYC = atof(strTemp);
	
	iTemp = 23;

    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);
		}
	}

	
//	int iPJKFX, iYGCCFX, iCSZSFX, iQSBFX, iZQLFX, iPZQFX;
	iPFXCS[0] = ((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDC_QCHECK1))->GetCheck();
	iPFXCS[1] = ((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDC_QCHECK2))->GetCheck();
	iPFXCS[2] = ((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDC_QCHECK3))->GetCheck();
	iPFXCS[3] = ((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDC_QCHECK4))->GetCheck();
	iPFXCS[4] = ((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDC_QCHECK5))->GetCheck();
	iPFXCS[5] = ((CButton*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDC_QCHECK6))->GetCheck();
	iMMPF = ((CComboBox*)((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_Page20.GetDlgItem(IDCBX_QJD_DXL))->GetCurSel();
	iMMPF = iMMPF+1;


	double dblRLR[2*PDC + 5][500], dblQSH[2*PDC + 5][6];

	//'参数排列,确保0在后面
	for(iTemp01 = 0; iTemp01 < 6; iTemp01++)
	{
		for(iTemp02 = 0; 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 = 0; iTemp01 < 6; iTemp01++)
	{
		for(iTemp02 = 0; iTemp02 < 4; iTemp02++)
		{
			for(iTemp03 = iTemp02 + 1; iTemp03 < 5; iTemp03++)
			{
				if(dblCSZ[iTemp01][iTemp02]  > dblCSZ[iTemp01][iTemp03] &&
					dblCSZ[iTemp01][iTemp03] > 0)
				{
					dblTemp = dblCSZ[iTemp01][iTemp03];
					dblCSZ[iTemp01][iTemp03] = dblCSZ[iTemp01][iTemp02];
					dblCSZ[iTemp01][iTemp02] = dblTemp;

				}
			}
		}
	}
	
	g_iProgress = 10;


	double dblFW, dblPB;

	dblFW = 1;
	dblPB =dblPDC;
	
	// 计算井的入井动态关系
	double dblPLI, dblQtMax, dblQoMax, dblQB;

	dblQtMax = 0;
	dblQoMax = 0;
	dblQB = 0;
	dblPLI = dblPLIYS;

	zpjjdfx jdfx;
	jdfx.rjIPR(dblPLI, dblPCS, dblQCS, dblPDC, dblPB, dblFW);
	dblQtMax = jdfx.Qtmax;
	dblQoMax = jdfx.Qomax;
	dblPLI = jdfx.PLIZZZ;
	dblQB = jdfx.QB;

	// 分析的井口压力

	if(iPFXCS[0] == 1 && dblCSZ[0][0] + dblCSZ[0][1] == 0)
	{
		
		for(iTemp01 = 0; iTemp01 < 5; iTemp01++)
		{
			if(dblPJK >= 2)
			{
				dblCSZ[0][iTemp01] = dblPJK + (iTemp01 - 2);
			}
			else
			{
				dblCSZ[0][iTemp01] = iTemp01;
			}
		}
	}

	// 分析的油管尺寸
	if(iPFXCS[1] == 1 && dblCSZ[1][0] + dblCSZ[1][1] == 0)
	{
		dblCSZ[1][0] = 38;
		dblCSZ[1][1] = 50.7;
		dblCSZ[1][2] = 62;
		dblCSZ[1][3] = 76;
		dblCSZ[1][4] = 88.3;

	}

	// 分析的产水指数
	if(iPFXCS[2] == 1 && dblCSZ[2][0] + dblCSZ[2][1] == 0)
	{
		for(iTemp01 = 0; iTemp01 < 5; iTemp01++)
		{
			dblCSZ[2][iTemp] = dblPLI + dblPLI / 5 * (iTemp01 - 2);
		}
	}

	// 分析的气水比
	
	if(iPFXCS[3] == 1 && dblCSZ[3][0] + dblCSZ[3][1] == 0)
	{
		for(iTemp01 = 0; iTemp01 < 5; iTemp01++)
		{
			if(dblGWRYS <= 100)
				dblCSZ[3][iTemp01] = 50 * (5 - iTemp01);
			else if(dblGWRYS <= 400)
				dblCSZ[3][iTemp01] = dblGWRYS + 50 * (2 - iTemp01);
			else
				dblCSZ[3][iTemp01] = dblGWRYS + 100 * (2 - iTemp01);
		}
	}
	
	// 分析的注气量
	if(iPFXCS[4] == 1 && dblCSZ[4][0] + dblCSZ[4][1] == 0)
	{
		for(iTemp01 = 0; iTemp01 < 5; iTemp01++)
		{
			if(dblQIN >= 1.5)
			{
				dblCSZ[4][iTemp01] = dblQIN + 0.5 * (2 - iTemp01);
			}
			else
			{
				dblCSZ[4][iTemp01] = 0.5 + (4 - iTemp01);
			}
		}
		
	}
	

	// 分析的注气压力
	
	if(iPFXCS[5] == 1 && dblCSZ[5][0] + dblCSZ[5][1] == 0)
	{
		for(iTemp01 = 0; iTemp01 < 5; iTemp01++)
		{
			if(dblPIN >= 8)
			{
				dblCSZ[5][iTemp01] = dblPIN + 2 * (2 - iTemp01);
			}
			else
			{
				dblCSZ[5][iTemp01] = 12 - iTemp01;
			}
		}
		
	}

	int iJSZS = 0;
	
	for(iTemp01 = 0; iTemp01 < 6; iTemp01++)
	{
		for(iTemp02 = 0; iTemp02 < 4; iTemp02++)
		{
			if(iTemp02 > 0 && dblCSZ[iTemp01][iTemp02] == 0)
				iJSZS += iPFXCS[iTemp01];				
		}
	}
	if(dblCSZ[4][1] * dblCSZ[4][2] * dblCSZ[4][3] * dblCSZ[4][4] == 0)
		iJSZS += iPFXCS[4];	

	CString strDXLMethod;
	CCommon comm;
	strDXLMethod = comm.DXLMethod(iMMPF);

	// 参数变换及计算有关参数
	dblH2S /= 100;
	dblCO2 /= 100;
	dblN2 /= 100;

	if(dblRR == 0)
		dblRR = 0.05 / dblDITYS;
	dblDOT /= 1000;
	dblDIC /= 1000;
	dblTJK += 273.15;
	dblTDC += 273.15;

	double dblTG = 0;
	dblTG = (dblTDC - dblTJK) / dblDVW;

	double dblPC, dblTC;
	dblPC = 0;
	dblTC = 0;
	yqsxz csjs;
	//天然气的临界参数(PC, TC, GG, H2S, CO2, "干气")
	csjs.trqnjcs(dblGG, dblH2S, dblCO2,1);//临界csz
	dblPC = csjs.Pc;//对比压力
	dblTC = csjs.Tc;//对比温度
	
	// 确定分析的产水量值
	dblQSL[0] = int(0.05 * dblQtMax);
	if(dblQSL[0] > 5)
		dblQSL[0] = 5;

	int iPFXCount;
	double dblDLTQ = 0;

	for(iTemp01 = 0; iTemp01 < 500; iTemp01++)
	{
		iPFXCount = iTemp01 + 1;
		if(dblQSL[iTemp01] < 50)
			dblDLTQ = 2;
		else if(dblQSL[iTemp01] < 200)
			dblDLTQ = 5;
		else if(dblQSL[iTemp01] < 1000)
			dblDLTQ = 10;
		else if(dblQSL[iTemp01] < 5000)
			dblDLTQ = 20;
		else
			dblDLTQ = 50;

		dblQSL[iTemp01 + 1] = dblQSL[iTemp01] + dblDLTQ;
		if(dblQSL[iTemp01] > dblQtMax)
			break;
		
	}	


	// 打开文件,写入设计结果
	// 数据结果文件
	CStdioFile stdfRes,stdfGraph;
	CFileException fe;
	BOOL bStatus;
	CString strPath;

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


	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);
	   AfxMessageBox(szMsg);
	   return;

	}

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


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

	}


	CString strTemp01, strTemp02;

	stdfRes.WriteString(_T("\n"));
	strTemp = _T("\t\t$$气举排水采气动态分析计算结果$0\n");
	stdfRes.WriteString(strTemp + _T("\n"));
	stdfRes.WriteString(_T("\n"));
	strTemp01 = _T("井口压力$7\t 油管尺寸$7\t 气水比$7\t 产水指数$7\t  注气量$7\t 注气压力$7");
	strTemp02 = _T("  MPa$11\t mm$11\t m^3/m^3$11\t m^3/d·MPa$11\t m^3/d$11\t MPa$11");
	int iPDC;
	double dblPRS0 = 0;
	for(iPDC = 2 * int(dblPDC + 0.5); iPDC >= 6 * int(dblDVT / 1000 + 0.5); iPDC--)
	{
		if(iPDC == 2 * int(dblPDC + 0.5))
			dblPRS0 = dblPDC;
		else
		{
/*
			// hss
			if(dblPRS0 == iPDC / 2)
			{
				dblPRS0 -= 2.5;
//				if(int(dblPRS0) != dblPRS0)
//					break;
			}
			else
				//end
*/

				dblPRS0 = double(iPDC) / 2.00;
		}

		
		if(int(dblPRS0 / 2.5) - dblPRS0 / 2.5 == 0 || iPDC == 2 * int(dblPDC + 0.5))
		{
			strTemp01 += _T("\t地层压力$7");
			strTemp.Format(_T("\t%.2f"), dblPRS0);
			strTemp02 += strTemp + _T("$11");
		}
		
	}
	
	g_iProgress = 20;

	stdfRes.WriteString(strTemp01 + _T("\n"));
	stdfRes.WriteString(strTemp02 + _T("\n"));
	
	// 图形结果文件
	int iPercent = 1;
	// 主窗口.SSPanel1.FloodPercent = 百分比

	int iCS, iFXCS;
	double dblDDD = 0;
	double dblPWH = 0;
	double dblDIT = 0;
	double dblGWR = 0;
	double dblQZH = 0;
	double dblPZH = 0;
	double dblPRSWL = 0;

	double dblPLIWL = 0;
	double dblQBWL = 0;
	double dblQoMaxWL = 0;
	double dblQtMaxWL = 0;
	double dblPBWL = 0;

	double dblPWF = 0;

	double dblJKYL = 0;

⌨️ 快捷键说明

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