以梦为马,不负韶华

搜索
查看: 3081|回复: 1
收起左侧

编译Fortran代码时出现错误和警告

[复制链接]
发表于 1970-1-1 08:00:00 显示全部楼层 |阅读模式
各位大侠,我在练习《Aspen plus getting started customizing unit operation models》中的例子putting the models equations in the user subroutine 时,按照书上的代码编写,但是在编译的时候弹出如下错误,请问该如何解决。我已经检查过了,提示中133行的那个MW,书上给的代码里,确实没有定义,所以是书上代码错误了吗?还请各位高手指教,急!谢谢大家!
(_Z[6ZO@6YN[{ZQ_0{K(W`3.png
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-9 05:12

Powered by 以梦为马,不负韶华

© 2024-2099 Meng.Horse

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