quintel / etsource

Data source for the Energy Transition Model
https://energytransitionmodel.com/
MIT License
12 stars 8 forks source link

CO2 emission costs and captured biogenic CO2 costs do not change for industry when CCS is applied #3022

Open mabijkerk opened 6 months ago

mabijkerk commented 6 months ago

Background In a blank nl2019 scenario, when all energetic demand in the fertilizer sector is set to 100% network gas burner, the CO2 emission costs in the costs export for industry_chemicals_fertilizers_burner_network_gas are as follows:

24056559.54

Then, if in that scenario 100% CCS for combustion in the fertilizer is applied, 85% of all emissions are captured and the demand for the industry_chemicals_fertilizers_captured_combustion_co2 node is 1.38 MT. This means that it could be expected that CO2 emission costs of the industry_chemicals_fertilizers_burner_network_gas would decrease. However they stay the same at:

24056559.54

Issue In the energy sector, when CCS is applied, effectively a different node is activated. For example, energy_power_combined_cycle_coal switches to energy_power_combined_cycle_ccs_coal. One of the key differences between both nodes is the free_co2_factor, which is 0.0 and 0.85 respectively. In the cost methods on ETEngine this then leads to reduced co2_emissions_costs_per_typical_input:

      def co2_emissions_costs_per_typical_input
        fetch(:co2_emissions_costs_per_typical_input) do
          weighted_carrier_co2_per_mj * area.co2_price *
            (1 - area.co2_percentage_free) *
            (takes_part_in_ets || 1.0) * ((1 - free_co2_factor))
        end
      end

However, in the industry sector, no different node is activated and there is no change in the free_co2_factor. There only is an increased use of electricity on the industry_chemicals_fertilizers_captured_combustion_co2_electricity and costs are calculated in the molecule graph on the industry_chemicals_fertilizers_captured_combustion_co2 node. The same issue also applies to the recently added captured biogenic CO2 costs.

Solution There are three issue sfor which a solution needs to be found:

kndehaan commented 5 months ago

I think that the addition of changing the free_co2_factor with the CCS input of industry nodes (as you suggest) will fix the first and second issue. As an example in share_of_industry_chemicals_fertilizers_captured_combustion_co2, the query should contain something like the following:

UPDATE(V(industry_chemicals_fertilizers_burner_network_gas), free_co2_factor, 0.85 * DIVIDE(USER_INPUT(),100.0))

Here, a CO2 capture rate (or free_co2_factor) of 85% is assumed (and hard-coded) and multiplied with the share of installed capacity that will be equipped with carbon capture. By updating the free_co2_factor of the node, only the CO2 emissions costs will be calculated for the share that is not captured (1-free_co2_factor) and the captured biogenic CO2 costs (negative value) will be calculated for the biogenic share that is captured (free_co2_factor).

CO2 emission costs:

  def co2_emissions_costs_per_typical_input
        fetch(:co2_emissions_costs_per_typical_input) do
          weighted_carrier_co2_per_mj * area.co2_price *
            (1 - area.co2_percentage_free) *
            (takes_part_in_ets || 1.0) * ((1 - free_co2_factor))
        end
      end

Captured biogenic CO2 costs:

def captured_biogenic_co2_costs_per_typical_input
        fetch(:captured_biogenic_co2_costs_per_typical_input) do
          weighted_carrier_potential_co2_per_mj *
            - area.captured_biogenic_co2_price *
            free_co2_factor
        end
      end
mabijkerk commented 5 months ago

Thanks for diving into this @kndehaan! Instead of using a hardcoded value though, I'd rather use a dynamic attribute. Preferably the dataset attribute that sets the share in the molecule graph:

~ parent_share = SHARE("molecules/industry_chemicals_fertilizers_combustion_co2_parent_share", industry_chemicals_fertilizers_emitted_co2)

Could you implement your suggested fix and verify whether it produces the expected results?

kndehaan commented 5 months ago

I came across two CCS share queries that are hidden in the front-end:

Do these queries need to be updated as well or are they never used for some reason and therefore not relevant?

github-actions[bot] commented 3 months ago

This issue has had no activity for 60 days and will be closed in 7 days. Removing the "Stale" label or posting a comment will prevent it from being closed automatically. You can also add the "Pinned" label to ensure it isn't marked as stale in the future.