Closed ChaelKruip closed 10 years ago
Part of #104
@ChaelKruip I have added an example to merit-convergence which shows how to load data for NL and DE and calculate the Merit Order accounting for import and export to Germany: examples/all_in_one.rb.
One limitation is that it can only have one price-driven (import) interconnect. The description in #105 says that this is acceptable; additional price-driven interconnects will require running the merit order once per interconnect. There is a better solution if you decide you want multiple interconnects in the future, but otherwise I'll leave it as is.
You can have as many load-driven (export) users as you want (for DEN, NOR, BE, etc), but of course you need to know the load curves ahead of time. This could have negative loads to simulate import.
+---+------------------------------------------------+---------+----------+--------+
| | Key | % Used | MWh Load | M.Cost |
+---+------------------------------------------------+---------+----------+--------+
| U | local_demand | - | 12003.00 | - |
+---+------------------------------------------------+---------+----------+--------+
| A | energy_chp_supercritical_waste_mix | 100.0 % | 386.42 | 0.00 |
| A | energy_power_wind_turbine_inland | 100.0 % | 207.91 | 0.00 |
| A | energy_power_wind_turbine_offshore | 100.0 % | 52.53 | 0.00 |
| A | energy_power_wind_turbine_coastal | 100.0 % | 40.95 | 0.00 |
| A | energy_power_hydro_river | 100.0 % | 20.99 | 0.00 |
| A | households_solar_pv_solar_radiation | 100.0 % | 3.67 | 0.00 |
| A | buildings_solar_pv_solar_radiation | 100.0 % | 2.02 | 0.00 |
| A | energy_power_solar_pv_solar_radiation | 100.0 % | 0.49 | 0.00 |
| A | energy_power_supercritical_waste_mix | 100.0 % | 43.72 | 1.17 |
| A | agriculture_chp_engine_biogas | 100.0 % | 54.78 | 14.92 |
| A | buildings_chp_engine_biogas | 100.0 % | 45.38 | 14.92 |
| A | buildings_collective_chp_network_gas | 100.0 % | 74.25 | 63.72 |
| A | industry_chp_combined_cycle_gas_power_fuelmix | 100.0 % | 666.62 | 71.51 |
| A | industry_chp_engine_gas_power_fuelmix | 100.0 % | 9.13 | 76.96 |
| A | industry_chp_turbine_gas_power_fuelmix | 100.0 % | 237.43 | 79.47 |
+---+------------------------------------------------+---------+----------+--------+
| T | energy_power_nuclear_gen3_uranium_oxide | 100.0 % | 475.19 | 4.84 |
| T | energy_power_combined_cycle_coal | 100.0 % | 227.51 | 17.30 |
| T | energy_power_ultra_supercritical_coal | 100.0 % | 1104.60 | 17.78 |
| T | energy_chp_ultra_supercritical_coal | 100.0 % | 848.71 | 20.66 |
| T | energy_power_supercritical_coal | 100.0 % | 559.37 | 22.49 |
| T | energy_power_combined_cycle_network_gas | 100.0 % | 5427.63 | 41.83 |
| T | energy_power_ultra_supercritical_cofiring_coal | 100.0 % | 534.86 | 44.36 |
| T | energy_chp_ultra_supercritical_cofiring_coal | 100.0 % | 644.94 | 50.61 |
| T | energy_chp_combined_cycle_network_gas | 6.8 % | 333.90 | 59.09 |
| T | energy_power_ultra_supercritical_network_gas | 0.0 % | 0.00 | 62.32 |
| T | energy_power_turbine_network_gas | 0.0 % | 0.00 | 73.76 |
| T | import_from_de | 0.0 % | 0.00 | 114.98 |
+---+------------------------------------------------+---------+----------+--------+
U = User, A = Always On, T = Transient
+---+------------------------------------------------+---------+----------+--------+
| | Key | % Used | MWh Load | M.Cost |
+---+------------------------------------------------+---------+----------+--------+
| U | local_demand | - | 12003.00 | - |
| U | export_to_de | - | 2449.00 | - |
+---+------------------------------------------------+---------+----------+--------+
| A | energy_chp_supercritical_waste_mix | 100.0 % | 386.42 | 0.00 |
| A | energy_power_wind_turbine_inland | 100.0 % | 207.91 | 0.00 |
| A | energy_power_wind_turbine_offshore | 100.0 % | 52.53 | 0.00 |
| A | energy_power_wind_turbine_coastal | 100.0 % | 40.95 | 0.00 |
| A | energy_power_hydro_river | 100.0 % | 20.99 | 0.00 |
| A | households_solar_pv_solar_radiation | 100.0 % | 3.67 | 0.00 |
| A | buildings_solar_pv_solar_radiation | 100.0 % | 2.02 | 0.00 |
| A | energy_power_solar_pv_solar_radiation | 100.0 % | 0.49 | 0.00 |
| A | energy_power_supercritical_waste_mix | 100.0 % | 43.72 | 1.17 |
| A | agriculture_chp_engine_biogas | 100.0 % | 54.78 | 14.92 |
| A | buildings_chp_engine_biogas | 100.0 % | 45.38 | 14.92 |
| A | buildings_collective_chp_network_gas | 100.0 % | 74.25 | 63.72 |
| A | industry_chp_combined_cycle_gas_power_fuelmix | 100.0 % | 666.62 | 71.51 |
| A | industry_chp_engine_gas_power_fuelmix | 100.0 % | 9.13 | 76.96 |
| A | industry_chp_turbine_gas_power_fuelmix | 100.0 % | 237.43 | 79.47 |
+---+------------------------------------------------+---------+----------+--------+
| T | energy_power_nuclear_gen3_uranium_oxide | 100.0 % | 475.19 | 4.84 |
| T | energy_power_combined_cycle_coal | 100.0 % | 227.51 | 17.30 |
| T | energy_power_ultra_supercritical_coal | 100.0 % | 1104.60 | 17.78 |
| T | energy_chp_ultra_supercritical_coal | 100.0 % | 848.71 | 20.66 |
| T | energy_power_supercritical_coal | 100.0 % | 559.37 | 22.49 |
| T | energy_power_combined_cycle_network_gas | 100.0 % | 5427.63 | 41.83 |
| T | energy_power_ultra_supercritical_cofiring_coal | 100.0 % | 534.86 | 44.36 |
| T | energy_chp_ultra_supercritical_cofiring_coal | 100.0 % | 644.94 | 50.61 |
| T | energy_chp_combined_cycle_network_gas | 56.8 % | 2782.90 | 59.09 |
| T | energy_power_ultra_supercritical_network_gas | 0.0 % | 0.00 | 62.32 |
| T | energy_power_turbine_network_gas | 0.0 % | 0.00 | 73.76 |
| T | import_from_de | 0.0 % | 0.00 | 114.98 |
+---+------------------------------------------------+---------+----------+--------+
U = User, A = Always On, T = Transient
One limitation is that it can only have one price-driven (import) interconnect.
For this project that is sufficient indeed.
@antw thanks for the example. I assume you have 'made up' an export curve for DE? And how did you choose the marginal cost of import_from_de? Did you choose it to be higher than the other dispatchables (transients) on purpose?
I assume you have 'made up' an export curve for DE?
The "Runner" does the two-step merit order run described in #112 to determine when import and export occur with Germany. Here's what the Runner does to produce that example:
Create the Merit Order for NL, add an import interconnect producer with Germany using the DE price curve, and calculate. The NL merit order will import from DE whenever it is competitive to do so. In the example above, it is not competitive to import from Germany. Here is another example for hour 1000 when Germany is significantly cheaper than NL.
We now have a calculated Merit Order for NL which includes only demand from NL, with that demand supplied by both local production and import from Germany.
Does this sound right to you?
Do a second run of the NL merit order, adding the demand from Germany which we calculated in step (3).
I will take a good look at the code later but is it true that you calculate the demand of the German interconnector by checking which one of the following happens first:
Does this sound right to you?
If the answer to the previous question is 'yes' than: yes! :wink:
German demand is satisfied (not expected)
Presently, no. It will use the full capacity of the interconnect regardless of whether Germany wants that much energy. I can fix this fairly easily...
Interconnector is fully used (expected to happen sometimes) Dutch capacity is completely used (expected to happen hardly ever)
Dutch price setting plant becomes more expensive then German price (expected to happen often)
Generally yes. The only exception might be if the price-setting plant uses a cost function; such a plant will be used for export if its mean marginal cost is less than the German price. It is possible that such a plant – when fully loaded – could end up costing more than the German price. Is that acceptable, or do we have to stop assigning load to that plant as soon as the load makes the cost uncompetitive (which is already the case for import)?
Presently, no. It will use the full capacity of the interconnect regardless of whether Germany wants that much energy. I can fix this fairly easily...
Fixed as of quintel/merit-convergence@75a52125.
Here is a revised hour-1040 table where prices in Germany are higher than in the Netherlands. Now, however, Germany only receives 430.5 GW through the interconnect, as opposed to the full 2449.0. There's also a second table showing the DE loads and prices for that hour, which reveals why the interconnect is limited to 430.5 GW.
Is that acceptable, or do we have to stop assigning load to that plant as soon as the load makes the cost uncompetitive (which is already the case for import)?
I think it would be best to make that symmetrical and add the feature. Hope that is not too hard!
I think it would be best to make that symmetrical
Implemented in quintel/merit-convergence@ec2df138.
Closing.
The following steps need to be taken: