以梦为马,不负韶华

搜索
查看: 1694|回复: 0
收起左侧

关于aspen的user2的Fortran

[复制链接]
发表于 1970-1-1 08:00:00 显示全部楼层 |阅读模式
一个例题,在user2的stream results中却没有输出物流的信息(见附件图片),请教是怎么回事附件的apwz文件是8.0版的,hfum.f的代码如下:


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        Put in include statements and related declarations.
C
#include "ppexec_user.cmn"
#include "dms_plex.cmn"
C
       Real*8 B(1)
       Equivalence (B(1),IB(1))
C
#include "dms_ncomp.cmn"
C
C     DECLARE USRUS2 ARGUMENTS
C

C Include files pass additional variables via COMMONs.
C Ppexec_user.cmn passes USER_NHSTRY. (1) Dms_plex.cmn passes
C arrays containing component data such as molecular weight. (2)
C Dms_ncomp.cmn passes NCOMP_NCC. (3)
C ------------------- Declare arguments -------------------------------------
       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 --------------- Declare Local Variables ---------------------------------
       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, ! These functions allow access to real
     + USRUTL_GET_INT_PARAM, ! and integer parameters using named
     + USRUTL_SET_REAL_PARAM ! references, and to write results data to Aspen Plus. (4)
       INTEGER DMS_IFCMNC !Determines offset to universal constant data. (5)
       REAL*8 DLOG !Standard Fortran function.
C ----------------- Begin Executable Code ----------------------------------


C ----------------- Get configured REAL variables from Aspen Plus. ---------
       IFAIL = 0
       INDEX = 0 !Used for passing a structure. (6)


       IERR = USRUTL_GET_REAL_PARAM('DIAM', INDEX, DIAM) !Put Configured Variable called "DIAM" in local variable DIAM. (7)
       IF (IERR .NE. 0) THEN  !Write to History file if error. (8)
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING HYDRAULIC DIAMETER'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('LEN', INDEX, LEN)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING LENGTH'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('DIFF', INDEX, DIFF)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING DIFFUSIVITY'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('GEL_CONC', INDEX, CG) !Local variable
       IF (IERR .NE. 0) THEN !can have any name.
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING GEL CONCENTRATION'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('REJ_COEF', INDEX, REJ_COEF)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING REJECTION COEFFICIENT'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('COEF1', INDEX, C1)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING COEF1'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('COEF2', INDEX, C2)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING COEF2'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('COEF3', INDEX, C3)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING COEF3'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('COEF4', INDEX, C4)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING COEF4'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('PERM_PRES', INDEX, P_PERM)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING PERMEATE PRESSURE'
           IFAIL = 1
       END IF
       IERR = USRUTL_GET_REAL_PARAM('DELTA_P', INDEX, DELTA_P)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR FETCHING PRESSURE DROP'
           IFAIL = 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'
           IFAIL = 1
       END IF
C ---------------- Calculate viscosity -------------------------------------
       CALL SHS_CPACK(MSIN(1,1), NCP, IDX, X, FLOW) !Pack stream data. (9)
       KDIAG = 4
       CALL PPMON_VISCL(MSIN(NCOMP_NCC+2,1), MSIN(NCOMP_NCC+3,1), X,
     + NCP,IDX, NBOPST, KDIAG, MU, IERR)   
C      Calculate viscosity,put result in MU. (9)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY, *) ' ERROR EVALUATING VISCOSITY FOR FEED'
           IFAIL = 1
       END IF
       IF (IFAIL .EQ. 1) RETURN
C ---------------- Get location of molecular weight data.-------------------
       LMW = DMS_IFCMNC('MW') !Offset to component molecular weight data. (10)
