- 积分
- 63
- 注册时间
- 2020-3-5
- 积分
- 63
 
|

楼主 |
发表于 2020-3-26 22:23:29
显示全部楼层
C October 7 KL For Workshop Template
C September 25 KL
C
C User Kinetics Subroutine for RCSTR, RPLUG, RBATCH, PRES-RELIEF
C
SUBROUTINE USRKIN (SOUT, NSUBS, IDXSUB, ITYPE, NINT,
2 INT, NREAL, REAL, IDS, NPO,
3 NBOPST, NIWORK, IWORK, NWORK, WORK,
4 NC, NR, STOIC, RATES, FLUXM,
5 FLUXS, XCURR, NTCAT, RATCAT, NTSSAT,
6 RATSSA, KCALL, KFAIL, KFLASH, NCOMP,
7 IDX, Y, X, X1, X2,
8 NRALL, RATALL, NUSERV, USERV, NINTR,
9 INTR, NREALR, REALR, NIWR, IWR,
1 NWR, WR)
C
IMPLICIT NONE
C
C DECLARE VARIABLES USED IN DIMENSIONING
C
INTEGER NSUBS, NINT, NPO, NIWORK,NWORK,
+ NC, NR, NTCAT, NTSSAT,NCOMP,
+ NRALL, NUSERV,NINTR, NREALR,NIWR,
+ NWR
C
#include "ppexec_user.cmn"
EQUIVALENCE (RMISS, USER_RUMISS)
EQUIVALENCE (IMISS, USER_IUMISS)
C
C
C
C
C.....RCSTR...
#include "rcst_rcstri.cmn"
#include "rxn_rcstrr.cmn"
C
C.....RPLUG...
#include "rplg_rplugi.cmn"
#include "rplg_rplugr.cmn"
EQUIVALENCE (XLEN, RPLUGR_UXLONG)
EQUIVALENCE (DIAM, RPLUGR_UDIAM)
C
C.....RBATCH...
#include "rbtc_rbati.cmn"
#include "rbtc_rbatr.cmn"
C
C.....PRES-RELIEF...
#include "rbtc_presrr.cmn"
C
C.....REACTOR (OR PRES-RELIEF VESSEL) PROPERTIES...
#include "rxn_rprops.cmn"
EQUIVALENCE (TEMP, RPROPS_UTEMP)
EQUIVALENCE (PRES, RPROPS_UPRES)
EQUIVALENCE (VFRAC, RPROPS_UVFRAC)
EQUIVALENCE (BETA, RPROPS_UBETA)
EQUIVALENCE (VVAP, RPROPS_UVVAP)
EQUIVALENCE (VLIQ, RPROPS_UVLIQ)
EQUIVALENCE (VLIQS, RPROPS_UVLIQS)
C
#include "shs_stwork.cmn"
EQUIVALENCE (MKBAS, STWORK_NDUM)
EQUIVALENCE (MKPHAS, STWORK_NBLM)
EQUIVALENCE (MTAPP, STWORK_NCOVAR)
EQUIVALENCE (MKBASS, STWORK_NWR)
EQUIVALENCE (MTAPPS, STWORK_NIWR)
EQUIVALENCE (SSALT, STWORK_RDUM1)
EQUIVALENCE (VSALT, STWORK_RDUM2)
EQUIVALENCE (FSALT, STWORK_FFSALT)
#include "pputl_ppglob.cmn"
#include "dms_ncomp.cmn"
#include "dms_plex.cmn"
EQUIVALENCE (IB(1), B(1))
C
C DECLARE ARGUMENTS
C
INTEGER IDXSUB(NSUBS),ITYPE(NSUBS), INT(NINT),
+ IDS(2),NBOPST(6,NPO),IWORK(NIWORK),
+ IDX(NCOMP), INTR(NINTR), IWR(NIWR),
+ NREAL, KCALL, KFAIL, KFLASH,I
REAL*8 SOUT(1), WORK(NWORK),
+ STOIC(NC,NSUBS,NR), RATES(1),
+ FLUXM(1), FLUXS(1), RATCAT(NTCAT),
+ RATSSA(NTSSAT), Y(NCOMP),
+ X(NCOMP), X1(NCOMP), X2(NCOMP)
REAL*8 RATALL(NRALL),USERV(NUSERV),
+ REALR(NREALR),WR(NWR), XCURR
C
C
C DECLARE LOCAL VARIABLES
C
INTEGER IMISS, MKBAS, MKPHAS,MTAPP, MKBASS,
+ MTAPPS,LMW
REAL*8 REAL(NREAL), XL(3), B(1), RMISS, XLEN,
+ DIAM, TEMP, PRES, VFRAC, BETA,
+ VVAP, VLIQ, VLIQS, SSALT, VSALT,
+ FSALT, RTEMP, DENLIQ,CONAA, CONACT,
+ FTERM, STERM, RATE, SUMR , KD , PCH3, PCO, PH2, KCH3O,
+ KH, FENZI, FENMU
REAL*8 T, P, YCH3, YCO, YH2, FCH3, FCO, FH2
INTEGER XMW
REAL*8 PHI(NCOMP),DPHI(NCOMP)
INTEGER N, KDIAG,KPHI,KER
#include "dms_ipoff1.cmn"
C
C INITIALIZE RATES
C
C
C STATEMENT FUNCTIONS FOLLOW
C
C
C BEGIN EXECUTABLE CODE
C
XMW(I) = LMW + I
C
C SET PLEX OFFSETS
C
LMW = IPOFF1_IPOFF1(306)
DO 100 I = 1, NC
RATES(I) = 0D0
XL(I) = 0D0
100 CONTINUE
C
DO 101 I = 1, NCOMP
XL(IDX(I)) = X(I)
101 CONTINUE
C
C The structure in the array SOUT is as follows:
C
C SOUT(1) - SOUT(NCC) : Component flowrates(kg-moles/sec)
C SOUT(NCC+1) : Total flowrates(kg-moles/sec)
C SOUT(NCC+2) : Temperature(K)
C SOUT(NCC+3) : Pressure(N/SQM)
C SOUT(NCC+4) : Mass enthalpy(J/KG)
C SOUT(NCC+5) : Molar vapor fraction
C SOUT(NCC+6) : Molar liquid fraction
C SOUT(NCC+7) : Mass entropy(J/KG-K)
C SOUT(NCC+8) : Mass density(KG/CUM)
C SOUT(NCC+9) : Molecular Weight
C
C Details of this infomation can be found in the User Guide
C on page 17-10 for 8.5-6 or Reference Manual Vol. 6, User Models
C for Release 9.
C
C Set Reactor Temperature
C
CALL PPMON_FUGV(TEMP,PRES,Y,NC,IDX,NBOPST,KDIAG,KPHI,PHI,
+ DPHI,KER)
C
C BEGIN EXECUTABLE CODE
C
T=TEMP
P=PRES
YCH3=Y(1)
YCO=Y(2)
YH2=Y(3)
C
PCH3=YCH3*P
PCO=YCO*P
PH2=YH2*P
C
C
FCH3=PCH3*PHI(1)
FCO=PCO*PHI(2)
FH2=PH2*PHI(3)
C
C Get liquid mixture density
C
DENLIQ = 1.0 / STWORK_VL
C
C Compute Concentration for reactants:
C
C CONC(i) = X(i) * RHO
C
CONAA = XL(1) * DENLIQ
CONACT = XL(2) * DENLIQ
C
C
C
C CALCULATE RATES OF REACTIONS
C
C The rates must be set for every single component exists in the
C system(both reactants and products) according to stoichiometry.
C
C RATES - The rates for all components
C
C Acetone + Allyl Alcohol -> N-Propyl Propionate
C
KD = REALR(1) * EXP( -REALR(2) / PPGLOB_RGAS / TEMP )
STERM = conaa * conact**0.5
KCH3O = EXP ( REALR(3) / PPGLOB_RGAS - REALR(4) / TEMP )
KH = EXP ( REALR(5) / PPGLOB_RGAS - REALR(6) /PPGLOB_RGAS /TEMP)
FENZI = KD*KCH3O*(FCH3/FH2**0.5)*(1-FH2**0.5*FCO/KD/FCH3)
FENMU = (1+KCH3O*FCH3/FH2**0.5) * (1+KH**0.5*FH2**0.5)
RATE = FENZI * STERM / FENMU
RATES(1) = -rate
RATES(2) = rate
RATES(3) = 2*rate
C
C Checking Mass Balance for RATES Vector
C
SUMR = 1.0
DO 102 I=1,NCOMP_NCC
SUMR = SUMR + RATES(I)*B(XMW(I))
102 CONTINUE
IF (DABS(1.0 - SUMR) .GT. 1E-6) THEN
WRITE(USER_NHSTRY,*)
+ 'Calculated Rates Not in Mass Balance!'
WRITE(USER_NHSTRY,*)
+ 'Errors in User Kinetics Subroutines!'
ENDIF
write(USER_NHSTRY,*) 'volrc = ', RCSTRR_VOLRC
write(USER_NHSTRY,*) 'vfrrc = ', RCSTRR_VFRRC
RETURN
#undef P_NPOFF1
END
|
|