📄 dxlyltd.cpp
字号:
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 + -