C
C
C ---------------- Model Equations -----------------------------------------
       RHO  = MSIN(NCOMP_NCC+8,1) / 1000.  !Density of feed stream in g/cm^3. [= kg/l] (11)
       MU   = MU * 10.  !Viscosity of feed stream in g/cm/s.
       FIN  = MSIN(NCOMP_NCC+1,1) * MSIN(NCOMP_NCC+9,1) / RHO * 3600. !Feed flow in l/hr. (11)
       CIN  = MSIN(2,1) * B(LMW+2) / FIN * 3600000. !Protein conc.  !in feed stream in g/l. (11)
       PIN  = MSIN(NCOMP_NCC+3,1) / 101325. ! Feed stream pressure in atmospheres. (11)
       UAVE = FIN / (DIAM**2*3.14*NTUBES/4.) * 1000. / 3600.  !Bulk average velocity in cm/s.
       RE   = DIAM * UAVE * RHO / MU  !Reynolds number.
       SC   = MU / (RHO * DIFF)  !Schmidt number.
       CP   = CG * (1 - REJ_COEF)  !Permeate stream protein conc. in g/l.
       KM   = C1 * RE**C2 * SC**C3 * (DIAM/LEN)**C4 * DIFF/DIAM/100.  !Mass xfer coef in m/s.
       JM   = KM * DLOG((CG - CP) / (CIN - CP))  !Volumetric flux in m/s.
       FP   = JM * DIAM * LEN * 3.14 * NTUBES*100*3600/1000.  !Permeate stream flow rate in l/hr
       CR   = (CIN - FP/FIN*CP) / (1 - FP/FIN) !Retentate stream protein conc. in g/l.
       PRET = PIN - DELTA_P !Retentate stream pressure in atm.
C --------------- Assume PERMEATE stream is first, switch if not. ----------
       IPERM = 1
       IRET = 2
       IF (IDSMO(1,1) .EQ. 'RETE') THEN !IDSMO is an argument passed to the
           IPERM = 2 !subroutine. It contains the outlet
           IRET = 1 !stream ID’s. (12)
       END IF
C --------------- Fill SOUT array for PERMEATE stream. ---------------------
       SOUT(1,IPERM) = FP * RHO / 3600. / B(LMW+1) !Approximate water flow in kmol/s. (13)
       SOUT(2,IPERM) = FP * CP / 1000. / 3600. / B(LMW+2) !Protein flow in kmol/s. (13)
       SOUT(3,IPERM) = SOUT(1,IPERM) + SOUT(2,IPERM) !Total flow in kmol/s. (13)
       SOUT(4,IPERM) = MSIN(4,1) !Temp. unchanged from feed (K). (13)
       SOUT(5,IPERM) = P_PERM * 101325. !Pressure in N/m^2. (13)
C
C
C -- Fill SOUT array for RETENTAT stream using values from PERMEATE stream.
       SOUT(1,IRET) = MSIN(1,1) - SOUT(1,IPERM) !Water flow in kmol/s. (13)
       SOUT(2,IRET) = MSIN(2,1) - SOUT(2,IPERM) !Protein flow in kmol/s. (13)
       SOUT(3,IRET) = SOUT(1,IRET) + SOUT(2,IRET) !Total flow in kmol/s. (13)
       SOUT(4,IRET) = MSIN(4,1) !Temp. unchanged from feed (K). (13)
       SOUT(5,IRET) = PRET * 101325. !Pressure in N/m^2. (13)

C -- Now set values of the two variables designated as output parameters. --
       IERR = USRUTL_SET_REAL_PARAM('CP_PROT', INDEX, CP) !The HollowF model was designed to accept 2 output parameters. (14)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR STORING PERMEATE PROT CONC'
           IFAIL = 1
       END IF
       IERR = USRUTL_SET_REAL_PARAM('CR_PROT', INDEX, CR)
       IF (IERR .NE. 0) THEN
           WRITE(USER_NHSTRY,*) ' ERROR STORING RETENTATE PROT CONC'
           IFAIL = 1
       END IF
C --------------- END Executable Code ---------------------
       RETURN
       END



无标题.jpg

hfum.apwz

21.37 KB, 下载次数: 4

不想打字就选择快捷回复吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|以梦为马,不负韶华

GMT+8, 2025-3-5 00:36

Powered by 以梦为马,不负韶华

© 2024-2099 Meng.Horse

快速回复 返回顶部 返回列表