agoenergy / ptx-boa

PtX-BOA is a tool which allows users to calculate the delivered cost of PtX molecules from an export country to an import country, with a detailed cost breakdown comparison highlighting the competitive edge of one country against another.
https://www.agora-industry.org/data-tools/ptx-business-opportunity-analyser
Creative Commons Attribution Share Alike 4.0 International
9 stars 2 forks source link

implement ``api.calculate()`` #11

Closed markushal closed 9 months ago

wingechr commented 11 months ago

@joAschauer I tried to write down my thoughts on the general structure of the api.calculate() function in a class based design:

List of Parameters

parameter_code parameter_name unit per_flow per_transformation_process per_transport_process per_re_generation_process per_source_region per_target_country has_global_default
CALOR calorific values various (kWh per mass or volume) x
CAPEX CAPEX USD2021/kW x x x x
CAP-T transport capacity kWh/a x x
CONV conversion factors various (input per main output) x x x
DST-S-C distance between RE site and coast km x
DST-S-D shipping distance km x x
DST-S-DP pipeline distance km x x
EFF efficiency various (output per main input) x
FLH full load hours h x x
LIFETIME lifetime / amortization period years x x
LOSS-T losses (own fuel, transport) fraction/km x
OPEX-F OPEX (fix) USD2021/kW x x x x
OPEX-T levelized costs USD2021/(kWh*km) x
RE-POT RE potential MWel x x
SEASHARE sea share of pipeline distance fraction x x
SPECCOST specific costs various (USD2021 per flow) x x x
WACC interest rate fraction x x x x

List of Processes

process_code process_name process_class main_flow_code_out main_flow_code_in
AEL-EL AEL electrolysis ELEC H2-G EL
PEM-EL PEM electrolysis ELEC H2-G EL
SOEC-EL SOEC (high-temp) electrolysis ELEC H2-G EL
CH3OHREC Methanol reconversion PROC H2-G CH3OH-L
CH3OHSYN Methanol Synthesis PROC CH3OH-L H2-G
CH4SYN Methane Synthesis PROC CH4-G H2-G
DRI Green iron reduction PROC DRI-S H2-G
EFUELSYN FT e-fuels Synthesis (Fischer-Tropsch) PROC CHX-L H2-G
NH3SYN Ammonia Synthesis (Haber-Bosch) PROC NH3-L H2-G
DAC Direct Air Capture PROV_C CO2-G
DESAL Sea Water desalination PROV_H2O H2O-L
PV-FIX PV tilted RE-GEN EL
PV-TRK PV tracking RE-GEN EL
RES-HYBR Wind-PV-Hybrid RE-GEN EL
WIND-OFF Wind Offshore RE-GEN EL
WIND-ON Wind Onshore RE-GEN EL
NH3-REC Ammonia reconversion TRANSP H2-G NH3-L
ATR Autothermal-Reactor (Blue Hydrogen) TRANSP-P H2-G CH4-G
CH4-COMP Methane compression TRANSP-P CH4-G CH4-G
CH4-P-L Methane land pipeline new TRANSP-P CH4-G CH4-G
CH4-P-LR Methane land pipeline retrofitted TRANSP-P CH4-G CH4-G
CH4-P-S Methane sea pipeline TRANSP-P CH4-G CH4-G
CH4-P-SR Methane sea pipeline retrofitted TRANSP-P CH4-G CH4-G
H2-COMP Hydrogen compression TRANSP-P H2-G H2-G
H2-P-L Hydrogen land pipeline new TRANSP-P H2-G H2-G
H2-P-LR Hydrogen land pipeline retrofitted TRANSP-P H2-G H2-G
H2-P-S Hydrogen sea pipeline TRANSP-P H2-G H2-G
H2-P-SR Hydrogen sea pipeline retrofitted TRANSP-P H2-G H2-G
CH3OH-S Methanol ship (own fuel consumption) TRANSP-S CH3OH-L CH3OH-L
CH3OH-SB Methanol ship (bunker fuel consumption) TRANSP-S CH3OH-L CH3OH-L
CH4-LIQ Methane Liquefaction TRANSP-S CH4-L CH4-G
CH4-RGAS Methane Regasification TRANSP-S CH4-G CH4-L
CH4-S LNG ship (own fuel consumption) TRANSP-S CH4-L CH4-L
CH4-SB LNG ship (bunker fuel consumption) TRANSP-S CH4-L CH4-L
DRI-SB Green iron ship (bunker fuel consumption) TRANSP-S DRI-S DRI-S
H2-LIQ Hydrogen Liquefaction TRANSP-S H2-L H2-G
H2-RGAS Hydrogen Regasification TRANSP-S H2-G H2-L
H2-S Hydrogen ship (own fuel consumption) TRANSP-S H2-L H2-L
H2-SB Hydrogen ship (bunker fuel consumption) TRANSP-S H2-L H2-L
LOHC-CON LOHC conversion TRANSP-S LOHC-L H2-G
LOHC-REC LOHC reconversion TRANSP-S H2-G LOHC-L
LOHC-S LOHC ship (own fuel consumption) TRANSP-S LOHC-L LOHC-L
LOHC-SB LOHC ship (bunker fuel consumption) TRANSP-S LOHC-L LOHC-L
NH3-S Ammonia ship (own fuel consumption) TRANSP-S NH3-L NH3-L
NH3-SB Ammonia ship (bunker fuel consumption) TRANSP-S NH3-L NH3-L
REGASATR Autothermal-Reactor (Blue Hydrogen) incl. Regasification TRANSP-S H2-G CH4-L
SYN-S FT e-fuels ship (own fuel consumption) TRANSP-S CHX-L CHX-L
SYN-SB FT e-fuels ship (bunker fuel consumption) TRANSP-S CHX-L CHX-L

List of Flows

flow_code flow_name unit secondary_process
BFUEL-L bunker fuel kwh bunker fuel (l) FALSE
CH3OH-L methanol (liquid) kWh CH3OH (l) FALSE
CH4-G methane (gas) kWh CH4 (g) FALSE
CH4-L methane (liquid) kWh CH4 (l) FALSE
CHX-L FT e-fuels kwh CHx (l) FALSE
CO2-G carbon dioxide kg CO2 (g) TRUE
C-S carbon kg C (s) FALSE
DRI-S Green iron kg DRI (s) FALSE
EL electricity kWh (el.) FALSE
H2-G hydrogen (gas) kWh H2 (g) FALSE
H2-L hydrogen (liquid) kWh H2 (l) FALSE
H2O-L water kg H2O (l) TRUE
HEAT heat kWh (heat) FALSE
LOHC-L hydrogen (LOHC) kWh H2 (l) FALSE
N2-G nitrogen kg N2 (g) FALSE
NH3-L ammonia (liquid) kWh NH3 (l) FALSE
wingechr commented 11 months ago
joAschauer commented 10 months ago

regarding "has_global_default" in the table above

global defaults are values which are equal for all source regions.

I checked for the combinations where a global default should be present from the above table. Global defaults are queried with empty strings in source_region_code. The following code works with 4032cb84256fc4b0f0c0e26cb4eeecd774973a08 on the api-data branch:

from ptxboa.api_data import DataHandler
from ptxboa.api import PtxboaAPI
api = PtxboaAPI()
handler = DataHandler(api.data, "2030 (high)")
for process in api.data.dimensions["process"]["process_code"].to_list():
    for parameter_code in ["CAPEX", "OPEX-F", "SPECCOST", "WACC"]:
        try:
            value = handler.get_parameter_value(parameter_code, process_code=process, source_region_code="")
            print(f"found global default for {process}, {parameter_code}: {value}")
        except ValueError:
            print(f"No global default for {process}, {parameter_code}")
