📄 qjdtfx.cpp
字号:
double dblYGNJ = 0;
double dblZRQL = 0;
double dblZQYL = 0;
double dblYGWJ = 0;
double dblP = 0;
double dblQ = 0;
double dblQ1 = 0;
double dblQ2 = 0;
double dblZQDYL = 0;
double dblZQDSD = 0;
double dblQL = 0;
double dblQW = 0;
double dblQG = 0;
double dblPMF = 0;
double dblOG = 0;
double dblH1 = 0;
double dblH2 = 0;
double dblPI1 = 0;
double dblPI2 = 0;
double dblPO1 = 0;
double dblPO2 = 0;
double dblPN = 0;
double dblPN1 = 0;
double dblT0 = 0;
double dblL = 0;
double dblPTemp = 0;
zpjjdfx zpjdfx;
qjyljs qjyljsz;
CString strA1, strMC, strDW;
for(iCS = 0; iCS < 6; iCS++)
{
if(iPFXCS[iCS] == 1)
{
for(iFXCS = 0; iFXCS < 5; iFXCS++)
{
dblDDD = dblCSZ[iCS][iFXCS];
if(iFXCS > 0 && dblDDD == 0 && iCS != 4)
break;
if(iCS == 0)
dblPWH = dblDDD;
else
dblPWH = dblPJK;
if(iCS == 1)
dblDIT = dblDDD;
else
dblDIT = dblDITYS;
if(iCS == 2)
dblPLI = dblDDD;
else
dblPLI = dblPLIYS;
if(iCS == 3)
dblGWR = dblDDD;
else
dblGWR = dblGWRYS;
if(iCS == 4)
dblQZH = dblDDD;
else
dblQZH = dblQIN;
if(iCS == 5)
dblPZH = dblDDD;
else
dblPZH = dblPIN;
// 计算流入
for(iPDC = 2 * int(dblPDC + 0.5); iPDC >= 6 * int(dblDVT / 1000 + 0.5); iPDC--)
{
if(iPDC == 2 * int(dblPDC + 0.5))
{
dblPRSWL = dblPDC;
}
else
{
dblPRSWL = iPDC / 2;
}
//入井动态关系IPR(PLI, QB, Qomax, Qtmax, q测试, p测试, Prs, Pb, Fw)
jdfx.rjIPR(dblPLI, dblQCS, dblPCS, dblPDC, dblPB, dblFW);
dblQtMax = jdfx.Qtmax;
dblQoMax = jdfx.Qomax;
dblPLI = jdfx.PLIZZZ;
dblQB = jdfx.QB;
//未来IPR(PLI未来, QB未来, Qomax未来, Qtmax未来, Prs未来, Pb未来, PLI, QB, Qomax, Qtmax, P地层, Pb, Fw)
jdfx.wlipr(dblPRSWL, dblPLI, dblQB, dblQoMax, dblQtMax, dblPDC, dblPB, dblFW);
dblPLIWL = jdfx.QBwl;
dblQBWL = jdfx.Qomaxwl;
dblQoMaxWL = jdfx.Qtmaxwl;
dblQtMaxWL = jdfx.Qtmaxwl;
dblPBWL = jdfx.Pbwl;
for(iTemp01 = 0; iTemp01 < iPFXCount + 1; iTemp01++)
{
// 由Q求PWF(PWF, Q水量(J), PLI未来, QB未来, Qomax未来, Qtmax未来, Prs未来, Pb未来, Fw)
dblPWF = jdfx.YQPWF(dblQSL[iTemp01], dblPLIWL, dblQBWL, dblQoMaxWL, dblQtMaxWL, dblPRSWL, dblPBWL, dblFW);
if(dblPWF < 0)
{
dblRLR[iPDC][iTemp01] = 0;
break;
}
else
{
dblRLR[iPDC][iTemp01] = dblPWF;
}
}
}
// 计算流出
dblJKYL = dblPWH;
dblYGNJ = dblDIT / 1000;
dblZRQL = dblQZH * 10000;
dblZQYL = dblPZH;
// SUB计算注气压力梯度
if(dblYGNJ <= 0.0433)
dblYGWJ = 0.0603;
else if(dblYGNJ <= 0.0507)
dblYGWJ = 0.0603;
else if(dblYGNJ <= 0.062)
dblYGWJ = 0.076;
else if(dblYGNJ <= 0.0762)
dblYGWJ = 0.0889;
else if(dblYGNJ <= 0.0889)
dblYGWJ = 0.1016;
else
dblYGWJ = dblYGNJ + 0.014;
dtidu[0] = 0;
// Call 气井压力(P, 注气压力, T井口, TG, DVT, DIC, 油管外径, RR, 注入气量, GG, 0, 1, H2S, N2, CO2, 100, 1, -1)
dblPTemp = dblP;
dblP = qjyljsz.qjyl(dblPTemp, dblPZH, dblTJK, dblTG, dblDVT, dblDIC, dblYGWJ, dblRR, dblZRQL, dblGG, 0,1, dblH2S, dblN2, dblCO2, 100,1,-1);
for(iTemp01 = 0; iTemp01 < 100; iTemp01++)
{
dblGSD[iTemp01] = dtidu[iTemp01];
dblPGZQ[iTemp01] = ptidu[iTemp01] - dblPGZYC;
}
// end of SUB
for(iTemp01 = 0; iTemp01 < iPFXCount + 1; iTemp01++)
{
// SUB 计算油管流出曲线
if(dblZRQL == 0)
{
dblZQDYL = dblJKYL;
dblZQDSD = 0;
}
else
{
// SUB 计算油管多相流压力梯度
dblQL = dblQSL[iTemp01];
dblQW = dblQL;
dblQG = dblQW * dblGWR + dblZRQL;
// Call 多相流(PMF, 井口压力, T井口, TG, QG, QW, 0, GG, GW, OG, DVT, 油管内径, 0, RR, H2S, CO2, N2, NaCl, 100, 1, 1, MMPF)
dblPMF = zpjdfx.dxl(iMMPF, dblJKYL, dblTJK, dblTG, dblQG, dblQW, 0, dblGG, dblGW, dblOG, dblDVT, dblYGNJ, 0, dblRR, dblH2S, dblCO2, dblN2, dblNaCl, 100, 1, 1);
for(iTemp02 = 0; iTemp02 < 100; iTemp02++)
{
dblPGDXL[iTemp02] = ptidu[iTemp02];
}
// end of SUB
// SUB 求注气点深度和注气压力
dblZQDYL = 0;
dblZQDSD = 0;
for(iTemp02 = 1; iTemp02 < 100; iTemp02++)
{
dblH1 = dblGSD[iTemp02 - 1];
dblH2 = dblGSD[iTemp02];
dblPI1 = dblPGDXL[iTemp02 - 1];
dblPI2 = dblPGDXL[iTemp02];
dblPO1 = dblPGZQ[iTemp02 -1];
dblPO2 = dblPGZQ[iTemp02];
if(dblPI1 <= dblPO1 && dblPI2 >= dblPO2)
{
comm.QJD(dblZQDYL, dblZQDSD, dblH1, dblH2, dblPI1, dblPO1, dblPI2, dblPO2);
break;
}
}
if(dblZQDYL > 0)
dblZQDYL = int(100 * dblZQDYL) / 100;
if(dblZQDSD > 0)
dblZQDSD = int(100 * dblZQDSD) / 100;
if(dblZQDYL == 0)
{
dblZQDYL = dblPMF;
dblZQDSD = dblDVT;
}
// end of SUB
}
// SUB 求井底流动压力
dblPN = dblZQDYL;
dblQL = dblQSL[iTemp01];
dblQW = dblQL;
dblQG = dblQW * dblGWR;
if(dblDVT > dblZQDSD)
{
dblT0 = dblTJK + dblTG * dblZQDSD;
dblL = dblDVT - dblZQDSD;
// Call 多相流(PN1, PN, T0, TG, QG, QW, 0, GG, GW, OG, L, 油管内径, 0, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
dblPN1 = zpjdfx.dxl(iMMPF, dblPN, dblT0, dblTG, dblQG, dblQW, 0, dblGG, dblGW, dblOG, dblL, dblYGNJ,0, dblRR,dblH2S,dblCO2,dblN2,dblNaCl,0,1,1);
dblPN = dblPN1;
}
if(dblDVT < dblDVW)
{
dblT0 = dblTJK + dblTG * dblDVW;
dblL = dblDVW - dblDVT;
// Call 多相流(PN1, PN, T0, TG, QG, QW, 0, GG, GW, OG, L, DIC, 0, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
dblPN1 = zpjdfx.dxl(iMMPF,dblPN, dblT0, dblTG, dblQG, dblQW, 0, dblGG, dblGW, dblOG, dblL, dblDIC, 0, dblRR,dblH2S,dblCO2,dblN2,dblNaCl,0,1,1);
dblPN = dblPN1;
}
// end of SUB
// end of SUB 计算油管流出曲线
if(dblZQDYL > 0 && dblZQDSD >= 0)
{
dblRLC[iTemp01] = dblPN;
}
else
dblRLC[iTemp01] = 0;
if(iTemp01 > 1 && dblRLC[iTemp01] > dblRLR[2 * int(dblPDC + 0.5)][iTemp01] + 1)
break;
}
// 求解交点
for(iPDC = 2 * int(dblPDC + 0.5); iPDC >= 6 * int(dblDVT / 1000 + 0.5); iPDC--)
{
dblP = 0;
dblQ = 0;
for(iTemp01 = 1; iTemp01 < iPFXCount; iTemp01++)
{
dblQ1 = dblQSL[iTemp01 - 1];
dblQ2 = dblQSL[iTemp01];
dblPI1 = dblRLR[iPDC][iTemp01 - 1];
dblPI2 = dblRLR[iPDC][iTemp01];
dblPO1 = dblRLC[iTemp01 - 1];
dblPO2 = dblRLC[iTemp01];
if(iTemp01 > 1 && dblPI2 * dblPO2 == 0)
break;
if((dblPI1 >= dblPO1 && dblPI2 <= dblPO2) ||
(dblPI1 <= dblPO1 && dblPI2 >= dblPO2))
{
// 求交点(P, Q, Q1, Q2, PI1, PO1, PI2, PO2)
comm.QJD(dblP, dblQ, dblQ1, dblQ2, dblPI1, dblPO1, dblPI2, dblPO2);
break;
}
if(dblPO2 > (dblPI2 + 1))
break;
}
if(dblP > 0)
dblP = int(100 * dblP) / 100;
else
dblP = 0;
if(dblQ > 0)
dblQ = int(100 * dblQ) / 100;
else
dblQ = 0;
dblQSH[iPDC][iFXCS] = dblQ;
}
iPercent += 95 / iJSZS;
if(iPercent >= 100)
iPercent = 99;
// 主窗口.SSPanel1.FloodPercent = Int(百分比 + 0.5)
} // NEXT N分析参数
// 输出计算结果
for(iFXCS = 0; iFXCS < 5; iFXCS++)
{
dblDDD = dblCSZ[iCS][iFXCS];
if(iFXCS > 0 && dblDDD == 0 && iCS != 4)
break;
if(iFXCS > 0 && iCS == 4 && dblCSZ[iCS][iFXCS - 1] == 0)
break;
if(iCS == 0)
strA1.Format(_T("%.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f"),dblDDD, dblDIT, dblGWR, dblPLI, 10000*dblQZH, dblPZH);
else if(iCS == 1)
strA1.Format(_T("%.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f"),dblPWH, dblDDD, dblGWR, dblPLI, 10000*dblQZH, dblPZH);
else if(iCS == 2)
strA1.Format(_T("%.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f"),dblPWH, dblDIT, dblGWR, dblDDD, 10000*dblQZH, dblPZH);
else if(iCS == 3)
strA1.Format(_T("%.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f"),dblPWH, dblDIT, dblDDD, dblPLI, 10000*dblQZH, dblPZH);
else if(iCS == 4)
strA1.Format(_T("%.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f"),dblPWH, dblDIT, dblGWR, dblPLI, 10000*dblDDD, dblPZH);
else if(iCS == 5)
strA1.Format(_T("%.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f"),dblPWH, dblDIT, dblGWR, dblPLI, 10000*dblQZH, dblDDD);
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(dblPRSWL == iPDC / 2)
{
dblPRSWL -= 2.5;
// if(int(dblPRSWL) != dblPRSWL)
// break;
}
else
//end
*/
dblPRS0 = double(iPDC) / 2.00;
}
// hss
if(int(dblPRS0 / 2.5) == dblPRS0 / 2.5 || iPDC == 2 * int(dblPDC + 0.5))
{
if(dblQSH[iPDC][iFXCS] > 0)
{
strTemp.Format(_T("\t%.2f"), dblQSH[iPDC][iFXCS]);
strA1 += strTemp;
}
else
strA1 += _T("\t/");
}
}
strA1 += _T(" \n");
stdfRes.WriteString(strA1);
}
// 输出图形结果
if(iCS == 0)
{
strTemp = _T("气举排水采气动态分析图[产水量-井口压力-地层压力]");
strTemp += _T("{");
strTemp += strDXLMethod;
strTemp += _T("} \n");
stdfGraph.WriteString(strTemp);
strMC = _T("Ptf");
strDW = _T("MPa");
}
else if(iCS == 1)
{
strTemp = _T("气举排水采气动态分析图[产水量-油管尺寸-地层压力]");
strTemp += _T("{");
strTemp += strDXLMethod;
strTemp += _T("} \n");
stdfGraph.WriteString(strTemp);
strMC = _T("Dit=");
strDW = _T("mm");
}
else if(iCS == 2)
{
strTemp = _T("气举排水采气动态分析图[产水量-产水指数-地层压力]");
strTemp += _T("{");
strTemp += strDXLMethod;
strTemp += _T("} \n");
stdfGraph.WriteString(strTemp);
strMC = _T("PLI=");
strDW = _T("m^3/d·MPa");
}
else if(iCS == 3)
{
strTemp = _T("气举排水采气动态分析图[产水量-气水比-地层压力]");
strTemp += _T("{");
strTemp += strDXLMethod;
strTemp += _T("} \n");
stdfGraph.WriteString(strTemp);
strMC = _T("GWR=");
strDW = _T("m^3/m^3");
}
else if(iCS == 4)
{
strTemp = _T("气举排水采气动态分析图[产水量-注气量-地层压力]");
strTemp += _T("{");
strTemp += strDXLMethod;
strTemp += _T("} \n");
stdfGraph.WriteString(strTemp);
strMC = _T("Q注=");
strDW = _T("m^3/d");
}
else if(iCS == 5)
{
strTemp = _T("气举排水采气动态分析图[产水量-注气压力-地层压力]");
strTemp += _T("{");
strTemp += strDXLMethod;
strTemp += _T("} \n");
stdfGraph.WriteString(strTemp);
strMC = _T("P注=");
strDW = _T("MPa");
}
stdfGraph.WriteString(_T("产水量最小值,m^3/d:\n"));
stdfGraph.WriteString(_T("产水量最大值,m^3/d:\n"));
stdfGraph.WriteString(_T("地层压力最小值,MPa:\n"));
stdfGraph.WriteString(_T("地层压力最大值,MPa:\n"));
stdfGraph.WriteString(_T("Qw \n"));
stdfGraph.WriteString(_T("Prs \n"));
stdfGraph.WriteString(_T("Qw__m^3/d \n"));
stdfGraph.WriteString(_T("Prs__MPa \n"));
stdfGraph.WriteString(_T(" 1 \n"));
for(iFXCS = 0; iFXCS < 5; iFXCS++)
{
if(iFXCS == 4)
dblDDD = 10000 * dblCSZ[iCS][iFXCS];
else
dblDDD = dblCSZ[iCS][iFXCS];
if(iFXCS > 0 && dblDDD == 0 && iCS != 4)
break;
if(iFXCS > 0 && iCS == 4 && dblCSZ[iCS][iFXCS - 1] == 0)
break;
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
dblPRS0 = double(iPDC) / 2.00;
if(dblQSH[iPDC][iFXCS] == 0)
break;
if(dblQSH[iPDC][iFXCS] > dblQSH[iPDC - 1][iFXCS])
{
strTemp.Format(_T(" %f %.2f"), dblPRS0, dblQSH[iPDC][iFXCS]);
stdfGraph.WriteString(strTemp + _T(" \n"));
}
}
stdfGraph.WriteString(_T("-1 -1 \n"));
stdfGraph.WriteString(_T(" 32768 1 \n"));
strTemp01.Format(_T("%.2f"), dblDDD);
strTemp = strMC + strTemp01 + strDW;
stdfGraph.WriteString(strTemp + _T(" \n"));
}
stdfGraph.WriteString(_T("-10 -10 \n"));
}
g_iProgress += 15;
if(g_iProgress > 100)
g_iProgress = 100;
} // Next N参数
stdfRes.WriteString(_T("8\t 8\t 8\t 8\t 10\t 8 \n"));
stdfRes.Close();
stdfGraph.Close();
CopyFile(stdfRes.GetFilePath(), ((CCVenusApp*)AfxGetApp())->GetMyAppPath() + _T("\\tempfile.txt"),FALSE);
CopyFile(stdfGraph.GetFilePath(), ((CCVenusApp*)AfxGetApp())->GetMyAppPath() + _T("\\tempfile.gra"),FALSE);
g_iProgress = 100;
// 主窗口.SSPanel1.FloodPercent = Int(百分比);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -