You are on page 1of 12

2.

Listing Program Fortran 77 untuk Peng-Robinson cairan murni

c =======================================================================
c || Program Untuk Menghitung Tekanan Uap Jenuh dengan ||
c || Persamaan Keadaan PR ||
c =======================================================================

program psatpr
implicit none
real*16 T,P,Tc,Pc,eps,a,b,R,zv,zl,rlnphiv,phil,phiv,TEMP,alfa
real*16 vv,vl,vlfin,vvfin,Mr,rlnphil,fl,fv,pnew,TR,w,ASTAR,BSTAR
parameter (R = 8.314)
integer flag,iter,maxiter,itnum,prflag

C ***********************************************************************
c INPUT SIFAT-SIFAT ZAT YANG DIGUNAKAN

write(*,*)'Program Tekanan Uap dengan EOS Peng-Robinson'


write(*,*)
write(*,*)'Masukkan nilai awal:'
write(*,*)'T (Kelvin) = '
read(*,*)T
write(*,*)'Masukkan data karakteristik zat:'
write(*,*)'Mr = '
read(*,*)Mr
write(*,*)'Nilai Tc zat (Kelvin) = '
read(*,*)Tc
write(*,*)'Nilai Pc zat (Pa) = '
read(*,*)Pc
write(*,*)'Faktor aksentrik = '
read(*,*)w
write(*,*)'Iterasi maksimum = '
read(*,*)maxiter
write(*,*)'Epsilon = '
read(*,*)eps
write(*,*)
P = 8000000
C ***********************************************************************
C PROGRAM UTAMA
C ***********************************************************************

TR=T/TC
alfa=(1+((0.37464+(1.54226*w)-(0.26992*w*w))*(1-(TR**0.5))))**2
A=0.45724*R*R*TC*TC*alfa/PC
B=0.07779*R*TC/PC

iter = 0
flag = 0
vv = R*T/P

C ***********************************************************************
C MEMANGGIL SUBROUTINE VAP

CALL VAP(vv,vvfin,A,B,R,T,P,mr,iter,maxiter,flag,alfa)

iter = 0
flag = 0

vl = 1.1*B

C ***********************************************************************
C MEMANGGIL SUBROUTINE LIQ

CALL LIQ(vl,vlfin,A,B,R,T,P,mr,iter,maxiter,flag,alfa)

C ***********************************************************************
C MENGHITUNG FUGASITAS FASA UAP

