📄 dxlyltd.cpp
字号:
{
//计算油的泡点压力和溶解气油比
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 + -