📄 zpjdtfx.cpp
字号:
{
if(dblQYL[iTemp01] < 5)
dblDLTQ = 0.5;
else if(dblQYL[iTemp01 - 1] < 10)
dblDLTQ = 1;
else if(dblQYL[iTemp01 - 1] < 50)
dblDLTQ = 2;
else if(dblQYL[iTemp01 - 1] < 200)
dblDLTQ = 5;
else if(dblQYL[iTemp01 - 1] < 1000)
dblDLTQ = 10;
else if(dblQYL[iTemp01 - 1] < 5000)
dblDLTQ = 20;
else
dblDLTQ = 50;
dblQYL[iTemp01] = dblQYL[iTemp01 - 1] + dblDLTQ;
iCount = iTemp01;
if(dblQYL[iTemp01] > dblQtMax)
break;
}
g_iProgress = 30;
dblH2S /= 100;
dblCO2 /= 100;
dblN2 /= 100;
double dblRR1,dblRR2,dblRR3;
dblRR1 = 0;
dblRR2 = 0;
dblRR3 = 0;
if(dblRR == 0)
{
dblRR1 = 0.05 / (dblDIT1 + 0.000001);
dblRR2 = 0.05 / (dblDIT2 + 0.000001);
dblRR3 = 0.05 / (dblDIC + 0.000001);
}
else
{
dblRR1 = dblRR;
dblRR2 = dblRR;
dblRR3 = dblRR;
}
dblDIT1 /= 1000;
dblDIT2 /= 1000;
dblDIC /= 1000;
dblTJK += 273.15;
dblTDC += 273.15;
double dblTG = 0;
dblTG = (dblTDC - dblTJK)/dblDVW;
yqsxz csjs;
//Call 天然气的临界参数(PC, TC, GG, H2S, CO2, "干气")
csjs.trqnjcs(dblGG, dblH2S, dblCO2,1);//临界csz
double dblPC=csjs.Pc;//对比压力
double TC=csjs.Tc;//对比温度
int iPJK,iQSB,iPDC,iCSZS;
double dblPWH = 0;
double dblPMax = 0;
double dblPrsWL = 0;
double dblPLIWL =0;
double dblQBWL = 0;
double dblQoMaxWL = 0;
double dblQtMaxWL = 0;
double dblPBWL = 0;
double dblPWF = 0;
double dblQm = 0;
for(iPJK = 0; iPJK < 5; iPJK++)
{
dblPWH = dblCSZ[0][iPJK];
if(dblPWH == 0)
break;
for(iQSB = 0; iQSB < 5; iQSB++)
{
dblGWR = dblCSZ[3][iQSB];
if(dblGWR == 0 && iQSB > 0)
break;
if(iQSB == 0 && iPJK == 0)
{
// 流入关系计算
dblPMax = 0;
for(iPDC = 0; iPDC < 10; iPDC++)
{
dblPrsWL = dblCSZ[1][iPDC];
if(dblPrsWL <= 0)
break;
for(iCSZS = 0; iCSZS < 10; iCSZS++)
{
dblPLI = dblCSZ[2][iCSZS];
if(dblPLI == 0)
break;
// 入井动态关系IPR(PLI, QB, Qomax, Qtmax, 0, 0, P地层, Pb, Fw)
jdfx.rjIPR(dblPLI, 0, 0, dblPDC, dblPB, dblFW);
dblQB = jdfx.QB;
dblQoMax = jdfx.Qomax;
dblQtMax = jdfx.Qtmax;
dblPLI = jdfx.PLIZZZ;
//未来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 <= iCount; iTemp01++)
{
// 由Q求PWF(PWF, Q液量(J), PLI未来, QB未来, Qomax未来, Qtmax未来, Prs未来, Pb未来, Fw)
dblPWF = jdfx.YQPWF(dblQYL[iTemp01], dblPLIWL, dblQBWL, dblQoMaxWL, dblQtMaxWL, dblPrsWL, dblPBWL, dblFW);
dblQtMaxWL = jdfx.Qtmaxwl;
if(dblQm <= dblQtMaxWL)
dblQm = dblQtMaxWL;
if(dblPWF <= 0)
{
dblRLR[iPDC][iCSZS][iTemp01] = 0;
break;
}
else
dblRLR[iPDC][iCSZS][iTemp01] = dblPWF;
if(dblPMax < dblPWF)
dblPMax = dblPWF;
}
// 主窗口.SSPanel1.FloodPercent = Int(百分比 + 0.5)
} // NEXT N产水指数
} // NEXT N地层压力
} // end if
// '流出关系计算
double dblP1 = 0;
double dblQW = 0;
double dblQG = 0;
double dblL = 0;
double dblDOL = 0;
double dblT0 = 0;
double dblPPZSL = 0;
double dblOG = 0;
for(iTemp01 = 1; iTemp01 <= 500; iTemp01++)
dblRLC[iTemp01] = 0;
for(iTemp01 = 2; iTemp01 <= iCount; iTemp01++)
{
dblP1 = dblPWH;
dblQW = dblQYL[iTemp01];
dblQG = dblQW * dblGWR;
for(iTemp02 = 0; iTemp02 < 3; iTemp02++)
{
if(iTemp02 == 0)
{
dblL = dblDVT1;
dblDOL = dblDVT1;
dblT0 = dblTJK;
}
else if(iTemp02 == 1)
{
dblL = dblDVT2;
dblDOL = dblDVT2;
dblT0 = dblTJK + dblTG * dblDVT1;
}
else if(iTemp02 == 2)
{
dblL = dblDVW - dblDVT1 - dblDVT2;
dblDOL = dblDIC;
dblT0 = dblTJK + dblTG * (dblDVT1 + dblDVT2);
}
if((iTemp02 == 0) || (iTemp02 > 0 && dblL > 0))
{
//Call 多相流(PN, P1, T0, TG, QG, QW, 0, GG, GW, OG, L, DOL, 0, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
// iDXLMethod == 3 时,被注释掉了
dblPPZSL = jdfx.dxl(iDXLMethod, dblP1,dblT0,dblTG,dblQG,dblQW,0,dblGG,dblGW,dblOG, dblL, dblDOL, 0, dblRR, dblH2S, dblCO2, dblN2, dblNaCl, 0, 1, 1);
dblP1 = dblPPZSL;
}
} // NEXT K
dblRLC[iTemp01] = int(1000 * dblP1) / 1000;
if(dblPMax < dblP1)
break;
// 主窗口.SSPanel1.FloodPercent = Int(百分比 + 85 / 计算数(1) / 计算数(4) * J / P分析计算的点数)
} // NEXT J
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 dblQX = 0;
LZXJD zxjd;
for(iCSZS = 0; iCSZS < 10; iCSZS++)
{
dblPLI = dblCSZ[2][iCSZS];
if(dblPLI == 0)
break;
strA1.Format(_T("%f\t%f\t%f"),dblPWH,dblPLI,dblGWR);
for(iPDC = 0; iPDC < 10; iPDC++)
{
if(dblCSZ[1][iPDC] == 0)
break;
dblP = 0;
dblQ = 0;
for(iTemp01 = 4; iTemp01 <= iCount; iTemp01++)
{
dblQ1 = dblQYL[iTemp01 - 1];
dblQ2 = dblQYL[iTemp01];
dblPI1 = dblRLR[iPDC][iCSZS][iTemp01 - 1];
dblPI2 = dblRLR[iPDC][iCSZS][iTemp01];
dblPO1 = dblRLC[iTemp01 - 1];
dblPO2 = dblRLC[iTemp01];
if(iTemp01 > 2 && dblPI2 * dblPO2 == 0)
{
break;
}
if((dblPI1 >= dblPO1 && dblPI2 <= dblPO2)
|| (dblPI1 <= dblPO1 && dblPI2 >= dblPO2)
&& dblPI1 != dblPI2)
{
if(dblP > 0 && dblQ > 0)
{
//求交点(压力, 产液量, D产液量[i], D产液量[i + 1], D流入压力[i], D吸入压力[KKKK][i], D流入压力[i + 1], D吸入压力[KKKK][i + 1]);
// double X1,double X2,double Y11,double Y21,double Y12,double Y22
zxjd.qlzxjd(dblQ1, dblQ2, dblPI1, dblPO1, dblPI2, dblPO2);
dblP = zxjd.X;
dblQ = zxjd.Y;
break;
}
zxjd.qlzxjd(dblQ1, dblQ2, dblPI1, dblPO1, dblPI2, dblPO2);
dblP = zxjd.X;
dblQ = zxjd.Y;
}
} // NEXT J
if(dblP > 0)
dblP = int(100 * dblP) / 100;
else
dblP = 0;
if(dblQ > 0.025 * dblQm)
{
dblQ = int(dblQ * 100)/100;
strTemp.Format(_T("\t%f"), dblQ);
strA1 += strTemp;
}
else
{
dblQ = 0;
strA1 += _T("\t/");
}
if(iPDC == 0)
dblQX = dblQ;
dblQSL[iPJK][iPDC][iCSZS][iQSB] = dblQ;
} // NEXT iPDC
if(dblQX > 0)
stdfRes.WriteString(strA1 + _T("\n"));
}
// 主窗口.SSPanel1.FloodPercent = Int(百分比 + 0.5)
}
g_iProgress += 10;
}
for(iPJK = 0; iPJK < 5; iPJK++)
{
if(dblCSZ[0][iPJK] == 0)
break;
for(iQSB = 0; iQSB < 5; iQSB++)
{
if(dblCSZ[3][iQSB] == 0 && iQSB > 0)
break;
stdfGraph.WriteString(_T("\n"));
strTemp.Format(_T("\t\t$$井产水量与地层压力关系图[井口压力=%f,气水比=%f]\n"), \
dblCSZ[0][iPJK], dblCSZ[3][iQSB]);
stdfGraph.WriteString(strTemp);
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(iCSZS = 0; iCSZS < 10; iCSZS++)
{
if(dblCSZ[2][iCSZS] == 0)
break;
for(iPDC = 0; iPDC < 10; iPDC++)
{
if(dblCSZ[1][iPDC] == 0)
break;
// if(dblQSL[iPJK][iPDC][iCSZS][iQSB] > 0)
{
strTemp.Format(_T(" %f %.2f"), dblCSZ[1][iPDC], dblQSL[iPJK][iPDC][iCSZS][iQSB]);
stdfGraph.WriteString(strTemp + _T("\n"));
}
}
stdfGraph.WriteString(_T("-1 -1\n"));
stdfGraph.WriteString(_T(" 32768\t1\n"));
strTemp.Format(_T("产水指数=%.2f"), dblCSZ[2][iCSZS]);
stdfGraph.WriteString(strTemp + _T("\n"));
} // Next N产水指数
stdfGraph.WriteString(_T("-10 -10"));
} // Next N气水比
g_iProgress += 10;
if(g_iProgress > 100)
g_iProgress = 100;
} // Next 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);
}
catch (CFileException fe)
{
AfxMessageBox("Error writing file");
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -