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

📄 qjyhsj.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			  {
				  break;
			  }
			  QL = QL - DLTQ;
			  if( QL <= 5)
			  {
				  int result;
				  result=MessageBox(NULL, "该井在最大可用注气量下不能气举排液,是否增大注气量?","注气量不够",MB_YESNO);
				  if(result==IDYES)
				  {
					  qzzd = qzzd + 10000;
				  }
				  else
				  {
					  QL = qsheji;
					  if( QL == 0)
					  {
						  QL = 0.5 * Qtmax;
					  }
					  break;
				  }
			  }
		  }
		  while(shejishi=9999);
		  QL = int(QL);
	  }
	  else if( SJFF == 2 && qsheji > 0)
	  {
		  //根据设计排液量设计
		  QL = qsheji;
	  }
	  else
	  {
		  //根据最大排液量设计
		  QL = int(0.75 * Qtmax / 2) * 2;
	  }
	  
	  //求启动压力下的注气压力梯度
	  ptidu[0] = pqidong;
	  for(i=1;i<=CSGDZZ;i++)
	  {
		  ptidu[i] = 0;
	  }
	  //	  气井压力(Pcom, pqidong, tzhuqi, TG1, DVW, DIC, DOT, RR, 0, GG, 0, 1, H2S, N2, CO2, CSGDZZ, 1, -1);
	  Pcom=qjyljsz.qjyl(pqidong, tzhuqi, TG1, DVW, DIC, DOT, RR, 0, GG, 0, 1, H2S, N2, CO2, 0, CSGDZZ, 1, -1);
	  for(i=0;i<=CSGDZZ;i++)
	  {
		  pqqdtd[i] = ptidu[i];
	  }
	  
	  DLTQQ = QL * 0.1;
	  do
	  {
		  //根据最大注气量设计,当须求注气量[Q注入] > 最大注气量[Q注最大] 时应减小排液量[QL]
		  qzhuru = 0;
		  do
		  {
			  //由于[注气量]会影响注气压力梯度,因此需要迭代
			  qjdzr = qzhuru;
			  do
			  {
				  //求设计排液量[QL]下需要的注气量[Q注入]
				  
				  //求设计产量下的井底流压
				  //			由Q求PWF(PWF, QL, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw);
				  PWF=zpjjs.YQPWF(QL, PLI, QB, Qomax, Qtmax, pdiceng, Pb, Fw);        
				  //求设计产量下的井筒多相流压力梯度
				  QO = QL * (1 - Fw);
				  QW = QL * Fw;
				  QG = QL * GWR;
				  dtidu[0] = DVW;
				  ptidu[0] = PWF;
				  for(i=1;i<=CSGDZZ;i++)
				  {
					  dtidu[i] = 0;
					  ptidu[i] = 0;
				  }
				  //			多相流(P计算, PWF, tdiceng, TG, QG, QW, QO, GG, GW, OG, DVW, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, -1, 1, MMPF);
				  Pjs=zpjjs.dxl(MMPF,PWF, tdiceng, TG, QG, QW, QO, GG, GW, OG, DVW, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, -1, 1);	
				  dshendu[0] = 0;
				  pitidu[0] = 0;
				  for(i=1;i<=CSGDZZ;i++)
				  {
					  dshendu[i] = int(10 * i * DVW / CSGDZZ);
					  dshendu[i]=dshendu[i]/ 10.0;
					  pitidu[i] = ptidu[CSGDZZ - i];
				  }
				  if( pitidu[1] > pjingkou)
				  {
					  //在设计产量下井能自喷
					  MessageBox(NULL, "该井能自喷,不需要用人工举升方法!","井能自喷",MB_ICONINFORMATION);
					  return;
				  }
				  //			主窗口.SSPanel1.FloodPercent = 主窗口.SSPanel1.FloodPercent + 5
				  //			If 主窗口.SSPanel1.FloodPercent > 60 Then 主窗口.SSPanel1.FloodPercent = 60
				  
				  //求工作压力下的注气压力梯度
				  for(i=1;i<=CSGDZZ;i++)
				  {
					  ptidu[i] = 0;
				  }
				  ptidu[0] = PIN;
				  //			气井压力(Pcom, PIN, tzhuqi, TG1, DVW, DIC, DOT, RR, qzhuru, GG, 0, 1, H2S, N2, CO2, CSGDZZ, 1, -1);
				  Pcom=qjyljsz.qjyl(PIN, tzhuqi, TG1, DVW, DIC, DOT, RR, qzhuru, GG, 0, 1, H2S, N2, CO2, 0, CSGDZZ, 1, -1);
				  for(i=0;i<=CSGDZZ;i++)
				  {
					  pqtidu[i] = ptidu[i];
				  }
				  //			主窗口.SSPanel1.FloodPercent = 主窗口.SSPanel1.FloodPercent + 5
				  //			If 主窗口.SSPanel1.FloodPercent > 60 Then 主窗口.SSPanel1.FloodPercent = 60
				  
				  //求注气点
				  pjszqd = 0;
				  dzqd = 0;
				  for(i=1;i<=CSGDZZ;i++)
				  {
					  H1 = dshendu[i - 1];
					  H2 = dshendu[i];
					  PI1 = pitidu[i - 1];
					  PI2 = pitidu[i];
					  PO1 = pqtidu[i - 1] - pgzyc;
					  PO2 = pqtidu[i] - pgzyc;
					  if( PI1 <= PO1 && PI2 >= PO2)
					  {
						  //求交点(pjszqd, dzqd, H1, H2, PI1, PO1, PI2, PO2);
						  jslzjd.qlzxjd(H1, H2, PI1, PO1, PI2, PO2);
						  pjszqd=jslzjd.Y;
						  dzqd=jslzjd.X;
						  if( pjszqd > 0)
						  {
							  k = int(100 * pjszqd);
							  pjszqd=double(k)/ 100.0;
						  }
						  if( dzqd > 0)
						  {
							  dzqd = int(dzqd + 0.5);
						  }
						  break;
					  }
				  }
				  
				  if( pjszqd > 0 && (DVW - dzqd) > 50)
				  {
					  //有注气点则继续计算注气量
					  dtidu[0] = 0;
					  ptidu[0] = pjingkou;
					  for(i=1;i<=CSGDZZ;i++)
					  {
						  dtidu[i] = 0;
						  ptidu[i] = 0;
					  }
					  DLTMIN = 10000;
					  gbsjpl = "否";
					  NN = 0;
					  if( qzhuru > 0)
					  {
						  qzhuru = qzhuru / 4;
					  }
					  DLTQ = 5000;
					  scqldx = "";
					  bcqldx = "";
					  qzhuru = 0;
					  DLTQ = 500;
					  do
					  {
	ENDCOMPUTE;
						  qzhuru = qzhuru + DLTQ;
						  qzql = int(QL * GWR + qzhuru);
						  //				多相流(pzxyy, pjingkou, tjingkou, TG, qzql, QW, QO, GG, GW, OG, dzqd, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1, MMPF);
						  pzxyy=zpjjs.dxl(MMPF,pjingkou, tjingkou, TG, qzql, QW, QO, GG, GW, OG, dzqd, DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1);	
						  if( pzxyy > pjszqd)
						  {
							  bcqldx = "偏小";
						  }
						  else
						  {
							  bcqldx = "偏大";
						  }
						  if( bcqldx == "偏大" && scqldx == "偏大")
						  {
							  DLTQ = -fabs(DLTQ);
						  }
						  else if( bcqldx == "偏小" && scqldx == "偏小")
						  {
							  DLTQ = fabs(DLTQ);
						  }
						  else if( bcqldx == "偏大" && scqldx == "偏小")
						  {
							  DLTQ = 0.618 * fabs(DLTQ);
						  }
						  else if( bcqldx == "偏小" && scqldx == "偏大")
						  {
							  DLTQ = -0.618 * fabs(DLTQ);
						  }
						  scqldx = bcqldx;
						  if( DLTMIN > fabs(pzxyy - pjszqd))
						  {
							  DLTMIN = fabs(pzxyy - pjszqd);
						  }
						  if( DLTMIN <= fabs(pzxyy - pjszqd) - 1 || NN >= 100)
						  {
							  //设计参数不合理,自动调整设计排量后再计算
							  gbsjpl = "是";
							  break;
						  }
						  if( DLTMIN < fabs(pzxyy - pjszqd))
						  {
							  NN = NN + 1;
						  }
						  if( fabs(pzxyy - pjszqd) < 0.1 && fabs(DLTQ) > 50)
						  {
							  if( DLTQ > 0)
							  {
								  DLTQ = 100;
							  }
							  else
							  {
								  DLTQ = -100;
							  }
						  }
						  else if( fabs(pzxyy - pjszqd) < 0.5 && fabs(DLTQ) > 250)
						  {
							  if( DLTQ > 0)
							  {
								  DLTQ = 250;
							  }
							  else
							  {
								  DLTQ = -250;
							  }
						  }
						  else if( fabs(pzxyy - pjszqd) < 1 && fabs(DLTQ) > 500)
						  {
							  if( DLTQ > 0)
							  {
								  DLTQ = 500;
							  }
							  else
							  {
								  DLTQ = -500;
							  }
						  }
						  else if( fabs(pzxyy - pjszqd) < 2 && fabs(DLTQ) > 1000)
						  {
							  if( DLTQ > 0)
							  {
								  DLTQ = 1000;
							  }
							  else
							  {
								  DLTQ = -1000;
							  }
						  }
					  }  while(fabs(pzxyy - pjszqd) >= 0.05);
					  if( gbsjpl == "否")
					  {
						  break;
					  }
			}
			QL = 0.95 * QL;
			if( QL < 5)
			{
				//排液量很小时(小于5)仍不能气举生产
				MessageBox(NULL, "该井不能用气举排液,请选择其它的人工举升方法!","举升方法选择不当",MB_ICONINFORMATION);
				return;
			}
			//			主窗口.SSPanel1.FloodPercent = 主窗口.SSPanel1.FloodPercent + 10
			//			If 主窗口.SSPanel1.FloodPercent > 60 Then 主窗口.SSPanel1.FloodPercent = 60
		if((g_iProgress+=5)>90) g_iProgress = 90;
	ENDCOMPUTE;
		  }	  while(shejishi=9999);
		}  while(fabs(qjdzr - qzhuru) >= 500);
		if( SJFF == 1 && qzzd > 0 && DLTQQ > 0.25)
		{
			if( fabs(qzzd - qzhuru) < 100)
			{
				if( qzzd < qzhuru)
				{
					qzhuru = qzzd;
				}
				break;
			}
			else if( qzzd < qzhuru)
			{
				if( XDYN == 1)
				{
					DLTQQ = DLTQQ / 2;
					XDYN = 0;
				}
				QL = QL - DLTQQ;
				DXYN = 1;
			}
			else if( qzzd > qzhuru)
			{
				if( DXYN == 1)
				{
					DLTQQ = DLTQQ / 2;
					DXYN = 0;
				}
				QL = QL + DLTQQ;
				XDYN = 1;
			}
		}
		else
		{
			break;
		}
	  }
	  while(shejishi=9999);
	  
	  QL = int(10 * QL);
	  QL=QL/ 10.0;
	  
	  dfshendu[0][0] = 0;
	  pftidu[0][0] = pjingkou;
	  for(i=1;i<=CSGDZZ;i++)
	  {
		  dfshendu[0][i] = dzqd / CSGDZZ * i;
		  pftidu[0][i] = ptidu[i];
	  }
	  pftidu[0][CSGDZZ] = pjszqd;
	  //	  主窗口.SSPanel1.FloodPercent = 60
	  g_iProgress = 90;	// 计算进度
	ENDCOMPUTE;
      for(i=0;i<=CSGDZZ;i++)
	  {
		  dimtidu[i] = dtidu[i];
		  pimtidu[i] = ptidu[i];
	  }
	  
	  qzhuru = int(qzhuru);
	  pjsyy = int(100 * pzxyy);
	  pjsyy=pjsyy/ 100.0;
	  
	  //计算第一只阀的参数
	  
	  //阀1深度
	  DGL = OG * (1 - Fw) + GW * Fw;
	  GS = DGL / 101.97;
	  ljym = int(100 * (DVW - pdiceng / DGL * 98));
	  ljym=ljym/ 100;
	  if( ljym <= 0)
	  {
		  fsd[1] = int((pqidong - pjingkou) / GS + 0.5);
	  }
	  else
	  {
		  fsd[1] = int((ljym + (pqidong - pjingkou) / GS - 50) + 0.5);
	  }
	  
	  //阀1温度
	  fcwd[1] = int(100 * (tjingkou + TG * fsd[1] - 273.15)) / 100.0;
	  
	  //阀1处最小油管压力
	  for(i=1;i<=CSGDZZ;i++)
	  {
		  if( dimtidu[i] >= fsd[1] && dimtidu[i - 1] <= fsd[1])
		  {
			  fczxyy[1] = pimtidu[i - 1] + (pimtidu[i] - pimtidu[i - 1]) / (dimtidu[i] - dimtidu[i - 1]) * (fsd[1] - dimtidu[i - 1]);
			  break;
		  }
	  }
	  fczxyy[1] = int(100 * fczxyy[1]);
	  fczxyy[1]=fczxyy[1]/ 100.0;
	  
	  //阀1处套管压力
	  for(i=1;i<=CSGDZZ;i++)
	  {
		  if( dshendu[i] >= fsd[1] && dshendu[i - 1] <= fsd[1])
		  {
			  fcty[1] = pqtidu[i - 1] + (pqtidu[i] - pqtidu[i - 1]) / (dshendu[i] - dshendu[i - 1]) * (fsd[1] - dshendu[i - 1]);
			  pfa = pqqdtd[i - 1] + (pqqdtd[i] - pqqdtd[i - 1]) / (dshendu[i] - dshendu[i - 1]) * (fsd[1] - dshendu[i - 1]);
			  break;
		  }
	  }
	  fcty[1] = int(100 * fcty[1]);
	  fcty[1]=fcty[1]/ 100.0;
	  
	  //阀1打开压力
	  fdkyl[1] = int(100 * fcty[1]);
	  fdkyl[1]=fdkyl[1]/ 100.0;
	  
	  //求阀1最小注气量
	  QO = QL * (1 - Fw);
	  QW = QL * Fw;
	  qzhu = 0;
	  DLTQ = 500;
	  dtidu[0] = 0;
	  ptidu[0] = pjingkou;
	  for(i=1;i<=CSGDZZ;i++)
	  {
		  dtidu[i] = 0;
		  ptidu[i] = 0;
	  }
	  scqldx = "";
	  bcqldx = "";
	  DLTMIN = 10000;
	  NN = 0;
	  do
	  {
		  qzhu = qzhu + DLTQ;
		  if( qzhu < 0)
		  {
			  qzhu = 0;
			  DLTQ = fabs(DLTQ);
		  }
		  //多相流(pzxyy, pjingkou, tjingkou, TG, qzhu, QW, QO, GG, GW, OG, fsd(1), DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1, MMPF);
		  pzxyy=zpjjs.dxl(MMPF,pjingkou, tjingkou, TG, qzhu, QW, QO, GG, GW, OG, fsd[1], DIT, 0, RR, H2S, CO2, N2, NaCl, CSGDZZ, 1, 1);	
		  if( pzxyy > fdkyl[1])
		  {
			  bcqldx = "偏小";
		  }
		  else
		  {
			  bcqldx = "偏大";
		  }
		  if( bcqldx == "偏大" && scqldx == "偏大")
		  {
			  DLTQ = -fabs(DLTQ);
		  }
		  else if( bcqldx == "偏小" && scqldx == "偏小")
		  {
			  DLTQ = fabs(DLTQ);
		  }
		  else if( bcqldx == "偏大" && scqldx == "偏小")
		  {
			  DLTQ = 0.618 * fabs(DLTQ);
		  }
		  else if( bcqldx == "偏小" && scqldx == "偏大")
		  {
			  DLTQ = -0.618 * fabs(DLTQ);
		  }
		  
		  scqldx = bcqldx;
		  if( DLTMIN > fabs(pzxyy - fdkyl[1]))
		  {
			  DLTMIN = fabs(pzxyy - fdkyl[1]);
		  }
		  if( DLTMIN < fabs(pzxyy - fdkyl[1]))
		  {
			  NN = NN + 1;
		  }
		  if( NN > 50)
		  {
			  break;
		  }
		  if( fabs(pzxyy - fdkyl[1]) < 0.25 && fabs(DLTQ) > 100)
		  {
			  if( DLTQ > 0)
			  {
				  DLTQ = 100;
			  }
			  else
			  {
				  DLTQ = -100;
			  }
		  }
		  else if( fabs(pzxyy - fdkyl[1]) < 0.5 && fabs(DLTQ) > 200)
		  {
			  if( DLTQ > 0)
			  {
				  DLTQ = 200;
			  }
			  else
			  {
				  DLTQ = -200;
			  }
		  }
		  else if( fabs(pzxyy - fdkyl[1]) < 2 && fabs(DLTQ) > 300)
		  {
			  if( DLTQ > 0)
			  {
				  DLTQ = 300;
			  }
			  else
			  {
				  DLTQ = -300;
			  }
		  }
	  }
	  while(fabs(pzxyy - fdkyl[1]) >= 0.05);
	  fzql[1] = int(qzhu);
	  //	  主窗口.SSPanel1.FloodPercent = 65
	  dfshendu[1][0] = 0;
	  pftidu[1][0] = pjingkou;
	  for(i=1;i<=CSGDZZ;i++)
	  {
		  dfshendu[1][i] = fsd[1] / CSGDZZ * i;
		  pftidu[1][i] =ptidu[i];
	  }
	  
	  //校正注气量
	  fjzzql[1] = int(fzql[1] * 0.0544 * pow((GG * 1.8 * (fcwd[1] + 273.15)),0.5));
	  
	  //计算阀的孔径
	  ljylb = pow((2 / (1 + KI)),(KI / (KI - 1)));
	  ylb = PL1T / fdkyl[1];
	  PR = fdkyl[1] / PC;
	  TR = (fcwd[1] + 273.15) / TC;
	  //	  天然气偏差系数(Z, PR, TR);
	  Z=csjs.trqpcxs(PR, TR);//天然气偏差因子
	  XX = fjzzql[1] * pow((GG * (fcwd[1] + 273.15) * Z),0.5) / 4066 / fdkyl[1];
	  if( ylb >= ljylb)
	  {
		  YY = pow((KI / (KI - 1) * (pow(ylb,(2 / KI)) - pow(ylb,((KI + 1) / KI)))),0.5);
	  }
	  else

⌨️ 快捷键说明

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