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

📄 dxlyltd.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// dxlyltd.cpp : implementation file
//

#include "stdafx.h"
#include "Cvenus.h"
#include "dxlyltd.h"

#include "math.h"
#include "yqsxz.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// dxlyltd
extern double ptidu[1000],dtidu[1000];
dxlyltd::dxlyltd()
{
}

dxlyltd::~dxlyltd()
{
}



/////////////////////////////////////////////////////////////////////////////
// dxlyltd message handlers
double dxlyltd::HagedornBrown(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 Pqd,Tqd,Ttd,Qcq,Qcs,Qcy,Gqmd,Gsmd,Gymd,Lygsd,Dhgwj,Dhgnj,RRygczd;
	  double YN2,YCO2,YH2S,YNaCl,result;
	  double DLTD,Djszj,Ajsgmj,QLT,RPL,RPW,RPO,PP,PPP,PD,P,T,RSO;
	  double RSW,PR,PC,TR,TC,Z,VSL,BO,VSG,VM1,VM2,VM,RL,DL,DG,WT;
	  double UL,UO,UW,STL,STO,STW,NL,CNL,NLV,NGV,A,B,ND,X,Y,X1,Y1,HL;
	  double dm,DM1,NRE,UG,QW,QO,QL,QG,QT,BW,FL,FF,Pcom,Pb;
	  int Ngdds,Djsfx,Dldfx,i,J,ddcs;

	  Pqd=0;Tqd=0;Ttd=0;Qcq=0;Qcs=0;Qcy=0;Gqmd=0;Gsmd=0;Gymd=0;Lygsd=0;Dhgwj=0;Dhgnj=0;RRygczd=0;
	  YN2=0;YCO2=0;YH2S=0;YNaCl=0;result=0;
	  DLTD=0;Djszj=0;Ajsgmj=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;PC=0;TR=0;TC=0;Z=0;VSL=0;BO=0;VSG=0;VM1=0;VM2=0;VM=0;RL=0;DL=0;DG=0;WT=0;
	  UL=0;UO=0;UW=0;STL=0;STO=0;STW=0;NL=0;CNL=0;NLV=0;NGV=0;A=0;B=0;ND=0;X=0;Y=0;X1=0;Y1=0;HL=0;
	  dm=0;DM1=0;NRE=0;UG=0;QW=0;QO=0;QL=0;QG=0;QT=0;BW=0;FL=0;FF=0;Pcom=0;Pb=0;
	  Ngdds=0;Djsfx=0;Dldfx=0;i=0;J=0;ddcs=0;

	  
	  RSW = RSO = 0;
	  yqsxz csjs;

	  Pqd=P0;//Pqd为压力起点
	  ptidu[0]=P0;
	  Tqd=T0-273.15;//Tqd为温度起点
	  Ttd=TG;//Ttd为温度梯度
	  Qcq=RG;//Qcq为产气量
	  Qcs=RW;//Qcs为产水量
	  Qcy=RO;//Qcy为产油量
	  Gqmd=GG;//Gqmd为气密度
	  Gsmd=GW;//Gsmd为水密度
	  Gymd=OG;//Gymd为油密度
	  Lygsd=L;//Lygsd为油管深度
	  dtidu[0]=L;
	  Dhgwj=DOL;//Dhgwj为环管外直径
	  Dhgnj=DIL;//Dhgnj为环管内直径
	  RRygczd=RR;//RRygczd油管相对粗糙度
	  YN2=N2;//氮气含量
	  YCO2=CO2;//二氧化碳含量
	  YH2S=H2S;//硫化氢含量
	  YNaCl=NaCl;//NaCl含量
	  Ngdds=NP;//流动管分段数
	  Djsfx=CD;//计算方向从上往下为1,从下往上为-1
	  Dldfx=FD;//流动方向从上往下为-1,从下往上为1
  
	  if(Ngdds<=0)
	  {
		result=fmod(Lygsd,50);
		if(result==0)
			Ngdds=int(Lygsd/50);
		else
			 Ngdds=int(Lygsd/50+1-result);
	  }
	  else
	  {
		for(i=1;i<=1000;i++)
		{
		  ptidu[i]=0;
		  dtidu[i]=0;
		}
	  }  
	  DLTD=Lygsd/Ngdds;
	  Djszj=Dhgwj-Dhgnj;
	  Ajsgmj=3.14159/4*(pow(Dhgwj,2)-pow(Dhgnj,2));
	  if(RRygczd <= 0)
		  RRygczd=0.0008;
	 //计算天然气的临界参数
      csjs.trqnjcs(Gqmd, YH2S, YCO2,1);
	  PC=csjs.Pc;
      TC=csjs.Tc;
	  //计算天然气的临界参数结束
	  if((Qcs+Qcy)<= 0.5)
	  {
		  Qcs=0.25;
		  Qcy=0.25;
	  }
  
	  if(DLTD>0)
	  {
		QLT=Qcy+Qcs;
		RPL=Qcq/(QLT+0.000001);
		RPW=0;
		if(Qcs>0)
			RPW=Qcq/Qcs;
		RPO=0;
		if(Qcy>0)
			RPO=Qcq/Qcy;
		for(J=1;J<=Ngdds;J++)
		{
		  PP=0;
		  PPP=PD=0;
		  for(ddcs=1;ddcs<=30;ddcs++)
		  {
			PD=PP;
			P=Pqd+PD*0.5*Djsfx;
			T=Tqd+Ttd*DLTD*0.5*Djsfx;
			for(i=1;i<=3;i++)
			{
			  if(i==1)
			  {
				  P=Pqd;
				  T=Tqd;
			  }
			  if(i==2)
			  {
				  P=Pqd+PD;
				  T=Tqd+Ttd*DLTD*Djsfx;
			  }
			  if(i==3)
			  {
				  P=Pqd+PD*0.5;
				  T=Tqd+Ttd*DLTD*Djsfx*0.5;
			  }
			  if((RSO+RSW)<=RPL&&Qcq>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(Qcy>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(Qcs>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((Qcq-RSO*Qcy-RSW*Qcs)< 0)
				  RSO=(Qcq-RSW*Qcs)/Qcy;
			  VSL=(BO*Qcy+BW*Qcs)/(86400*Ajsgmj);
			  VSG=0.0000000039897*(Qcq-RSO*Qcy-RSW*Qcs)*(T+273.15)*Z/P/Ajsgmj;
			  if(i==1)
				  VM1=pow((VSL+VSG),2);
			  if(i==2)
				  VM2=pow((VSL+VSG),2);
			  if(i==3)
				  VM=VSL+VSG;
			}
			if(BO==0)
				BO=1;
			if(BW==0)
				BW=1;
			if(Z==0)
				Z=1;
			RL=Qcy+Qcs;
			DL=(1000*(Gymd*Qcy/BO+Gsmd*Qcs/BW)+1.205*Gqmd*(RSO*Qcy/BO+RSW*Qcs/BW))/RL;
			DG=3495.7*Gqmd*P/(273+T)/Z;
			WT=(0.011574*(Qcy*Gymd+Qcs*Gsmd)+0.000013947*Gqmd*Qcq);
			UL=(UO*Qcy+UW*Qcs)/RL;
			STL=(STO*Qcy+STW*Qcs)/RL;
			NL=log(0.31465*UL*pow((DL*pow(STL,3)),(-0.25)))/log(10);
			CNL=pow(10,(-1.96188-0.45617*NL-1.05117*pow(NL,2)-0.44411*pow(NL,3)-0.05711*pow(NL,4)));
			if(CNL<0.002)
				CNL=0.002;
			if(CNL>0.01)
				CNL=0.01;
			NLV=3.178*VSL*pow((DL/STL),0.25);
			NGV=3.178*VSG*pow((DL/STL),0.25);
			A=1.071-0.7277*pow(VM,2)/Djszj;
			if(A<0.13)
				A=0.13;
			B=VSG/VM;
			if(B>=A)
			{
			  ND=98.346*Djszj*pow((DL/STL),0.25);
			  X=log(NLV*pow((P/0.101),0.1)*CNL/pow(NGV,0.575)/ND)/log(10);
			  if(X<-3.77)
				Y=2.16691+0.66633*X+0.05204*pow(X,2);
			  else if(X>-2.7)
				Y=-0.0556-1.00559*X-0.23875*pow(X,2);
			  else
				Y=2.54814+0.67285*X+0.02921*pow(X,2);
			  if(Y>1)
				  Y=1;
			  if(Y<0.05)
				  Y=0.05;
			  X1=X;
			  X=NGV*pow(NLV,0.38)/pow(ND,2.14)*100;
			  if(X<4)
				Y1=1.36271-0.65995*X+0.35083*pow(X,2)-0.04263*pow(X,3);
			  else
				Y1=1.09974+0.16173*X-0.00911*X*X;
			  if(Y1<1)
				  Y1=1;
			  if(Y1>1.8)
				  Y1=1.8;
			  if(Y1<1)
				  Y1=1;
			  if(Y<0)
				  Y=0.01;
			  HL=Y*Y1;
			  dm=DL*HL+DG*(1-HL);
			  DM1=WT/(VSG+VSL)/Ajsgmj;
			  if(dm<DM1)
				  dm=DM1;
			  NRE=1276.7*WT/Djszj/pow(UL,HL)/pow(UG,(1-HL));
	
              FF=csjs.mczlxs(NRE, RRygczd);//计算摩阻系数
			}
			else
			{
			  QW=Qcs*BW/86400;
			  QO=Qcy*BO/86400;
			  QL=QW+QO;
			  QG=0.0000000039897*(Qcq-RSO*Qcy-RSW*Qcs)*Z/P*(T+273.15);
			  QT=QL+QG;
			  Y=(1+QT/0.8/Ajsgmj-pow((pow((1+QT/0.8/Ajsgmj),2)-4*QG/0.8/Ajsgmj),0.5))/2;
			  if(QG==0)
				  Y=0;
			  dm=(1-Y)*DL+Y*DG;
			  DM1=WT/(VSG+VSL)/Ajsgmj;
			  if(dm<DM1)
				  dm=DM1;
			  NRE=1000*DL*Djszj*QL/Ajsgmj/(1-Y)/UL;
              
			  FF=csjs.mczlxs(NRE, RRygczd);//计算摩阻系数
			}
			FL=FF*pow(DM1,2)*pow(VM,2)/Djszj/2/dm+dm*(VM1-VM2)/2/DLTD;
			PP=(9.8*dm+Dldfx*FL)*DLTD/1000000;
			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;
		  Pqd=Pqd+PD*Djsfx;
		  Tqd=Tqd+Ttd*DLTD*Djsfx;
		  if(Pqd <= 0)
			  Pqd=0;
		  ptidu[J] = int(Pqd*1000+0.5)/1000.0;
		  dtidu[J]=int((dtidu[J-1]+Djsfx*DLTD)*1000+0.5)/1000.0;
		  if(Pqd==0)
			  break;
		}
	  }
	  Pcom=Pqd;
	  return(Pcom); 
}

double dxlyltd::MukherjeeBrill(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,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,NGV,XXL,NFR,L1,L2,result;
	  double DLTD,Ajsgmj,PP,BO,QG,C1,C2,C3,C4,C5,C6,HL,angle,NL,dm,NRE,HR;
	  double FR,F,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;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;NGV=0;XXL=0;NFR=0;L1=0;L2=0;result=0;
	  DLTD=0;Ajsgmj=0;PP=0;BO=0;QG=0;C1=0;C2=0;C3=0;C4=0;C5=0;C6=0;HL=0;angle=0;NL=0;dm=0;NRE=0;HR=0;
	  FR=0;F=0;Pb=0;
	  Ngfds=0;Djsfx=0;Dldfx=0;i=0;J=0;

	  RSW = RSO = 0;

	  PD = 0; // ADD BY LZJ

	  yqsxz csjs;
      
	  angle = 3.14159 / 2;
      NL=0;
	  Pqdyl = P0;//Pqdyl为起点压力
	  ptidu[0]=P0;
	  Tqdwd = T0 - 273.15;//Tqdwd为起点温度
	  Twdtd = TG;//Twdtd为温度梯度
	  Qcql = RG;//Qcql为产气量
	  Qcsl = RW;//Qcsl为产水量
	  Qcyl = RO;//Qcyl为产油量
	  Gqmd = GG;//Gqmd为气密度
	  Gsmd = GW;//Gsmd为水密度
	  Gymd = OG;//Gymd为油密度
	  Lygsd = L;//Lygsd为油管深度
	  dtidu[0]=L;
	  Dhgwj = DOL;//Dhgwj为环管外径
	  Dhgnj = DIL;//Dhgnj环管内径
	  RRygxdczd = RR;//RRygxdczd油管相对粗糙度
	  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);
		}
	  }
	  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 + 0.5 * PD * Djsfx;
			T = Tqdwd + 0.5 * Twdtd * DLTD * 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);//计算天然气的粘度
			  }
			  if(Qcyl>0)

⌨️ 快捷键说明

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