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

📄 qjjjdfx.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			  Q = int(100 * Q);
			  Q=Q/ 100;
		  }
		  gcvt(P,100,Temp);
		  title=Temp;
		  A1 = A1 + "\t" + title;
          gcvt(Q,100,Temp);
		  title=Temp;
		  A2 = A2 + "\t" + title;
		}
		A1=A1+"\n";
        A2=A2+"\n";
        try
		{
	 		f3.WriteString(A1);
            f3.WriteString(A2);
			f3.WriteString("\n");
		}
	    catch (CFileException exception3)
		{
			AfxMessageBox("Error reading file");
			return;
		}
	  }
  
	  if( Pcyzsfx == 1)
	  {
		//分析产液指数对气举排液量的影响
        try
		{
		    title="$$";
			title=title+"气举排水采气产液指数分析[" + jsff + "]"+"\n";
			f4.WriteString(title);
            f4.WriteString("节点压力最小值,MPa:\n");
			f4.WriteString("节点压力最大值,MPa:\n");
            f4.WriteString("产水量最小值,m^3/d:\n");
			f4.WriteString("产水量最大值,m^3/d:\n");
			f4.WriteString("Pwf\n");
			f4.WriteString("Ql\n");
			f4.WriteString("Pwf__MPa\n");
			f4.WriteString("Ql__m^3/d\n");
            f4.WriteString(" 1\n");
		}  
	    catch (CFileException exception4)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		for(i=0;i<=10;i++)
		{
			for(J=0;J<=Pfxjsds;J++)
			{
		         jsjg[i][J] = 0;
			}
		}
	g_iProgress = 45;	// 计算进度
	ENDCOMPUTE;
		
		//流入关系计算
		for(i=1;i<=5;i++)
		{
		  if( i == 0)
		  {
			  cyzs = PLI;
		  }
		  else
		  {
			  cyzs = csz[4][i];//分析的产液指数
		  }
		  if( cyzs <= 0)
		  {
			  break;
		  }
          zpjjs.rjIPR(cyzs, qcscl, pcsyl, Pdcyl, Pb, Fw); 
		  QB=zpjjs.QB;
		  Qomax=zpjjs.Qomax;
		  Qtmax=zpjjs.Qtmax;
		  cyzs=zpjjs.PLIZZZ;
		  for(J=0;J<=Pfxjsds;J++)
		  {
            PWF=zpjjs.YQPWF(Rjsjg[0][J], cyzs, QB, Qomax, Qtmax, Pdcyl, Pb, Fw);
			if( PWF <= 0)
			{
				PWF = 0;
				break;
			}
			Rjsjg[i + 1][J] = PWF;
			jsjg[0][J] = Rjsjg[0][J];
			jsjg[1 + i][J] = Rjsjg[1 + i][J];
			gcvt(Rjsjg[0][J],100,Temp);
			title=Temp;
			gcvt(Rjsjg[1 + i][J],100,Temp1);
			title1=Temp1;
			title=" "+title+" "+title1+"\n";
            try
			{
				f4.WriteString(title);
			}  
			catch (CFileException exception4)
			{
				AfxMessageBox("Error reading file");
				return;
			}
		  }
		  try
		  {
			f4.WriteString("-1 -1\n");
//			f4.WriteString(" 0             1\n");
			f4.WriteString(cGraphColor[iColorIndex++]);
			iColorIndex %= iGraphColorNum;
		  }   
		  catch (CFileException exception4)
		  {
			AfxMessageBox("Error reading file");
			return;
		  }
		  if( i > 0)
		  {
              gcvt(csz[4][i],100,Temp);
			  title=Temp;
			  title.TrimRight();
			  title.TrimLeft();
			  title="PLI="+title+"(m^3/d.MPa)"+"\n";
              try
			  {
				f4.WriteString(title);
			  }   
			  catch (CFileException exception4)
			  {
				AfxMessageBox("Error reading file");
				return;
			  }
		  }
		  else
		  {
              int tem=int(100 * PLI);
			  double ttemp=tem/100;
			  gcvt(ttemp,100,Temp);
			  title=Temp;
			  title.TrimRight();
			  title.TrimLeft();
			  title="PLI="+title+"(m^3/d.MPa)"+"\n";
              try
			  {
				f4.WriteString(title);
			  }   
			  catch (CFileException exception4)
			  {
				AfxMessageBox("Error reading file");
				return;
			  }
		  }
		}
    
	g_iProgress = 50;	// 计算进度
	ENDCOMPUTE;
		//流出关系计算
		jkyl = Pjkyy;
		ygnj = DIT;
		qyb = GWR;
		zrql = QIN;
		zryl = PIN;
		gzsd = DVT;
		sfyszqtd = "否";
		for(J=0;J<=Pfxjsds;J++)
		{
//		      计算油管流出曲线;
			  if( sfyszqtd != "是")
			  {
				  // 计算注气压力梯度;
				  sfyszqtd = "是";
				  if( ygnj <= 0.0433)
				  {
					ygwj = 0.0603;
				  }
				  else if( ygnj <= 0.0507)
				  {
					ygwj = 0.0603;
				  }
				  else if( ygnj <= 0.062)
				  {
					ygwj = 0.076;
				  }
				  else if( ygnj <= 0.0762)
				  {
					ygwj = 0.0889;
				  }
				  else if( ygnj <= 0.0889)
				  {
					ygwj = 0.1016;
				  }
				  else
				  {
					ygwj = ygnj + 0.014;
				  }
                  dtidu[0]=0;
				  P=qjyljsz.qjyl(zryl, Tjkwd, TG, gzsd, DIC, ygwj, RR, zrql, GG, 0, 1, H2S, N2, CO2, 0, 100, 1, -1);
				  for(i=1;i<=100;i++)
				  {
	    				Gsd[i] = dtidu[i];
						Gzqyl[i] = ptidu[i] - Pgzyc;
				  }
			  }
   		      if( zrql == 0)
			  {
				  zqdyl = jkyl;
				  zqdsd = 0;
			  }
			  else
			  {
				  // 计算油管多相流压力梯度
				  QL = Rjsjg[0][J];
				  QG = QL * qyb + zrql;
				  QW = QL * Fw;
				  QO = QL * (1 - Fw);
				  PMF=zpjjs.dxl(MMPF,jkyl, Tjkwd, TG, QG, QW, QO, GG, GW, OG, gzsd, ygnj, 0, RR, H2S, CO2, N2, NaCl, 100, 1, 1);	
				  for(i=1;i<=100;i++)
				  {
    				  Gdxlyl[i] = ptidu[i];
				  }
				  // 求注气点深度和注气压力
				  zqdyl = 0;
				  zqdsd = 0;
				  for(i=2;i<=100;i++)
				  {
	  				H1 = Gsd[i - 1];
					H2 = Gsd[i];
					PI1 = Gdxlyl[i - 1];
					PI2 = Gdxlyl[i];
					PO1 = Gzqyl[i - 1];
					PO2 = Gzqyl[i];
					if( PI1 <= PO1 && PI2 >= PO2)
					{
						jslzjd.qlzxjd(H1, H2, PI1, PO1, PI2, PO2);
						zqdyl=jslzjd.Y;
						zqdsd=jslzjd.X;
						break;
					}
				  }
				  if( zqdyl > 0)
				  {
					  zqdyl = int(100 * zqdyl);
					  zqdyl=zqdyl/ 100;
				  }
				  if( zqdsd > 0)
				  {
					  zqdsd = int(100 * zqdsd);
					  zqdsd=zqdsd/ 100;
				  }
				  if( zqdyl == 0)
				  {
					  zqdyl = PMF;
					  zqdsd = gzsd;
				  }
			  }
			  // 求井底流动压力
			  PN = zqdyl;
			  QG = QL * qyb;
			  if( gzsd > zqdsd)
			  {
				T0 = Tjkwd + TG * zqdsd;
				L = gzsd - zqdsd;
				PN1=zpjjs.dxl(MMPF,PN, T0, TG, QG, QW, QO, GG, GW, OG, L, ygnj, 0, RR, H2S, CO2, N2, NaCl, 0, 1, 1);	
				PN = PN1;
			  }
			  if( gzsd < DVW)
			  {
				T0 = Tjkwd + TG * gzsd;
				L = DVW - gzsd;
				PN1=zpjjs.dxl(MMPF,PN, T0, TG, QG, QW, QO, GG, GW, OG, L, DIC, 0, RR, H2S, CO2, N2, NaCl, 0, 1, 1);	
				PN = PN1;
			  }
		  if( PN > Pdcyl + 1)
		  {
			  break;
		  }
		  if( zqdyl > 0 && zqdsd > 0)
		  {
			  gcvt(Rjsjg[0][J],100,Temp);
			  title=Temp;
			  gcvt(PN,100,Temp1);
			  title1=Temp1;
              title=" "+title+" "+title1+"\n";
              try
			  {
				f4.WriteString(title);
			  }   
			  catch (CFileException exception4)
			  {
				AfxMessageBox("Error reading file");
				return;
			  }
			  jsjg[1][J] = PN;
		  }
		  else
		  {
			  jsjg[1][J] = 0;
		  }
		}
        try
		{
			f4.WriteString("-1 -1\n");
//			f4.WriteString(" 0             1\n");
			f4.WriteString(cGraphColor[iColorIndex++]);
			iColorIndex %= iGraphColorNum;
            f4.WriteString("Dit=实际油管\n");
            f4.WriteString("-10\t-10\n");
		}   
	    catch (CFileException exception4)
		{
			AfxMessageBox("Error reading file");
			return;
		}
	g_iProgress = 55;	// 计算进度
	ENDCOMPUTE;
//		百分比 = 百分比 + 100 / 计算总数;
//		主窗口.SSPanel1.FloodPercent = Int(百分比 + 0.5)
		//写入计算的数据jsjg
		title1="\t\t";
//		title1=title1+"[产液指$0" + "\t" + "数分析]$0"+"\n";
		title1=title1+"  [产液指数分析]$0\n";
		title="产液量$7";
//		title=title + "\t" + "油管压力$7" + "\t" + "    在下$13" + "\t" + "列产液指$12" + "\t" + "数下的节$12" + "\t" + "点压力,$12" + "\t" + "MPa$14"+"\n";
		title=title + "\t" + "油管压力$7" + "\t" + "  在下列产液指数下的节点压力(MPa)$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
		try
		{
            f3.WriteString(title1);
            f3.WriteString(title);
		}
	    catch (CFileException exception3)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		A = "(m^3/d)$11\t(MPa)$11";
		for(i=1;i<=5;i++)
		{
           gcvt(csz[4][i],100,Temp);
		   title=Temp;
		   A = A + "\t" + title;
		}
		A=A+"\n";
        try
		{
            f3.WriteString(A);
		}
	    catch (CFileException exception3)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		for(J=0;J<=Pfxjsds;J++)
		{
		  if( jsjg[0][J] == 0 || jsjg[1][J] + jsjg[2][J] + jsjg[3][J] + jsjg[4][J] + jsjg[5][J] + jsjg[6][J] == 0)
		  {
			  break;
		  }
		  for(i=0;i<=6;i++)
		  {
            gcvt(jsjg[i][J],100,Temp);
		  	B = Temp;
			if( i == 0)
			{
				A = B;
			}
			else
			{
				A = A + "\t" + B;
			}
		  }
          A=A+"\n";
          try
		  {
			f3.WriteString(A);
		  }
		  catch (CFileException exception3)
		  {
			AfxMessageBox("Error reading file");
			return;
		  }
		}
		A1 = "节点压力(MPa)$13\t$14";
		A2="井产水量(m^3/d)$13\t$14";
		for(i=1;i<=5;i++)
		{
		  P = 0;
		  Q = 0;
		  for(J=2;J<=Pfxjsds;J++)
		  {
		  	Q1 = jsjg[0][J - 1];
			Q2 = jsjg[0][J];
			PI1 = jsjg[1][J - 1];
			PI2 = jsjg[1][J];
			PO1 = jsjg[i + 1][J - 1];
			PO2 = jsjg[i + 1][J];
			if( J > 2 && PI2 * PO2 == 0)
			{
				break;
			}
			if( PI1 >= PO1 && PI2 <= PO2 || (PI1 <= PO1 && PI2 >= PO2))
			{
				if( P > 0 && Q > 0)
				{
					jslzjd.qlzxjd(Q1, Q2, PI1, PO1, PI2, PO2);
					P=jslzjd.Y;
					Q=jslzjd.X;
					break;
				}
				jslzjd.qlzxjd(Q1, Q2, PI1, PO1, PI2, PO2);
				P=jslzjd.Y;
				Q=jslzjd.X;
			}
		  }
		  if( P > 0)
		  {
			  P = int(100 * P);
			  P=P/ 100;
		  }
		  if( Q > 0)
		  {
			  Q = int(100 * Q);
			  Q=Q/ 100;
		  }
		  gcvt(P,100,Temp);
		  title=Temp;
		  A1 = A1 + "\t" + title;
		  gcvt(Q,100,Temp);
		  title=Temp;
		  A2 = A2 + "\t" + title;
		}
		A1=A1+"\n";
        A2=A2+"\n";
        try
		{
			f3.WriteString(A1);
            f3.WriteString(A2);
			f3.WriteString("\n");
		}
	    catch (CFileException exception3)
		{
			AfxMessageBox("Error reading file");
			return;
		}
	  }
    
	  if( Pqyb == 1)
	  {
		//分析气液比对气举排液量的影响
        try
		{
		    title="$$";
			title=title+"气举排水采气气水比分析图[" + jsff + "]"+"\n";
			f4.WriteString(title);
            f4.WriteString("节点压力最小值,MPa:\n");
            f4.WriteString("节点压力最大值,MPa:\n");
			f4.WriteString("产水量最小值,m^3/d:\n");
			f4.WriteString("产水量最大值,m^3/d:\n");
			f4.WriteString("Pwf\n");
			f4.WriteString("Ql\n");
			f4.WriteString("Pwf__MPa\n");
			f4.WriteString("Ql__m^3/d\n");
            f4.WriteString(" 1\n");
		}  
	    catch (CFileException exception4)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		for(i=0;i<=10;i++)
		{
			for(J=0;J<=Pfxjsds;J++)
			{
        		jsjg[i][J] = 0;
			}
		}
		//流入关系计算
		if( Ndclrtx == 0)
		{
		//		计算地层流入曲线;
			  Ndclrtx = 1;
			  if( Pdcylfx == 1)
			  {
				  ni = 5;
			  }
			  else
			  {
				  ni = 0;
			  }
			  for(i=0;i<=ni;i++)
			  {
	  			if( i == 0)
				{
					Prswl = Pdcyl;
				}
				else
				{
					Prswl = csz[3][i]; //分析的地层压力值
				}
				if( Prswl <= 0)
				{
					break;
				}
				zpjjs.wlipr(Prswl, PLI, QB, Qomax, Qtmax, Pdcyl, Pb, Fw);
				pliwl=zpjjs.PLIwl;
				qbwl=zpjjs.QBwl;
				qomaxwl=zpjjs.Qomaxwl;
				qtmaxwl=zpjjs.Qtmaxwl;
				pbwl=zpjjs.Pbwl;
				for(J=0;J<=Pfxjsds;J++)
				{
				  PWF=zpjjs.YQPWF(Rjsjg[0][J], pliwl, qbwl, qomaxwl, qtmaxwl, Prswl, pbwl, Fw);
				  if( PWF <= 0)
				  {
					PWF = 0;
					break;
				  }
				  else
				  {
					Rjsjg[i + 1][J] = PWF;
				  }
				}
			  }
		}
		for(J=0;J<=Pfxjsds;J++)
		{
		  if( J > 2 && Rjsjg[1][J] <= 0)
		  {
			  break;
		  }
		  gcvt(Rjsjg[0][J],100,Temp);
		  title=Temp;
		  gcvt(Rjsjg[1][J],100,Temp1);
		  title1=Temp1;
		  title=" "+title+" "+title1+"\n";
          try
		  {
              f4.WriteString(title);
		  }   
	      catch (CFileException exception4)
		  {
			  AfxMessageBox("Error reading file");
			  return;
		  }
		  jsjg[0][J] = Rjsjg[0][J];
		  jsjg[1][J] = Rjsjg[1][J];
		}
        gcvt(Pdcyl,100,Temp);
		title=Temp;
        title.TrimRight();
		title.TrimLeft();
		title="IPR[Prs="+title+"(MPa)]"+"\n";
		try
		{
          f4.WriteString("-1 -1\n");
//		  f4.WriteString(" 0             1\n");
				f4.WriteString(cGraphColor[iColorIndex++]);
				iColorIndex %= iGraphColorNum;
          f4.WriteString(title);
		}   
	    catch (CFileException exception4)
		{
		  AfxMessageBox("Error reading file");
		  return;
		}
	g_iProgress = 60;	// 计算进度
	ENDCOMPUTE;
		
//		入井动态关系IPR(PLI, QB, Qomax, Qtmax, qcscl, pcsyl, Pdcyl, Pb, Fw);
        zpjjs.rjIPR(PLI, qcscl, pcsyl, Pdcyl, Pb, Fw);  
		QB=zpjjs.QB;
		Qomax=zpjjs.Qomax;
		Qtmax=zpjjs.Qtmax;
		PLI=zpjjs.PLIZZZ;  
		//流出关系计算

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -