Professional Documents
Culture Documents
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
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
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
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
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
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
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
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