PyPSA / pypsa-ariadne

MIT License
6 stars 4 forks source link

Unravel oil bus does not work for shipping yet #106

Closed toniseibold closed 3 weeks ago

toniseibold commented 3 weeks ago

The oil demand for shipping is added as n.loads.loc["EU oil shipping oil]. So far, there is no distinction between European and German shipping demand. Way to solve this in modify_prenetwork: in snakefile:

params:
     sector=config_provider("sector"),
input:
        pop_weighted_energy_totals=resources("pop_weighted_energy_totals_s{simpl}_{clusters}.csv"),
        shipping_demand=resources("shipping_demand_s{simpl}_{clusters}.csv"),

in script:

    # global shipping information
    options = snakemake.params.sector
    domestic_navigation = (
    pd.read_csv(snakemake.input.pop_weighted_energy_totals, index_col=0) * nyears
    ).loc[:, "total domestic navigation"].squeeze()
    international_navigation = pd.read_csv(snakemake.input.shipping_demand, index_col=0).squeeze() * nyears
    shipping_demand = domestic_navigation + international_navigation
    DE_shipping = shipping_demand.filter(like="DE").sum() * 1e6 / nhours

    # shipping meoh
    if "EU methanol shipping methanol" in n.loads.index:
        efficiency = (
            options["shipping_oil_efficiency"] / options["shipping_methanol_efficiency"]
        )
        shipping_methanol_share = options["shipping_methanol_share"][int(snakemake.wildcards.planning_horizons)]

        p_set_methanol = shipping_methanol_share * DE_shipping * efficiency

        n.add("Load", "DE shipping methanol", bus="DE methanol", carrier="methanol" , p_set=p_set_methanol)
        n.loads.loc["EU methanol shipping methanol", "p_set"] -= p_set_methanol

        # CO2 intensity methanol based on stoichiometric calculation with 22.7 GJ/t methanol (32 g/mol), CO2 (44 g/mol), 277.7,
        # MWh/TJ = 0.218 t/MWh
        co2 = p_set_methanol * costs.at["methanolisation", "carbondioxide-input"]

        n.add(
            "Load",
            "DE shipping methanol emissions",
            bus="co2 atmosphere",
            carrier="shipping methanol emissions",
            p_set=-co2,
        )
        n.loads.loc["shipping methanol emissions", "p_set"] += co2

    # oil shipping
    if "EU oil shipping oil" in n.loads.index:
        shipping_oil_share = options["shipping_oil_share"][int(snakemake.wildcards.planning_horizons)]

        p_set_oil = shipping_oil_share * DE_shipping

        n.madd("Load", "DE shipping oil", bus="DE oil", carrier="oil", p_set=p_set_oil,)
        n.loads.loc["EU oil shipping oil", "p_set"] -= p_set_oil

        co2 = p_set_oil * costs.at["oil", "CO2 intensity"]

        n.add("Load", "DE shipping oil emissions", bus="co2 atmosphere", carrier="shipping oil emissions", p_set=-co2)
        n.loads.loc["shipping oil emissions", "p_set"] += co2
toniseibold commented 3 weeks ago

I was wrong, everything working fine in ariadne with shipping