如何在Brightway2中建模多输出脱氢循环工艺?
Brightway2中脱氢工序多输出流建模解决方案
核心思路
Brightway2原生支持多产出活动,无需依赖第三方multifunctional包(该包的错误调用常导致矩阵奇异或交换类型冲突)。只需正确声明双输出流,并确保物质平衡,即可让后续工序直接引用两个产出。
分步实现
1. 创建脱氢工序多产出活动
定义活动时明确两个产出流,将氢气设为参考产品,不饱和载体作为副产物,同时保证输入输出的质量/能量平衡:
import brightway2 as bw # 切换到目标项目(需提前初始化并导入Ecoinvent) bw.projects.set_current("hydrogen_cycle") # 自定义数据库(用于存储加氢/脱氢工序) if "hydrogen_processes" not in bw.databases: custom_db = bw.Database("hydrogen_processes") custom_db.register() else: custom_db = bw.Database("hydrogen_processes") # 脱氢工序数据集 dehydrogenation_data = { 'name': 'Dehydrogenation of saturated H2 carrier', 'unit': 'kg', 'exchanges': [ # 输入:饱和储氢载体(假设已在自定义载体数据库中定义) { 'name': 'Saturated hydrogen carrier', 'unit': 'kg', 'amount': 1.0, 'type': 'technosphere', 'database': 'h2_carriers' }, # 输入:热能(引用Ecoinvent的高压蒸汽) { 'name': 'Steam, high pressure', 'unit': 'MJ', 'amount': 22.5, # 实际工艺能耗需根据数据调整 'type': 'technosphere', 'database': 'ecoinvent' }, # 输出1:氢气(功能单元,标记为参考产品) { 'name': 'Hydrogen, process output', 'unit': 'kg', 'amount': 0.048, # 示例产率,对应1kg饱和载体产氢量 'type': 'production', 'reference product': True }, # 输出2:不饱和储氢载体(循环回加氢工序) { 'name': 'Unsaturated hydrogen carrier', 'unit': 'kg', 'amount': 0.952, # 质量平衡:1kg输入 - 0.048kg氢 = 0.952kg不饱和载体 'type': 'production' } ] } # 将工序写入自定义数据库 custom_db.write(dehydrogenation_data)
2. 后续工序引用双输出流
压缩机调用氢气
直接将脱氢工序的氢输出作为压缩机的技术输入:
compressor_data = { 'name': 'Hydrogen compression to 300 bar', 'unit': 'kg', 'exchanges': [ { 'name': 'Hydrogen, process output', 'unit': 'kg', 'amount': 1.0, 'type': 'technosphere', 'database': 'hydrogen_processes', 'activity': 'Dehydrogenation of saturated H2 carrier' }, # 输入:电力(引用Ecoinvent数据) { 'name': 'Electricity, medium voltage', 'unit': 'kWh', 'amount': 0.12, # 示例压缩能耗 'type': 'technosphere', 'database': 'ecoinvent' } ] } custom_db.write(compressor_data)
不饱和载体循环加氢
将脱氢产出的不饱和载体作为加氢工序的输入,完成循环:
hydrogenation_data = { 'name': 'Hydrogenation of unsaturated H2 carrier', 'unit': 'kg', 'exchanges': [ { 'name': 'Unsaturated hydrogen carrier', 'unit': 'kg', 'amount': 0.952, 'type': 'technosphere', 'database': 'hydrogen_processes', 'activity': 'Dehydrogenation of saturated H2 carrier' }, # 输入:补充氢气(若有损耗) { 'name': 'Hydrogen, raw', 'unit': 'kg', 'amount': 0.002, # 示例损耗补充量 'type': 'technosphere', 'database': 'ecoinvent' }, # 输入:加氢热能 { 'name': 'Steam, high pressure', 'unit': 'MJ', 'amount': 18.0, 'type': 'technosphere', 'database': 'ecoinvent' }, # 输出:饱和储氢载体(循环回脱氢工序) { 'name': 'Saturated hydrogen carrier', 'unit': 'kg', 'amount': 1.0, 'type': 'production', 'reference product': True } ] } custom_db.write(hydrogenation_data)
3. 排查常见错误
- 矩阵奇异报错:确保所有交换的
type正确(technosphere为输入,production为输出),且物质平衡无矛盾(输入总量与输出总量匹配)。 multifunctional包冲突:该包多用于复杂分配场景,双产出循环流无需使用,直接用原生多产出活动即可避免报错。- 循环流引用失败:检查活动名称、数据库名称是否完全匹配,Brightway2对字符串匹配敏感,需完全一致。
4. 技术矩阵验证
可通过以下代码查看技术矩阵,确认脱氢工序的输入输出系数正确:
from brightway2 import TechnosphereBiosphereMatrix # 生成自定义数据库的技术-生物圈矩阵 tech_matrix = TechnosphereBiosphereMatrix(custom_db) # 转换为稠密矩阵打印查看 print("技术矩阵(脱氢工序相关):") print(tech_matrix.todense())
内容的提问来源于stack exchange,提问作者zakalaka
相关产品推荐
相关产品推荐

