⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qjdtfx.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -