Está en la página 1de 7

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

C
C
<> Problem 12-15 <>
C
C Plot (P-x1,y1) and (T-x1,y1) using Modified Raoult's law
C Ethanol(1)/Toluene(2) = NRTL Model
C
C
Dec. 10, 2000 by Seung-Kyo Oh
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
INTEGER
N, I_CHOICE
PARAMETER
(N=2)
DOUBLE PRECISION
PSAT(N),TSAT(N)
DOUBLE PRECISION
X(N),Y(N),PHI(N),GAMMA(N),GAMMA_NEW(N)
DOUBLE PRECISION
T,T_ASSUME,T_NEW,DEXP,P_NEW,DLOG
DOUBLE PRECISION
Z(N),YD(N),XB(N),RK(N),BOTTOM
COMMON
/DATA/A(2),B(2),C(2)
INTRINSIC
DEXP,DLOG
CHARACTER*16
FILENAME
C
DATA A/16.67583,14.00976/
DATA B/3674.491,3103.010/
DATA C/-46.712,-53.373/
C
PRINT *,'
Type 1 for BUBL P
Calculations'
PRINT *,'
Type 2 for DEW P
Calculations'
PRINT *,'
Type 3 for BUBL T
Calculations'
PRINT *,'
Type 4 for DEW T
Calculations'
PRINT *,'
Type 5 for FLASH
Calculations'
READ(*,*) I_CHOICE
IF(I_CHOICE .GE. 3) GOTO 300
C
C CALCULATION OF SAT'D VAPOR PRRESSURE USING ANTOINE EQN.
C
PRINT *,'Enter the Temperature(oC)'
READ(*,*) T
T=T+273.16
CALL VPRES (T,PSAT)
IF(I_CHOICE .EQ. 2) GOTO 200
C
C (1).......... BUBL P Calculation (T, xi --> P, yi) ......
C
WRITE (*, '(5x, A)') ' Enter Result File Name < BUBL P > '
READ (5, '(A\)') filename
OPEN(90, FILE=filename, ACCESS='SEQUENTIAL', STATUS='NEW')
WRITE(90,'(A)') '(1) BUBL P Calculation (T, xi --> P, yi)'
WRITE(90,'(/,A,F10.2, A)') '
BUBL P at ' , T, ' [K]'
WRITE(90, '(A\,/)') '
--------------------------------'
WRITE(90, '(A\,/)') '
X(1)
Y(1)
P[KPa]'
WRITE(90, '(A\,/)') '
--------------------------------'
C
DO X1=0.0, 1.05, 0.05
X(1)=X1
X(2)=1.0-X(1)
CALL NRTL (X,T,GAMMA)
C
P=0.0
DO I=1,N

PHI(I)=1.0
P=P+GAMMA(I)*X(I)*PSAT(I)/PHI(I)
END DO
DO I=1,N
Y(I)=(GAMMA(I)*X(I)*PSAT(I))/P
END DO
WRITE(90,'(1X, F10.2, 1X, F10.4, 1X, F14.2)') X(1),Y(1),P
END DO
CLOSE(90)
GOTO 600

C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C (2).......... DEW P Calculation (T, yi --> P, xi)......
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
200 WRITE (*, '(5x, A\)') ' Enter Result File Name < DEW P > '
READ (*, '(A\)') filename
OPEN(90, FILE=filename, ACCESS='SEQUENTIAL', STATUS='NEW')
WRITE(90,'(A)') '(2) DEWL P Calculation (T, yi --> P, xi)'
WRITE(90,'(/,A\,F10.2, A)') '
DEW P at ' , T, '[K]'
WRITE(90, '(A\,/)') '
--------------------------------'
WRITE(90, '(A\,/)') '
X(1)
Y(1)
P[KPa]'
WRITE(90, '(A\,/)') '
--------------------------------'
C
DO Y1=0.0, 1.05, 0.05
Y(1)=Y1
Y(2)=1.0-Y(1)
DEM=0.0
DO I=1,N
DEM=DEM+Y(I)/PSAT(I)
PHI(I)=1.0
GAMMA(I)=1.0
END DO
P=1.0/DEM
201
DO I=1,N
X(I)=(PHI(I)*Y(I)*P)/(PSAT(I)*GAMMA(I))
END DO
C
CALL NRTL (X,T,GAMMA)
C
DENO=0.0
DO I=1,N
DENO=DENO+Y(I)/GAMMA(I)/PSAT(I)
END DO
P_NEW=1.0/DENO
DO I=1,N
X(I)=(Y(I)*P_NEW)/(PSAT(I)*GAMMA(I))
END DO
IF(ABS(P-P_NEW) .LT. 0.01) goto 202
P=P_NEW
GOTO 201
202 WRITE(90,'(1X, F10.4, 1X, F10.2, 1X, F14.2)') X(1),Y(1),P
END DO
GOTO 600
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C (3).......... BUBL T Calculation (P, xi --> T, yi)......
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

