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

📄 slb.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			  dpzmj1 = 3.14159 / 4 * pow(pzzj[i],2);
			  dpzmj2 = 3.14159 / 4 * pow(pzzj[i + 1],2);
			  if( dpzmj1 <= dpzmj0 && dpzmj2 >= dpzmj0)
			  {
				  NNZ = i;
				  break;
			  }
		  }
	  }
	  if( NNZ == 0)
	  {
		  MessageBox(NULL, "井下射流泵参数错误,请输入后再计算!","射流泵参数",MB_ICONWARNING);
		  return;
	  }
	  
	  dbdxryl0 = dbdxryl;
	  
	  DLTP = Prs / djsylds;
	  for(i=1;i<=djsylds + 1;i++)
	  {
		  //计算在吸入压力下的井底流压及排水量
		  dbdxryl = DLTP * i;
		  do
		  {
			  djdcyl = djdcyl0;
			  QW = djdcyl * Fw;
			  QO = djdcyl * (1 - Fw);
			  QG = QW * GWR;
			  //多相流(D井底流压, D泵的吸入压力, D泵处温度, TG, QG, QW, QO, GG, GW, OG, DVW - DJP, D吸环外内, D吸环内外, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
			  djdly=zpjjs.dxl(MMPF,dbdxryl, dbcwd, TG, QG, QW, QO, GG, GW, OG, (DVW - DJP), dxhwn, dxhnw, RR, H2S, CO2, N2, NaCl, 0, 1, 1);
			  //由PWF求Q(D井的产液量0, D井底流压, PLI, QB, Qomax, D最大产液量, Prs, Pb, Fw)
			  djdcyl0=qjyljsz.ypwfqq(djdly, PLI, QB, Qomax, dzdcyl, Prs, Pb, Fw);
			  if( djdcyl0 <= 0)
			  {
				  djdcyl = 0;
				  break;
			  }
		  }
		  while(fabs(djdcyl - djdcyl0) / (djdcyl + 0.001) >= 0.0001);
		  djcl[i] = djdcyl;
	  }
	  //打开保存计算结果的文件
	  /*	  fileDialogFilter2 ="Data files (*.RDJ)|*.RDJ|All files (*.*)|*.*||";
	  fileDialogExt2 = "RDJ";
	  CFileDialog fileDialog2( FALSE, 
	  fileDialogExt2, NULL,
	  0, fileDialogFilter2 );
	  fileDialog2.m_ofn.lpstrTitle="保存计算结果";
	  if( fileDialog2.DoModal() == IDCANCEL )
	  {
	  return;
	  }	  */
      CStdioFile f3;
	  CFileException exception3;
	  BOOL status1;	 
	  templs1 = ((CCVenusApp*)AfxGetApp())->GetMyAppPath();
	  templs1  += "\\tempfile.txt";				  
	  status1 = f3.Open(templs1,CFile::modeCreate|CFile::modeWrite);
	  if (!status1)
	  {
		  char s[100];
		  sprintf(s, "Error opening file for reading. Code:%d",
			  exception3.m_cause);
		  AfxMessageBox(s);
		  return;
	  }
	  //写入基本参数
	  //	  title1="";
	  title1="\t\t$$射流泵排水采气优化设计结果$0\n";
	  try
	  {
		  f3.WriteString("\n");
		  f3.WriteString(title1);
		  f3.WriteString("\n");
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  title="";
	  title=title+"一、设计基本参数$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(title);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }	  
	  G4="";
	  gcvt(DVW,95,temp);
	  G4 =G4+ " ⑴ 地层深度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(m)$12" + "\t" + "$14";
	  gcvt(GW,95,temp);
	  title=temp;
	  G4 = G4 + "\t" + " ⑵ 水相对密度=$13" + "\t" + "$12" + "\t" + title + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
	g_iProgress = 15;	// 计算进度
	ENDCOMPUTE;
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }	  	
	  G4="";	  
	  gcvt(DJP,95,temp);
	  G4 =G4+ " ⑶ 泵挂深度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(m)$12" + "\t" + "$14";
	  gcvt(GG,95,temp);
	  G4 = G4 + "\t" + " ⑷ 气相对密度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }	  	
	  G4="";	  
	  gcvt(1000 * DIT,95,temp);
	  G4 =G4+ " ⑸ 油管内径=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(mm)$12" + "\t" + "$14";
	  gcvt(GWR,95,temp);
	  G4 = G4 + "\t" + " ⑹ 生产气水比=$13" + "\t" + "$12" + "\t" +temp + "$12" + "\t" + "(m^3/m^3)$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }	  	
	  G4="";	  
	  gcvt(1000 * DOT,95,temp);
	  G4 =G4+ " ⑺ 油管外径=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(mm)$12" + "\t" + "$14";
	  gcvt(100 * Fw,95,temp);
	  G4 = G4 + "\t" + " ⑻ 体积含水率=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(%)$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  G4="";
	  gcvt(1000 * DIC,95,temp);
	  G4 =G4+ " ⑼ 套管内径=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(mm)$12" + "\t" + "$14";
	  gcvt(Qpmax,95,temp);
	  G4 = G4 + "\t" + " ⑽ 泵最高排量=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(m^3/d)$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  G4="";
	  gcvt(Pwh,95,temp);
	  G4 =G4+ " ⑾ 井口压力=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(MPa)$12" + "\t" + "$14";
	  gcvt(HPp,95,temp);
	  G4 = G4 + "\t" + " ⑿ 泵额定功率=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(Kw)$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  G4="";
	  gcvt(Prs,95,temp);
	  G4 =G4+ " ⒀ 地层压力=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(MPa)$12" + "\t" + "$14";
	  gcvt(Ppmax,95,temp);
	  G4 = G4 + "\t" + " ⒁ 泵最高压力=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(MPa)$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  G4="";
	  gcvt(tjingkou - 273.15,95,temp);
	  G4 =G4+ " ⒂ 井口温度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(℃)$12" + "\t" + "$14";
	  gcvt(NNZ,95,temp);
	  title=temp;
	  title.TrimLeft();
	  G4 = G4 + "\t" + " ⒃ 选定喷嘴号=$13" + "\t" + "$12" + "\t" + " [" + title + "]$12" + "\t" + "$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  G4="";
      gcvt(tdiceng - 273.15,95,temp);
	  G4 =G4+ " ⒄ 地层温度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "(℃)$12" + "\t" + "$14";
	  G4 = G4 + "\t" + " ⒅ 动力液循环=$13" + "\t" + "$12" + "\t" + " " + ddlyxhfs + "循环$12" + "\t" + "$12" + "\t" + "$14"+"\n";
	  try
	  {
		  f3.WriteString(G4);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  if( Fw < 1)
	  {
		  G4="";
		  gcvt(OG,95,temp);
		  G4 =G4+ " ⒆ 油相对密度=$13" + "\t" + "$12" + "\t" + temp + "$12" + "\t" + "$12" + "\t" + "$14";
		  G4 = G4 + "\t" + " ⒇ 动力液类型=$13" + "\t" + "$12" + "\t" + " " + ddongliye + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
		  try
		  {
			  f3.WriteString(G4);
		  }
		  catch (CFileException exception3)
		  {
			  AfxMessageBox("Error reading file");
			  return;
		  }
	  }
	g_iProgress = 30;	// 计算进度
	ENDCOMPUTE;
	  title="";
	  title=title+"二、优化设计结果$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12" + "\t" + "$14"+"\n";
	  title1="";
	  title1=title1+" 井下泵$7" + "\t" + "泵排水量$7" + "\t" + " 泵 效$7" + "\t" + "消耗功率$7" + "\t" + "动力液量$7" + "\t" + "工作压力$7" + "\t" + "上流压力$7" + "\t" + "吸入压力$7" + "\t" + "返出压力$7" + "\t" + "气蚀排量$7"+"\n";
	  title2="";
	  title2=title2+" 型  号$11" + "\t" + "(m^3/d)$11" + "\t" + "  (%)$11" + "\t" + "  (Kw)$11" + "\t" + "(m^3/d)$11" + "\t" + " (MPa)$11" + "\t" + " (MPa)$11" + "\t" + " (MPa)$11" + "\t" + " (MPa)$11" + "\t" + "(m^3/d)$11"+"\n";
	  try
	  {
		  f3.WriteString(title);
		  f3.WriteString(title1);
		  f3.WriteString(title2);
	  }
	  catch (CFileException exception3)
	  {
		  AfxMessageBox("Error reading file");
		  return;
	  }
	  for(dpzhs=NNZ - 1;dpzhs<=NNZ + 1;dpzhs++, g_iProgress +=20 )//计算3种喷嘴
	  {
		  for(dhdhs = dpzhs - 1;dhdhs<=dpzhs + 2;dhdhs++)//每种喷嘴选用4种喉道
		  {
	ENDCOMPUTE;
			  if( pzzj[dpzhs] > 0 && hdzj[dhdhs] > 0)
			  {
				  k=int(10000 * pow((pzzj[dpzhs] / hdzj[dhdhs]),2));
				  dmjb = double(k) / 10000;
				  dpzmj = 3.14159 / 4 * pow(pzzj[dpzhs],2);  //实际喷嘴的面积
				  xrjsjg = "是";
				  if( dhdhs == dpzhs - 1)
				  {
					  dbengxing = "X"; //面积比及泵型
				  }
				  else if( dhdhs == dpzhs)
				  {
					  //			  dbengxing = "A"; //面积比及泵型
					  dbengxing = "Α"; //面积比及泵型
				  }
				  else if( dhdhs == dpzhs + 1)
				  {
					  dbengxing = "B"; //面积比及泵型
				  }
				  else if( dhdhs == dpzhs + 2)
				  {
					  dbengxing = "C"; //面积比及泵型
				  }
				  dhdmj = dpzmj / dmjb; //喉道面积
				  switch(dpzhs)
				  {
				  case 1: 
					  dpenzui = " 1";
					  break;
				  case 2: 
					  dpenzui = " 2";
					  break;
				  case 3: 
					  dpenzui = " 3";
					  break;
				  case 4: 
					  dpenzui = " 4";
					  break;
				  case 5: 
					  dpenzui = " 5";
					  break;
				  case 6: 
					  dpenzui = " 6";
					  break;
				  case 7: 
					  dpenzui = " 7";
					  break;
				  case 8: 
					  dpenzui = " 8";
					  break;
				  case 9: 
					  dpenzui = " 9";
					  break;
				  case 10: 
					  dpenzui = " 10";
					  break;
				  case 11: 
					  dpenzui = " 11";
					  break;
				  case 12: 
					  dpenzui = " 12";
					  break;
				  case 13: 
					  dpenzui = " 13";
					  break;
				  case 14: 
					  dpenzui = " 14";
					  break;
				  case 15:
					  dpenzui = " 15";
					  break;
				  case 16:
					  dpenzui = " 16";
					  break;
				  case 17: 
					  dpenzui = " 17";
					  break;
				  case 18: 
					  dpenzui = " 18";
					  break;
				  case 19: 
					  dpenzui = " 19";
					  break;
				  case 20: 
					  dpenzui = " 20";
					  break;
				  }
				  djxbx = dpenzui + dbengxing; //井下泵型
				  for(i=1;i<=djsylds + 1;i++)
				  {
					  //主窗口.SSPanel1.FloodPercent = Int(1 + (4 * (D喷嘴号数 - NNZ + 1) + D喉道号数 - D喷嘴号数 + 1 + i / D计算压力点数) / 12 * 99)
					  //计算在吸入压力为Ps下的动力液压力D喷嘴上流压力及动力液量D动力液量
					  dbdxryl = DLTP * i;
					  if( ddlyl == 0)
					  {
						  ddlyl = 100;
					  }
					  for(IJK=1;IJK<=50;IJK++)
					  {
						  ddlylcz = ddlyl;
						  if( ddongliye == "水")
						  {
							  QPW = ddlylcz;
							  QPO = 0;
						  }
						  else
						  {
							  QPW = 0;
							  QPO = ddlylcz;
						  }
						  //多相流(D喷嘴上流压力, Ppmax, T井口, TG, 0, QPW, QPO, GG, GW, OG, DJP, D动环外内, D动环内外, RR, H2S, CO2, N2, NaCl, 0, 1, -1, MMPF)
						  dpzslyl=zpjjs.dxl(MMPF,Ppmax, tjingkou, TG, 0, QPW, QPO, GG, GW, OG, DJP, ddhwn, ddhnw, RR, H2S, CO2, N2, NaCl, 0, 1, -1);
						  ddlyl = 3.79 * dpzmj * pow(((dpzslyl - dbdxryl) / NLG / (1 + Kj)),0.5);
						  if( fabs(ddlyl - ddlylcz) / ddlyl < 0.001)
						  {
							  break;
						  }
					  }
					  if( ddlyl > Qpmax)
					  {
						  for(Ido=1;Ido<=20;Ido++)
						  {
							  Ppmax = Ppmax - 0.1;
							  if( ddongliye == "水")
							  {
								  QPW = Qpmax;
								  QPO = 0;
							  }
							  else
							  {
								  QPW = 0;
								  QPO = Qpmax;
							  }
							  //多相流(D喷嘴上流压力, Ppmax, T井口, TG, 0, QPW, QPO, GG, GW, OG, DJP, D动环外内, D动环内外, RR, H2S, CO2, N2, NaCl, 0, 1, -1, MMPF)
							  dpzslyl=zpjjs.dxl(MMPF,Ppmax, tjingkou, TG, 0, QPW, QPO, GG, GW, OG, DJP, ddhwn, ddhnw, RR, H2S, CO2, N2, NaCl, 0, 1, -1);
							  ddlyl = 3.79 * dpzmj * pow(((dpzslyl - dbdxryl) / NLG / (1 + Kj)),0.5);
							  if( ddlyl < Qpmax)
							  {
								  break;
							  }
						  }
					  }
					  
					  //计算在吸入压力为Ps下的返出压力D返出压力及泵的吸入水量Qs
					  dxrxl = 1 / (1 + 0.0566 * pow((GWR / dbdxryl),1.2));
					  dllb = 1;
					  for(IJK=1;IJK<=50;IJK++)
					  {
						  dllbcz = dllb;
						  dbdpyl = ddlyl * dxrxl * dllb;
						  QG = dbdpyl * GWR;
						  if( ddongliye == "水")
						  {
							  QW = dbdpyl * Fw + ddlyl;
							  QO = dbdpyl * (1 - Fw);
						  }
						  else
						  {
							  QW = dbdpyl * Fw;
							  QO = dbdpyl * (1 - Fw) + ddlyl;
						  }
						  //多相流(D返出压力, Pwh, T井口, TG, QG, QW, QO, GG, GW, OG, DJP, D返环外内, D返环内外, RR, H2S, CO2, N2, NaCl, 0, 1, 1, MMPF)
						  dfcyl=zpjjs.dxl(MMPF,Pwh, tjingkou, TG, QG, QW, QO, GG, GW, OG, DJP, dfhwn, dfhnw, RR, H2S, CO2, N2, NaCl, 0, 1, 1);
						  if( dssxs < 6)
						  {
							  Fap = dbdxryl / dpzslyl;
							  //射流泵损失系数(Kj, Ks, Kt, Kd, Ktd, Ic, GWR, Fap, D面积比, D损失系数)
							  slbssxs(GWR, Fap, dmjb, dssxs);
							  Kj=KJ;
							  Ks=KS;
							  Kt=KT;
							  Kd=KD;
							  Ktd=KTD;
							  Ic=IC;
						  }
						  dylb = (dfcyl - dbdxryl) / (dpzslyl - dfcyl); //无因次压力比
						  X1 = (1 + Ktd) * pow(dmjb,2);
						  X2 = (1 - 2 * dmjb) * pow(dmjb,2) / pow((1 - dmjb),2) - X1;
						  dllb = X1 / X2 + pow((pow((X1 / X2),2) - (2 * dmjb - X1) / X2 + (1 + Kj) * dylb / X2 / (1 + dylb)),0.5); //无因次流量比
						  if( dllb <= 0)
						  {
							  dllb = 0;
							  dllbcz = 0;
							  break;
						  }
						  if( fabs((dllbcz - dllb) / (dllbcz + 0.0000001)) <= 0.001)
						  {
							  break;
						  }
					  }
					  dbdpyl = ddlyl * dxrxl * (dllb + dllbcz) / 2;
					  if( i > 1 && dbdpyl >= djcl[i] && dbdpylold <= djcl[i - 1])
					  {
						  //求交点(QX, PY, (i - 1) * DLTP, i * DLTP, D井产量(i - 1), D泵的排液量old, D井产量(i), D泵的排液量)
						  jslzjd.qlzxjd((i - 1) * DLTP, i * DLTP, djcl[i - 1], dbdpylold, djcl[i], dbdpyl);
						  QX=jslzjd.Y;
						  PY=jslzjd.X;
						  k=int(100 * PY);
						  dbdxryl = double(k) / 100;
						  k=int(10 * QX);
						  dbdpyl = double(k) / 10;
						  //计算气蚀流量
						  dqsll = dpzmj * (1 - dmjb) / dmjb / (pow(((GW * Fw + OG * (1 - Fw)) / dbdxryl),0.5) / 3.13 + GWR / dbdxryl / 157);
						  dllb = dbdpyl / ddlyl / dxrxl;
						  dylb = (dfcyl - dbdxryl) / (dpzslyl - dfcyl);
						  GC="";
						  gcvt(dbdpyl,95,temp);
						  GC=GC+djxbx + "\t" + temp;
						  k=int(100 * dylb * dllb * 100);
						  gcvt(double(k)/100,95,temp);
						  GC = GC+ "\t" + temp;
						  k=int(100 * Ppmax * ddlyl / 0.9 / 86.55);
						  gcvt(double(k)/100,95,temp);
						  GC = GC + "\t"

⌨️ 快捷键说明

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