gPROMS二次开发教程(03):第一个模型——把一台 CSTR 写成 gPROMS 能解的方程组
gPROMS二次开发教程03第一个模型——把一台 CSTR 写成 gPROMS 能解的方程组版本声明块工具/软件gPROMS 桌面建模环境gPROMS ModelBuilder检索期官方发布锚点gPROMS Process 2022.1.0适用版本以官方发布说明为准语言/环境gPROMS 语言equation-oriented modelling顶层实体MODELS/PROCESSES本文目标把一台连续搅拌釜反应器CSTR从物理描述逐步翻译成 gPROMS 能求解的稳态方程组并完成建模的第一条纪律——自由度核对一句话结论一台 CSTR 稳态模型的本质只有三组方程——总物料衡算、组分衡算、能量衡算——再加一组本构式如反应速率式把它们写进MODELS在PROCESSES里实例化并赋参数然后核对方程数 未知数本文示例为 6 个未知量对 6 个方程你就完成了第一次真正意义上的 gPROMS 建模。〇、本篇要解决的认知问题Q1从物理模型到方程组中间到底要经过哪几步每步要交出什么Q2MODELS实体的最小骨架长什么样参数段、变量段、方程段各装什么Q3怎么用PROCESSES把模型实例化并给参数赋值Q4稳态求解后怎么判断这个解是可信的而不是软件随便给了我一组数Q5什么是自由度怎么用直觉快速检查方程数够不够一、机制解析1.1 从物理到方程四步翻译流程gPROMS 是 equation-oriented 平台建模的第一动作不是点模块而是写方程。任何单元模型的翻译都走同一条流水线① 划控制体 ② 写守恒方程 ③ 补本构方程 ④ 定参数 选一个盒子 质量/组分/能量 速率式、相平衡、 把已知量从 声明进出流股 进出之差 累积 传递关系等 方程里摘出来 │ │ │ │ ▼ ▼ ▼ ▼ 图进出口 式Σin - Σout 0 式r f(T, C…) 表已知量清单四步里最容易出错的是第 ③ 步与第 ④ 步的边界哪些量放方程里求哪些量当参数给定这个决定直接决定模型的可解性§1.5。经验法则先在纸上写出方程数一遍方程个数、再数一遍未知量个数两数不等就不要打开软件。软件不会替你补方程只会告诉你解不出来。1.2 CSTR 控制体与它的方程组取一台连续搅拌釜反应器做如下假设全釜理想混合出口浓度/温度 釜内值、恒体积液位恒定、单一放热反应、夹套等温冷却。控制体示意F_in, T_in, C_Ain │ ▼ ┌───────────────────────────┐ │ 理想混合釜 │ ← 釜内C_A, T, V │ 全釜同一浓度与温度 │ 反应A → B放热 │ 反应速率 r f(T, C_A) │ └───────────┬───────────────┘ │ ▲ 冷却介质带走热量夹套 ▼ F_out, T_out, C_Aout 釜内 C_A, T稳态无累积下的方程清单编号方程物理意义类型E1F_in - F_out 0总物料衡算恒体积、稳态 ⇒ 进出守恒E2F_in*C_Ain - F_out*C_A - r*V 0组分 A 衡算进 - 出 - 反应消耗 0守恒E3焓衡算进料带入 - 出料带出 ± 反应热 - 冷却移热 0能量衡算守恒E4r k0*exp(-Ea/(R*T))*C_A反应速率Arrhenius 本构本构E5V - F_out*tau 0之类的停留时间关系几何/水力约束本构E6冷却移热与温差的关系式换热本构本构铁律 8建模先算自由度任何模型示例给出后必须同步给出方程数 vs 未知数核对与已知量清单。本节与 §二.3 会完整兑现这条。1.3MODELS实体的最小骨架一个模型的骨架由声明与方程两部分组成具体段关键字与书写规则以官方文档为准MODELS ┌─ 声明区把模型用到的所有量登记造册 │ PARAMETER ← 已知量几何、进料、动力学常数——已确证关键字 │ VARIABLE ← 待求量出口状态、反应速率——已确证关键字 └─ 方程区把 E1~E6 写进去段名以官方文档为准关键点声明区是给求解器看的清单方程区是给求解器看的约束。二者必须严格对应——声明了却不出现在方程里的变量会变成自由变量直接破坏可解性。1.4PROCESSES把模型变成一台具体的设备MODELS只是蓝本不带任何具体数值。要真正算起来需要在PROCESSES里做三件事PROCESSES ① UNIT 声明 ← 把 MODELS 里的模型实例化成一台设备已确证关键字 ② 参数赋值 ← 把该实例的 PARAMETER 填上具体数值 ③ TOPOLOGY 连接 ← 把设备端口 PORT 连起来连接即方程——已确证关键字心法模型与工况分离。同一个MODELS里的 CSTR可以被实例化成进料 100 kg/h 的工况甲和进料 200 kg/h 的工况乙两台设备互不干扰。这正是第 13 篇一个模型多种工况的基础。1.5 自由度为什么方程数 未知数是铁律gPROMS 求解的是联立方程组。可解的前提是方程数 未知量数。破坏这个平衡的两种典型情形情形数学表现你会看到的现象方程太少欠定方程数 未知量数报自由度不足 / 无法确定唯一解方程太多超定方程数 未知量数报超定 / 约束冲突或无解数量相等但结构奇异方程线性相关例如把同一个衡算写了两遍能进求解但残差不降、结果荒谬直觉检查法三步① 列出所有未知量变量段里的每一个② 列出所有独立约束每一条不重复的方程③ 逐一消元——每用一个方程消掉一个未知量最后能否恰好把所有未知量都消掉。消不掉的量就是自由度缺口。经验法则把已知量清单和方程清单分别写在两张纸上用消元计数而不是感觉来判定。第 10 篇会把这套直觉升级为系统的诊断流程。二、完整模型与逐行剖析代码 2-1CSTR 稳态模型MODELS结构示意全段抄录% --------------------------------------------------------------------------- % 说明本块为结构示意。除已确证的实体与段关键字MODELS / PARAMETER / % VARIABLE外方程段的段名与方程书写规则以官方 gPROMS 文档为准。 % 方程本身是标准守恒式数值均为教学示例值请以文献或官方示例数据替换。 % --------------------------------------------------------------------------- MODELS % 顶层实体模型定义 %% ---- 声明区已知量参数---- PARAMETER % 段已知量已确证关键字 F_in 1.0 % 进料体积流量示意单位 C_Ain 2.0 % 进料中 A 的浓度 T_in 320.0 % 进料温度 V 0.5 % 釜有效体积 k0 1.0e6 % Arrhenius 指前因子示例值需文献替换 Ea 5.0e4 % 活化能示例值需文献替换 R 8.314 % 通用气体常数 dH -8.0e4 % 反应焓负值表示放热示例值 rho_cp 4.0e3 % 物料体积热容 UA 500.0 % 夹套总传热系数×面积 T_c 300.0 % 冷却介质温度 %% ---- 声明区待求量变量---- VARIABLE % 段待求量已确证关键字 F_out % 出口体积流量 C_A % 釜内 出口A 的浓度 T % 釜内 出口温度 r % 反应速率 tau % 平均停留时间 Q_cool % 夹套移热速率 %% ---- 方程区守恒 本构段名与书写规则以官方文档为准---- %% E1 总物料衡算稳态、恒体积 ⇒ 进 出 F_in - F_out 0 %% E2 组分衡算进 - 出 - 反应消耗 0 F_in*C_Ain - F_out*C_A - r*V 0 %% E3 能量衡算进料带入 - 出料带出 反应放热 - 夹套移热 0 % 注反应放热以 |dH|*r*V 形式进入夹套移热 Q_cool 是待求量之一 F_in*rho_cp*(T_in - T) - dH*r*V - Q_cool 0 %% E4 速率本构Arrhenius 形式 r k0*exp(-Ea/(R*T))*C_A %% E5 停留时间定义tau V / F_out tau*F_out - V 0 %% E6 夹套移热本构Q_cool UA*(T - T_c) Q_cool - UA*(T - T_c) 0逐行剖析声明区为什么分两段PARAMETER装已知量进料、几何、动力学常数VARIABLE装待求量出口状态、速率、移热。把量放错段是模型写得出来但解不出来的第一大来源——把一个待求量误写成参数就等于少了一个未知量、多了一个约束。E1为什么这么废话稳态 恒体积下进出看似平凡但它是闭合方程组的必要一环省略它会立刻造成欠定。E2的符号约定反应消耗以- r*V出现因为r定义为消耗 A 的速率。符号约定必须在模型里统一否则会算出负浓度。E3的能量衡算把反应热与冷却并在一起这是 CSTR 非等温特性的核心dH取负值时- dH*r*V为正表示放热。E4的 Arrhenius 是本构式不是守恒式它把速率与温度、浓度联系起来是物理化学进入方程的入口。E5/E6是两条定义式它们把辅助量tau、Q_cool与主状态量绑定作用是补齐未知量数目让方程组闭合。数值均为示例值请务必用可引用文献或官方示例的数据替换铁律 10。代码 2-2PROCESSES——实例化与赋参数结构示意% --------------------------------------------------------------------------- % 说明本块为结构示意展示模型 → 设备的实例化与赋参流程。 % UNIT 与 TOPOLOGY 为已确证关键字具体语法以官方 gPROMS 文档为准。 % --------------------------------------------------------------------------- PROCESSES % 顶层实体流程已确证关键字 %% ---- ① UNIT 声明把 MODELS 里的 CSTR 模型实例化成一台设备 ---- UNIT cstr_main AS cstr_steady % 声明一台设备引用模型 cstr_steady %% ---- ② 参数赋值给这台设备的已知量填具体数值 ---- F_in 1.0 % 覆盖模型默认的进料流量 C_Ain 2.0 % 本工况的进料浓度 T_in 320.0 % 本工况的进料温度 T_c 300.0 % 本工况的冷却介质温度 %% 其余参数沿用模型默认值跨工况复用时应显式列出避免隐式继承 %% ---- ③ TOPOLOGY 连接把设备端口连起来连接即方程---- %% 本例为单台设备稳态演示暂不连接上下游 %% 若接入流程则在此把上游出口 PORT 与本设备入口 PORT 相连 %% 语义上等价于两端 PORT 内所有变量逐一写成相等方程。逐行剖析UNIT cstr_main AS cstr_steady是实例化左边是这台设备在流程里的名字cstr_main右边是它引用的模型cstr_steady。改流程不改模型改模型影响所有引用它的设备。参数赋值要显式即使某参数与模型默认值相同跨工况复用时也建议显式列出避免隐式继承导致我明明改了参数结果没变的困惑。TOPOLOGY段的存在感在单台设备时不强但它才是流程建模的主战场第 09 篇连接不是画线而是生成一批相等方程。整段没有任何求解指令给方程与参数求解是平台的事——这正是 equation-oriented 与按顺序调用模块最大的体验差异。代码 2-3自由度核对表本篇必须完成的一步【未知量清单】仅计 VARIABLE 段的 6 个 1) F_out 2) C_A 3) T 4) r 5) tau 6) Q_cool → 共 6 个 【独立方程清单】仅计 6 条互不重复的约束 E1 总物料 E2 组分 E3 能量 E4 速率本构 E5 停留时间 E6 移热本构 → 共 6 条 【核对结论】 方程数(6) 未知量数(6) ⇒ 自由度 0 ⇒ 稳态问题可解前提结构不奇异 【已知量清单】PARAMETER 段进料、几何、动力学、传热共 11 项 F_in, C_Ain, T_in, V, k0, Ea, R, dH, rho_cp, UA, T_c ——这 11 项必须在 PROCESSES 里被明确赋值或使用模型默认值并被记录。 【风险点】 若把 C_A 误放进 PARAMETER未知量变 5 个、参数变 12 个 ⇒ 系统欠定 若把 E5 与 E6 删掉未知量仍 6 个、方程变 4 条 ⇒ 系统欠定直接报错。逐行剖析这张表就是铁律 8 的落地。请把它当成每次建新模型的肌肉动作——先数未知量、再数方程、写结论、列已知量、标风险点。第 10 篇会把结构奇异与数值奇异的区分补上。三、常见报错与排查报错 3-1提示自由度不足 / 无法确定唯一解欠定。现象模型能载入但求解器拒绝求解或给出解不唯一。根因方程数 未知量数常见于漏写一条衡算或把待求量误放进参数段。解法回到代码 2-3 的表逐条重数重点检查辅助量如本例tau、Q_cool是否都有对应的定义式。报错 3-2提示超定 / 约束冲突。现象求解报约束过多。根因方程数 未知量数常见于同一衡算写了两遍“在流程里又额外加了一条相同约束”或模型参数被两处赋值而不是一处。解法检查是否有重复或线性相关的方程确认参数赋值唯一。报错 3-3残差不降 / 结果荒谬负浓度、温度冲出量程。现象能进求解但解不可信。根因多为符号约定不一致或初值离真实解太远。解法统一符号本模型约定r为消耗速率、dH负值为放热给变量合理初值温度从T_in附近起步并参考第 10 篇的初始化思路。报错 3-4单位不一致导致的解偏离。现象解的量级明显错误如温度算出 30000。根因R 8.314与Ea 5.0e4必须单位配套如 J/mol/K 配 J/molrho_cp、UA的单位也要与流量、温度单位自洽。解法把每条方程的量纲手工推一遍确保等式两侧同量纲第 05 篇会系统讲单位一致性。报错 3-5改了MODELS却没生效。现象修改模型后结果不变。根因流程里的UNIT仍引用旧模型或参数在PROCESSES里被显式赋值覆盖了模型的默认值。解法检查UNIT ... AS ...指向的模型名以及PROCESSES中的显式赋值优先级。四、动手练习练习 1基线模型抄录代码 2-1 与 2-2建立cstr_steady模型与cstr_main流程用示例参数求解稳态。判定求解成功并得到C_A、T的数值把结果与代码 2-3 的核对表放在一起作为工程的第一份回归基线铁律 9。练习 2自由度破坏实验故意删掉E5停留时间定义式重新求解。判定能观察到欠定类报错能用自己的话解释删一条方程为什么会让未知量消不掉随后恢复并复跑结果与练习 1 一致。练习 3符号约定实验把E2中的- r*V改成 r*V并求解。判定能观察到解的物理荒谬浓度或温度超出合理范围理解符号约定错误的后果改回并复跑。练习 4工况复用在PROCESSES里新增第二台设备引用同一个cstr_steady模型但把F_in从 1.0 改为 2.0 并重算。判定两台设备共享模型、各自有参数能说明模型与工况分离带来的复用收益。练习 5思考题无标准答案如果要把这台 CSTR 从稳态扩展为动态模型你预计需要在方程组里增加什么时间自变量、累积项、初值写出你的三条猜测第 08 篇会给出答案。五、小结与下一篇预告本篇完成了从物理到方程的第一次完整跨越四步翻译流程划控制体 → 写守恒 → 补本构 → 定参数、MODELS骨架PARAMETER/VARIABLE两段声明 方程、PROCESSES三步UNIT实例化 → 赋参数 →TOPOLOGY连接、以及建模第一纪律自由度核对本文 6 方程对 6 未知量。请把先数方程、再数未知量变成肌肉记忆铁律 8并坚持数值必须来自可引用来源铁律 10。第 04 篇《语言的骨架》将把本篇用到的零散关键字系统化MODELS/PROCESSES/TASKS三类顶层实体各自的分工、TASK的PARAMETER/VARIABLE/SCHEDULE三段结构、UNIT/TOPOLOGY/PORT与连接即方程的语义以及方程导向建模与顺序模块式模拟器的本质差别。本篇认知问题回显FAQQ1从物理模型到方程组中间要经过哪几步A四步①划控制体选一个盒子并声明进出流股②写守恒方程质量、组分、能量各自的进出之差 累积稳态时累积为零③补本构方程如反应速率式、相平衡、传热关系④定参数把已知量从方程里摘出来放进参数段形成已知量清单。四步走完才打开软件。Q2MODELS 实体的最小骨架包含哪几部分A两部分声明区与方程区。声明区用 PARAMETER 段登记已知量、用 VARIABLE 段登记待求量两段均已确证方程区写入守恒与本构方程其中守恒式是标准物理关系。声明与方程必须严格对应——声明了却不出现在方程里的量会成为自由变量直接破坏可解性。方程段的关键字以官方文档为准。Q3怎么用 PROCESSES 把模型实例化并赋参数A三步①用 UNIT 声明把一个模型实例化成一台具名设备如 UNIT cstr_main AS cstr_steady②给该实例的参数填具体数值如 F_in、C_Ain、T_c跨工况复用时建议显式列出以免隐式继承③用 TOPOLOGY 连接上下游的 PORT。这样模型与工况分离同一模型可被多台设备、多种工况复用。Q4稳态求解后怎么判断解是可信的A三条判据一是自由度核对通过即方程数等于未知量数且结构不奇异二是量纲自洽逐条推一遍每条方程两侧同量纲避免温度算出 30000 这类量级错误三是物理合理性检查浓度非负、温度在合理区间、符号约定一致。再用固定算例复跑对比作为回归基线。Q5什么是自由度怎么快速检查方程数够不够A自由度指方程数与未知量数之差为零才可解唯一。检查法三步①列出变量段里的每个待求量②列出每条互不重复的独立约束③逐一消元每用一个方程消掉一个未知量看能否恰好全部消掉。消不掉的即自由度缺口。本文示例 6 个未知量对 6 条方程故可解。本文涉及的语言细节以所购版本随附的官方 gPROMS 文档为准。