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

📄 zpjdtfx.cpp

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