From 1ea1e79b17c397654d6f288c675bb8c35dab6b23 Mon Sep 17 00:00:00 2001 From: romainsacchi Date: Sun, 14 Jul 2024 12:39:14 +0200 Subject: [PATCH] Add battery transformation + documentation --- dev/Untitled1.ipynb | 1257 +++++++---------- docs/extract.rst | 7 +- docs/transform.rst | 27 + premise/battery.py | 153 ++ .../lci-batteries-LiO2.xlsx | Bin 32405 -> 33017 bytes premise/data/battery/energy_density.yaml | 78 + premise/data/utils/logging/logconfig.yaml | 13 + premise/data/utils/logging/reporting.yaml | 43 + premise/data_collection.py | 19 +- .../electricity_variables.yaml | 2 +- premise/new_database.py | 5 + premise/report.py | 5 +- premise/transport.py | 2 - 13 files changed, 825 insertions(+), 786 deletions(-) create mode 100644 premise/battery.py create mode 100644 premise/data/battery/energy_density.yaml diff --git a/dev/Untitled1.ipynb b/dev/Untitled1.ipynb index 06fcf5c9..9a50fef5 100644 --- a/dev/Untitled1.ipynb +++ b/dev/Untitled1.ipynb @@ -26,19 +26,11 @@ { "cell_type": "code", "execution_count": 3, - "id": "776096ec-6e11-42ba-9604-4876ae234207", + "id": "36f6ad96-f512-48c5-80e8-b36276d42b43", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Inventory cache cleared!\n" - ] - } - ], + "outputs": [], "source": [ - "clear_inventory_cache()" + "# clear_inventory_cache()" ] }, { @@ -51,7 +43,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "premise v.(2, 1, 1, 'dev2')\n", + "premise v.(2, 1, 1, 'dev4')\n", "+------------------------------------------------------------------+\n", "| Warning |\n", "+------------------------------------------------------------------+\n", @@ -87,564 +79,6 @@ "NewDatabase(..., quiet=True)\n", "- Extracting source database\n", "- Extracting inventories\n", - "Cannot find cached inventories. Will create them now for next time...\n", - "Importing default inventories...\n", - "\n", - "Extracted 1 worksheets in 0.10 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 7 worksheets in 0.03 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.03 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.03 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Could not find a biosphere flow for ('Iron, 72% in magnetite, 14% in crude ore', 'natural resource', 'in ground', 'kilogram') in lci-vanadium.xlsx. Exchange deleted.\n", - "Could not find a biosphere flow for ('TiO2, 54% in ilmenite, 18% in crude ore, in ground', 'natural resource', 'in ground', 'kilogram') in lci-vanadium.xlsx. Exchange deleted.\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.38 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "The following datasets to import already exist in the source database. They will not be imported\n", - "+--------------------------------+--------------------------------+----------+-------------+\n", - "| Name | Reference product | Location | File |\n", - "+--------------------------------+--------------------------------+----------+-------------+\n", - "| fluorspar production, 97% puri | fluorspar, 97% purity | GLO | lci-PV.xlsx |\n", - "| metallization paste production | metallization paste, back side | RER | lci-PV.xlsx |\n", - "| metallization paste production | metallization paste, back side | RER | lci-PV.xlsx |\n", - "| metallization paste production | metallization paste, front sid | RER | lci-PV.xlsx |\n", - "| photovoltaic module production | photovoltaic module, building- | RER | lci-PV.xlsx |\n", - "| photovoltaic module production | photovoltaic module, building- | RER | lci-PV.xlsx |\n", - "| photovoltaic mounting system p | photovoltaic mounting system, | RER | lci-PV.xlsx |\n", - "| photovoltaic mounting system p | photovoltaic mounting system, | RER | lci-PV.xlsx |\n", - "| photovoltaic mounting system p | photovoltaic mounting system, | RER | lci-PV.xlsx |\n", - "| photovoltaic panel factory con | photovoltaic panel factory | GLO | lci-PV.xlsx |\n", - "| polyvinylfluoride production | polyvinylfluoride | US | lci-PV.xlsx |\n", - "| polyvinylfluoride production, | polyvinylfluoride, dispersion | US | lci-PV.xlsx |\n", - "| polyvinylfluoride, film produc | polyvinylfluoride, film | US | lci-PV.xlsx |\n", - "| silicon production, metallurgi | silicon, metallurgical grade | NO | lci-PV.xlsx |\n", - "| vinyl fluoride production | vinyl fluoride | US | lci-PV.xlsx |\n", - "| wafer factory construction | wafer factory | DE | lci-PV.xlsx |\n", - "+--------------------------------+--------------------------------+----------+-------------+\n", - "Extracted 1 worksheets in 0.05 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "The following datasets to import already exist in the source database. They will not be imported\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| Name | Reference product | Location | File |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| carbon dioxide, captured at ce | carbon dioxide, captured and r | RER | lci-synfuels-from-methanol-fro |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "The following datasets to import already exist in the source database. They will not be imported\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| Name | Reference product | Location | File |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| hydrogen production, coal gasi | hydrogen, gaseous, low pressur | RoW | lci-hydrogen-coal-gasification |\n", - "| methanol production, coal gasi | methanol | RoW | lci-hydrogen-coal-gasification |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "Extracted 1 worksheets in 0.00 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "The following datasets to import already exist in the source database. They will not be imported\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| Name | Reference product | Location | File |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| hydrogen production, steam met | hydrogen, gaseous, low pressur | RER | lci-hydrogen-smr-atr-natgas.xl |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.00 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "The following datasets to import already exist in the source database. They will not be imported\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| Name | Reference product | Location | File |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "| methanol production facility, | methanol production facility, | RER | lci-synfuels-from-methanol-fro |\n", - "+--------------------------------+--------------------------------+----------+--------------------------------+\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 5 worksheets in 0.54 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.03 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.00 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.07 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.02 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.04 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.01 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 39 worksheets in 0.36 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.21 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 0.17 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Extracted 1 worksheets in 1.23 seconds\n", - "Migrating to 3.8 first\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Applying strategy: migrate_datasets\n", - "Applying strategy: migrate_exchanges\n", - "Remove uncertainty data.\n", - "Data cached. It is advised to restart your workflow at this point.\n", - "This allows premise to use the cached data instead, which results in\n", - "a faster workflow.\n", "- Fetching IAM data\n", "Done!\n" ] @@ -656,9 +90,11 @@ " #{\"model\":\"remind\", \"pathway\":\"SSP2-Base\", \"year\":2050},\n", " #{\"model\":\"remind\", \"pathway\":\"SSP2-Base\", \"year\":2010},\n", " #{\"model\":\"image\", \"pathway\":\"SSP2-Base\", \"year\":2020},\n", - " {\"model\":\"remind\", \"pathway\":\"SSP2-Base\", \"year\":2028},\n", - " #{\"model\":\"remind\", \"pathway\":\"SSP2-Base\", \"year\":2040},\n", - " #{\"model\":\"image\", \"pathway\":\"SSP2-Base\", \"year\":2050},\n", + " #{\"model\":\"remind\", \"pathway\":\"SSP2-Base\", \"year\":2050},\n", + " {\"model\":\"remind\", \"pathway\":\"SSP2-PkBudg1150\", \"year\":2050},\n", + " #{\"model\":\"image\", \"pathway\":\"SSP2-RCP26\", \"year\":2040},\n", + " #{\"model\":\"image\", \"pathway\":\"SSP2-RCP26\", \"year\":2060},\n", + " #{\"model\":\"image\", \"pathway\":\"SSP2-RCP19\", \"year\":2050},\n", " #{\"model\":\"image\", \"pathway\":\"SSP2-Base\", \"year\":2050},\n", " ],\n", " source_db=\"ecoinvent-3.10-cutoff\", # <-- name of the database in the BW2 project. Must be a string.\n", @@ -668,14 +104,6 @@ ")" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "0f71d709-497d-4454-9545-aafd07387bdf", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": 5, @@ -686,7 +114,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Processing scenarios: 100%|█████████████| 1/1 [01:06<00:00, 66.21s/it]" + "Processing scenarios: 100%|█████████████| 1/1 [00:08<00:00, 8.58s/it]" ] }, { @@ -706,12 +134,75 @@ } ], "source": [ - "ndb.update()" + "ndb.update(\"battery\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, + "id": "d423f5a1-7bd5-4d0e-8e1f-38634dc80d1a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generate change report.\n", + "Report saved under /Users/romain/GitHub/premise/dev.\n" + ] + } + ], + "source": [ + "ndb.generate_change_report()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3b0e71e7-2fbb-4247-abcf-60ebb1909d4a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gearbox, for lorry 201.6\n", + "transmission, for lorry 291.2\n", + "treatment of used lorry, 40 metric ton -1\n", + "market for power distribution unit, for electric passenger car 4\n", + "assembly operation, for lorry 29223.50287857302\n", + "market for converter, for electric passenger car 25\n", + "market for inverter, for electric passenger car 41.19999946653843\n", + "suspension, for lorry 3440\n", + "power electronics, for lorry 265\n", + "tires and wheels, for lorry 1422\n", + "market for battery management system, for Li-ion battery 125.73132358067981\n", + "glider lightweighting 268.7599962415552\n", + "cabin, for lorry 1153\n", + "other components, for electric lorry 1059\n", + "maintenance, lorry 40 metric ton 1\n", + "frame, blanks and saddle, for lorry 5539\n", + "market for electric motor, electric passenger car 600\n", + "market for used Li-ion battery -314.32832768712774\n", + "retarder, for lorry 67.2\n", + "market for battery cell, Li-ion, NMC622 188.597004106448\n", + "heavy duty truck, battery electric, NMC-622 battery, 40t gross weight, long haul 1\n" + ] + } + ], + "source": [ + "from premise.utils import load_database\n", + "ndb.scenarios[0] = load_database(ndb.scenarios[0])\n", + "\n", + "for ds in ndb.scenarios[0][\"database\"]:\n", + " if ds[\"name\"] == \"heavy duty truck, battery electric, NMC-622 battery, 40t gross weight, long haul\":\n", + " for e in ds[\"exchanges\"]:\n", + " print(e[\"name\"], e[\"amount\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "id": "dff4efb1-69ab-4bd5-8d52-4038df180a85", "metadata": {}, "outputs": [ @@ -730,7 +221,7 @@ "text": [ "Writing activities to SQLite3 database:\n", "0% [##############################] 100% | ETA: 00:00:00\n", - "Total time elapsed: 00:00:32\n" + "Total time elapsed: 00:00:36\n" ] }, { @@ -738,11 +229,16 @@ "output_type": "stream", "text": [ "Title: Writing activities to SQLite3 database:\n", - " Started: 07/01/2024 17:19:47\n", - " Finished: 07/01/2024 17:20:20\n", - " Total time elapsed: 00:00:32\n", - " CPU %: 94.20\n", - " Memory %: 15.94\n" + " Started: 07/13/2024 20:50:02\n", + " Finished: 07/13/2024 20:50:39\n", + " Total time elapsed: 00:00:36\n", + " CPU %: 90.50\n", + " Memory %: 11.02\n", + "Created database: ei_cutoff_3.10_remind_SSP2-PkBudg1150_2050 2024-07-13\n", + "Generate scenario report.\n", + "Report saved under /Users/romain/GitHub/premise/dev/export/scenario_report.\n", + "Generate change report.\n", + "Report saved under /Users/romain/GitHub/premise/dev.\n" ] } ], @@ -752,197 +248,408 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "a3b56b3f-9583-4c90-ad21-551c5530e27c", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "aluminium, primary, liquid\n", - "cooling energy, at -25 °c\n", - "1,1-dimethylcyclopentane\n", - "aluminium, primary, liquid\n", - "cooling energy, at -45 °c\n", - "cooling energy, at -45 °c\n", - "cooling energy, at -25 °c\n", - "fraction 8 from naphtha separation\n", - "fraction 8 from naphtha separation\n", - "fraction 1 from naphtha separation\n", - "2,3-dimethylbutane\n", - "heptane\n", - "fraction 7 from naphtha separation\n", - "2,3-dimethylbutane\n", - "cooling energy, at -55 °c\n", - "heptane\n", - "electricity, low voltage\n", - "cooling energy, at -55 °c\n", - "cooling energy, at -15 °c\n", - "2-methylpentane\n", - "sawnwood, paraná pine, dried (u=10%)\n", - "hexane\n", - "hexane\n", - "residual wood, dry\n", - "formaldehyde\n", - "sawlog and veneer log, paraná pine, measured as solid wood under bark\n", - "cooling energy, at -25 °c\n", - "cooling energy, at -100 °c\n", - "ventilation duct, elbow 90°, steel, 100x50 mm\n", - "cooling energy, at -160 °c\n", - "cooling energy, at -15 °c\n", - "cooling energy, at -45 °c\n", - "steam, in chemical industry\n", - "ventilation duct, elbow 90°, steel, 100x50 mm\n", - "cooling energy, at -100 °c\n", - "sawnwood, paraná pine, dried (u=10%)\n", - "residual wood, dry\n", - "aluminium, primary, liquid\n", - "sawnwood, paraná pine, dried (u=10%)\n", - "sawlog and veneer log, paraná pine, measured as solid wood under bark\n", - "fraction 1 from naphtha separation\n", - "cooling energy, at -100 °c\n", - "sawlog and veneer log, paraná pine, measured as solid wood under bark\n", - "aluminium, primary, liquid\n", - "steam, in chemical industry\n", - "sawnwood, paraná pine, dried (u=10%)\n", - "2-methylpentane\n", - "sawnwood, paraná pine, dried (u=10%)\n", - "cooling energy, at -160 °c\n", - "fraction 7 from naphtha separation\n", - "ventilation duct, elbow 90°, steel, 100x50 mm\n", - "electricity, low voltage\n", - "1,1-dimethylcyclopentane\n", - "aluminium, primary, liquid\n", - "sawlog and veneer log, paraná pine, measured as solid wood under bark\n", - "formaldehyde\n", - "methylcyclopentane\n", - "methylcyclohexane\n", - "methylcyclopentane\n", - "methylcyclohexane\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "electricity, high voltage\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "natural gas, high pressure\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, passenger car\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, freight, lorry\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n", - "transport, passenger bus\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'value' (region: 13)> Size: 104B\n",
+       "array([0.24319538, 0.11075869, 0.37354394, 0.1023092 , 0.41335137,\n",
+       "       0.10468423, 0.19437585, 0.19803933, 0.10542634, 0.1051091 ,\n",
+       "       0.09484875, 0.39999575, 0.14865214])\n",
+       "Coordinates:\n",
+       "  * region     (region) object 104B 'CAZ' 'CHA' 'EUR' ... 'SSA' 'USA' 'World'\n",
+       "    year       int64 8B 2050\n",
+       "    variables  <U6 24B 'cement'
" + ], + "text/plain": [ + " Size: 104B\n", + "array([0.24319538, 0.11075869, 0.37354394, 0.1023092 , 0.41335137,\n", + " 0.10468423, 0.19437585, 0.19803933, 0.10542634, 0.1051091 ,\n", + " 0.09484875, 0.39999575, 0.14865214])\n", + "Coordinates:\n", + " * region (region) object 104B 'CAZ' 'CHA' 'EUR' ... 'SSA' 'USA' 'World'\n", + " year int64 8B 2050\n", + " variables None: + super().__init__( + database, + iam_data, + model, + pathway, + year, + version, + system_model, + cache, + index, + ) + self.system_model = system_model + + def adjust_battery_mass(self) -> None: + """ + Adjust vehicle components (e.g., battery). + Adjust the battery mass to reflect progress in battery technology. + Specifically, we adjust the battery mass to reflect progress in + terms of cell energy density. + We leave the density unchanged after 2050. + """ + + energy_density = load_cell_energy_density() + + filters = [ws.contains("name", x) for x in energy_density] + + for ds in ws.get_many( + self.database, + ws.exclude( + ws.either( + *[ + ws.contains("name", x) + for x in [ + "market for battery", + "battery production", + "battery cell production", + "cell module production", + ] + ] + ) + ), + ): + + for exc in ws.technosphere(ds, ws.either(*filters)): + name = [x for x in energy_density if x in exc["name"]][0] + + scaling_factor = energy_density[name][2020] / np.clip( + np.interp( + self.year, + list(energy_density[name].keys()), + list(energy_density[name].values()), + ), + 0.1, + 0.5, + ) + + if "log parameters" not in ds: + ds["log parameters"] = {} + + ds["log parameters"]["battery input"] = exc["name"] + ds["log parameters"]["old battery mass"] = exc["amount"] + exc["amount"] *= scaling_factor + ds["log parameters"]["new battery mass"] = exc["amount"] + + self.write_log(ds, status="modified") + + def write_log(self, dataset, status="created"): + """ + Write log file. + """ + + logger.info( + f"{status}|{self.model}|{self.scenario}|{self.year}|" + f"{dataset['name']}|{dataset['location']}|" + f"{dataset.get('log parameters', {}).get('battery input', '')}|" + f"{dataset.get('log parameters', {}).get('old battery mass', '')}|" + f"{dataset.get('log parameters', {}).get('new battery mass', '')}" + ) diff --git a/premise/data/additional_inventories/lci-batteries-LiO2.xlsx b/premise/data/additional_inventories/lci-batteries-LiO2.xlsx index d2b338f01833b54434f5c2f013e1bdd04e171003..af786c2cf9337a6e551f500595f8a9e6f375300b 100644 GIT binary patch delta 23569 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 delta 22840 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 None: "steel": {"func": _update_steel, "args": (self.version, self.system_model)}, "fuels": {"func": _update_fuels, "args": (self.version, self.system_model)}, "heat": {"func": _update_heat, "args": (self.version, self.system_model)}, + "battery": { + "func": _update_battery, + "args": (self.version, self.system_model), + }, "emissions": { "func": _update_emissions, "args": (self.version, self.system_model, self.gains_scenario), diff --git a/premise/report.py b/premise/report.py index 0bac1598..616b160e 100644 --- a/premise/report.py +++ b/premise/report.py @@ -382,7 +382,7 @@ def generate_summary_report(scenarios: list, filename: Path) -> None: }, } - with open(REPORT_METADATA_FILEPATH, "r", encoding="utf-8") as stream: + with open(REPORT_METADATA_FILEPATH, encoding="utf-8") as stream: metadata = yaml.safe_load(stream) workbook = openpyxl.Workbook() @@ -423,7 +423,7 @@ def generate_summary_report(scenarios: list, filename: Path) -> None: ) if "CCS" in sector and iam_data is not None: - iam_data = iam_data * 100 + iam_data *= 100 if iam_data is None: continue @@ -536,6 +536,7 @@ def generate_change_report(source, version, source_type, system_model): "premise_electricity", "premise_fuel", "premise_heat", + "premise_battery", "premise_transport", "premise_steel", "premise_metal", diff --git a/premise/transport.py b/premise/transport.py index e27104d4..a11c858e 100644 --- a/premise/transport.py +++ b/premise/transport.py @@ -4,7 +4,6 @@ IAM data, and integrate them into the database. """ -import re import uuid from typing import Any, Dict, List, Union @@ -12,7 +11,6 @@ import xarray as xr import yaml from wurst import searching as ws -from wurst import transformations as wt from .filesystem_constants import DATA_DIR, IAM_OUTPUT_DIR, INVENTORY_DIR from .inventory_imports import VariousVehicles