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

📄 dxlcglyltd.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}
	  }
      try
	  {
		f4.WriteString("-10 -10\n");
	  }
	  catch (CFileException exception4)
	  {
		AfxMessageBox("Error reading file");
		return;
	  }
      for(i=0;i<=4 * NFPS - 1;i++)
	  {
	  	if( sdtd[i] == 0 && i > 1)
		{
			break;
		}
        GTY[i] = GTY[i] +"\n";
        try
		{
			f3.WriteString(GTY[i]);
		}
	    catch (CFileException exception4)
		{
			AfxMessageBox("Error reading file");
			return;
		}
	  }
      try
	  {
//		f3.WriteString("8\n");
	  }
	  catch (CFileException exception4)
	  {
		AfxMessageBox("Error reading file");
		return;
	  }
	g_iProgress = 100;	// 计算进度
	  f3.Close();
	  f4.Close();
}

double dxlcglyltd::Orkiszewski(double P0,double T0,double TG,double RG,double RW,double RO,double GG,double GW,double OG,double L,double DOL,double DIL,double RR,double H2S,double CO2,double N2,double NaCl,double NP,double CD,double FD)
{               
	  //P起点             [[[[      pqidian
	  //T起点             [[[[      tqidian
	  //T梯度             [[[[      ttidu
	  //Q气               [[[[      qqi
	  //Q水               [[[[      qshui
	  //Q油               [[[[      qyou
	  //G气               [[[[      gqi
	  //G水               [[[[      gshui
	  //G油               [[[[      gyou
	  //L管               [[[[      lguan
	  //D环管外           [[[[      dhgw
	  //D环管内           [[[[      dhgn
	  //RR管              [[[[      rrguan
	  //N管段             [[[[      nguanduan
	  //D计算             [[[[      djisuan
	  //D流动             [[[[      dliudong 
	  //P梯度[1000]       [[[[      ptidu[1000]
	  //D梯度[1000]       [[[[      dtidu[1000]
	  //D管               [[[[      dguan
	  //A管               [[[[      aguan
	  //迭代次数          [[[[      ddcs
	  double pqidian,tqidian,ttidu,qqi,gqi,qshui,gshui,qyou,lguan;		  
	  double dhgw,dhgn,rrguan,nguanduan,djisuan,dliudong;
	  double gyou,dguan,aguan,ddcs,YN2,YCO2,YH2S,YNaCl;
	  double DLTD,PC,TC,QLT,RPL,RPW,RPO,PP,PPP,PD,P,T,RSO,RSW,PR,TR;
	  double Z,UG,Pb,UO,STO,BO,UW,STW,BW,QW,QO,QL,QG,QT,WL,WG,WT,VT;
	  double UL,STL,DL,DG,LB,VD,LS,LM,X,Y,X1,Y1,Pcom;
	  int TEMP,i,J;

	  pqidian=0;tqidian=0;ttidu=0;qqi=0;gqi=0;qshui=0;gshui=0;qyou=0;lguan=0;		  
	  dhgw=0;dhgn=0;rrguan=0;nguanduan=0;djisuan=0;dliudong=0;
	  gyou=0;dguan=0;aguan=0;ddcs=0;YN2=0;YCO2=0;YH2S=0;YNaCl=0;
	  DLTD=0;PC=0;TC=0;QLT=0;RPL=0;RPW=0;RPO=0;PP=0;PPP=0;PD=0;P=0;T=0;RSO=0;RSW=0;PR=0;TR=0;
	  Z=0;UG=0;Pb=0;UO=0;STO=0;BO=0;UW=0;STW=0;BW=0;QW=0;QO=0;QL=0;QG=0;QT=0;WL=0;WG=0;WT=0;VT=0;
	  UL=0;STL=0;DL=0;DG=0;LB=0;VD=0;LS=0;LM=0;X=0;Y=0;X1=0;Y1=0;Pcom=0;
	  TEMP=0;i=0;J=0;

      yqsxz csjs;
	  pqidian = P0; tqidian = T0 - 273.15; ttidu = TG;
	  qqi = RG; qshui = RW; qyou = RO;
	  gqi = GG; gshui = GW; gyou = OG;
	  lguan = L; dhgw = DOL; dhgn = DIL; rrguan = RR;
	  YN2 = N2; YCO2 = CO2; YH2S = H2S; YNaCl = NaCl;
	  nguanduan = NP; //流动管分段数
	  djisuan = CD; //从上往下为1,从下往上为-1。
	  dliudong = FD; //从上往下为-1,从下往上为1。
  
	  if( nguanduan <= 0)
	  {
		ldiv_t lguanshang;
		lguanshang=ldiv(long(lguan),500);
		if( lguanshang.quot == lguan / 50)
		{
			nguanduan = lguanshang.quot;
		}
		else
		{
			nguanduan = lguanshang.quot + 1;
		}
	  }
	  else
	  {
          for(i=1;i<=100;i++)
		  {
			  ptidu[i] = 0;
			  dtidu[i] = 0;
		  }
	  }
	  DLTD = lguan / nguanduan;
	  dguan = dhgw - dhgn;
	  aguan = 3.14159 / 4 * (pow(dhgw,2) - pow(dhgn,2));
	  if( rrguan <= 0)
	  {
		  rrguan = 0.0008;
	  }
	  csjs.trqnjcs(gqi, YH2S, YCO2, 1);//天然气的临界参数
	  PC=csjs.Pc;
      TC=csjs.Tc;
	  if( qshui + qyou <= 0.5)
	  {
		  qshui = 0.25;
		  qyou = 0.25;
	  }
	  if( DLTD > 0)
	  {
		QLT = qyou + qshui;
		RPL = qqi / QLT;
		RPW = 0;
		if( qshui > 0)
		{
			RPW = qqi / qshui;
		}
		RPO = 0;
		if( qyou > 0)
		{
			RPO = qqi / qyou;
		}
		for(J=1;J<=nguanduan;J++)
		{
		  PP = 0;
		  PPP = PD;
		  for(ddcs=1;ddcs<=30;ddcs++)
		  {
		  	PD = 0.618 * PD + 0.382 * PP;
			P = pqidian + PD * 0.5 * djisuan;
			T = tqidian + ttidu * DLTD * 0.5 * djisuan;
			if( RSO + RSW <= RPL && qqi > 0)
			{
			  PR = P / PC;
			  TR = (T + 273.15) / TC;
			  Z=csjs.trqpcxs(PR, TR);//天然气偏差因子
			  UG=csjs.trqnd(PR, TR, YCO2, YH2S, YN2, gqi, T);//天然气的粘度
			}
			if( qyou > 0)
			{
			  if( qqi > 0)
			  {
				csjs.ypdylhrjqyb(gyou, RPO, gqi, T, P);//油的泡点压力和溶解气油比
			    Pb=csjs.Pb;
	            RSO=csjs.RSO;
			  }
			  else
			  {
				RSO = 0;
			  }
			  UO=csjs.ynd(RSO, P, Pb, T, gyou);//计算油的粘度
			  STO=csjs.ybmzl(gyou, P, T);//油的表面张力
			  BO=csjs.ytjxs(RSO, gqi, gyou, T, P, Pb);//油的体积系数
			}
			if( qshui > 0)
			{
			  if( qqi > 0)
			  {
				RSW=csjs.rjqsb(RPW, P, T, YNaCl);//溶解气水比
			  }
			  else
			  {
				RSW = 0;
			  }
			  UW=csjs.sdnd(P, T, YNaCl);//水的粘度
			  STW=csjs.sbmzl(P, T);//水的表面张力
			  BW=csjs.sdtjxs(P, T, YNaCl, RSW);//水的体积系数
			}
			if( Z <= 0)
			{
				Z = 1;
			}
			if( qqi - RSO * qyou - RSW * qshui < 0)
			{
				RSO = (qqi - RSW * qshui) / qyou;
			}
			QW = qshui * BW / 86400;
			QO = qyou * BO / 86400;
			QL = QW + QO;
			QG = 0.0000000039897 * (qqi - RSO * qyou - RSW * qshui) * Z / P * (T + 273.15);
			if( QG < 0)
			{
				QG = 0;
			}
			QT = QL + QG;
			WL = (0.01157 * (qyou * gyou + qshui * gshui) + 0.000013947 * (RSO * qyou + RSW * qshui) * gqi);
			WG = 0.000013947 * (qqi - RSO * qyou - RSW * qshui) * gqi;
			if( QG == 0)
			{
				WG = 0;
			}
			WT = WL + WG;
			VT = QT / aguan;
			UL = (UO * QO + UW * QW) / QL;
			STL = (STO * QO + STW * QW) / QL;
			DL = WL / QL;
			if( QG > 0)
			{
				DG = WG / QG;
			}
			else
			{
				DG = 0;
			}
			LB = 1.071 - 0.7277 * pow(VT,2) / dguan;
			if( LB < 0.13)
			{
				LB = 0.13;
			}
			VD = QG * pow((DL / 9.8 / STL),0.25) / aguan;
			if( QG > 0)
			{
				LS = 50 + 36 * VD * QL / QG;
			}
			if( QG > 0)
			{
				LM = 75 + 84 * pow((VD * QL / QG),0.75);
			}
			if( QG / QT < LB)
			{
			  Orkiszewskipl(aguan, dguan, DG, DL, QG, QL, QT, rrguan, UL);
			}
			else if( VD < LS)
			{
			  Orkiszewskidsl(aguan, dguan, DL, QL, QT, VT, WT, rrguan, UL, qyou, qshui);
			}
			else if( VD < LM)
			{
			  Orkiszewskidsl(aguan, dguan, DL, QL, QT, VT, WT, rrguan, UL, qyou, qshui);
			  X=DA;
			  Y=FL;
			  Orkiszewskiwl(aguan, dguan, DG, DL, QG, QL, UG, UL, STL);
			  X1=DA;
			  Y1=FL;
			  DA = (X1 * (LM - VD) + X * (VD - LS)) / (LM - LS);
			  FL = (Y1 * (LM - VD) + Y * (VD - LS)) / (LM - LS);
			}
			else
			{
			  Orkiszewskiwl(aguan, dguan, DG, DL, QG, QL, UG, UL, STL);
			}
			PP = 0.000009807 * (DA + dliudong * FL) * DLTD / (1 - WT * QG * 0.000001 / pow(aguan,2) / P);
			if( fabs(PP - PD) < 0.0001)
			{
				break;
			}
		  }
		  if( (PP < 0 || PP > DLTD / 100) && PPP > 0 && ddcs > 30)
		  {
			  PP = PPP;
		  }
		  if( (PD < 0 || PD > DLTD / 100) && PPP > 0 && ddcs > 30)
		  {
			  PD = PPP;
		  }
		  if( PP < PD)
		  {
			  PD = PP;
		  }
		  pqidian = pqidian + PD * djisuan;
		  tqidian = tqidian + ttidu * DLTD * djisuan;
		  if( pqidian <= 0)
		  {
			  pqidian = 0;
		  }
          TEMP=int(1000 * pqidian + 0.5);
		  ptidu[J] =  TEMP/ 1000.0;
		  dtidu[J] = dtidu[J - 1] + djisuan * DLTD;
		  if( pqidian == 0)
		  {
			  break;
		  }
		}
	  }
	  Pcom = pqidian;
	  return Pcom;
}

