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