2017-01-04 10 views
0

Ich bin sehr neu zu bw2 und ich versuche, eine einfache LCA ohne Verwendung von Datenbanken, sondern nur mit einem manuell definierten Inventar und LCIA-Methode. Ich habe die Werte aus dem Beispiel in Kapitel 11 von "Die Numerische Struktur der Ökobilanz" Buch verwendet.Erstellen Sie sehr einfache LCIA-Methode in Brightway2

konnte ich eine Bestandsaufnahme und führen Sie die LCI Berechnung erstellen:

t_db = Database("testdb") 

t_db.write({ 
    ("testdb", "Electricity production"):{ 
     'name':'Electricity production', 
     'unit': 'kWh', 
     'exchanges': [{ 
       'input': ('testdb', 'Fuel production'), 
       'amount': 2, 
       'unit': 'kg', 
       'type': 'technosphere' 
      },{ 
       'input': ('testdb', 'Carbon dioxide'), 
       'amount': 1, 
       'unit': 'kg', 
       'type': 'biosphere' 
      },{ 
       'input': ('testdb', 'Sulphur dioxide'), 
       'amount': 0.1, 
       'unit': 'kg', 
       'type': 'biosphere' 
      },{ 
       'input': ('testdb', 'Electricity production'), #important to write the same process name in output 
       'amount': 10, 
       'unit': 'kWh', 
       'type': 'production' 
      }] 
     }, 
    ('testdb', 'Fuel production'):{ 
     'name': 'Fuel production', 
     'unit': 'kg', 
     'exchanges':[{ 
       'input': ('testdb', 'Carbon dioxide'), 
       'amount': 10, 
       'unit': 'kg', 
       'type': 'biosphere' 
      },{ 
       'input': ('testdb', 'Sulphur dioxide'), 
       'amount': 2, 
       'unit': 'kg', 
       'type': 'biosphere' 
      },{ 
       'input': ('testdb', 'Crude oil'), 
       'amount': -50, 
       'unit': 'kg', 
       'type': 'biosphere' 
      },{ 
       'input': ('testdb', 'Fuel production'), 
       'amount': 100, 
       'unit': 'kg', 
       'type': 'production' 
      }] 
    }, 
    ('testdb', 'Carbon dioxide'):{'name': 'Carbon dioxide', 'unit':'kg', 'type': 'biosphere'}, 
    ('testdb', 'Sulphur dioxide'):{'name': 'Sulphur dioxide', 'unit':'kg', 'type': 'biosphere'}, 
    ('testdb', 'Crude oil'):{'name': 'Crude oil', 'unit':'kg', 'type': 'biosphere'} 

    }) 

functional_unit = {t_db.get("Electricity production") : 1000} 
lca = LCA(functional_unit) 
lca.lci() 
print(lca.inventory) 

Doch die Probleme beginnen, wenn ich die fiktive LCIA Methode (mit allen CFs auf 1 der Einfachheit halber) erstellen. Dies ist der Code, den ich benutzt habe, aber eindeutig funktioniert es nicht. Das Hauptproblem scheint ein Fehler zu sein, die Börsen von dem Inventar mit der LCIA-Methode zu verknüpfen.

myLCIAdata = [[('biosphere', 'Carbon dioxide'), 1.0], 
     [('biosphere', 'Sulphur dioxide'), 1.0], 
     [('biosphere', 'Crude oil'), 1.0]] 

method_key = ('simplemethod', 'imaginaryendpoint', 'imaginarymidpoint') 
Method(method_key).validate(myLCIAdata) #returns "TRUE" 
Method(method_key).register() 
Method(method_key).write(myLCIAdata) 
Method(method_key).load() #check everything works 
lca = LCA(functional_unit, method_key) #run LCA calculations again with method 
lca.characterized_inventory 

Das Ergebnis ist <3x2 sparse matrix of type '<class 'numpy.float64'>' with 0 stored elements in Compressed Sparse Row format> So eine leere Matrix. Irgendeine Idee von welchem ​​Fehler ich mache? Soll ich für jeden Austausch eine eindeutige Kennung wie in den vorhandenen Datenbanken erhalten? Ich habe die bw2 Tutorials, die Dokumentation und die vorherigen Fragen auf dieser Seite überprüft, kann aber keine Antwort finden. Danke im Voraus.

Antwort

0

Sie sind sehr nah dran. Bei der Definition Ihrer cfs, tun Sie Folgendes:

myLCIAdata = [[('biosphere', 'Carbon dioxide'), 1.0], 
       [('biosphere', 'Sulphur dioxide'), 1.0], 
       [('biosphere', 'Crude oil'), 1.0]] 

die erste Linie nehmen, würde dies bedeuten, dass in der Datenbank biosphere, gäbe es mit dem Code Carbon dioxide ein Fluss sein. Aber Sie keine biosphere Datenbank haben, setzen Sie alles in eine Datenbank testdb genannt:

('testdb', 'Carbon dioxide'):{'name': 'Carbon dioxide', 'unit':'kg', 'type': 'biosphere'}, 

Also entweder mit den rechten Datenbanknamen in der Liste der Charakterisierungsfaktoren, oder eine separate Biosphäre Datenbank biosphere genannt erstellen.

Beachten Sie auch, dass statt dessen:

method_key = ('simplemethod', 'imaginaryendpoint', 'imaginarymidpoint') 
Method(method_key).validate(myLCIAdata) #returns "TRUE" 
Method(method_key).register() 
Method(method_key).write(myLCIAdata) 

Sie dies tun sollten:

method_key = ('simplemethod', 'imaginaryendpoint', 'imaginarymidpoint') 
my_method = Method(method_key) 
my_method.validate(myLCIAdata) 
my_method.register() 
my_method.write(myLCIAdata) 

(Ihr Code nicht gebrochen wird, könnte aber mehr elegant sein).

+0

Vielen Dank. Ich sehe den Fehler, ich war verwirrt von dem "Biosphären" -Teil in der LCIA-Methodendefinition, ich dachte, es sei die Art des Flusses, stattdessen bezieht er sich auf die Datenbank. Ich habe den Code wie folgt geändert: 'myLCIAdata = [[('testdb', 'Carbon dioxide'), 1.0] ...', fügte 'lca.lcia()' hinzu, und es funktionierte. (Haben den eleganten Punkt, danke für den Vorschlag). – Bax