zv=p*vvfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZV+2.4142*BSTAR)/(ZV-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIV=(ZV-1)-ALOG(ZV-BSTAR)-TEMP
PHIv=EXP(RLNPHIv)
fv=phiv*P

C ***********************************************************************
C MENGHITUNG FUGASITAS FASA CAIR

zl=p*vlfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZL+2.4142*BSTAR)/(ZL-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIL=(ZL-1)-ALOG(ZL-BSTAR)-TEMP
PHIl=EXP(RLNPHIl)
fl=phil*P

write(*,*)'phi liq = ',phil


write(*,*)'phi vap = ',phiv
write(*,*)'f liq (Pa) = ',fl
write(*,*)'f vap (Pa) = ',fv
write(*,*)'P (Pa) = ',p
write(*,*)
itnum=0
prflag = 0
do while(prflag .eq. 0)
pnew = p*fl/fv
if (abs(fl-fv) .LE. eps) then
prflag = 1
elseif (itnum .GT. maxiter) then
prflag = 2
else
itnum = itnum + 1
p=pnew
endif

iter = 0
flag = 0
vv = R*T/P

C ***********************************************************************
C MEMANGGIL SUBROUTINE VAP

CALL VAP(vv,vvfin,A,B,R,T,P,Mr,iter,maxiter,flag,alfa)

iter = 0
flag = 0
vl = 1.1*B

C ***********************************************************************
C MEMANGGIL SUBROUTINE LIQ

CALL LIQ(vl,vlfin,A,B,R,T,P,Mr,iter,maxiter,flag,alfa)

C ***********************************************************************
C MENGHITUNG FUGASITAS FASA UAP

zv=p*vvfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZV+2.4142*BSTAR)/(ZV-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIV=(ZV-1)-ALOG(ZV-BSTAR)-TEMP
PHIv=EXP(RLNPHIv)
fv=phiv*P

C ***********************************************************************
C MENGHITUNG FUGASITAS FASA CAIR

zl=p*vlfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZL+2.4142*BSTAR)/(ZL-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIL=(ZL-1)-ALOG(ZL-BSTAR)-TEMP
PHIl=EXP(RLNPHIl)
fl=phil*P

write(*,*)'phi liq = ',phil


write(*,*)'phi vap = ',phiv
write(*,*)'f liq (Pa) = ',fl
write(*,*)'f vap (Pa) = ',fv
write(*,*)'P (Pa) = ',p
write(*,*)
enddo

write(*,*)'Psat (Pa) = ',P


write(*,*)'prflag = ', prflag
write(*,*)'Jumlah iterasi = ',itnum

stop
end program psatpr

C ***********************************************************************
C AKHIR DARI PROGRAM UTAMA
C ***********************************************************************

C ***************************************************************************
C SUBROUTINE UNTUK MENDAPATKAN VOLUME UAP DARI PERSAMAAN KUBIK
C ***************************************************************************

SUBROUTINE VAP(vv,vvfin,A,B,R,T,P,mr,itnum,itmax,prflag,alfa)

real*16 vv,vvnew,vvfin,A,B,R,T,P,mr,alfa
integer prflag,itnum,itmax

itnum = 0
prflag = 0
do while(prflag .EQ. 0)
vvnew = (R*T/P) + B - ((A*alfa*(vv-B))/((P*vv*(vv+b))+
*(P*B*(vv-b)))
if (abs(vvnew - vv) .LE. 0.00000000001) then
prflag = 1
elseif (itnum .GT. itmax) then
prflag = 2
else
itnum = itnum + 1
vv = vvnew
endif

vvfin = vvnew/(Mr*0.001)

enddo

return
end

C ***************************************************************************
C SUBROUTINE UNTUK MENDAPATKAN VOLUME CAIRAN DARI PERSAMAAN KUBIK
C ***************************************************************************

SUBROUTINE LIQ(vl,vlfin,A,B,R,T,P,mr,itnum,itmax,prflag,alfa)

real*16 vl,vlnew,vlfin,A,B,R,T,P,mr,alfa
integer prflag,itnum,itmax

itnum = 0
prflag = 0
do while(prflag .EQ. 0)
vlnew = ((P*vl*((vl*vl)-(B*B)))+(P*B*((Vl-b)**2))-
*(R*T*Vl*(vl+b))-(A*alfa*b)+(R*T*B*B))/((R*T*B)-(A*alfa))
if (abs(vlnew - vl) .LE. 0.00000000001) then
prflag = 1
elseif (itnum .GT. itmax) then
prflag = 2
else
itnum = itnum + 1
vl = vlnew
endif
enddo

vlfin = vlnew/(Mr*0.001)

return
end

7. Peng-Robinson EOS for mixture


a. Mencari bubble point

Input
A,B,C,Z,P,T

NO

YES

OutputTnew

b. Koefisien fugasitas
liquid:

Vapor:
c. Listing program fortran untuk EOS Peng-Robinson Binary mixture

c
==================================================================
=====
c || Program Untuk Menghitung Tekanan Uap Jenuh dengan ||
c || Persamaan Keadaan PR ||
c
==================================================================
=====

program psatpr
implicit none
real*16 T,P,Tc,Pc,eps,a,b,R,zv,zl,rlnphiv,phil,phiv,TEMP,alfa
real*16 vv,vl,vlfin,vvfin,Mr,rlnphil,fl,fv,pnew,TR,w,ASTAR,BSTAR
parameter (R = 8.314)
integer flag,iter,maxiter,itnum,prflag

C
******************************************************************
*****
c INPUT SIFAT-SIFAT ZAT YANG DIGUNAKAN

write(*,*)'Program Tekanan Uap dengan EOS Peng-Robinson'


write(*,*)
write(*,*)'Masukkan nilai awal:'
write(*,*)'T (Kelvin) = '
read(*,*)T
write(*,*)'Masukkan data karakteristik zat:'
write(*,*)'Mr = '
read(*,*)Mr
write(*,*)'Nilai Tc zat (Kelvin) = '
read(*,*)Tc
write(*,*)'Nilai Pc zat (Pa) = '
read(*,*)Pc
write(*,*)'Faktor aksentrik = '
read(*,*)w
write(*,*)'Iterasi maksimum = '
read(*,*)maxiter
write(*,*)'Epsilon = '
read(*,*)eps
write(*,*)
P = 8000000
C
******************************************************************
*****
C PROGRAM UTAMA
C
******************************************************************
*****

TR=T/TC
alfa=(1+((0.37464+(1.54226*w)-(0.26992*w*w))*(1-(TR**0.5))))**2
A=0.45724*R*R*TC*TC*alfa/PC
B=0.07779*R*TC/PC

iter = 0
flag = 0

vv = R*T/P

C
******************************************************************
*****
C MEMANGGIL SUBROUTINE VAP

CALL VAP(vv,vvfin,A,B,R,T,P,mr,iter,maxiter,flag,alfa)

iter = 0
flag = 0

vl = 1.1*B

C
******************************************************************
*****
C MEMANGGIL SUBROUTINE LIQ

CALL LIQ(vl,vlfin,A,B,R,T,P,mr,iter,maxiter,flag,alfa)

C
******************************************************************
*****
C MENGHITUNG FUGASITAS FASA UAP

zv=p*vvfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZV+2.4142*BSTAR)/(ZV-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIV=(ZV-1)-ALOG(ZV-BSTAR)-TEMP
PHIv=EXP(RLNPHIv)
fv=phiv*P

C
******************************************************************
*****
C MENGHITUNG FUGASITAS FASA CAIR

zl=p*vlfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZL+2.4142*BSTAR)/(ZL-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIL=(ZL-1)-ALOG(ZL-BSTAR)-TEMP
PHIl=EXP(RLNPHIl)
fl=phil*P

write(*,*)'phi liq = ',phil


write(*,*)'phi vap = ',phiv
write(*,*)'f liq (Pa) = ',fl
write(*,*)'f vap (Pa) = ',fv
write(*,*)'P (Pa) = ',p
write(*,*)
itnum=0
prflag = 0
do while(prflag .eq. 0)
pnew = p*fl/fv
if (abs(fl-fv) .LE. eps) then
prflag = 1
elseif (itnum .GT. maxiter) then
prflag = 2
else
itnum = itnum + 1
p=pnew
endif

iter = 0
flag = 0
vv = R*T/P

C
******************************************************************
*****
C MEMANGGIL SUBROUTINE VAP

CALL VAP(vv,vvfin,A,B,R,T,P,Mr,iter,maxiter,flag,alfa)

iter = 0
flag = 0
vl = 1.1*B

C
******************************************************************
*****
C MEMANGGIL SUBROUTINE LIQ

CALL LIQ(vl,vlfin,A,B,R,T,P,Mr,iter,maxiter,flag,alfa)

C
******************************************************************
*****
C MENGHITUNG FUGASITAS FASA UAP

zv=p*vvfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZV+2.4142*BSTAR)/(ZV-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIV=(ZV-1)-ALOG(ZV-BSTAR)-TEMP
PHIv=EXP(RLNPHIv)
fv=phiv*P

C
******************************************************************
*****
C MENGHITUNG FUGASITAS FASA CAIR

zl=p*vlfin*0.001*mr/(r*t)
ASTAR=(A*P)/(R*T*R*T)
BSTAR=(B*P)/(R*T)
TEMP=ASTAR*ALOG((ZL+2.4142*BSTAR)/(ZL-0.4142*BSTAR))
*/(2.8284*BSTAR)
RLNPHIL=(ZL-1)-ALOG(ZL-BSTAR)-TEMP
PHIl=EXP(RLNPHIl)
fl=phil*P

write(*,*)'phi liq = ',phil


write(*,*)'phi vap = ',phiv
write(*,*)'f liq (Pa) = ',fl
write(*,*)'f vap (Pa) = ',fv
write(*,*)'P (Pa) = ',p
write(*,*)
enddo

write(*,*)'Psat (Pa) = ',P


write(*,*)'prflag = ', prflag
write(*,*)'Jumlah iterasi = ',itnum

stop
end program psatpr
C
******************************************************************
*****
C AKHIR DARI PROGRAM UTAMA
C
******************************************************************
*****

C
******************************************************************
*********
C SUBROUTINE UNTUK MENDAPATKAN VOLUME UAP DARI PERSAMAAN KUBIK
C
******************************************************************
*********

SUBROUTINE VAP(vv,vvfin,A,B,R,T,P,mr,itnum,itmax,prflag,alfa)

real*16 vv,vvnew,vvfin,A,B,R,T,P,mr,alfa
integer prflag,itnum,itmax

itnum = 0
prflag = 0
do while(prflag .EQ. 0)
vvnew = (R*T/P) + B - ((A*alfa*(vv-B))/((P*vv*(vv+b))+
*(P*B*(vv-b)))
if (abs(vvnew - vv) .LE. 0.00000000001) then
prflag = 1
elseif (itnum .GT. itmax) then
prflag = 2
else
itnum = itnum + 1
vv = vvnew
endif

vvfin = vvnew/(Mr*0.001)

enddo

return
end

C
******************************************************************
*********
C SUBROUTINE UNTUK MENDAPATKAN VOLUME CAIRAN DARI PERSAMAAN
KUBIK
C
******************************************************************
*********

SUBROUTINE LIQ(vl,vlfin,A,B,R,T,P,mr,itnum,itmax,prflag,alfa)

real*16 vl,vlnew,vlfin,A,B,R,T,P,mr,alfa
integer prflag,itnum,itmax

itnum = 0
prflag = 0
do while(prflag .EQ. 0)
vlnew = ((P*vl*((vl*vl)-(B*B)))+(P*B*((Vl-b)**2))-
*(R*T*Vl*(vl+b))-(A*alfa*b)+(R*T*B*B))/((R*T*B)-(A*alfa))
if (abs(vlnew - vl) .LE. 0.00000000001) then
prflag = 1
elseif (itnum .GT. itmax) then
prflag = 2
else
itnum = itnum + 1
vl = vlnew
endif
enddo

vlfin = vlnew/(Mr*0.001)

return
end

You might also like