Click here to see output from Code ``` found global default for AEL-EL, CAPEX: 560.8211948416781 found global default for AEL-EL, OPEX-F: 11.216423896833565 No global default for AEL-EL, SPECCOST No global default for AEL-EL, WACC found global default for ATR, CAPEX: 1000.0341055522356 found global default for ATR, OPEX-F: 48.82979031016775 No global default for ATR, SPECCOST No global default for ATR, WACC No global default for CH3OHREC, CAPEX No global default for CH3OHREC, OPEX-F No global default for CH3OHREC, SPECCOST No global default for CH3OHREC, WACC No global default for CH3OH-S, CAPEX No global default for CH3OH-S, OPEX-F No global default for CH3OH-S, SPECCOST No global default for CH3OH-S, WACC No global default for CH3OH-SB, CAPEX No global default for CH3OH-SB, OPEX-F No global default for CH3OH-SB, SPECCOST No global default for CH3OH-SB, WACC found global default for CH3OHSYN, CAPEX: 1065.0274309392264 found global default for CH3OHSYN, OPEX-F: 31.95082292817679 No global default for CH3OHSYN, SPECCOST No global default for CH3OHSYN, WACC found global default for CH4-COMP, CAPEX: 270.3369491482106 found global default for CH4-COMP, OPEX-F: 10.813477965928424 No global default for CH4-COMP, SPECCOST No global default for CH4-COMP, WACC found global default for CH4-LIQ, CAPEX: 439.99368256303694 found global default for CH4-LIQ, OPEX-F: 8.79987365126074 No global default for CH4-LIQ, SPECCOST No global default for CH4-LIQ, WACC No global default for CH4-P-L, CAPEX No global default for CH4-P-L, OPEX-F No global default for CH4-P-L, SPECCOST No global default for CH4-P-L, WACC No global default for CH4-P-LR, CAPEX No global default for CH4-P-LR, OPEX-F No global default for CH4-P-LR, SPECCOST No global default for CH4-P-LR, WACC No global default for CH4-P-S, CAPEX No global default for CH4-P-S, OPEX-F No global default for CH4-P-S, SPECCOST No global default for CH4-P-S, WACC No global default for CH4-P-SR, CAPEX No global default for CH4-P-SR, OPEX-F No global default for CH4-P-SR, SPECCOST No global default for CH4-P-SR, WACC No global default for CH4-RGAS, CAPEX No global default for CH4-RGAS, OPEX-F No global default for CH4-RGAS, SPECCOST No global default for CH4-RGAS, WACC No global default for CH4-S, CAPEX No global default for CH4-S, OPEX-F No global default for CH4-S, SPECCOST No global default for CH4-S, WACC No global default for CH4-SB, CAPEX No global default for CH4-SB, OPEX-F No global default for CH4-SB, SPECCOST No global default for CH4-SB, WACC found global default for CH4SYN, CAPEX: 847.8944803059819 found global default for CH4SYN, OPEX-F: 25.436834409179458 No global default for CH4SYN, SPECCOST No global default for CH4SYN, WACC found global default for DAC, CAPEX: 1.6591168858301173 found global default for DAC, OPEX-F: 0.0663646754332046 No global default for DAC, SPECCOST No global default for DAC, WACC found global default for DESAL, CAPEX: 0.0016900973136556 found global default for DESAL, OPEX-F: 6.760389254622733e-05 No global default for DESAL, SPECCOST No global default for DESAL, WACC found global default for DRI, CAPEX: 4125.628452573051 found global default for DRI, OPEX-F: 123.7688535771915 No global default for DRI, SPECCOST No global default for DRI, WACC No global default for DRI-S, CAPEX No global default for DRI-S, OPEX-F No global default for DRI-S, SPECCOST No global default for DRI-S, WACC No global default for DRI-SB, CAPEX No global default for DRI-SB, OPEX-F No global default for DRI-SB, SPECCOST No global default for DRI-SB, WACC found global default for EFUELSYN, CAPEX: 1065.0274309392264 found global default for EFUELSYN, OPEX-F: 31.95082292817679 No global default for EFUELSYN, SPECCOST No global default for EFUELSYN, WACC No global default for EL-STR, CAPEX No global default for EL-STR, OPEX-F No global default for EL-STR, SPECCOST No global default for EL-STR, WACC No global default for EL-TRANS, CAPEX No global default for EL-TRANS, OPEX-F No global default for EL-TRANS, SPECCOST No global default for EL-TRANS, WACC found global default for H2-COMP, CAPEX: 270.3369491482106 found global default for H2-COMP, OPEX-F: 10.813477965928424 No global default for H2-COMP, SPECCOST No global default for H2-COMP, WACC found global default for H2-LIQ, CAPEX: 2228.470648214012 found global default for H2-LIQ, OPEX-F: 89.13882592856045 No global default for H2-LIQ, SPECCOST No global default for H2-LIQ, WACC No global default for H2-P-L, CAPEX No global default for H2-P-L, OPEX-F No global default for H2-P-L, SPECCOST No global default for H2-P-L, WACC No global default for H2-P-LR, CAPEX No global default for H2-P-LR, OPEX-F No global default for H2-P-LR, SPECCOST No global default for H2-P-LR, WACC No global default for H2-P-S, CAPEX No global default for H2-P-S, OPEX-F No global default for H2-P-S, SPECCOST No global default for H2-P-S, WACC No global default for H2-P-SR, CAPEX No global default for H2-P-SR, OPEX-F No global default for H2-P-SR, SPECCOST No global default for H2-P-SR, WACC found global default for H2-RGAS, CAPEX: 503.8899331746703 found global default for H2-RGAS, OPEX-F: 12.597248329366758 No global default for H2-RGAS, SPECCOST No global default for H2-RGAS, WACC No global default for H2-S, CAPEX No global default for H2-S, OPEX-F No global default for H2-S, SPECCOST No global default for H2-S, WACC No global default for H2-SB, CAPEX No global default for H2-SB, OPEX-F No global default for H2-SB, SPECCOST No global default for H2-SB, WACC No global default for H2-STR, CAPEX No global default for H2-STR, OPEX-F No global default for H2-STR, SPECCOST No global default for H2-STR, WACC found global default for LOHC-CON, CAPEX: 286.32944503810444 found global default for LOHC-CON, OPEX-F: 11.453177801524175 No global default for LOHC-CON, SPECCOST No global default for LOHC-CON, WACC found global default for LOHC-REC, CAPEX: 525.4617288061917 found global default for LOHC-REC, OPEX-F: 21.01846915224767 No global default for LOHC-REC, SPECCOST No global default for LOHC-REC, WACC No global default for LOHC-S, CAPEX No global default for LOHC-S, OPEX-F No global default for LOHC-S, SPECCOST No global default for LOHC-S, WACC No global default for LOHC-SB, CAPEX No global default for LOHC-SB, OPEX-F No global default for LOHC-SB, SPECCOST No global default for LOHC-SB, WACC found global default for NH3-REC, CAPEX: 319.23258590694223 found global default for NH3-REC, OPEX-F: 9.576977577208266 No global default for NH3-REC, SPECCOST No global default for NH3-REC, WACC No global default for NH3-S, CAPEX No global default for NH3-S, OPEX-F No global default for NH3-S, SPECCOST No global default for NH3-S, WACC No global default for NH3-SB, CAPEX No global default for NH3-SB, OPEX-F No global default for NH3-SB, SPECCOST No global default for NH3-SB, WACC found global default for NH3SYN, CAPEX: 1820.559711007225 found global default for NH3SYN, OPEX-F: 91.02798555036124 No global default for NH3SYN, SPECCOST No global default for NH3SYN, WACC found global default for PEM-EL, CAPEX: 796.9652830475814 found global default for PEM-EL, OPEX-F: 15.939305660951629 No global default for PEM-EL, SPECCOST No global default for PEM-EL, WACC No global default for PV-FIX, CAPEX No global default for PV-FIX, OPEX-F No global default for PV-FIX, SPECCOST No global default for PV-FIX, WACC No global default for PV-TRK, CAPEX No global default for PV-TRK, OPEX-F No global default for PV-TRK, SPECCOST No global default for PV-TRK, WACC found global default for REGASATR, CAPEX: 1000.0341055522356 found global default for REGASATR, OPEX-F: 48.82979031016775 No global default for REGASATR, SPECCOST No global default for REGASATR, WACC No global default for RES-HYBR, CAPEX No global default for RES-HYBR, OPEX-F No global default for RES-HYBR, SPECCOST No global default for RES-HYBR, WACC found global default for SOEC-EL, CAPEX: 2371.460045655972 found global default for SOEC-EL, OPEX-F: 71.14380136967917 No global default for SOEC-EL, SPECCOST No global default for SOEC-EL, WACC No global default for SYN-S, CAPEX No global default for SYN-S, OPEX-F No global default for SYN-S, SPECCOST No global default for SYN-S, WACC No global default for SYN-SB, CAPEX No global default for SYN-SB, OPEX-F No global default for SYN-SB, SPECCOST No global default for SYN-SB, WACC No global default for WIND-OFF, CAPEX No global default for WIND-OFF, OPEX-F No global default for WIND-OFF, SPECCOST No global default for WIND-OFF, WACC No global default for WIND-ON, CAPEX No global default for WIND-ON, OPEX-F No global default for WIND-ON, SPECCOST No global default for WIND-ON, WACC ```

Looking at the output , we see that for many parameter / process combinations, there exists no global default. Is this intentional @wingechr & @markushal?

markushal commented 10 months ago

For the following parameter we only use region specific data, and global defaults are not needed:

For all other parameters region specific data does not exist (as long as it is not defined by the user), so there should be a global default value, and there should be no region specific data points in the input data set.