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

📄 dxlyltd.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			  {
	              //计算油的泡点压力和溶解气油比
                  csjs.ypdylhrjqyb(Gymd, RPO, Gqmd, T, P);
                  Pb=csjs.Pb;
                  RSO=csjs.RSO;
                  //计算油的泡点压力和溶解气油比结束
	
                  UO=csjs.ynd( RSO, P, Pb, T, Gymd);//计算油的粘度
	
                  BO=csjs.ytjxs(RSO, Gqmd, Gymd, T, P, Pb);//计算油的体积系数
	
                  STO=csjs.ybmzl(Gymd, P, T);//计算油的表面张力
			  }
			  if(Qcsl>0)
			  {
	              RSW=csjs.rjqsb(RPW, P, T, YNaCl);//计算溶解气水比
	
                  UW=csjs.sdnd(P, T, YNaCl);//计算水的粘度
	
                  STW=csjs.sbmzl(P, T);//计算水的表面张力

	              BW=csjs.sdtjxs(P, T, YNaCl, RSW);//水的体积系数
			  }
			  if(Z<=0)
				  Z = 1;
			  if((Qcql - RSO * Qcyl - RSW * Qcsl)<0&& Qcyl > 0)
				  RSO = (Qcql - RSW * Qcsl) / Qcyl;
			  QW = Qcsl * BW / 86400;
			  QO = Qcyl * BO / 86400;
			  QL = QW + QO;
			  QG = 0.0000000039897 * (Qcql - RSO * Qcyl - RSW * Qcsl) * Z / P * (T + 273.15);
			  if(QG < 0)
				  QG = 0;
			  QT = QL + QG;
			  VSO = QO / Ajsgmj;
			  VSW = QW / Ajsgmj;
			  VSG = QG / Ajsgmj;
			  VSL = VSO + VSW;
			  VST = VSL + VSG;
			  WL = (0.01157 * (Qcyl * Gymd + Qcsl * Gsmd) + 0.000013946 * (RSO * Qcyl + RSW * Qcsl) * Gqmd);
			  WG = 0.000013946 * (Qcql - RSO * Qcyl - RSW * Qcsl) * Gqmd;
			  if(QG==0)
				  WG = 0;
			  WT = WL + WG;
			  VT = QT / Ajsgmj;
			  UL = (UO * QO + UW * QW) / QL;
			  STL = (STO * QO + STW * QW) / QL;
			  DL = WL / QL;
			  if(QG>0)
				  DG = WG / QG;
			  WGG = DG * VSG;
			  WGL = DL * VSL;
			  WGT = WGG + WGL;
			  lmd = QL / QT;
			  UM = lmd * UL + (1 - lmd) * UG;
			  NLV = 3.178 * VSL*pow((DL / STL),0.25);
			  NGV = 3.178 * VSG * pow((DL / STL),0.25);
			  XXL = 0;
			  if(Djsfx<0)
			  {
				NFR = pow(VT,2) / 9.8 / Djsgj;
				L1 = 316 * pow(lmd,0.302);
				L2 = 0.0009252 * pow(lmd,(-2.4684));
				if(lmd < 0.01 && NFR < L1)
					XXL = 1;
				if(lmd >= 0.01 && NFR < L2)
					XXL = 1;
			  }
			  if(Dldfx==1)
			  {
				C1 = -0.380113;
				C2 = 0.129875;
				C3 = -0.119788;
				C4 = 2.343227;
				C5 = 0.475686;
				C6 = 0.288657;
			  }
			  else if(XXL==1)
			  {
				C1 = -1.33082;
				C2 = 4.808139;
				C3 = 4.171584;
				C4 = 56.262268;
				C5 = 0.079951;
				C6 = 0.504887;
			  }
			  else
			  {
				C1 = -0.516644;
				C2 = 0.789805;
				C3 = 0.551627;
				C4 = 15.519214;
				C5 = 0.371771;
				C6 = 0.393952;
			  }
			  HL = exp((C1 + C2 * sin(angle) + C3 * pow(sin(angle),2) + C4 * pow(NL,2)) * pow(NGV,C5) / pow(NLV,C6));
			  if(HL > 1)
				  HL = 1;
			  if(HL < 0)
				  HL = 0;
			  dm = DL * HL + DG * (1 - HL);
			  NRE = 1000 * Djsgj * VT * (DL * lmd + DG * (1 - lmd)) / UM;
			  F=csjs.mczlxs(NRE, RRygxdczd);//计算摩阻系数
			  if(NGV >= pow(10,(1.401 - 2.694 * NL + 0.521 * pow(NLV,0.329))))
			  {
				HR = lmd / HL;
				FR = 0.35609 + 4.24901 * HR - 5.78996 * pow(HR,2) + 2.18637 * pow(HR,3);
				if(HR < 0.2 || HR > 1)
					FR = 1;
				F = F * FR;
			  }
			  PP = DLTD / 101972 * (dm + Dldfx * F * dm * pow(VT,2) / (19.6 * Djsgj));
			  PP = PP / (1 - dm * VT * VSG / (101972 * 9.8 * P));
			}
			else
			  PP = DLTD / 101.972 * Gsmd;
			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;
		  PD = (PD + PP) / 2;
		  Tqdwd = Tqdwd + Twdtd * DLTD * Djsfx;
		  Pqdyl = Pqdyl + PD * Djsfx;
		  if(Pqdyl <= 0)
			  Pqdyl = 0;
		  ptidu[J] = int(Pqdyl*1000+0.5)/1000.0;
		  dtidu[J]=int((dtidu[J-1]+Djsfx*DLTD)*1000+0.5)/1000.0;
		  if(Pqdyl==0)
			  break;
		}
	  }
	  Pcom =Pqdyl;
	  return(Pcom);
}

