📄 scqjdtfx.cpp
字号:
if(dblAF * dblBF > 0)
{
dblTR = dblTDC / dblTC;
dblT = dblTDC - 273.15;
dblPR = dblPrs / dblPC;
// Call 天然气偏差系数(Z1, PR, TR)
dblZ1 = csjs.trqpcxs(dblPR, dblTR);
// Call 天然气的粘度(UG1, PR, TR, CO2, H2S, N2, GG, T)
dblUG1 = csjs.trqnd(dblPR, dblTR, dblCO2, dblH2S, dblN2, dblGG, dblTC - 273.15);
dblPR = dblPDC / dblPC;
// Call 天然气偏差系数(Z1, PR, TR)
dblZ0 = csjs.trqpcxs(dblPR, dblTR);
// Call 天然气的粘度(UG1, PR, TR, CO2, H2S, N2, GG, T)
dblUG0 = csjs.trqnd(dblPR, dblTR, dblCO2, dblH2S, dblN2, dblGG, dblTC - 273.15);
dblAF1 = dblAF * dblUG1 * dblZ1 / dblUG0 / dblZ0;
dblBF1 = dblBF * dblZ1 / dblZ0;
dblPWF = pow(dblPrs,2) - dblAF1 * dblQG - dblBF1 * pow(dblQG,2);
}
else if(dblCF * dblNF > 0)
dblPWF = pow(dblPDC, 2) - pow(dblQG/dblCF, 1/dblNF);
if(dblPWF <= 0)
dblPWF = 0;
else
dblPWF = pow(dblPWF, 0.5);
dblQQL[iTemp02] = dblQG;
dblPLR[iPDC][iTemp02] = dblPWF;
if(iPDC == 1)
iJSDS = iTemp02;
if(dblPWF == 0)
break;
if(iJSDS > 0)
{
// 主窗口.SSPanel1.FloodPercent = 百分比 + 5 / 分析参数个数(2) * J / N计算点数
}
}
iPercent += 5 / iFXCount[2];
// 主窗口.SSPanel1.FloodPercent = 百分比
}
g_iProgress = 50;
// 流出关系计算
int iPJK,iYGZJ;
double dblP2 = 0;
CString strA1;
double dblP = 0;
double dblQ = 0;
double dblQ1 = 0;
double dblQ2 = 0;
double dblPI1 = 0;
double dblPI2 = 0;
double dblPO1 = 0;
double dblPO2 = 0;
double dblQ0 = 0;
CCommon comm;
CString strDY;
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
dblPJK = dblCSZ[1][iPJK];
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
if(iYGZJ >0)
{
dblDIT10 = dblCSZ[3][iYGZJ] / 1000;
dblDVT10 = dblDVT1 + dblDVT2;
dblDVT20 = 0;
dblDVT30 = dblLC;
}
else
{
dblDIT10 = dblDIT1;
dblDVT10 = dblDVT1;
dblDIT20 = dblDIT2;
dblDVT20 = dblDVT2;
dblDIT30 = dblDIC;
dblDVT30 = dblLC;
}
for(iTemp02 = 0; iTemp02 <= iJSDS; iTemp02++)
{
dblQG = dblQQL[iTemp02] * 10000;
// Call 气井压力(G压力X, P井口, T井口, TG, DVT10, DIT10, 0, RR, QG, GG, LGR, GL, H2S, N2, CO2, 0, 1, 1)
dblGPX = qjyljsz.qjyl(dblPJK, dblTJK, dblTG, dblDVT10, dblDIT10, 0, dblRR, dblQG, dblGG, dblLGR, dblGL, dblH2S, dblN2, dblCO2,0, 0, 1, 1);
dblTun = dblTJK + dblTG * dblDVT10;
//Call 气井压力(G压力, G压力X, Tun, TG, DVT20, DIT20, 0, RR, QG, GG, LGR, GL, H2S, N2, CO2, 0, 1, 1)
dblGP = qjyljsz.qjyl(dblGPX, dblTun, dblTG, dblDVT20, dblDIT20, 0, dblRR, dblQG, dblGG, dblLGR, dblGL, dblH2S, dblN2, dblCO2,0, 0, 1, 1);
dblTun = dblTJK + dblTG * (dblDVT10 + dblDVT20);
// Call 气井压力(P2, G压力, Tun, TG, DVT30, DIT30, 0, RR, QG, GG, LGR, GL, H2S, N2, CO2, 0, 1, 1)
dblP2 = qjyljsz.qjyl(dblGP, dblTun, dblTG, dblDVT30, dblDIT30, 0, dblRR, dblQG, dblGG, dblLGR, dblGL, dblH2S, dblN2, dblCO2,0, 0, 1, 1);
dblPLC[iPJK][iYGZJ][iTemp02] = int(100 * dblP2) / 100;
if(dblP2 > dblCSZ[2][1])
break;
// 主窗口.SSPanel1.FloodPercent = 百分比 + 90 / 分析参数个数(1) / 分析参数个数(3) * J / N计算点数
}
g_iProgress += 90 / iFXCount[1] / iFXCount[3];
if(g_iProgress > 99)
g_iProgress = 99;
// 主窗口.SSPanel1.FloodPercent = 百分比
}
// 求解交点
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
if(iYGZJ > 0)
strA1.Format(_T("%f\t %f"), dblPJK, dblCSZ[3][iYGZJ]);
else
strA1.Format(_T("%f\t %s"), dblPJK, _T("组合油管"));
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC++)
{
dblP = 0;
dblQ = 0;
for(iTemp02 = 2; iTemp02 <= iJSDS; iTemp02++)
{
dblQ1 = dblQQL[iTemp02 - 1];
dblQ2 = dblQQL[iTemp02];
dblPI1 = dblPLR[iPDC][iTemp02 -1];
dblPI2 = dblPLR[iPDC][iTemp02];
dblPO1 = dblPLC[iPDC][iYGZJ][iTemp02 - 1];
dblPO2 = dblPLC[iPDC][iYGZJ][iTemp02];
if(iTemp02 > 2 && dblPI2 * dblPO2 == 0)
break;
if(dblPI1 >= dblPO1 && dblPI2 <= dblPO2 ||
(dblPI1 <= dblPO1 && dblPI2 >= dblPO2))
{
comm.QJD(dblP, dblQ, dblQ1, dblQ2, dblPI1, dblPO1, dblPI2, dblPO2);
break;
}
}
if(dblQ > 0)
{
dblQ = int(100 * dblQ) / 100;
strTemp.Format(_T("\t%f"), dblQ);
strA1 += strTemp;
}
else
{
dblQ = 0;
strA1 += _T("\t/");
}
if(iPDC == 1)
dblQ0 = dblQ;
dblQL[iPJK][iPDC][iYGZJ] = dblQ;
}
if(dblQ0 > 0)
stdfRes.WriteString(strA1 + _T("\n"));
}
}
g_iProgress = 60;
// 图形数据
for(iYGZJ = 0; iYGZJ <= iFXCount[3] -1; iYGZJ++)
{
if(iYGZJ == 0)
stdfGraph.WriteString(_T("\t\t生产井产气量与地层压力的关系[组合油管]\n"));
else
{
strTemp.Format(_T("\t\t生产井产气量与地层压力的关系[油管直径=%.2f mm]"), dblCSZ[3][iYGZJ]);
stdfGraph.WriteString(strTemp + _T("\n"));
}
stdfGraph.WriteString(_T("产气量最小值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("产气量最大值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("地层压力最小值,MPa:\n"));
stdfGraph.WriteString(_T("地层压力最大值,MPa:\n"));
stdfGraph.WriteString(_T("Qg \n"));
stdfGraph.WriteString(_T("Prs \n"));
stdfGraph.WriteString(_T("Qg__10^4m^3/d \n"));
stdfGraph.WriteString(_T("Prs__MPa \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC ++)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[2][iPDC], dblQL[iPJK][iPDC][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-1 -1 \n"));
stdfGraph.WriteString(_T(" 32768 1 \n"));
strTemp.Format(_T("井口压力=%f MPa"), dblCSZ[1][iPJK]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
g_iProgress = 70;
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
if(iYGZJ == 0)
stdfGraph.WriteString(_T("\t\t生产井产气量与井口压力的关系[组合油管]\n"));
else
{
strTemp.Format(_T("\t\t生产井产气量与井口压力的关系[油管直径=%.2f mm]"), dblCSZ[3][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("产气量最小值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("产气量最大值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("井口压力最小值,MPa:\n"));
stdfGraph.WriteString(_T("井口压力最大值,MPa:\n"));
stdfGraph.WriteString(_T("Qg \n"));
stdfGraph.WriteString(_T("Ptf \n"));
stdfGraph.WriteString(_T("Qg__10^4m^3/d \n"));
stdfGraph.WriteString(_T("Ptf__MPa \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC ++)
{
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[1][iPDC], dblQL[iPJK][iPDC][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-1 -1\n"));
stdfGraph.WriteString(_T(" 32768 1\n"));
strTemp.Format(_T("地层压力=%f MPa"), dblCSZ[2][iPDC]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC ++)
{
if(dblQL[2][iPDC][1] == 0)
break;
strTemp.Format(_T("\t\t生产井产气量与油管直径的关系[地层压力=%f MPa]"), dblCSZ[2][iPDC]);
stdfGraph.WriteString(strTemp + _T(" \n"));
stdfGraph.WriteString(_T("产气量最小值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("产气量最大值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("油管直径最小值,mm:\n"));
stdfGraph.WriteString(_T("油管直径最大值,mm:\n"));
stdfGraph.WriteString(_T("Qg \n"));
stdfGraph.WriteString(_T("Dit \n"));
stdfGraph.WriteString(_T("Qg__10^4m^3/d \n"));
stdfGraph.WriteString(_T("Dit__MPa \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
strDY = _T("N");
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
if(dblQL[iPJK][iPDC][iYGZJ] > 0)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[3][iYGZJ], dblQL[iPJK][iPDC][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
strDY = _T("Y");
}
}
if(strDY == _T("Y"))
{
stdfGraph.WriteString(_T("-1 -1 \n"));
stdfGraph.WriteString(_T(" 32768 1 \n"));
strTemp.Format(_T("井口压力=%f MPa"), dblCSZ[1][iPJK]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC ++)
{
strTemp.Format(_T("\t\t生产井产气量与井口压力的关系[地层压力=%f MPa]"), dblCSZ[2][iPDC]);
stdfGraph.WriteString(strTemp + _T(" \n"));
stdfGraph.WriteString(_T("产气量最小值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("产气量最大值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("井口压力最小值,MPa:\n"));
stdfGraph.WriteString(_T("井口压力最大值,MPa:\n"));
stdfGraph.WriteString(_T("Qg \n"));
stdfGraph.WriteString(_T("Ptf \n"));
stdfGraph.WriteString(_T("Ptf__MPa \n"));
stdfGraph.WriteString(_T("Ptf__MPa \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[1][iPJK], dblQL[iPJK][iPDC][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-1 -1 \n"));
stdfGraph.WriteString(_T(" 32768 1 \n"));
if(iYGZJ == 0)
stdfGraph.WriteString(_T("组合油管\n"));
else
{
strTemp.Format(_T("油管直径=%f mm"), dblCSZ[3][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
g_iProgress = 80;
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
strTemp.Format(_T("\t\t生产井产气量与地层压力的关系[井口压力=%f MPa]"), dblCSZ[1][iPJK]);
stdfGraph.WriteString(strTemp + _T(" \n"));
stdfGraph.WriteString(_T("产气量最小值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("产气量最大值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("地层压力最小值,MPa:\n"));
stdfGraph.WriteString(_T("地层压力最大值,MPa:\n"));
stdfGraph.WriteString(_T("Qg \n"));
stdfGraph.WriteString(_T("Prs \n"));
stdfGraph.WriteString(_T("Qg__10^4m^3/d \n"));
stdfGraph.WriteString(_T("Prs__MPa \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC ++)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[2][iPDC], dblQL[iPJK][iPDC][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-1 -1 \n"));
stdfGraph.WriteString(_T(" 32768 1 \n"));
if(iYGZJ == 0)
stdfGraph.WriteString(_T("组合油管\n"));
else
{
strTemp.Format(_T("油管直径=%.2f mm"), dblCSZ[3][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
g_iProgress = 90;
for(iPJK = 1; iPJK <= iFXCount[1]; iPJK++)
{
strTemp.Format(_T("\t\t生产井产气量与油管直径的关系[井口压力=%f MPa]"), dblCSZ[1][iPJK]);
stdfGraph.WriteString(strTemp + _T(" \n"));
stdfGraph.WriteString(_T("产气量最小值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("产气量最大值,10^4m^3/d:\n"));
stdfGraph.WriteString(_T("油管直径最小值,mm:\n"));
stdfGraph.WriteString(_T("油管直径最大值,mm:\n"));
stdfGraph.WriteString(_T("Qg \n"));
stdfGraph.WriteString(_T("Dit \n"));
stdfGraph.WriteString(_T("Qg__10^4m^3/d \n"));
stdfGraph.WriteString(_T("Dit__mm \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iPDC = 1; iPDC <= iFXCount[2]; iPDC ++)
{
strDY = _T("N");
for(iYGZJ = 0; iYGZJ <= iFXCount[3] - 1; iYGZJ++)
{
if(dblCSZ[3][iYGZJ] * dblQL[iPJK][iPDC][iYGZJ] > 0)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[3][iYGZJ], dblQL[iPJK][iPDC][iYGZJ]);
stdfGraph.WriteString(strTemp + _T(" \n"));
if(iYGZJ > 1)
strDY = _T("Y");
}
}
if(strDY == _T("Y"))
{
stdfGraph.WriteString(_T("-1 -1 \n"));
stdfGraph.WriteString(_T(" 32768 1 \n"));
strTemp.Format(_T("地层压力=%f MPa"), dblCSZ[2][iPDC]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
stdfRes.WriteString(_T("8\n"));
stdfRes.Close();
stdfGraph.Close();
g_iProgress = 100;
CopyFile(stdfRes.GetFilePath(), ((CCVenusApp*)AfxGetApp())->GetMyAppPath() + _T("\\tempfile.txt"),FALSE);
CopyFile(stdfGraph.GetFilePath(), ((CCVenusApp*)AfxGetApp())->GetMyAppPath() + _T("\\tempfile.gra"),FALSE);
// AfxMessageBox("H1");
// 主窗口.SSPanel1.FloodPercent = 100
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -