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

📄 scqjdtfx.cpp

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