C
300 IF(I_CHOICE .EQ. 5) GOTO 500
PRINT *,'Enter the Pressure(KPa)'
READ(*,*) P
DO I=1,N
PHI(I)=1.0
TSAT(I)=B(I)/(A(I)-ALOG(P)) - C(I)
END DO
IF(I_CHOICE .EQ. 4) GOTO 400
WRITE (*, '(5x, A\)') ' Enter Result File Name < BUBL T > '
READ (*, '(A\)') filename
OPEN(90, FILE=filename, ACCESS='SEQUENTIAL', STATUS='NEW')
WRITE(90,'(A)') '(3) BUBL T Calculation (P, xi --> T, yi)'
WRITE(90,'(/,A\,F10.2, A)') '
BUBL T at ' , P, ' [KPa]'
WRITE(90, '(A\,/)') '
--------------------------------'
WRITE(90, '(A\,/)') '
X(1)
Y(1)
T[K]'
WRITE(90, '(A\,/)') '
--------------------------------'
C
DO X1=0.0, 1.05, 0.05
X(1)=X1
X(2)=1.0-X(1)
T_ASSUME=0.0
DO I=1,N
T_ASSUME=T_ASSUME+X(I)*TSAT(I)
END DO
CALL VPRES (T_ASSUME,PSAT)
CALL NRTL (X,T_ASSUME,GAMMA)
ALPHA21=PSAT(2)/PSAT(1)
PSAT(1)=P/(X(1)*GAMMA(1)+X(2)*GAMMA(2)*ALPHA21)
T=B(1)/(A(1)-DLOG(PSAT(1))) - C(1)
C
301 CALL VPRES (T,PSAT)
CALL NRTL (X,T,GAMMA)
ALPHA21=PSAT(2)/PSAT(1)
PSAT(1)=P/(X(1)*GAMMA(1)+X(2)*GAMMA(2)*ALPHA21)
T_NEW=B(1)/(A(1)-DLOG(PSAT(1))) - C(1)
IF(ABS(T-T_NEW) .LT. 1.0D-02) GOTO 302
T=T_NEW
GOTO 301
C
302
DO I=1,N
Y(I)=(X(I)*GAMMA(I)*PSAT(I))/(PHI(I)*P)
END DO
WRITE(90,'(1X, F10.2, 1X, F10.4, 1X, F14.2)') X(1),Y(1),T
END DO
CLOSE(90)
GOTO 600
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C (4).......... DEW T Calculation (P, yi --> T, xi)......
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
400 WRITE (*, '(5x, A\)') ' Enter File Name < DEW T > '
READ (*, '(A\)') filename
OPEN(90, FILE=filename, ACCESS='SEQUENTIAL', STATUS='NEW')
WRITE(90,'(A)') '(4) DEW T Calculation (P, yi --> T, xi)'
WRITE(90,'(/,A\,F10.2, A)') '
DEW T at ' , P, ' [KPa]'
WRITE(90, '(A\,/)') '
--------------------------------'
WRITE(90, '(A\,/)') '
X(1)
Y(1)
T[Oc]'

WRITE(90, '(A\,/)') '


C

--------------------------------'

DO Y1=0.0, 1.05, 0.05


Y(1)=Y1
Y(2)=1.0-Y(1)
T_ASSUME=Y(1)*TSAT(1)+Y(2)*TSAT(2)
DO I=1,N
GAMMA(I)=1.0
END DO
CALL VPRES (T_ASSUME,PSAT)
ALPHA12=PSAT(1)/PSAT(2)
PSAT(1)=P*(Y(1)/GAMMA(1)+(Y(2)/GAMMA(2))*ALPHA12)
T=B(1)/(A(1)-DLOG(PSAT(1))) - C(1)
CALL VPRES (T,PSAT)
X(1)=(Y(1)*P)/PSAT(1)
X(2)=1.0-X(1)
CALL NRTL (X,T,GAMMA)
ALPHA12=PSAT(1)/PSAT(2)
PSAT(1)=P*(Y(1)/GAMMA(1)+Y(2)/GAMMA(2)*ALPHA12)
T=B(1)/(A(1)-DLOG(PSAT(1))) - C(1)

C
401 CALL VPRES (T,PSAT)
X(1)=(Y(1)*PHI(1)*P)/(GAMMA(1)*PSAT(1))
X(2)=1.0-X(1)
402 CALL NRTL (X,T,GAMMA_NEW)
IF (ABS(GAMMA_NEW(1)-GAMMA(1)) .LT. 0.01) GOTO 403
GAMMA(1)=GAMMA_NEW(1)
GAMMA(2)=GAMMA_NEW(2)
GOTO 402
C
403 ALPHA12=PSAT(1)/PSAT(2)
PSAT(1)=P*(Y(1)/GAMMA(1)+(Y(2)/GAMMA(2))*ALPHA12)
T_NEW=B(1)/(A(1)-DLOG(PSAT(1))) - C(1)
IF(ABS(T_NEW-T) .LT. 1.0D-01) GOTO 404
T=T_NEW
GOTO 401
404 WRITE(90,'(1X, F10.4, 1X, F10.2, 1X, F14.2)') X(1),Y(1),T
END DO
CLOSE(90)
GOTO 600
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C (5).......... FLASH Calculation (Feed,P,T,ZF --> V,B,YD,XB)......
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
500 FEED=100.0
T=105.0
Z(1)=0.31
WRITE(*,'(A\)')' What is Output file (FLASH CALCULATION)?'
READ(5,'(A\)') FILENAME
OPEN(100,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='NEW')
C
T=T+273.16
Z(2)=1.0-Z(1)
CALL BUBLP (Z,T,PB)
CALL DEWP (Z,T,PD)
P=(PB+PD)/2.0