void dxlcglyltd::Orkiszewskipl(double aguan,double dguan,double DG,double DL,double QG,double QL,double QT,double rrguan,double UL)//Orkiszewski泡流
{
	  double Y,RE,FF;
	  yqsxz csjs;
	  Y = (1 + QT / 0.244 / aguan - pow((pow((1 + QT / 0.244 / aguan),2) - 4 * QG / 0.244 / aguan),0.5)) / 2;
	  if( Y > 1)
	  {
		  Y = 1;
	  }
	  if( Y < 0)
	  {
		  Y = 0;
	  }
	  DA = (1 - Y) * DL + Y * DG;
	  RE = 1000 * DL * dguan * QL / aguan / (1 - Y) / UL;
	  FF=csjs.mczlxs(RE, rrguan);//摩阻系数
	  FL = FF * DL * pow((QL / aguan / (1 - Y)),2) / 19.6 / dguan;
}

void dxlcglyltd::Orkiszewskidsl(double aguan,double dguan,double DL,double QL,double QT,double VT,double WT,double rrguan,double UL,double qyou,double qshui)//Orkiszewski段塞流
{
	  double RE,FF,vbb,Y2;
	  Y2=0;
      yqsxz csjs;
	  RE = 1000 * DL * dguan * VT / UL;
	  FF=csjs.mczlxs(RE, rrguan);//摩阻系数
	  for(int i=1;i<=50;i++)
	  {
	  	if( 1000 * DL * dguan * vbb / UL < 3000)
		{
		  vbb = (1.709 + 0.00002736 * RE) * pow(dguan,0.5);
		}
		else if( 1000 * DL * dguan * vbb / UL > 8000)
		{
		  vbb = (1.0957 + 0.00002736 * RE) * pow(dguan,0.5);
		}
		else
		{
		  vbb = (0.7858 + 0.00002736 * RE) * pow(dguan,0.5);
		  vbb = 0.5 * (vbb + pow((pow(vbb,2) + 0.1202 * UL / DL / pow(dguan,0.5)),0.5));
		}
		if( fabs(vbb - Y2) / vbb < 0.001)
		{
			break;
		}
		vbb = 0.5 * (vbb + Y2);
		Y2 = vbb;
	  }
	  if( VT > 3.048 && qshui > qyou)
	  {
		Y2 = 0.00756 * log(UL) / pow(dguan,0.799) - 0.3857 * log(dguan) - 0.0704 * log(VT) - 1.2508;
	  }
	  else if( VT < 3.048 && qshui > qyou)
	  {
		Y2 = 0.001094 * log(UL) / pow(dguan,1.38) - 0.1859 * log(dguan) + 0.1008 * log(VT) - 0.782;
	  }
	  else if( VT <= 3.048 && qshui < qyou)
	  {
		Y2 = 0.0104 * log(UL + 1) / pow(dguan,1.415) + 0.0491 * log(dguan) + 0.0725 * log(VT) - 1.1395;
	  }
	  else
	  {
		Y2 = (log(VT) - 1.188) * (0.1188 * log(dguan) + 0.000297 * log(UL + 1) / pow(dguan,1.571) + 0.314);
		Y2 = 0.00233 * log(UL + 1) / pow(dguan,1.371) + 0.247 * log(dguan) + 0.455 - Y2;
	  }
	  if( Y2 <= -0.2133 * VT)
	  {
		  Y2 = -0.2133 * VT;
	  }
	  int shejishi=10000;
	  do
	  {
		FL = FF * DL * pow(VT,2) / 19.6 / dguan * ((QL + vbb * aguan) / (QT + vbb * aguan) + Y2);
		DA = (WT + DL * vbb * aguan) / (QT + vbb * aguan) + Y2 * DL;
		if( VT < 3.048)
		{
		  break;
		}
		else
		{
		  if( Y2 >= -vbb * aguan / (QT + vbb * aguan) * (1 - DA / DL) - 0.0001)
		  {
			  break;
		  }
		  Y2 = -vbb * aguan / (QT + vbb * aguan) * (1 - DA / DL);
		}
	  }
	  while(shejishi==10000);
}

void dxlcglyltd::Orkiszewskiwl(double aguan,double dguan,double DG,double DL,double QG,double QL,double UG,double UL,double STL)//Orkiszewski雾流
{
      double RE,A,X,FF;
	  yqsxz csjs;
	  DA = DL * (1 - 1 / (1 + QL / QG)) + DG / (1 + QL / QG);
	  RE = 1000 * DG * dguan * QG / aguan / UG;
	  if( 0.000004865 * pow((QG / aguan * UL / STL),2) * DG / DL < 0.005)
	  {
		A = 0.01543 * STL / (DG * pow((QG / aguan),2) * dguan);
	  }
	  else
	  {
		X = pow((0.000004865 * pow((QG / aguan * UL / STL),2) * DG / DL),0.302);
		A = 0.08078 * STL / DG / pow((QG / aguan),2) / dguan * X;
	  }
	  if( A < 0.001)
	  {
		  A = 0.001;
	  }   
	  if( A > 0.5)
	  {
		  A = 0.5;
	  }
	  FF=csjs.mczlxs(RE, A);//摩阻系数
	  FL = FF * DG * pow((QG / aguan),2) / 19.6 / dguan;
}

⌨️ 快捷键说明

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