double dxlyltd::BeggsBrill(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,int NP,int CD,int FD)
{
      //定义变量
	  double Pqdyl,Tqdwd,Twdtd,Qcql,Qcsl,Qcyl,Gqmd,Gsmd,Gymd,Lygsd,Dhgwj;
	  double Dhgnj,RRygxdczd,YN2,YCO2,YH2S,YNaCl,Djsgj,QLT,RPL,RPW,RPO,PPP;
	  double PD,P,T,RSO,RSW,PR,PC,TR,TC,Z,QW,BW,QO,QL,QT,VSO,VSW,VSG;
	  double VSL,VST,WL,WG,WT,VT,UL,UO,UW,STL,STO,STW,DL,DG,WGG,WGL,WGT,lmd;
	  double UM,UG,NLV,NFR,L1,L2,result;
	  double DLTD,Ajsgmj,PP,BO,QG,C1,C2,HL,dm,Pb;
	  double NRENS,L3,L4,hlo,C,HLO1,HLO2,S,Y,FM;
	  int Ngfds,Djsfx,Dldfx,i,J,ddcs;
      //赋初值
	  Pqdyl=0;Tqdwd=0;Twdtd=0;Qcql=0;Qcsl=0;Qcyl=0;Gqmd=0;Gsmd=0;Gymd=0;Lygsd=0;Dhgwj=0;
	  Dhgnj=0;RRygxdczd=0;YN2=0;YCO2=0;YH2S=0;YNaCl=0;Djsgj=0;QLT=0;RPL=0;RPW=0;RPO=0;PPP=0;
	  PD=0;P=0;T=0;RSO=0;RSW=0;PR=0;PC=0;TR=0;TC=0;Z=0;QW=0;BW=0;QO=0;QL=0;QT=0;VSO=0;VSW=0;VSG=0;
	  VSL=0;VST=0;WL=0;WG=0;WT=0;VT=0;UL=0;UO=0;UW=0;STL=0;STO=0;STW=0;DL=0;DG=0;WGG=0;WGL=0;WGT=0;lmd=0;
	  UM=0;UG=0;NLV=0;NFR=0;L1=0;L2=0;result=0;
	  DLTD=0;Ajsgmj=0;PP=0;BO=0;QG=0;C1=0;C2=0;HL=0;dm=0;Pb=0;
	  NRENS=0;L3=0;L4=0;hlo=0;C=0;HLO1=0;HLO2=0;S=0;Y=0;FM=0;
	  Ngfds=0;Djsfx=0;Dldfx=0;i=0;J=0;ddcs=0;


	  yqsxz csjs;

	  Pqdyl = P0;
//	  ptidu[0]=P0;
	  Tqdwd = T0 - 273.15;
	  Twdtd = TG;
	  Qcql = RG;
	  Qcsl = RW;
	  Qcyl = RO;
	  Gqmd = GG;
	  Gsmd = GW;
	  Gymd = OG;
	  Lygsd = L;
//	  dtidu[0]=L;
	  Dhgwj = DOL;
	  Dhgnj = DIL;
	  RRygxdczd = RR;
	  YN2 = N2;
	  YCO2 = CO2;
	  YH2S = H2S;
	  YNaCl = NaCl;
	  Ngfds = NP;//流动管分段数
	  Djsfx = CD;//从上往下为1,从下往上为-1
	  Dldfx = FD;//从上往下为-1,从下往上为1
  
	  if(Ngfds<=0)
	  {
		result=fmod(Lygsd,50);
		if(result==0)
		{ 
			Ngfds =int(Lygsd/50); 
		}
		else
		{
			Ngfds =int(Lygsd/50 + 1-result);
		}
	  }
	  else
	  {
		for(i=1;i<=999;i++)
		{
		  ptidu[i]=0;
		  dtidu[i]=0;
		}
	  }
	  DLTD = Lygsd / Ngfds;
	  Djsgj = Dhgwj - Dhgnj;
	  Ajsgmj = 3.14159 / 4 * (pow(Dhgwj,2) -pow(Dhgnj,2));
	  if(RRygxdczd<=0)
		  RRygxdczd = 0.0008;
	 //计算天然气的临界参数
      csjs.trqnjcs(Gqmd, YH2S, YCO2,1);//注意最后一个参数要修改
	  PC=csjs.Pc;
      TC=csjs.Tc;
	  //计算天然气的临界参数结束	
  
	  if(Qcsl+Qcyl<=0.5)
	  {
		  Qcsl = 0.25;
		  Qcyl = 0.25;
	  }
  
	  if(DLTD>0)
	  {
		QLT = Qcyl + Qcsl;
		if(QLT>0)
			RPL = Qcql / QLT;
		RPW = 0;
		if(Qcsl>0)
			RPW = Qcql / Qcsl;
		RPO = 0;
		if(Qcyl>0)
			RPO = Qcql / Qcyl;
		for(J=1;J<=Ngfds;J++)
		{
		  PP = 0;
		  PPP = PD;
		  for(ddcs=1;ddcs<=30;ddcs++)
		  {
				PD = PP;
				P = Pqdyl + PD * Djsfx / 2;
				T = Tqdwd + Twdtd * DLTD * Djsfx / 2;
				if((RSO + RSW)<= RPL&&Qcql > 0)
				{
				  PR = P / PC;
				  TR = (T + 273.15) / TC;
				  
                  Z=csjs.trqpcxs(PR, TR);//计算天然气偏差系数
	          
                  UG=csjs.trqnd( PR, TR, YCO2, YH2S, YN2, Gqmd, T);//计算天然气的粘度
				}
				if(Qcyl>0)
				{
	              //计算油的泡点压力和溶解气油比//Gymd无值,导致log计算时出错
                  csjs.ypdylhrjqyb(Gymd, RPO, Gqmd, T, P);
                  Pb=csjs.Pb;
                  RSO=csjs.RSO;
                  //计算油的泡点压力和溶解气油比结束
	
                  UO=csjs.ynd( RSO, P, Pb, T, Gymd);//计算油的粘度
	
                  BO=csjs.ytjxs(RSO, Gqmd, Gymd, T, P, Pb);//计算油的体积系数
	
                  STO=csjs.ybmzl(Gymd, P, T);//计算油的表面张力				  
				}
				if(Qcsl>0)
				{
	              RSW=csjs.rjqsb(RPW, P, T, YNaCl);//计算溶解气水比
	
                  UW=csjs.sdnd(P, T, YNaCl);//计算水的粘度
	
                  STW=csjs.sbmzl(P, T);//计算水的表面张力

	              BW=csjs.sdtjxs(P, T, YNaCl, RSW);//水的体积系数
				}
				if(Z<=0)
					Z = 1;
				if((Qcql-RSO*Qcyl-RSW*Qcsl)<0 && Qcyl!=0)
					RSO=(Qcql-RSW*Qcsl)/Qcyl;
				QW = Qcsl * BW / 86400;
				QO = Qcyl * BO / 86400;
				QL = QW + QO;
				QG = 0.0000000039897 * (Qcql - RSO * Qcyl - RSW * Qcsl) * Z / P * (T + 273.15);
				if(QG < 0)
					QG = 0;
				QT = QL + QG;
				VSO = QO / Ajsgmj;
				VSW = QW / Ajsgmj;
				VSG = QG / Ajsgmj;
				VSL = VSO + VSW;
				VST = VSL + VSG;
				WL = (0.01157 * (Qcyl * Gymd + Qcsl * Gsmd) + 0.000013946 * (RSO * Qcyl + RSW * Qcsl) * Gqmd);
				WG = 0.000013946 * (Qcql - RSO * Qcyl - RSW * Qcsl) * Gqmd;
				if(QG==0)
					WG = 0;
				WT = WL + WG;
				VT = QT / Ajsgmj;
				UL = (UO * QO + UW * QW) / QL;
				STL = (STO * QO + STW * QW) / QL;
				DL = WL / QL;
				if(QG > 0)
					DG = WG / QG;
				else
					DG = 0;
				WGG = DG * VSG;
				WGL = DL * VSL;
				WGT = WGG + WGL;
				lmd = QL / QT;
				UM = lmd * UL + (1 - lmd) * UG;
				NRENS = 1000 * WGT * Djsgj / UM;
				NLV = 3.178 * VSL * pow((DL / STL),0.25);
				NFR = pow(VT,2) / (9.8 * Djsgj);
				L1 = 316 * pow(lmd,0.302);
				L2 = 0.0009252 * pow(lmd,(-2.4684));
				L3 = 0.1 * pow(lmd,(-1.4516));
				L4 = 0.5 * pow(lmd,(-6.738));
				if((lmd < 0.01 && NFR < L1) ||(lmd >= 0.01 && NFR < L2))
				{
				  hlo = 0.98 * pow(lmd,(0.4846 * 1.4)) /pow(NFR,0.0868);
				  C = (1 - lmd) * log(0.011 / pow(lmd,3.768) * pow(NLV,3.539) / pow(NFR,1.614));
				}
				else if ((lmd < 0.04 && NFR >= L1) || (lmd >= 0.04 && NFR > L4))
				{
				  hlo = 1.065 * pow(lmd,(0.5824 * 1.4)) / pow(NFR,0.0609);
				  C = 0;
				}
				else if(lmd >= 0.01 && (NFR > L2 && NFR <= L3))
				{
				  HLO1 = 0.98 * pow(lmd,(0.4846 * 1.4)) /pow(NFR,0.0868);
				  C1 = (1 - lmd) * log(0.011 / pow(lmd,3.768) * pow(NLV,3.539) / pow(NFR,1.614));
				  HLO2 = 0.845 * pow(lmd,(0.5351 * 1.4)) /pow(NFR,0.0173);
				  C2 = (1 - lmd) * log(2.96 * pow(lmd,0.305) / pow(NLV,0.4473) * pow(NFR,0.0978));
				  hlo = (HLO1 * (L3 - NFR) + HLO2 * (NFR - L2)) / (L3 - L2);
				  C = (C1 * (L3 - NFR) + C2 * (NFR - L2)) / (L3 - L2);
				}
				else
				{
				  hlo = 0.845 * pow(lmd,(0.5351 * 1.4)) / pow(NFR,0.0173);
				  C = (1 - lmd) * log(2.96 * pow(lmd,0.305) / pow(NLV,0.4473) * pow(NFR,0.0978));
				}
				HL = hlo * (1 + 0.3 * C);
				if(HL >= 1) 
					HL = 1;
				if(HL<=0)
					HL = 0;
				dm = DL * HL + DG * (1 - HL);
				if(lmd / pow(HL,2)>1 && lmd / pow(HL,2) < 1.2)
				  S = log(2.2 * lmd / pow(HL,2) - 1.2);
				else
				{
				  Y = log(lmd / pow(HL,2));
				  S = Y / (-0.0523 + 3.182 * Y - 0.8725 * pow(Y,2) + 0.01853 * pow(Y,4));
				}
				FM = (0.0056 + 0.5 / pow(NRENS,0.32)) * exp(S);
				PP = DLTD / 101972 * (dm + Dldfx * FM * WGT * VT / (19.6 * Djsgj));
				PP = PP / (1 - dm * VT * VSG / (101972 * 9.8 * P));
				if(QLT < 1 )
					PP = DLTD / 101972 * DL;
			    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;
		  PD = (PD + PP) / 2;
		  Pqdyl = Pqdyl + PD * Djsfx;
		  Tqdwd = Tqdwd + Twdtd * DLTD * Djsfx;
		  if(Pqdyl <= 0)
			  Pqdyl = 0;
		  ptidu[J] = int(1000 * Pqdyl + 0.5)/1000.0;
		  dtidu[J]=int((dtidu[J-1]+Djsfx*DLTD)*1000+0.5)/1000.0;
		  if(Pqdyl==0)
			  break;		 
		}
	  }
	  Pcom = Pqdyl;
	  return (Pcom);
}

double dxlyltd::DunsRos(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,int NP,int CD,int FD)
{
      //定义变量
	  double Pqdyl,Tqdwd,Twdtd,Qcql,Qcsl,Qcyl,Gqmd,Gsmd,Gymd,Lygsd,Dhgwj;
	  double Dhgnj,RRygxdczd,YN2,YCO2,YH2S,YNaCl,Djsgj,QLT,RPL,RPW,RPO,PPP;
	  double PD,ddcs,P,T,RSO,RSW,PR,PC,TR,TC,Z,BW,VSG;
	  double VSL,UL,UO,UW,STL,STO,STW,DL,DG;
	  double UG,NLV,L1,L2,result;
	  double DLTD,Ajsgmj,PP,BO,HL,Pb,S;
	  double NL,NGV,ND,NREL,F,X,FF,F1,F2,F3,F4,F5,F6,F7,GFR,GST,G,VS,v;
	  int Ngfds,Djsfx,Dldfx,i,J;

	  Pqdyl=0;Tqdwd=0;Twdtd=0;Qcql=0;Qcsl=0;Qcyl=0;Gqmd=0;Gsmd=0;Gymd=0;Lygsd=0;Dhgwj=0;
	  Dhgnj=0;RRygxdczd=0;YN2=0;YCO2=0;YH2S=0;YNaCl=0;Djsgj=0;QLT=0;RPL=0;RPW=0;RPO=0;PPP=0;
	  PD=0;ddcs=0;P=0;T=0;RSO=0;RSW=0;PR=0;PC=0;TR=0;TC=0;Z=0;BW=0;VSG=0;
	  VSL=0;UL=0;UO=0;UW=0;STL=0;STO=0;STW=0;DL=0;DG=0;
	  UG=0;NLV=0;L1=0;L2=0;result=0;
	  DLTD=0;Ajsgmj=0;PP=0;BO=0;HL=0;Pb=0;S=0;
	  NL=0;NGV=0;ND=0;NREL=0;F=0;X=0;FF=0;F1=0;F2=0;F3=0;F4=0;F5=0;F6=0;F7=0;GFR=0;GST=0;G=0;VS=0;v=0;
	  Ngfds=0;Djsfx=0;Dldfx=0;i=0;J=0;

	  
	  PD = 0;
	  RSO = RSW = 0;

	  yqsxz csjs;

	  Pqdyl = P0;
	  Tqdwd = T0 - 273.15;
	  Twdtd = TG;
	  Qcql = RG;
	  Qcsl = RW;
	  Qcyl = RO;

⌨️ 快捷键说明

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