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

📄 dxlyltd.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	  Gqmd = GG;
	  Gsmd = GW;
	  Gymd = OG;
	  Lygsd = 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<=1000;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;
		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 * 0.5 * Djsfx;
			T = Tqdwd + Twdtd * DLTD * 0.5 * Djsfx;
			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)
			{
              //计算油的泡点压力和溶解气油比
               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)
				RSO = (Qcql - RSW * Qcsl) / Qcyl;
			if(BO==0)
				BO = 1;
			if(BW==0)
				BW = 1;
			DL = 1000 * (Gymd * Qcyl / BO + Gsmd * Qcsl / BW);
			DL = (DL + 1.205 * Gqmd * (RSO * Qcyl / BO + RSW * Qcsl / BW)) / (Qcyl + Qcsl);
			if(Qcql > 0)
				DG = 3495.7 * Gqmd * P / (273 + T) / Z;
			UL = (UO * Qcyl + UW * Qcsl) / (Qcyl + Qcsl);
			STL = (STO * Qcyl + STW * Qcsl) / (Qcyl + Qcsl);
			VSL = (BO * Qcyl + BW * Qcsl) / (86400 * Ajsgmj);
			VSG = 0.0000000039897 * (Qcql - RSO * Qcyl - RSW * Qcsl) * (T + 273.15) * Z / P / Ajsgmj;
			if(VSG < 0)
				VSG = 0;
			NL = 0.31465 * UL / pow((DL * pow(STL,3)),0.25);
			if(NL < 0.001)
				NL = 0.001;
			if(NL > 2)
				NL = 2;
			NLV = 3.178 * VSL * pow((DL / STL),0.25);
			NGV = 3.178 * VSG * pow((DL / STL),0.25);
			ND = 98.346 * pow((DL / STL),0.5);
			if(ND <= 30)
			  L1 = 2;
			else if(ND >= 60)
			  L1 = 0.98;
			else
			  L1 = 7 - 1.47 * log(ND);
			if(ND > 60)
			  L2 = 1.08;
			else
			  L2 = 0.4517 * log(ND) - 0.77;
			
			NREL = 1000 * DL * VSL * Djsgj / UL;
			F=csjs.mczlxs(NREL, RRygxdczd);//计算摩阻系数
			X = F * VSG * pow(ND,(2.0/3.0)) / VSL;
			if(X < 0.4)
			  FF = 10.5;
			else
			  FF = pow(10,(0.6076 - 0.4512 * log(X)));
			
			if(FF < 0.2)
				FF = 0.2;
			X = log(NL) / log(10);
			if(X < log(0.02) / log(10))
			  F1 = pow(10,(-0.24912 - 0.534835 * X - 0.24896 * pow(X,2) - 0.0351 * pow(X,3)));
			else
			  F1 = pow(10,(-1.43607 - 4.53952 * X - 3.73835 * pow(X,2) - 0.94176 * pow(X,3)));
	
			if( X < log(0.015) / log(10))
			  F2 = 0.24;
			else
			  F2 = pow(10,(-3.04839 - 7.62737 * X - 6.03901 * pow(X,2) - 1.41793 * pow(X,3)));

			F3 = pow(10,(-0.49413 - 1.35485 * X + 0.47025 * pow(X,2) + 1.353069 * pow(X,3) + 0.57048 * pow(X,4) + 0.07237 * pow(X,5)));
			F4 = 50.1011 - 24.0013 * X - 18.4454 * pow(X,2);
			F5 = pow(10,(-3.30129 - 3.33218 * X - 1.42454 * pow(X,2) - 0.20363 * pow(X,3)));
			F6 = 6.50295 + 1.99151 * X - 5.01555 * pow(X, 2) - 3.09449 * pow(X,3) - 0.46365 * pow(X,4);
			F7 = pow(10,(-1.8698 - 0.51043 * X - 0.05166 * pow(X,2)));
			if(NGV >= 0 && NGV <= (L1 + L2 * NLV))
			  S = F1 + F2 * NLV + (F3 - F4 / ND) * pow((NGV / (1 + NLV)),2);
			else if((L1 + L2 * NLV) < NGV && NGV < (50 + 36 * NLV))
			  S = (1 + F5) * (pow(NGV,0.982) + 0.029 * ND + F6) / (1 + F7 * NLV);
			else
			{
			  S = 0;
			  HL = 1 / (1 + VSG / VSL);
			  GFR = 2 * F * FF * DG / DL * pow(NGV,2) / ((1 + F * pow((VSG / VSL / 50),0.5)) * ND);
			  GST = HL + (1 - HL) * DG / DL;
			  G = (GST + Dldfx * GFR) / (1 - (DL * VSL + DG * VSG) * VSG / P / 1000000);
			}
			if(S > 0)
			{
			  VS = 1.0324 * S * pow((STL / DL),0.25);
			  v = VS - VSG - VSL;
			  HL = (v + pow((pow(v,2) + 4 * VS * VSL),0.5)) / 2 / VS;
			  GFR = 2 * F * FF * NLV * (NLV + NGV) / ((1 + F * pow((VSG / VSL / 50),0.5)) * ND);
			  GST = HL + (1 - HL) * DG / DL;
			  G = GST + Dldfx * GFR;
			}
            PP = DL * DLTD * G/ 101972;
			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(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::SWPISPA(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,QL,VSG;
	  double VSL,WL,WG,UL,UO,UW,DL,DG;
	  double UM,UG,result,VM,NRE,FF,R0;
	  double DLTD,Ajsgmj,PP,BO,QG,HL,dm,Pb;
	  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;QL=0;VSG=0;
	  VSL=0;WL=0;WG=0;UL=0;UO=0;UW=0;DL=0;DG=0;
	  UM=0;UG=0;result=0;VM=0;NRE=0;FF=0;R0=0;
	  DLTD=0;Ajsgmj=0;PP=0;BO=0;QG=0;HL=0;dm=0;Pb=0;
	  Ngfds=0;Djsfx=0;Dldfx=0;i=0;J=0;

	  
	  PD = 0;
	  RSW = RSO = 0;

	  yqsxz csjs;
      
	  R0=0;//R0没有赋值
	  Pqdyl = P0;
	  Tqdwd = T0 - 273.15;
	  Twdtd = TG;
	  Qcql = RG;
	  Qcsl = RW;
	  Qcyl = RO;
	  Gqmd = GG;
	  Gsmd = GW;
	  Gymd = OG;
	  Lygsd = 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<=1000;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 * 0.5 * Djsfx;
				T = Tqdwd + Twdtd * DLTD * 0.5 * Djsfx;
				if(QLT > 0)
				{
					 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);//计算天然气的粘度
					 }
					 else
					 {
						UG=0;
					 }
					 if(Qcyl > 0)
					 {
					  //计算油的泡点压力和溶解气油比
					   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)
					  RSO = (Qcql - RSW * Qcsl) / Qcyl;
				  QL = Qcsl * BW / 86400 + Qcyl * BO / 86400;
				  QG = 0.0000000039896 * (Qcql - RSO * Qcyl - RSW * Qcsl) * Z / P * (T + 273.15);
				  VSG = QG / Ajsgmj;
				  if(VSG < 0)
					  VSG = 0;
				  VSL = QL / Ajsgmj;
				  VM = VSL + VSG;
				  WL = (0.01157 * (Qcyl * Gymd + Qcsl * Gsmd) + 0.000013946 * (RSO * Qcyl + RSW * Qcsl) * Gqmd);
				  WG = 1.205 * (Qcql - RSO * Qcyl - RSW * Qcsl) * Gqmd / 86400;
				  DL = WL / QL;
				  if(QG > 0)
					  DG = WG / QG;
				  UL = (UO * R0 * BO + UW * Qcsl * BW) / (R0 * BO + Qcsl * BW);//R0没有赋值
				  HL = 1 / (1 + 2.1 * pow((VSG / VSL),0.75) * pow((UG / UL),0.04));
				  if(HL > 1)
					  HL = 1;
				  if(HL < 0)
					  HL = 0;
				  dm = DL * HL + DG * (1 - HL);
				  UM = UL * HL + UG * (1 - HL);
				  NRE = 1000 * dm * Djsgj * VM / UM;
				  FF=csjs.mczlxs(NRE, RRygxdczd);
				  PP = DLTD / 98692 / (1 - dm * VM * VSG / (101972 * 9.8 * P));
				  PP = PP * (dm + Dldfx * FF * dm * pow(VM,2) / (19.6 * Djsgj));				
				}
				else
				  PP = DLTD / 98.692 * 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;
			  Pqdyl = Pqdyl + PD * Djsfx;
			  Tqdwd = Tqdwd + Twdtd * DLTD * Djsfx;
			  if(Pqdyl <= 0)
			  {
				  Pqdyl = 0;
				  break;
			  }
		      ptidu[J] = int(Pqdyl*1000+0.5)/1000.0;
    		  dtidu[J]=int((dtidu[J-1]+Djsfx*DLTD)*1000+0.5)/1000.0;
			}
	  }
	  Pcom = Pqdyl;
	  return(Pcom);
}

⌨️ 快捷键说明

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