- 积分
- 71
- 注册时间
- 2013-5-27
- 积分
- 71
|
楼主 |
发表于 1970-1-1 08:00:00
显示全部楼层
这是我照着敲的代码
SUBROUTINE HFUM (NMATI, MSIN, NINFI, SINFI, NMATO,
2 SOUT, NINFO, SINFO, IDSMI, IDSII,
3 IDSMO, IDSIO, NTOT, NSUBS, IDXSUB,
4 ITYPE, NINT, INT, NREAL, REAL,
5 IDS, NPO, NBOPST, NIWORK, IWORK,
6 NWORK, WORK, NSIZE, SIZE, INTSIZ,
7 LD )
C
IMPLICIT NONE
#include "ppexec_user.cmn"
#include "dms_plex.cmn"
Real*8 B(1)
Equivalence (B(1),IB(1))
#include "dms_ncomp.cmn"
C
C DECLARE arguments
C
INTEGER NMATI, NINFI, NMATO, NINFO, NTOT,
+ NSUBS, NINT, NPO, NIWORK,NWORK,
+ NSIZE, NREAL
c
INTEGER IDSMI(2,NMATI), IDSII(2,NINFI),
+ IDSMO(2,NMATO), IDSIO(2,NINFO),
+ IDXSUB(NSUBS),ITYPE(NSUBS), INT(NINT),
+ IDS(2,3), NBOPST(6,NPO),
+ IWORK(NIWORK),INTSIZ(NSIZE),LD
c
REAL*8 MSIN(NTOT,NMATI), SINFI(NINFI),
+ SOUT(NTOT,NMATO), SINFO(NINFO),
+ WORK(NWORK), SIZE(NSIZE), REAL(NREAL)
C
C DECLARE LOCAL VARIABLES
C
INTEGER OFFSET, IERR, LDATA, KDIAG, IDX(10), NCP, I, J, INDEX
+ LMW, NTUBES, IPERM, IRET, IFAIL
REAL*8 DIAM, LEN, DIFF, CG, REJ_COEF, C1, C2, C3, C4, P_PERM,
+ DELTA_P, RHO, MU, FIN, CIN, PIN, UAVE, RE, SC,
+ CP, CR, KM, JM, FP, PRET, XMW, X(10), FLOW
C DECLARE FUNCTIONS
INTEGER USRUTL_GET_REAL_PARAM,
+ USRUTL_GET_INT_PARAM,
+ USRUTL_SET_REAL_PARAM
INTEGER DMS_IFCMNC
REAL*8 DLOG
C
C BEGIN EXECUTABLE CODE
C GET CONFIGURED REAL VARIABLES FROM ASPEN PLUS
IFAIL=0
INDEX=0
IERR=USRUTL_GET_REAL_PARAM('DIAM',INDEX,DIAM)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING HYDRAULIC DIAMETER'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('LEN',INDEX,LEN)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING LENGTH'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('DIFF',INDEX,DIFF)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING DUFFUSIVITY'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('GEL_CONC',INDEX,CG)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING GEL CONCENTRATION'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('REJ_COEF',INDEX,REJ_COEF)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING REJECTION COEFFICIENT'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('COEF1',INDEX,C1)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING COEF1'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('COEF2',INDEX,C2)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING COEF2'
IFALL=1
END IF
c
IERR=USRUTL_GET_REAL_PARAM('COEF3',INDEX,C3)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING COEF3'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('COEF4',INDEX,C4)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING COEF4'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('PERM_PRES',INDEX,P_PERM)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING PERMEATE PRESSURE'
IFALL=1
END IF
C
IERR=USRUTL_GET_REAL_PARAM('CELTA_P',INDEX,DELTA_P)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING PRESSURE DROP'
IFALL=1
END IF
C GET CONFIGURED INTEGER VARIABLES FROM ASPEN PLUS
IERR=USRUTL_GET_INT_PARAM('NTUBES', INDEX, NTUBES)
IF (IERR .NE. 0) THEN
WRITE (USER_NHSTRY,*) 'ERROR FETCHING NUMBER OF TUBES'
IFALL=1
END IF
C CALCULATE VISCOSITY
CALL SHS_CPACK(MSIN(1,1), NCP, IDX, X, FLOW)
KDIAG=4
CALL PPMON_VISCL(MSIN(NCOMP_NCC+2,1), MSIN(NCOMP_NCC+3,1), X, NCP,
+ IDX, NBOPST, KDIAG, MU, IERR)
IF (IERR .NE. 0) THEN
WRITE(USER_NHSTRY, *) ' ERROR EVALUATING VISCOSITY FOR FEED'
IFALL=1
END IF
C
IF (IFALL .EQ. 1) RETURN
C GET LOCATION OF MOLECULAR WEIGHT DATA
LMW=DMS_IFCMNC('MW')
C MODEL EQUATIONS
RHO=MSIN(NCOMP_NCC+8,1) / 1000
MU=MU*10
FIN=MSIN(NCOMP_NCC+1,1) * MSIN(NCOMP_NCC+9,1) / RHO*3600
CIN=MSIN(2,1) * B(LMW+2) / FIN *3600000
PIN=MSIN(NCOMP_NCC+3,1) / 101325
UAVE=FIN / (DIAM**2*3.14*NTUBES/4) * 1000 / 3600
RE=DIAM * UAVE * RHO / MU
SC=MU / (RHO * DIFF)
C
CP=CG * (1-REJ_COEF)
KM=C1 * RE**C2 * SC**C3 * (DIAM/LEN)**C4 * DIFF/DIAM/100
C
JM=KM * DLOG((CG - CP) / (CIN - CP))
FP=JM * DIAM * LEN * 3.14 * NTUBES*100*3600/1000
C
CR=(CIN - FP/FIN*CP) / (1 - FP/FIN)
C
PRET=PIN-DELTA_P
C ASSUME PEAMEATE STREAM IS FIRST,SWITCH IF NOT
IPERM=1
IRET=2
IF (IDSMO(1,1) .EQ. 'RETE') THEN
IPERM=2
IRET=1
END IF
C FILL SOUT ARRY FOR PERMEATE STRAM
SOUT(1,IPERM) = FP * RHO / 3600 / B(LMW+1)
SOUT(2,IPERM) = FP * CP / 1000 /3600 / B(LMW+2)
SOUT(3,IPERM) = SOUT(1,IPERM) + SOUT(2,IPERM)
SOUT(4,IPERM) = MSIN(4,1)
SOUT(5,IPERM) = P_PERM * 101325
C FILL SOUT ARRAY FOR RETENTAT STREAM USING VALUES FROM PERMEATE STREAM
SOUT(1,IRET) = MSIN(1,1) - SOUT(1,IPERM)
SOUT(2,IRET) = MSIN(2,1) - SOUT(2,IPERM)
SOUT(3,IRET) = SOUT(1,IRET) + SOUT(2,IRET)
SOUT(4,IRET) = MSIN(4,1)
SOUT(5,IRET) = PRET * 101325
C NOW SET VALUES OF THE TWO VARIABLES DESIGNATED AS OUTPUT PARAMETERS
IERR = USRUTL_SET_REAL_PARAM('CP_PROT', INDEX, CP)
IF (IERR .NE. 0) THEN
WRITE(USER_NHSTRY, *) 'ERROR STORING PERMEATE PROT CONC'
IFALL=1
END IF
C
IERR = USRUTL_SET_REAL_PARAM('CR_PROT', INDEX, CR)
IF (IERR .NE. 0) THEN
WRITE(USER_NHSTRY, *) 'ERROR STORING RETENTATE PROT CONC'
IFALL=1
END IF
C
RETURN
END |
|