C
CALL VPRES (T,PSAT)
CALL NRTL (Z,T,GAMMA)
C Assume Initial Guess for V for Newton's Law
V=0.5
501 F=0.0
DF_DV=0.0
C
DO I=1,N
RK(I)=GAMMA(I)*PSAT(I)/P
F=F+Z(I)*(RK(I)-1.0)/(1.0+V*(RK(I)-1.0))
DF_DV=DF_DV+Z(I)*(RK(I)-1.0)**2/(1.0+V*(RK(I)-1.0))**2
END DO
VNEW=V+F/DF_DV
IF(ABS(VNEW-V) .LT. 1.0D-3) GOTO 502
V=VNEW
GOTO 501
C
502
BOTTOM=FEED-V
DO I=1,N
XB(I)=Z(I)/(1.0+V*(RK(I)-1.0))
YD(I)=RK(I)*XB(I)
END DO
C
WRITE(100,'(///,A,F10.4,A)')'Amount of Distillate = ',V
WRITE(100,'(///,A,F10.4,A)')'Amount of Bottom
= ',BOTTOM
WRITE(100,'(///,A,F10.4,A)')'Mole Fraction of TOP(1) = ',YD(1)
WRITE(100,'(///,A,F10.4,A)')'Mole Fraction of Bottom(1) = ',XB(1)
CLOSE(100)
600 STOP 'Normal Operation is Done !'
END
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE NRTL (X,T,GAMMA)
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
DOUBLE PRECISION
X(20),GAM(20),GAMMA(20),T,DEXP
INTRINSIC
DEXP,DLOG
COMMON
/DATA/A(2),B(2),C(2)
C
DATA B12,B21,EZTA,R/713.57,1147.86,0.529,1.987/
TAU12=B12/R/T
TAU21=B21/R/T
G12=EXP(-EZTA*TAU12)
G21=EXP(-EZTA*TAU21)
GNR1=(G12*TAU12)/(X(2)+X(1)*G12)**2
GNR2=(G21*TAU21)/(X(1)+X(2)*G21)**2
GN1=(G21/(X(1)+X(2)*G21))**2
GN2=(G12/(X(2)+X(1)*G12))**2
GAM(1)=(TAU21*GN1+GNR1)*X(2)**2
GAM(2)=(TAU12*GN2+GNR2)*X(1)**2
GAMMA(1)=DEXP(GAM(1))
GAMMA(2)=DEXP(GAM(2))
RETURN
END
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE VPRES (T,PSAT)
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

C
DOUBLE PRECISION PSAT(20),DEXP,T
INTRINSIC
DEXP
COMMON
/DATA/A(2),B(2),C(2)

DO I=1,2
PSAT(I)=DEXP(A(I)-B(I)/(T+C(I)))
END DO
RETURN
END

C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE BUBLP(Z,T,PB)
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
PARAMETER
(N=2)
DOUBLE PRECISION
Z(N),X(N),PHI(N),PSAT(N),GAMMA(N)
COMMON
/DATA/A(2),B(2),C(2)
C
DO I=1,N
X(I)=Z(I)
END DO
CALL NRTL (X,T,GAMMA)
CALL VPRES (T,PSAT)
C
PB=0.0
DO I=1,N
PHI(I)=1.0
PB=PB+GAMMA(I)*X(I)*PSAT(I)/PHI(I)
END DO
RETURN
END
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE DEWP(Z,T,PD)
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C
PARAMETER
(N=2)
DOUBLE PRECISION
Z(N),Y(N),X(N),PSAT(N),GAMMA(N),PHI(N)
COMMON
/DATA/A(2),B(2),C(2)
C
DO I=1,N
Y(I)=Z(I)
END DO
CALL VPRES (T,PSAT)
DEM=0.0
DO I=1,N
DEM=DEM+Y(I)/PSAT(I)
PHI(I)=1.0
GAMMA(I)=1.0
END DO
PD=1.0/DEM
201
DO I=1,N
X(I)=(PHI(I)*Y(I)*PD)/(PSAT(I)*GAMMA(I))
END DO
C
CALL NRTL (X,T,GAMMA)

C
DENO=0.0

DO I=1,N
DENO=DENO+Y(I)/GAMMA(I)/PSAT(I)
END DO
PD_NEW=1.0/DENO
DO I=1,N
X(I)=(Y(I)*PD_NEW)/(PSAT(I)*GAMMA(I))
END DO
IF(ABS(PD-PD_NEW) .LT. 0.01) goto 202
PD=PD_NEW
GOTO 201
202 RETURN
END

También podría gustarte