Откройте актуальную версию документа прямо сейчас
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Приложение F
(справочное)
Подпрограмма SGERG.FOR на языке FORTRAN
Комментарий к программе.
Вириальное уравнение состояния GERG-88.
Подпрограмма SGERG
SGERG рассчитывает фактор сжимаемости природного газа с использованием неполного компонентного состава газа.
Легальные копии этой программы могут быть получены у членов рабочей группы GERG по определению фактора сжимаемости природного газа в той версии, которая представлена в Технической монографии ТМ 5 (GERG,1991).
Расчеты основаны на следующих исходных данных:
Допустимые интервалы: | |
- 1 - Х3: молярная доля СО2 |
от 0,0 до 0,3; |
- 2 - HS: теплота сгорания |
от 20 до 48; |
- 3 - RM: относительная плотность* |
от 0,55 до 0,9; |
- 4 - Х5: молярная доля |
от 0,0 до 0,1. |
Далее вводят входные переменные: | |
р - давление, бар; |
от 0 до 120; |
Т - температура, °С |
от -23 до +65. |
В программе рассчитывают Х2 - молярную долю азота и выводят ее на печать. | |
Результаты вычислений: | |
Z - фактор сжимаемости; | |
D - молярная плотность, |
СИНТАКСИС: CALL SGERG (X2, Х3, HS, RM, X5, Р, ТС, Z, D).
Значения коэффициентов, используемых в этой программе, соответствуют значениям, приведенным в подпрограмме GAS682 от 20 июля 1988 г., приложенной в сообщении 8807 Лаборатории Ван-дер-Ваальса, Амстердам.
J.P.J. Michels, J.A. Schouten,
August 16, 1991
Значения газовой постоянной, молярных масс, значения теплоты сгорания и плотности воздуха соответствуют приведенным в ГОСТ 31369.
С
ССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССССС
С
SUBROUTINE SGERG(X2,X3,HS,RM,X5,P,TC,Z,D)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IF(P.LT.0.0.OR.P.GT.120.0) STOP ' PRESSURE OUT OF RANGE'
IF(TC.LT.-23.0.OR.TC.GT.65.0) STOP ' TEMPERATURE OUT OF RANGE'
CALLS GERG1(P,TC,X2,X3,X5,HS,RM,Z,D)
RETURN
END
C *********************************************************************
SUBROUTINE SGERG1(P,TC,Q2,Q3,Q5,QM,RM,Z,D)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
COMMON/RBLOK/AMOL,HS
COMMON/XBLOK/X1,X2,X3,X11,X12,X13,X22,X23,X33
> ,X5,X7,X15,X17,X25,X55,X77
COMMON/MBLOK/GM1R0,GM1R1,GM2,GM3,GM5,GM7,FA,FB,RL,T0,H5,H7,R
HS=QM
X3=Q3
X5=Q5
С IF(RM.LT.0.55.OR.RM.GT.0.90) STOP 'REL MASS OUT OF RANGE'
С IF(X3.LT.0.0.OR.X3.GT.0.30) STOP 'CО2 OUT OF RANGE'
С IF(HS.LT.20.0.OR.HS.GT.48.0) STOP 'CALOR. VALUE OUT OF RANGE'
IF((0.55+0.97*X3-0.45*X5).GT.RM)STOP 'CONFLICTING INPUT'
SM=RM*RL
X7=X5*0.0964D0
X33=X3*X3
X55=X5*X5
X77=X7*X7
BEFF=-0.065D0
H=1000.0D0
AMOL=1.0D0/(FA+BEFF)
K=0
KK=0
1 CALL SMBER(H,SMT1)
IF(ABS(SM-SMT1).GT.1.D-6) THEN
CALL SMBER(H+1.0D0,SMT2)
DH=(SM-SMT1)/(SMT2-SMT1)
H=H+DH
KK=KK+1
IF(KK.GT.20)STOP' NO CONVERGENCY#1'
GO TО1
END IF
X11=X1*X1
X12=X1*X2
X13=X1*X3
X22=X2*X2
X23=X2*X3
X25=X2*X5
X15=X1*X5
X17=X1*X7
CALL B11BER(T0,H,B11)
CALL BBER(T0,B11,BEFF)
AMOL=1.0D0/(FA+BEFF)
HSBER=X1*H*AMOL+(X5*H5+X7*H7)*AMOL
IF(ABS(HS-HSBER).GT.1.0D-4)THEN
K=K+1
IF(K.GT.20)STOP 'NO CONVERGENCY#2'
GO TO 1
END IF
IF(X2.LT.-0.01 .OR.X2.GT.0.5) STOP 'CALC. N2 OUT OF RANGE'
IF(X2+X3.GT.0.5) STOP 'N2 + CО2 OUT OF RANGE'
IF(0.55+.4*X2+0.97*X3-0.45*X5).GT.RM)
+ STOP 'CONFLICTING RESULT FOR N2'
Q2=X2
T=TC+T0
CALL B11BER(T,H,B11)
CALL BBER(T,B11,B)
CALL CBER(T,H,C)
CALL ITER(P,T,B,C,V,Z)
D=1.0D0/V
END
SUBROUTINE SMBER(H,SM)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
COMMON/RBLOK/AMOL,HS
COMMON/XBLOK/X1,X2,X3,X11,X12,X13,X22,X23,X33
> ,X5,X7,X15,X17,X25,X55,X77
COMMON/MBLOK/GM1R0,GM1R1,GM2,GM3,GM5,GM7,FA,FB,RL,T0,H5,H7,R
GM1=GM1R0+GM1R1*H
X1=(HS-(X5*H5+X7*H7)*AMOL)/H/AMOL
X2=1.0D0-X1-X3-X5-X7
SM=(X1*GM1+X2*GM2+X3*GM3+X5*GM5+X7*GM7)*AMOL
END
С
C *********************************************************************
SUBROUTINE B11BER(T,H,B11)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
COMMON/BBLOK/BR11H0(3), BR11H1(3), BR11H2(3), BR22(3), BR23(3),
+ BR33(3), BR15(3), BR17(3), BR55(3), BR77(3), B25
T2=T*T
B11=BR11H0(1) + BR11H0(2)*T + BR11H0(3)*T2
+ +(BR11H1(1) + BR11H1(2)*T + BR11H1(3)*T2)*H
+ +(BR11H2(1) + BR11H2(2)*T + BR11H2(3)*T2)*H*H
END
C *********************************************************************
SUBROUTINE BBER(T,B11,BEFF)
IMPLICIT DOUBLE PRECISION (A-H,О-Z)
COMMON/BBLOK/BR11H0(3), BR11H1(3), BR11H2(3), BR22(3), BR23(3),
+ BR33(3), BR15(3), BR17(3), BR55(3), BR77(3), B25
COMMON/ZETA/Z12,Z13,Y12,Y13,Y123,Y115
COMMON/XBLOK/X1,X2,X3,X11,X12,X13,X22,X23,X33
> ,X5,X7,X15,X17,X25,X55,X77
T2=T*T
B22=BR22(1) + BR22(2)*T + BR22(3)*T2
B23=BR23(1) + BR23(2)*T + BR23(3)*T2
B33=BR33(1) + BR33(2)*T + BR33(3)*T2
В15=BR15(1) + BR15(2)*T + BR15(3)*T2
B55=BR55(1) + BR55(2)*T + BR55(3)*T2
В17=BR17(1) + BR17(2)*T + BR17(3)*T2
B77=BR77(1) + BR77(2)*T + BR77(3)*T2
BA13=B11*B33
IF (BA13.LT.0.0) STOP ' NO SOLUTION'
ZZZ=Z12+(320.0D0-T)**2*1.875D-5
BEFF = Х11*В11+X12*ZZZ*(B11+B22) + 2.0D0*X13*Z13*DSQRT(BA13)
> +X22*B22 + 2.0D0*X23*B23 + X33*B33 + X55*B55
> +2.0D0*X15*B15 + 2.0D0*X25*B25 + 2.0D0*X17*B17 + X77*B77
END
C *********************************************************************
SUBROUTINE CBER(T,H,CEFF)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
COMMON/CBLOK/CR111H0(3), CR111H1(3), CR111H2(3), CR222(3),
+ CR223(3), CR233(3), CR333(3), CR555(3), CR117(3)
COMMON/ZETA/Z12,Z13,Y12,Y13,Y123,Y115
COMMON/XBLOK/X1,X2,X3,X11,X12,X13,X22,X23,X33
> ,X5,X7,X15,X17,X25,X55,X77
T2=T*T
C111=CR111H0(1) + CR111H0(2)*T + CR111H0(3)*T2
+ +(CR111H1(1) + CR111H1(2)*T + CR111H1(3)*T2)*H
+ +(CR111H2(1) + CR111H2(2)*T + CR111Н2(3)*Т2)*H*Н
C222 = CR222(1) + CR222(2)*T + CR222(3)*T2
C223 = CR223(1) + CR223(2)*T + CR223(3)*T2
C233 = CR233(1) + CR233(2)*T + CR233(3)*T2
C333 = CR333(1) + CR333(2)*T + CR333(3)*T2
C555 = CR555(1) + CR555(2)*T + CR555(3)*T2
C117 = CR117(1) + CR117(2)*T + CR117(3)*T2
CA112=C111*C111*C222
СА113=С111*С111*С333
CA122=C111*C222*C222
CA123=C111*C222*C333
CA133=C111*C333*C333
СА115=С111*С111*С555
IF(CA112.LT.0.0.OR.CA113.LT.0.0.OR.CA122.LT.0.0
+ .OR. CA123.LT.0.0 .OR. CA133.LT.0.0 .OR. CA115. LT. 0.0)
+ STOP'NO SOLUTION'
D3REP=1.0D0/3.0D0
CEFF=X1*X11X111+3.0D0*X11*X2*(CA112)**D3REP*(Y12+(T-270.0D0)
+ *0.0013D0)
+ +30D0*X11*X3 *(CA113)**D3REP *Y13
+ +30D0*X1*X15 *(CA115)**D3REP *Y115
+ +30D0*X1*X22 *(CA122)**D3REP *(Y12+(T-270.0D0)*0.0013D0)
+ +60D0*X1*X2*X3*(CA123)**D3REP *Y123
+ +30D0*X1*X33 *(CA133)**D3REP *Y13
+ +X22*X2*C222 + 3.0D0*X22*X3*C223 + 3.0D0*X2*X33*C233
+ +X3*X33*C333 + X5*X55*C555 + 3.0D0*X11*X7*C117
RETURN
END
C *********************************************************************
SUBROUTINE ITER(P,T,B,C,V,Z)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
COMMON/MBLOK/GM1R0,GM1R1,GM2,GM3,GM5,GM7,FA,FB,RL,T0,H5,H7,R
RT = R*T
RTP = RT/P
V = RTP+B
KK = 0
5 V = RTP*(1.0D0+B/V+C/V**2)
KK =KK+1
IF (KK.GT.20) STOP' NO CONVERGENCY#3'
Z = 1.0D0+B/V+C/V**2
PA = RT/V*Z
IF(ABS(PA-P).GE.1.D-5)GO TO 5
RETURN
END
C *********************************************************************
BLOCK DATA
IMPLICIT DOUBLE PRECISION (A-H,О-Z)
COMMON/BBLOK/BR11H0(3), BR11H1 (3), BR11H2(3), BR22(3), BR23(3),
+ BR33(3), BR15(3), BR17(3), BR55(3), BR77(3), B25
COMMON/CBLOK/CR111H0(3), CR111H1(3), CR111H2(3), CR222(3),
+ CR223(3), CR233(3), CR333(3), CR555(3), CR117(3)
COMMON/ZETA/Z12,Z13,Y12,Y13,Y123,Y115
COMMON/MBLOK/GM1R0,GM1R1,GM2,GM3,GM5,GM7,FA,FB,RL,T0,H5,H7,R
DATA BR11H0/-0.425468D0, 0.286500D-2, -.462073D-5/,
+ BR11H1/0.877118D-3, -.556281D-5, 0.881510D-8/,
+ BR11H2/-.824747D-6, 0.431436D-8, -.608319D-11/,
+ BR22 / -.144600D0 , 0.740910D-3, -.911950D-6/,
+ BR23 / -.339693D0 , 0.161176D-2, -.204429D-5/,
+ BR33 / -.868340D0 , 0.403760D-2, -.516570D-5/,
+ BR15 / -.521280D-1, 0.271570D-3, -.25 D-6/,
+ BR17 / -.687290D-1, -.239381D-5, 0.518195D-6/,
+ BR55 / -.110596D-2, 0.813385D-4, -.987220D-7/,
+ BR77 / -.130820D0, 0.602540D-3, -.644300D-6/,
+ B25 / 0.012D0/
DATA CR111H0/-.302488D0, 0.195861D-2, -.316302D-5/,
+ CR111H1/0.646422D-3, -.422876D-5, 0.688157D-8/,
+ CR111H2/-.332805D-6, 0.223160D-8, -.367713D-11/,
+ CR222 /0.784980D-2, -.398950D-4, 0.611870D-7/,
+ CR223 /0.552066D-2, -.168609D-4, 0.157169D-7/,
+ CR233 /0.358783D-2, 0.806674D-5, -.325798D-7/,
+ CR333 /0.205130D-2, 0.348880D-4, -.837030D-7/,
+ CR555 /0.104711D-2, -.364887D-5, .467095D-8/,
+ CR117 /0.736748D-2, -.276578D-4, .343051D-7/
DATA Z12 /0.72D0/, Z13/-.865D0/,
+ Y12 /0.92D0/, Y13/ 0.92D0/,Y123/1.10D0/,
+ Y115/1.2D0/
DATA GM1R0/-2.709328D0/,GM1R1/.021062199D0/,
+ GM2 / 28.0135D0/,GM3 / 44.010D0/,
+ GM5 / 2.0159D0/,GM7 / 28.010D0/,
+ FA /22.414097D0/,FB / 22.710811D0/,
+ RL / 1.292923D0/,TO / 273.15D0/,
+ H5 / 285.83D0/,H7 / 282.98D0/
+ R /0.0831451D0/
END
С
С
___________________________________
*Измерения количества при T = 0,0°С; р = 1,01325 бар; температура сгорания: 25,0°С.
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.