在 Brightway 2 中创建一个新方法
create a new method in Brightway 2
这个问题与 提出的问题非常相似。只是我无法实现建议的解决方案(而且我没有添加评论的声誉)。
我想创建一种仅包含与化石燃料燃烧相关的 CO2、CH4 和 N2O 的全球变暖潜能值的方法。
查看生物圈数据库,我创建了一个包含流键和特征因子的元组列表:
flows_list=[]
for flow in bw.Database('biosphere3'):
if 'Carbon dioxide, fossil' in flow['name']:
flows_list.append((flow.key,1.0))
if flow['name']=='Methane':
flows_list.append((flow.key,29.7))
if flow['name']=='Dinitrogen monoxide':
flows_list.append((flow.key,264.8))
然后:
ipcc2013_onlyfossil=bw.Method(('IPCC2013_onlyfossil','climate change','GWP100a'))
ipcc2013_onlyfossil.register(**{'unit':'kg CO2eq',
'num_cfs':11,
'abbreviation':'nonexistent',
'description':'based on IPCC 2013 method but just for fossil CO2, CH4 and N2O',
'filename':'nonexistent'})
(我不明白双**的用途,或者我们是否可以将字典元数据中的键留空)
最后:
ipcc2013_onlyfossil.write(flows_list)
我一定是做错了什么,因为如果我尝试使用这种方法,我会得到一个断言错误,Brightway 找不到模型。
更新:我的代码中有错误,新方法运行良好。
例如,如果我 运行:
[m for m in bw.methods if 'IPCC' in m[0]
and 'GWP100' in str(m)]
我得到了方法列表,包括我尝试创建的方法,我可以用它进行 LCA 计算。
(PS:我不是很清楚我应该如何使用class方法的validate()方法..)
这里有一堆问题...
如何创建和编写新方法?
你的代码在我的电脑上运行完美,它应该 - 它做的事情与基本方法导入器做的一样。也许您可以更明确地说明 "If I try to use this method I get an assertion error" 是什么意思?
在 运行 您的代码之后,您应该能够执行 ipcc2013_onlyfossil.metadata
或 ipcc2013_onlyfossil.load()
。它在那里!
我该如何使用validate()
功能?
如果您在 IPython 中请求文档字符串,您会得到一个想法:
> m.validate?
Signature: m.validate(data)
Docstring: Validate data. Must be called manually.
所以你可以 ipcc2013_onlyfossil.validate(flows_list)
,但你不需要:你的代码很好。
我应该向 Method.register()
提供哪些元数据?
不需要元数据,您应该跳过任何您不知道的内容。 abbreviation
和 'num_cfs' 是自动生成的。
**
是什么意思?
Good answers already exist
这个问题与
我想创建一种仅包含与化石燃料燃烧相关的 CO2、CH4 和 N2O 的全球变暖潜能值的方法。
查看生物圈数据库,我创建了一个包含流键和特征因子的元组列表:
flows_list=[]
for flow in bw.Database('biosphere3'):
if 'Carbon dioxide, fossil' in flow['name']:
flows_list.append((flow.key,1.0))
if flow['name']=='Methane':
flows_list.append((flow.key,29.7))
if flow['name']=='Dinitrogen monoxide':
flows_list.append((flow.key,264.8))
然后:
ipcc2013_onlyfossil=bw.Method(('IPCC2013_onlyfossil','climate change','GWP100a'))
ipcc2013_onlyfossil.register(**{'unit':'kg CO2eq',
'num_cfs':11,
'abbreviation':'nonexistent',
'description':'based on IPCC 2013 method but just for fossil CO2, CH4 and N2O',
'filename':'nonexistent'})
(我不明白双**的用途,或者我们是否可以将字典元数据中的键留空)
最后:
ipcc2013_onlyfossil.write(flows_list)
我一定是做错了什么,因为如果我尝试使用这种方法,我会得到一个断言错误,Brightway 找不到模型。
更新:我的代码中有错误,新方法运行良好。
例如,如果我 运行:
[m for m in bw.methods if 'IPCC' in m[0]
and 'GWP100' in str(m)]
我得到了方法列表,包括我尝试创建的方法,我可以用它进行 LCA 计算。
(PS:我不是很清楚我应该如何使用class方法的validate()方法..)
这里有一堆问题...
如何创建和编写新方法?
你的代码在我的电脑上运行完美,它应该 - 它做的事情与基本方法导入器做的一样。也许您可以更明确地说明 "If I try to use this method I get an assertion error" 是什么意思?
在 运行 您的代码之后,您应该能够执行 ipcc2013_onlyfossil.metadata
或 ipcc2013_onlyfossil.load()
。它在那里!
我该如何使用validate()
功能?
如果您在 IPython 中请求文档字符串,您会得到一个想法:
> m.validate?
Signature: m.validate(data)
Docstring: Validate data. Must be called manually.
所以你可以 ipcc2013_onlyfossil.validate(flows_list)
,但你不需要:你的代码很好。
我应该向 Method.register()
提供哪些元数据?
不需要元数据,您应该跳过任何您不知道的内容。 abbreviation
和 'num_cfs' 是自动生成的。
**
是什么意思?
Good answers already exist