aspen外挂fortran动力学方程探讨
本帖最后由 六月痕 于 2013-12-7 20:58 编辑C User Kinetics Subroutine for RCSTR, RPLUG, RBATCH, PRES-RELIEFC SUBROUTINEUSRKIN (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 以上定义子程序变量 IMPLICITNONE !fortran 语句 清除隐含变量CC DECLARE VARIABLES USED IN DIMENSIONINGC INTEGERNSUBS, NINT,NPO, NIWORK,NWORK, + NC, NR, NTCAT, NTSSAT,NCOMP, + NRALL, NUSERV,NINTR,NREALR,NIWR, + NWRC#include "ppexec_user.cmn" !公用区,存储运行时间控制标志 EQUIVALENCE(RMISS, USER_RUMISS) !EQUIVALENCE 是fortran中的等价语句 EQUIVALENCE(IMISS, USER_IUMISS !USER_RUMISS 实型补遗代码 USER_IUMISS 实型补遗代码 CCCCC.....RCSTR...#include "rcst_rcstri.cmn" !公共模块包含 RCSTR 模块的整型结构参数#include "rxn_rcstrr.cmn" !公共模块包含 RCSTR 模块的实型结构参数CC.....RPLUG...#include "rplg_rplugi.cmn" !公共模块包括RPLUG模块的整型结构参数#include "rplg_rplugr.cmn" !公共模块包括RPLUG模块的实型结构参数 EQUIVALENCE(XLEN, RPLUGR_UXLONG)!长度 EQUIVALENCE(DIAM, RPLUGR_UDIAM) !直径CC.....RBATCH...#include "rbtc_rbati.cmn"#include "rbtc_rbatr.cmn"CC.....PRES-RELIEF...#include "rbtc_presrr.cmn" !公共模块包括泄压系统模块的实形结构参数CC.....REACTOR (OR PRES-RELIEF VESSEL)PROPERTIES...#include "rxn_rprops.cmn" !公共区 实型性质(例如温度。压强等)P71 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" !SHS_STWORK 是物流闪蒸工作偏移量公用区 P134 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" !DMS_PLEX含有Plex的长的内核存储区域,存储fortran调用所需的物性参数 EQUIVALENCE(IB(1), B(1))!B 实型的Plex区域IB 整型的Plex区域C C DECLARE ARGUMENTSC INTEGERIDXSUB(NSUBS),ITYPE(NSUBS), INT(NINT), + IDS(2),NBOPST(6,NPO),IWORK(NIWORK), + IDX(NCOMP), INTR(NINTR), IWR(NIWR), + NREAL, KCALL, KFAIL,KFLASH,I REAL*8SOUT(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*8RATALL(NRALL),USERV(NUSERV), + REALR(NREALR),WR(NWR), XCURRCCC DECLARE LOCAL VARIABLESC INTEGERIMISS, MKBAS, MKPHAS,MTAPP, MKBASS, + MTAPPS,LMW REAL*8REAL(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 INTEGERXMWCC INITIALIZE RATESCCC STATEMENT FUNCTIONS FOLLOWCCC BEGIN EXECUTABLE CODEC XMW(I) =LMW + I !组分分子量,The MW values start from B(LMW + 1)P42CC SET PLEX OFFSETSC LMW = IPOFF1_IPOFF1(306) !??? 没找到依据,猜测确定组分数据区域的DMS_PLEX偏移量 DO100 I = 1, NC RATES(I) = 0D0 XL(I) = 0D0 100 CONTINUEC !以上排数偏移量的影响 DO101 I = 1, NCOMP XL(IDX(I)) = X(I) 101 CONTINUE !以上为每个组分质量分数赋值CC The structure in the array SOUT is as follows:CC SOUT(1) - SOUT(NCC) : Component flowrates(kg-moles/sec)C SOUT(NCC+1) : Totalflowrates(kg-moles/sec)C SOUT(NCC+2) :Temperature(K)C SOUT(NCC+3) :Pressure(N/SQM)C SOUT(NCC+4) : Massenthalpy(J/KG)C SOUT(NCC+5) : Molar vaporfractionC SOUT(NCC+6) : Molar liquidfractionC SOUT(NCC+7) : Massentropy(J/KG-K)C SOUT(NCC+8) : Massdensity(KG/CUM)C SOUT(NCC+9) : Molecular WeightCC Details of this infomation can be found in the User GuideC on page 17-10 for 8.5-6 or Reference Manual Vol. 6, User ModelsC for Release 9.CC Set Reactor TemperatureC RTEMP = SOUT(NCOMP_NCC+2) !反应器温度CC Get liquid mixture densityC DENLIQ = 1.0 / STWORK_VL !求密度CC Compute Concentration for reactants:CC CONC(i) = X(i) * RHOC CONAA = XL(1) * DENLIQ !计算Allyl-Alcohol浓度 CONACT = XL(2) * DENLIQ !计算Acetone浓度CCCC CALCULATE RATES OF REACTIONSCC The rates must be set for every single component exists in theC system(both reactants and products) according to stoichiometry.CC RATES - The rates for all componentsCC Acetone + Allyl Alcohol -> N-Propyl PropionateC !动力学方程主代码 FTERM = REALR(1) * EXP( -REALR(2) / PPGLOB_RGAS / RTEMP ) !计算k值,其中real(1), real(2)均为subroutine中的可变整型量 STERM = conaa * conact**0.5 RATE= FTERM * STERM * RCSTRR_VOLRC ! ??不知道为什么要乘以反应器体积,难道求速率方程式时是以单位体积为基准? RATES(1) = -rate !每个组分必须均指定速率(非常重要否则计算出错) RATES(2) = -rate RATES(3) = rateCC Checking Mass Balance for RATES Vector !核对质量是否守恒C SUMR = 1.0 DO102 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,*) + 'CalculatedRates Not in Mass Balance!' WRITE(USER_NHSTRY,*) + 'Errorsin User Kinetics Subroutines!' ENDIF write(USER_NHSTRY,*)'volrc = ', RCSTRR_VOLRC write(USER_NHSTRY,*)'vfrrc = ', RCSTRR_VFRRC RETURN#undef P_NPOFF1 END
问题: 1LMW = IPOFF1_IPOFF1(306) !??? 没找到依据,猜测确定组分数据区域的DMS_PLEX偏移量 2#include "dms_ipoff1.cmn" !?? aspen内部之间相互调用的存储空间 3 RATE= FTERM *STERM * RCSTRR_VOLRC ! ??不知道为什么要乘以反应器体积,难道求速率方程式时是以单位体积为基准?
体会:首先感谢论坛提供的资料,以上实例来自论坛,大家可以搜索下载。上面注释中的页码对应ASPEN_PLUS_10.0_用户模型.pdf。对于aspen调用fortran动力学方程,正处于学习阶段。由于论坛此方面的资料较少,特开此贴希望大家积极参与讨论,如果上述有不妥之处,也希望能者不吝指教。对于程序的书写,谈一下个人感受。Aspen自带有模板D:(安装盘)\Program Files (x86)\AspenTech\Aspen Plus V7.3\Engine\User下的usrkin.f。可以在此基础上添加主代码即可。Top: 1 fortran 程序名字不要超过6字符,程序内均采用双精度型变量 2 合理调用aspen内部物性参数(难点),注意偏移量的影响 3 对方程式每个组分指定反应速率(曾经漏掉过,一直报错) 4 最好核对质量守恒,曾经见过一个程序没有此段代码。否则容易出错(曾经写过一程序,一直提示质量不守恒,不知是不是缺少此段代码的过)
以下隐藏为bkp文件及相应ppt(论坛可找到)
http://meng.horse/xwb/images/bgimg/icon_logo.png 该贴已经同步到 六月痕的微博 不会很伤啊 请问,能外挂c++的库吗 都有什么啊? zjwmcl 发表于 2013-12-7 21:06
都有什么啊?
附件是讲解用户动力学程序的ppt,压缩包是bkp文件和fortran文件 这确实是很需要探讨的问题!尤其对反应器来说很有必要! 看不懂呀 六月痕,亲,可不可以关注下我哦[抱抱]\n\nhttp://meng.horse/xwb/images/bgimg/icon_logo.png 来自 Fennie梓珊 的新浪微博 好资料,不学不能说会ASPEN 看不懂,代码控 限售条件股份 下下来学习学习 给力!高手啊 没整过!围观! 好资料,正好需要哦 是关于Fortran的ppt吗,先看看 一提到编程,头就大了。 正需要fortran资料,学习学习,楼主辛苦了。 {:1106_362:}
楼主厉害 正在做动力学的问题,希望有所帮助 正需要fortran资料,学习学习,楼主辛苦了。
謝謝樓主分享
页:
[1]
2