📄 qjdtfx.cpp
字号:
// 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 + -