📄 qjyltd.cpp
字号:
// qjyltd.cpp : implementation file
//
#include "stdafx.h"
#include "Cvenus.h"
#include "qjyltd.h"
#include "yqsxz.h"
#include "qjyljs.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// qjyltd
extern double ptidu[1000],dtidu[1000];
qjyltd::qjyltd()
{
}
qjyltd::~qjyltd()
{
}
extern char cGraphColor[][16];
extern int iGraphColorNum;
extern int g_iProgress ; // 计算进度
extern bool bFinishThread;
/////////////////////////////////////////////////////////////////////////////
// qjyltd message handlers
void qjyltd::qjyltdjs(CString zqjcqj)//气井压力梯度
{
//P井底 [[[[ pjingdi
//G最小产气量 [[[[ gzxcql
//G最大产气量 [[[[ gzdcql
//曲线条数 [[[[ qxts
//T地层 [[[[ tdiceng
//T井口 [[[[ tjingkou
//P井口 [[[[ pjingkou
//P梯度(3000) [[[[ ptidu[3000]
//D梯度(3000) [[[[ dtidu[3000]
// 压力梯度(3000) [[[[ yltd[3000]
//深度梯度(3000) [[[[ sdtd[3000]
//曲线条数 [[[[ qxts
//N总段数 [[[[ nzds
//G产气量 [[[[ gcql
double pjingdi,gzxcql,gzdcql,tdiceng,tjingkou,pjingkou;
double sdtd[3000],yltd[3000];
double gcql,DVW,GG,DIC,DIT1,DVT1,DIT2,DVT2,DIT3;
double DVT3,RR,H2S,CO2,N2,LGR,GL,TG,PC,TC;
double RG,PN,P0,T0,DOL,L,DIL,NaCl;
CString GTY[2000],HZ,G4,G2,G3,templs1;
char temp[150];
int qxts,KK,i,FD,j,IJ,NP,I1,I0,nzds,ISTEP,CD;
CString fileDialogFilter2,fileDialogExt2,feng[51],gd1;
CString title,title1,title2;
int iColorIndex = 0; // 颜色索引 lzj
// SetCursor(LoadCursor(NULL, IDC_WAIT));
g_iProgress = 35; // 计算进度
ENDCOMPUTE;
//赋初值
for(i=0;i<3000;i++)
{
sdtd[i]=0;
yltd[i]=0;
}
pjingdi=0;gzxcql=0;gzdcql=0;tdiceng=0;tjingkou=0;pjingkou=0;
gcql=0;DVW=0;GG=0;DIC=0;DIT1=0;DVT1=0;DIT2=0;DVT2=0;DIT3=0;
DVT3=0;RR=0;H2S=0;CO2=0;N2=0;LGR=0;GL=0;TG=0;PC=0;TC=0;
RG=0;PN=0;P0=0;T0=0;DOL=0;L=0;DIL=0;NaCl=0;
qxts=0;KK=0;i=0;FD=0;j=0;IJ=0;NP=0;I1=0;I0=0;nzds=0;ISTEP=0;CD=0;
yqsxz yqsxz;
qjyljs qjyljsz;
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);
tdiceng=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(3, 5);
pjingdi=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(4, 5);
tjingkou=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(5, 5);
pjingkou=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(6, 5);
GG=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(7, 5);
DIC=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(8, 5);
DIT1=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(9, 5);
DVT1=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(10, 5);
DIT2=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(11, 5);
DVT2=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(12, 5);
DIT3=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(13, 5);
DVT3=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(14, 5);
RR=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(15, 5);
H2S=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);
N2=atof(str);
if(zqjcqj== "采气井")
{
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
LGR=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
GL=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(20, 5);
gzxcql=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(21, 5);
gzdcql=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(22, 5);
qxts=atoi(str);
}
else
{
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
gzxcql=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
gzdcql=atof(str);
str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(20, 5);
qxts=atoi(str);
}
//基本参数单位变换及确定有关计算用参数
NP = 40;
H2S = H2S / 100;
N2 = N2 / 100;
CO2 = CO2 / 100;
LGR = LGR / 10000;
DIT1 = DIT1 / 1000;
DIT2 = DIT2 / 1000;
DIT3 = DIT3 / 1000;
DIC = DIC / 1000;
tdiceng = tdiceng + 273.15;
tjingkou = tjingkou + 273.15;
TG = (tdiceng - tjingkou) / DVW;
//天然气的临界参数(PC, TC, G气, H2S, CO2, "干气"); 问题->G气变GG?
yqsxz.trqnjcs(GG, H2S, CO2,1);//临界参数
PC=yqsxz.Pc;//对比压力
TC=yqsxz.Tc;//对比温度
if( pjingkou == 0)
{
//从下向上计算压力梯度
CD = -1;
ptidu[0] = pjingdi;
dtidu[0] = DVW;
}
else
{
//从上向下计算压力梯度
CD = 1;
ptidu[0] = pjingkou;
dtidu[0] = 0;
}
yltd[0] = ptidu[0];
sdtd[0] = dtidu[0];
//打开保存数据结果的文件
g_iProgress = 50; // 计算进度
ENDCOMPUTE;
CStdioFile f3;
CFileException exception3;
BOOL status1;
/* if(zqjcqj== "注气井")
{
fileDialogFilter2 ="Data files (*.RIG)|*.RIG|All files (*.*)|*.*||";
fileDialogExt2 = "RIG";
CFileDialog fileDialog2( FALSE,
fileDialogExt2, NULL,
0, fileDialogFilter2 );
fileDialog2.m_ofn.lpstrTitle="保存计算结果";
if( fileDialog2.DoModal() == IDCANCEL )
{
return;
}
status1 = f3.Open(fileDialog2.GetPathName(),CFile::modeCreate|CFile::modeWrite);
title=fileDialog2.GetPathName();
title2=fileDialog2.GetFileTitle();
}
else
{
fileDialogFilter2 ="Data files (*.RGG)|*.RGG|All files (*.*)|*.*||";
fileDialogExt2 = "RGG";
CFileDialog fileDialog2( FALSE,
fileDialogExt2, NULL,
0, fileDialogFilter2 );
fileDialog2.m_ofn.lpstrTitle="保存计算结果";
if( fileDialog2.DoModal() == IDCANCEL )
{
return;
}
status1 = f3.Open(fileDialog2.GetPathName(),CFile::modeCreate|CFile::modeWrite);
title=fileDialog2.GetPathName();
title2=fileDialog2.GetFileTitle();
}*/
templs1 = ((CCVenusApp*)AfxGetApp())->GetMyAppPath();
templs1 += "\\tempfile.txt";
status1 = f3.Open(templs1,CFile::modeCreate|CFile::modeWrite);
if (!status1)
{
sprintf(temp, "Error opening file for reading. Code:%d",
exception3.m_cause);
AfxMessageBox(temp);
return;
}
//打开保存图形结果的文件
CStdioFile f4;
CFileException exception4;
BOOL status2;
/* title1=title.Left(title.GetLength()-3);
if(zqjcqj== "注气井")
{
title=title1+"GIG";
status2 = f4.Open(title,CFile::modeCreate|CFile::modeWrite);
}
else
{
title=title1+"GGG";
status2 = f4.Open(title,CFile::modeCreate|CFile::modeWrite);
}*/
templs1.Empty();
templs1 = ((CCVenusApp*)AfxGetApp())->GetMyAppPath();
templs1 += "\\tempfile.gra";
status2 = f4.Open(templs1,CFile::modeCreate|CFile::modeWrite);
if (!status2)
{
sprintf(temp, "Error opening file for reading. Code:%d",
exception4.m_cause);
AfxMessageBox(temp);
return;
}
CString AA;
if( qxts > 6)
{
AA ="\t";
}
else
{
AA = "\t";
}
if( zqjcqj == "注气井")
{
FD = -1;
try
{
// title="";
f3.WriteString("\n");
title="\t\t$$注气压力梯度计算结果$0\n";
f3.WriteString(title);
f3.WriteString("\n");
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
try
{
title="";
title=title+"$$"+"注气压力梯度计算结果图\n";
f4.WriteString(title);
}
catch (CFileException exception4)
{
AfxMessageBox("Error reading file");
return;
}
G2="";
G2=G2+" 深 度$7" + "\t" + " 在下列产气量的流动压下力(MPa)$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12";
G4 = " (m)$11";
}
else
{
FD = 1;
try
{
title="";
title=title+"$$"+"采气压力梯度计算结果图\n";
f4.WriteString(title);
}
catch (CFileException exception4)
{
AfxMessageBox("Error reading file");
return;
}
try
{
// title="";
title="\t$$采气压力梯度计算结果$0\n";
f3.WriteString("\n");
f3.WriteString(title);
f3.WriteString("\n");
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
G2="";
G2=G2+" 深 度$7" + "\t" + " 在下列产气量下的流动压力(MPa)$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12";
G4 = " (m)$11";
}
try
{
f4.WriteString("深度最小值,m:\n");
f4.WriteString("深度最大值,m:\n");
f4.WriteString("压力最小值,MPa:\n");
f4.WriteString("压力最大值,MPa:\n");
f4.WriteString("H\n");
f4.WriteString("P\n");
f4.WriteString("H__m\n");
f4.WriteString("P__MPa\n");
f4.WriteString(" 0\n");
}
catch (CFileException exception4)
{
AfxMessageBox("Error reading file");
return;
}
if( gzdcql < gzxcql + qxts * 2)
{
gzdcql = gzxcql + qxts * 2;
}
g_iProgress = 75; // 计算进度
ENDCOMPUTE;
for(KK=1;KK<=qxts;KK++)
{
nzds = 0;
gcql = gzxcql + (KK - 1) * (gzdcql - gzxcql) / (qxts - 1);
gcvt(gcql,30,temp);
G3=temp;
G4 =G4+"\t"+G3;
if( KK >= 5 && qxts > 5 && KK < qxts)
{
G2 = G2 + "\t" + "$12";
}
else if( KK == qxts)
{
G2 = G2 + "\t" + "$14";
}
RG = 10000 * gcql;
PN = 0;
for(i=1;i<=4;i++)//最多计算3级油管
{
if( CD == 1)//从上向下计算
{
if( i == 1)//计算第1级油管
{
P0 = pjingkou;
T0 = tjingkou;
DOL = DIT1;
L = DVT1;
}
else if( i == 2)//计算第2级油管
{
P0 = PN;
T0 = tjingkou + TG * DVT1;
DOL = DIT2;
L = DVT2;
}
else if( i == 3)//计算第3级油管
{
P0 = PN;
T0 = tjingkou + TG * (DVT1 + DVT2);
DOL = DIT3;
L = DVT3;
}
else//计算套管
{
P0 = PN;
T0 = tjingkou + TG * (DVT1 + DVT2 + DVT3);
DOL = DIC;
L = (DVW - (DVT1 + DVT2 + DVT3));
}
}
else//从下向上计算
{
if( i == 1)//计算套管
{
P0 = pjingdi;
T0 = tdiceng;
DOL = DIC;
L = (DVW - (DVT1 + DVT2 + DVT3));
}
else if( i == 2)//计算第3级油管
{
P0 = PN;
T0 = tjingkou + TG * (DVT1 + DVT2 + DVT3);
DOL = DIT3;
L = DVT3;
}
else if( i == 3)//计算第2级油管
{
P0 = PN;
T0 = tjingkou + TG * (DVT1 + DVT2);
DOL = DIT2;
L = DVT2;
}
else//计算第1级油管
{
P0 = PN;
T0 = tjingkou + TG * DVT1;
DOL = DIT1;
L = DVT1;
}
}
if( L > 0)
{
nzds = nzds + NP;
DIL = 0;
//调用函数--气井压力
PN=qjyljsz.qjyl(P0, T0, TG, L, DOL, 0, RR, RG, GG, LGR, GL, H2S, N2, CO2,NaCl,NP, CD, FD);
if( CD == 1)
{
for(j=1;j<=NP;j++)
{
IJ = (i - 1) * NP + j;
yltd[IJ] = int(100 * ptidu[j]);
yltd[IJ]=yltd[IJ]/ 100.0;
sdtd[IJ] = int(10 * (sdtd[IJ - 1] + CD * L / NP));
sdtd[IJ]=sdtd[IJ]/ 10.0;
}
}
else
{
for(j=1;j<=NP;j++)
{
IJ = (4 - i) * NP + j;
yltd[IJ] = int(100 * ptidu[j]);
yltd[IJ]=yltd[IJ]/ 100.0;
sdtd[IJ] = int(10 * (sdtd[IJ - 1] + CD * L / NP));
sdtd[IJ]=sdtd[IJ]/ 10.0;
}
}
}
else
{
PN = P0;
}
}
if( NP > 1 && PN >= 0)
{
for(i=0;i<=nzds;i++)
{
try
{
gcvt(sdtd[i],50,temp);
char temp1[50];
gcvt(yltd[i],50,temp1);
CString temp2,temp3;
temp2=temp;
temp3=temp1;
temp3=" "+temp3+" "+temp2+"\n";
f4.WriteString(temp3);
}
catch (CFileException exception4)
{
AfxMessageBox("Error reading file");
return;
}
yltd[i] = int(1000 * yltd[i] + 0.5);
yltd[i]=yltd[i]/ 1000.0;
if( KK == 1)
{
gcvt(sdtd[i],50,temp);
GTY[i] = temp;
}
gcvt(yltd[i],50,temp);
GTY[i] = GTY[i] + "\t" + temp;
}
try
{
f4.WriteString("-1 -1\n");
// f4.WriteString(" 0 1\n");
f4.WriteString(cGraphColor[iColorIndex++]);
iColorIndex %= iGraphColorNum;
gcvt(gcql,50,temp);
CString content=temp;
content="Qg="+content+"×10^4m^3/d\n";
f4.WriteString(content);
}
catch (CFileException exception4)
{
AfxMessageBox("Error reading file");
return;
}
}
}
try
{
f4.WriteString("-10 -10\n");
}
catch (CFileException exception4)
{
AfxMessageBox("Error reading file");
return;
}
if( sdtd[0] == 0)
{
I0 = 0;
I1 = nzds;
ISTEP = 1;
}
else
{
I0 = nzds;
I1 = 0;
ISTEP = -1;
}
if( qxts < 5)
{
for(KK=qxts + 1;KK<=5;KK++)
{
G4 = G4 + "\t" + " /$15";
for(i=0;i<=nzds;i++)
{
GTY[i] = GTY[i] + "\t" + " /$15";
}
}
}
G2=G2+"\n";
G4=G4+"\n";
try
{
f3.WriteString(G2);
f3.WriteString(G4);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
for(i=I0;i<=I1;i=i+ISTEP)
{
GTY[i]=GTY[i]+"\n";
try
{
f3.WriteString(GTY[i]);
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
}
try
{
// f3.WriteString("8\n");
}
catch (CFileException exception3)
{
AfxMessageBox("Error reading file");
return;
}
g_iProgress = 100; // 计算进度
f3.Close();
f4.Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -