- 积分
- 94
- 注册时间
- 2012-5-5
- 积分
- 94
|
楼主 |
发表于 1970-1-1 08:00:00
显示全部楼层
补充代码:
- C$ #1 BY: ANAVI DATE: 1-JUL-1994 NEW FOR USER MODELS
- C
- C User Unit Operation Model (or Report) Subroutine for USER2
- C
- 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
- C
- C DECLARE VARIABLES USED IN DIMENSIONING
- C
- #include "ppexec_user.cmn"
- #include "dms_plex.cmn"
- Real*8 B(1)
- Equivalence(B(1),IB(1))
- #include "dms_ncomp.cmn"
-
- C
- C
- C THIS SUBROUTINE WILL SEPARATE WATER INTO THE SECOND OUTLET
- C
- C FIRST COPY FIRST INLET TO FIRST OUTLET
- C
- C
- C DECLARE ARGUMENTS
- C
- INTEGER NMATI, NINFI, NMATO, NINFO, NTOT,
- + NSUBS, NINT, NPO, NIWORK,NWORK,
- + NSIZE,NREAL
-
- 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
-
- 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
- C Declare Functions
- C
- 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 FORM ASPEN PLUS
- IFAIL = 0
- INDEX = 0
- IERR = USRUTL_GET_REAL_PARAM('DIAM',INDEX,DIAM)
-
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('LEN',INDEX,LEN)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('DIFF',INDEX,DIFF)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
-
- IERR = USRUTL_GET_REAL_PARAM('GET_CONC',INDEX,CG)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('REJ_COEF',INDEX,REJ_COEF)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('COEF1',INDEX,C1)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('COEF2',INDEX,C2)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('COEF3',INDEX,C3)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('COEF4',INDEX,C4)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('PERM_PRES',INDEX,P_PERM)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_GET_REAL_PARAM('DELTA_P',INDEX,DELTA_P)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
- C
- C GET CONGIGURED INTEGER VARIABLES FROM ASPEN PLUS
- C
- IERR = USRUTL_GET_INT_PARAM('NTUBES',INDEX,NTUBES)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
- C
- C CALCULATE VISCOSITY
- C
- 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),
- + IDX,NBOPST,KDIAG,MU,IERR)
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IF (IFAIL .EQ. 1) RETURN
- C
- C GET LOCATION OF MOLECULAR WEIGHT DATA
- C
- LMW = DMS_IFCMNC('MW')
- C
- C MODEL EQUATIONS
- C
- RHO = MSIN(NCOMP_NCC+8,1)/1000.
-
- MU = MU * 10.
- FIN = MSIN(NCOMP_NCC+1,1)
- CIN = MSIN(2,1) * B(LMW+2)/FIN*360000.
- PIN = MSIN(NCOMP_NCC+3,1)/101325.
-
- UAVE = FIN/(DIAM**2*3.14*NTUBES/4.)
-
- RE = DIAM*UAVE*RHO/MU
- SC = MU/(RHO*DIFF)
- CP = CG * (1-REJ_COEF)
- KM = C1*RE**C2 * SC**C3 * (DIAM/LEN)**C4 *DIFF/DIAM/100.
- JM = KM * DLOG(CG-CP)/(CIN-CP)
- FP = JM *DIAM*LEN*3.14*NTUBES*100*3600/1000.
- CR = (CIN -FP/FIN*CP)/(1-FP/FIN)
- PRET = PIN -DELTA_P
- C
- C ASSUME PERMEATE STREAM IS FIRST,SWITCH IF NOT
- IPERM =1
- IRET =2
- IF (IDSMO(1,1) .EQ. 'RETE' ) THEN
- IPERM =2
- IRET =1
- END IF
- C
- C FILL SOUT ARRAY FOR PERMEATE STREAM
- C
- SOUT(1,IPERM) = FP * RHO /3600.
- 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
- C FILL SOUT ARRAY FOR RETENTAT STREAM USING VALUES FORM PERMEATE STREAM
- C
- 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
- C NOW SET VALUES OF THE TWO VARIABLES DESIGNATED AS OUTPUT PARAMETERS
- C
- IERR = USRUTL_SET_REAL_PARAM('CP_PROT',INDEX,CP)
-
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- IERR = USRUTL_SET_REAL_PARAM('CR_PROT',INDEX,CR)
-
- IF (IERR .NE. 0) THEN
- WRITE(USER_NHSTRY,*)
- IFAIL = 1
- END IF
-
- RETURN
- END
复制代码 |
|