Giter VIP home page Giter VIP logo

merit's People

Contributors

alexanderwirtz avatar antw avatar chaelkruip avatar dennisquintel avatar fvancamp avatar jalsem avatar jastix avatar jorisberkhout avatar noracato avatar pzac avatar richard-deuchler avatar tamc avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

tamc nhubbers

merit's Issues

privatizing 'values' breaks some functionality

Example:

CSVWriter.new(merit_order.load_curves).write!("output.csv")
NoMethodError: undefined method `values' for <Merit::LoadCurve: 8760 values>:Merit::LoadCurve
from /Users/kruip/Projects/merit/lib/merit/order.rb:142:in `block in load_curves'

surprising change in dashboard values

first, set all electricity generation to zero.
in a scenario with _only_ 15,000 # of offshore wind turbines (Wind production is higher than electricity demand ), switching merit order on/off makes figures in the dashboard change.

In particular, CO2, energy imports, cost and renewables change slightly. However, electricity cost are not affected.

merit order off

merit order on

Discussion: we have a LOT of CHP production?

NOTE: effective_output_capacity is noted in MW electric/plant according to documentation....

  • agriculture_chp_engine_gas_power_fuelmix
    • effective_output_capacity: 3065
    • number_of_units: 3023.581081

Compare this to e.g. nuclear:

  • Nuclear (3rd gen)
    • effective_output_capacity: 510
    • number_of_units: 0.31875

availability is about the same.

So: We have ~5000 times as much agriculural chp power than Nuclear?

including @AlexanderWirtz

Build a solar stub

Make a 'clean' scenario that shows a residual load curve that is not 'messed up' by wind curves. Compare the FLH of the module with the ETM.

Scaling of MO load_profiles can result in loads (MW) larger then the available efficiency

From #19

no more discussion needed, but it needs to be noted somewhere that and why it happens.

This happens because the area under the profiles needs to be scaled to the total produced electricity but the shape of the profiles does not always include all information.

For example, the profiles for wind may not describe every gush of wind that has been converted into electricity and therefore 'misses' features, i.e., it has a trough where it should have a peak. This is inevitable as we do not have measurement of every location in the Netherlands where a turbine is situated and we do not know the exact relation between the wind speeds (measured) and the production of a turbine.

This means that to reproduce the total production, the profile has to be scaled vertically (to make up for the lost peaks) and peaks in the load may become unphysically high. This is not a fundamental problem, as the curve is only indicative of the variability of the technology, but it might confuse the user.

Load fraction for a certain plant type cannot be lower than a set minimum

When determining how much capacity is needed to meet demand (Load), the price setting plant will only turn out to use a fraction of its maximum capacity. This fraction is called load_fraction and cannot be lower than some number.
This minimum_load_fraction has to be researched per plant type. Chris Laumans probably knows them already.

The calculation should eventually make sure that a plant is not used less than its minimum_load_fraction and that the next plant in the merit order should be tried, etc, etc until a fit is found.

N.B. it is theoretically possible that no fit would be found. In that case, what do we do?

Improve README for Marginal Costs

Now it reads, but should be more concrete on how to get this info out of the ETengine. (what query?)

Marginal costs

The marginal_costs (EUR/MWh/year) are calculated by dividing the variable costs
(EUR/plant/year) of the participant by one plant's annual electricity
production (in MWh/plant). The marginal costs can be queried from the
ETEngine's GQL with the following query:

V(converter_key, variable_costs_per(:mwh_electricity))

Discussion: What does effective_output_capacity mean exactly?

According to the stub, the effective_output_capacity of a wind turbine (inland) is 1080 MW.

We discussed that the effective_output_capacity is the max load a producer can produce at any point in time...

...But when we look at the load_curve, derived from the load_profile, we see that the max load of this thing is 1266.34 MW, which is significantly higher.

@s.participant(:energy_power_wind_turbine_inland).load_curve.draw
-----------------------------------------------------------------o------ 9.66e+02
-----------------------------------------------------------------o------ 4.83e+02
-----------------------------------------------------------------o------ 3.22e+02
----------------o----------------------------------------------ooo------ 2.42e+02
----------------o----------------------------------------------ooo------ 1.93e+02
----------------o----------------------------------------------ooo------ 1.61e+02
---o---------o--o-------------------------------o--------------ooo------ 1.38e+02
---o---------o--o-------------------------------o--------------ooo------ 1.21e+02
---oo-o------o--o--------o----------------------o--------------ooo-----o 1.07e+02
--ooo-o-----oo--o-------ooo----------o-o--------o-----o--------ooo-----o 9.66e+01
--ooo-o-----oo--o-------ooo----------o-o-------oo-----o-------oooo-o---o 8.78e+01
--ooo-o----ooo--o-------ooo--o-------o-o-------oo-o---o-----o-oooo-o--oo 8.05e+01
--ooo-o----ooo--o-------ooo--o---oo--o-oo------oo-oo--oo-oo-oooooo-oo-oo 7.43e+01
o-ooo-o-ooooooo-o-oo-o--oooooooo-oo--ooooo---o-ooooo--ooooooooooooooo-oo 6.90e+01
o-ooo-oooooooooooooo-ooooooooooo-oo-oooooo--ooooooooo-oooooooooooooooooo 6.44e+01
o-ooooooooooooooooooooooooooooooooo-oooooooooooooooooooooooooooooooooooo 6.04e+01
=> nil
[8] pry(main)> @s.participant(:energy_power_wind_turbine_inland).load_curve.values.max
=> 1266.34104

Including @AlexanderWirtz.

Use realistic converters for Rspec test

In order to compare the outcome of the MO calculation with the current implementation of the MO in the ETM, a complete list of participants has to be used in the Rspec tests.

First outcomes: Could this be right? :)))

First Results of the Merit Order :)

A sanity check would be nice...

> @s.calculate
=> true
> @s.producers.map{ |p| "#{p.key} #{(p.production / p.max_production)}" }
=> ["energy_power_solar_pv_solar_radiation NaN",
 "energy_power_solar_csp_solar_radiation NaN",
 "energy_power_wind_turbine_inland 0.9999996754680114",
 "energy_power_wind_turbine_coastal 1.000001058912001",
 "energy_power_wind_turbine_offshore 0.9999998874719702",
 "buildings_solar_pv_solar_radiation 1.000000004721413",
 "households_solar_pv_solar_radiation 1.0000000047214168",
 "industry_chp_combined_cycle_gas_power_fuelmix 1.0000002527999505",
 "industry_chp_supercritical_wood_pellets 1.0000002528001373",
 "industry_chp_ultra_supercritical_coal NaN",
 "energy_power_supercritical_waste_mix 1.0000002527998384",
 "agriculture_chp_engine_gas_power_fuelmix 1.0000001606400828",
 "buildings_collective_chp_wood_pellets NaN",
 "buildings_collective_chp_gas_power_fuelmix 0.9999038923440943",
 "households_collective_chp_wood_pellets NaN",
 "households_collective_chp_network_gas NaN",
 "households_water_heater_fuel_cell_chp_network_gas NaN",
 "other_chp_engine_gas_power_fuelmix NaN",
 "households_space_heater_micro_chp_network_gas NaN",
 "households_water_heater_micro_chp_network_gas NaN",
 "energy_power_nuclear_gen3_uranium_oxide 0.8997441764037145",
 "energy_power_nuclear_gen2_uranium_oxide NaN",
 "energy_power_ultra_supercritical_lignite NaN",
 "energy_chp_ultra_supercritical_lignite NaN",
 "energy_power_ultra_supercritical_oxyfuel_ccs_lignite NaN",
 "energy_power_combined_cycle_coal 0.8992712487011134",
 "energy_power_combined_cycle_ccs_coal NaN",
 "energy_power_ultra_supercritical_coal 0.8458966087802168",
 "energy_power_supercritical_coal NaN",
 "energy_chp_ultra_supercritical_coal 0.6479913933028825",
 "energy_power_ultra_supercritical_ccs_coal NaN",
 "energy_power_combined_cycle_gas_power_fuelmix 0.2026446701852276",
 "energy_power_combined_cycle_ccs_gas_power_fuelmix NaN",
 "energy_chp_combined_cycle_gas_power_fuelmix 0.012113223432973608",
 "energy_power_ultra_supercritical_gas_power_fuelmix 0.0",
 "energy_power_turbine_network_gas 0.0",
 "energy_power_ultra_supercritical_crude_oil NaN",
 "energy_chp_ultra_supercritical_crude_oil NaN",
 "energy_chp_ultra_supercritical_wood_pellets NaN",
 "energy_power_engine_diesel NaN"]

Profitability should be related to OPEX and CAPEX, not to variable and fixed costs

As discussed with @JAlsem.

The current definition of profitability is not correct:

  1. :profitable (if income >= total costs)
  2. :conditionally_profitable (if variable costs =< income < total costs)
  3. :unprofitable (if income < variable costs)

Since a plant the runs always earns back its variable costs (since electricity price is always higher than variable costs IFF a plant is running, otherwise it wouldn't be running), the comparison between variable and fixed costs is rather trivial.

The crux is that we want to know if the plant makes enough money to stay open. In effect this means we want to know if it covers its OPEX = variable costs + fixed O&M cost

Change the profitability definition as follows therefore:

  1. :profitable (if income >= total costs)
  2. :conditionally_profitable (if OPEX =< income < total costs)
  3. :unprofitable (if income < OPEX)

Note that since:

total costs = OPEX + CAPEX = variable costs + fixed costs

it is not necessary to define CAPEX anywhere.

We need to calculate OPEX in merit module, since variable costs are not input but output.

We need to make fixed_operation_and_maintenance_costs_per_year an input for each (dispatchable) participant in order to be able to calculate OPEX.

Check numbers for profit

+------------------------------------------------------+-----------------------------+--------------------------+------+--------+---------+-------------+-------------+----------------+-----------------+
| key                                                  | class                       | profitability            | flh  | profit | revenue | total_costs | fixed_costs | variable_costs | operating_costs |
+------------------------------------------------------+-----------------------------+--------------------------+------+--------+---------+-------------+-------------+----------------+-----------------+
| energy_power_solar_pv_solar_radiation                | Merit::VolatileProducer     | unprofitable             | 1050 | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_solar_csp_solar_radiation               | Merit::VolatileProducer     | unprofitable             | 500  | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_wind_turbine_inland                     | Merit::VolatileProducer     | conditionally_profitable | 2500 | -16    | 176     | 191         | 191         | 0              | 53              |
| energy_power_wind_turbine_coastal                    | Merit::VolatileProducer     | profitable               | 3000 | 3      | 39      | 35          | 35          | 0              | 9               |
| energy_power_wind_turbine_offshore                   | Merit::VolatileProducer     | conditionally_profitable | 3500 | -63    | 44      | 106         | 106         | 0              | 27              |
| buildings_solar_pv_solar_radiation                   | Merit::VolatileProducer     | conditionally_profitable | 1050 | -5     | 2       | 6           | 6           | 0              | 0               |
| households_solar_pv_solar_radiation                  | Merit::VolatileProducer     | conditionally_profitable | 1050 | -7     | 4       | 11          | 11          | 0              | 1               |
| industry_chp_combined_cycle_gas_power_fuelmix        | Merit::MustRunProducer      | unprofitable             | 5442 | -1064  | 1097    | 2160        | 310         | 1850           | 1850            |
| industry_chp_supercritical_wood_pellets              | Merit::MustRunProducer      | unprofitable             | 5247 | -235   | 116     | 351         | 99          | 251            | 282             |
| industry_chp_ultra_supercritical_coal                | Merit::MustRunProducer      | unprofitable             | 4204 | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_supercritical_waste_mix                 | Merit::MustRunProducer      | conditionally_profitable | 6190 | -66    | 253     | 318         | 314         | 4              | 4               |
| agriculture_chp_engine_gas_power_fuelmix             | Merit::MustRunProducer      | unprofitable             | 3980 | -535   | 772     | 1307        | 352         | 955            | 994             |
| buildings_collective_chp_wood_pellets                | Merit::MustRunProducer      | unprofitable             | 6097 | 0      | 0       | 0           | 0           | 0              | 0               |
| buildings_collective_chp_gas_power_fuelmix           | Merit::MustRunProducer      | unprofitable             | 3942 | -90    | 104     | 193         | 43          | 150            | 150             |
| households_collective_chp_wood_pellets               | Merit::MustRunProducer      | unprofitable             | 6097 | 0      | 0       | 0           | 0           | 0              | 0               |
| households_collective_chp_network_gas                | Merit::MustRunProducer      | unprofitable             | 3942 | 0      | 0       | 0           | 0           | 0              | 0               |
| households_water_heater_fuel_cell_chp_network_gas    | Merit::MustRunProducer      | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| other_chp_engine_gas_power_fuelmix                   | Merit::MustRunProducer      | unprofitable             | 4000 | 0      | 0       | 0           | 0           | 0              | 0               |
| households_space_heater_micro_chp_network_gas        | Merit::MustRunProducer      | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| households_water_heater_micro_chp_network_gas        | Merit::MustRunProducer      | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_ultra_supercritical_oxyfuel_ccs_lignite | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_ultra_supercritical_lignite             | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_chp_ultra_supercritical_crude_oil             | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_chp_ultra_supercritical_lignite               | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_chp_ultra_supercritical_wood_pellets          | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_combined_cycle_ccs_coal                 | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_combined_cycle_ccs_gas_power_fuelmix    | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_ultra_supercritical_crude_oil           | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_ultra_supercritical_ccs_coal            | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_engine_diesel                           | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_supercritical_coal                      | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_nuclear_gen2_uranium_oxide              | Merit::DispatchableProducer | unprofitable             | 0    | 0      | 0       | 0           | 0           | 0              | 0               |
| energy_power_nuclear_gen3_uranium_oxide              | Merit::DispatchableProducer | profitable               | 7884 | 53     | 261     | 207         | 184         | 23             | 49              |
| energy_power_combined_cycle_coal                     | Merit::DispatchableProducer | profitable               | 7883 | 32     | 129     | 97          | 50          | 46             | 51              |
| energy_power_ultra_supercritical_coal                | Merit::DispatchableProducer | profitable               | 7708 | 369    | 1344    | 975         | 377         | 598            | 652             |
| energy_chp_ultra_supercritical_coal                  | Merit::DispatchableProducer | profitable               | 7686 | 155    | 834     | 678         | 263         | 415            | 453             |
| energy_power_combined_cycle_gas_power_fuelmix        | Merit::DispatchableProducer | profitable               | 6498 | 255    | 1719    | 1464        | 314         | 1150           | 1196            |
| energy_chp_combined_cycle_gas_power_fuelmix          | Merit::DispatchableProducer | conditionally_profitable | 2490 | -261   | 589     | 850         | 353         | 496            | 548             |
| energy_power_ultra_supercritical_gas_power_fuelmix   | Merit::DispatchableProducer | conditionally_profitable | 468  | -119   | 139     | 258         | 140         | 117            | 124             |
| energy_power_turbine_network_gas                     | Merit::DispatchableProducer | unprofitable             | 51   | -10    | 0       | 10          | 9           | 0              | 2               |
+------------------------------------------------------+-----------------------------+--------------------------+------+--------+---------+-------------+-------------+----------------+-----------------+

Load curves needed for new technologies

We have several technologies in the ETM that are not currently included in the MO calculation because they do not have load curves or sensible costs assigned:

  • energy_power_solar_csp_solar_radiation (curve and cost need review)
  • energy_power_hydro_river (idem)
  • energy_power_geothermal (costs?)

full load hours of volatiles are wrong

When using pry-remote with a 'binding.remote_pry' in between these lines, the merit order info table looks like this:

@m.info: 
+--------------------------------------------------------+-----------------------------+--------------------+--------------------+-----------------------+
| key                                                    | class                       | marginal costs     | full load hours    | production (PJ)       |
+--------------------------------------------------------+-----------------------------+--------------------+--------------------+-----------------------+
| buildings_solar_pv_solar_radiation                     | Merit::VolatileProducer     | 0.0                | 8584.799999998668  | 0.9801388799998477    |
| energy_power_solar_csp_solar_radiation                 | Merit::VolatileProducer     | 1.0                | 0.0                | 0.0                   |
| energy_power_solar_pv_solar_radiation                  | Merit::VolatileProducer     | 0.0                | 0.0                | 0.0                   |
| energy_power_wind_turbine_coastal                      | Merit::VolatileProducer     | 0.0                | 8322.0             | 5.991839999999999     |
| energy_power_wind_turbine_inland                       | Merit::VolatileProducer     | 0.0                | 8322.000000000024  | 32.35593599999999     |
| energy_power_wind_turbine_offshore                     | Merit::VolatileProducer     | 0.0                | 8059.1999999988975 | 5.636834742856381     |
| households_solar_pv_solar_radiation                    | Merit::VolatileProducer     | 0.0                | 8584.800000000983  | 1.9632211200002248    |
| agriculture_chp_engine_gas_power_fuelmix               | Merit::MustRunProducer      | 78.2912044043496   | 3980.42414355628   | 43.9200070553075      |
| buildings_collective_chp_gas_power_fuelmix             | Merit::MustRunProducer      | 94.00461948287406  | 3942.0             | 5.759999730892853     |
| buildings_collective_chp_wood_pellets                  | Merit::MustRunProducer      | 154.16507000812567 | 6097.77777777778   | 0.0                   |
| energy_power_geothermal                                | Merit::MustRunProducer      | 0.0                | 8250.0             | 0.0                   |
| energy_power_supercritical_waste_mix                   | Merit::MustRunProducer      | 1.2060890798839186 | 6190.47619047619   | 14.040003549310445    |
| energy_power_ultra_supercritical_cofiring_wood_pellets | Merit::MustRunProducer      | 76.54076672162961  | 6329.1             | 0.0                   |
| households_collective_chp_network_gas                  | Merit::MustRunProducer      | 85.59713754578537  | 3942.0             | 0.0                   |
| households_collective_chp_wood_pellets                 | Merit::MustRunProducer      | 119.97893462469432 | 6097.77777777778   | 0.0                   |
| households_space_heater_micro_chp_network_gas          | Merit::MustRunProducer      | NaN                | 0.0                | 0.0                   |
| households_water_heater_fuel_cell_chp_network_gas      | Merit::MustRunProducer      | NaN                | 0.0                | 0.0                   |
| households_water_heater_micro_chp_network_gas          | Merit::MustRunProducer      | NaN                | 0.0                | 0.0                   |
| industry_chp_combined_cycle_gas_power_fuelmix          | Merit::MustRunProducer      | 109.48622367590018 | 5442.83413848631   | 60.840015380343736    |
| industry_chp_supercritical_wood_pellets                | Merit::MustRunProducer      | 139.78983050846998 | 5247.81341107872   | 6.480001638143425     |
| industry_chp_ultra_supercritical_coal                  | Merit::MustRunProducer      | 32.155211147136    | 4204.8             | 0.0                   |
| other_chp_engine_gas_power_fuelmix                     | Merit::MustRunProducer      | 78.35349089083613  | 4000.0             | 0.0                   |
| energy_power_nuclear_gen3_uranium_oxide                | Merit::DispatchableProducer | 5.826162528219999  | 7884.000000000001  | 14.475024000000001    |
| energy_power_nuclear_gen2_uranium_oxide                | Merit::DispatchableProducer | 6.133182844247499  | 0.0                | 0.0                   |
| energy_power_ultra_supercritical_lignite               | Merit::DispatchableProducer | 13.999791000000002 | 0.0                | 0.0                   |
| energy_chp_ultra_supercritical_lignite                 | Merit::DispatchableProducer | 16.60280221570544  | 0.0                | 0.0                   |
| energy_power_ultra_supercritical_oxyfuel_ccs_lignite   | Merit::DispatchableProducer | 19.5875588852459   | 0.0                | 0.0                   |
| energy_power_combined_cycle_coal                       | Merit::DispatchableProducer | 23.206235140069815 | 7883.999999998865  | 7.1807471999989865    |
| energy_power_combined_cycle_ccs_coal                   | Merit::DispatchableProducer | 28.368603091935135 | 0.0                | 0.0                   |
| energy_power_ultra_supercritical_coal                  | Merit::DispatchableProducer | 28.88182917042096  | 7703.270989606596  | 74.49825668266205     |
| energy_power_supercritical_coal                        | Merit::DispatchableProducer | 29.9101120467295   | 0.0                | 0.0                   |
| energy_chp_ultra_supercritical_coal                    | Merit::DispatchableProducer | 32.392018334153555 | 7562.661521001719  | 45.466243477619265    |
| energy_power_ultra_supercritical_ccs_coal              | Merit::DispatchableProducer | 34.97149517639419  | 0.0                | 0.0                   |
| energy_power_combined_cycle_gas_power_fuelmix          | Merit::DispatchableProducer | 44.22593220218116  | 5268.837140035736  | 75.90919044392285     |
| energy_power_combined_cycle_ccs_gas_power_fuelmix      | Merit::DispatchableProducer | 57.26112857757725  | 0.0                | 0.0                   |
| energy_chp_combined_cycle_gas_power_fuelmix            | Merit::DispatchableProducer | 60.30808936661068  | 1625.7070841086925 | 19.3461744140269      |
| energy_power_ultra_supercritical_gas_power_fuelmix     | Merit::DispatchableProducer | 65.87652585429215  | 225.22181206417207 | 3.1004935536002223    |
| energy_power_turbine_network_gas                       | Merit::DispatchableProducer | 77.98197269622605  | 2.9405857154323356 | 0.0022442550180179596 |
| energy_power_ultra_supercritical_crude_oil             | Merit::DispatchableProducer | 93.09320787177599  | 0.0                | 0.0                   |
| energy_power_engine_diesel                             | Merit::DispatchableProducer | 93.09320787177599  | 0.0                | 0.0                   |
| energy_chp_ultra_supercritical_crude_oil               | Merit::DispatchableProducer | 109.37827642710315 | 0.0                | 0.0                   |
| energy_chp_ultra_supercritical_wood_pellets            | Merit::DispatchableProducer | 139.78983050846998 | 0.0                | 0.0                   |
| TOTALS:                                                |                             |                    |                    | 417.9463721237027     |
+--------------------------------------------------------+-----------------------------+--------------------+--------------------+-----------------------+

Curiously, the full_load_hours (and, therefore, productions) of wind turbines are much higher than they should be. The the full_load_hours are input to the MO module, and should be constant regardless.

This could very well be the reason for the discrepancy of production and demand when injecting the MO the full_load_hours into the ETM:

NOTE: the the full_load_hours in the table are correct again! They also look to be correct when using a stub with the MO module to reproduce the exact scenario. Only when printing the values inside the 'pry' session, do these weird values show up...

plant types with zero operating hours also have zero operating costs

  • open a default scenario
  • turn on merit order
  • display merit order graph

When you increase Gas CCGT plants from 5.1 (default) to 10, you see how Gas Turbines jump from the highest position in the merit order graph (most right) to the lowest position (most left). As Gas Turbines are replaced with Gas CCGT, Gas Turbines are no longer running. The module assigns the operation costs to zero in consequence.
Further increasing Gas CCGT to the max of the slider will also push Gas Steam down the merit order.

Are there other drawbacks from having zero operating costs for plants that do not run?

possible solutions,

  • assign operating costs, even if the plant has 0 full load hours.
  • arrange plants in merit order graph correctly. Gas steam and gas turbine still rank 7 and 8 in the merit order position.

marginal_cost is NaN when number_of_units is zero

We have to find out three things:

  1. Is this a bad thing? Those dispatchables are not really participating in the MO anyway.
  2. Why would the variable_cost_per(:MWh) give different results than the previously used merit_order_variable_cost_per(:MWh)?
  3. Does the new stub reproduce the outcome of the previous one?

must runs are not displayed with zero operating costs in graph

  • open a default scenario
  • turn merit order on
  • increase conventional coal production to max
  • display merit order graph (not table)

you find that the green block (must run CHPs) is sticking out above the other producers that have zero marginal costs. Even though the operating costs are displayed as 0,00 they look larger than zero.

Fix inconsistencies

  • Some input is explicitly per year, and other is not....
  • Expenses and costs
  • Operating, operation (Dutchlish) and operational

What to do with empty load profiles?

According to documentation and discussion, MusRunConverters NEED to have a profile defined, but in the stub, some participants have none:

    merit_order.add(
      MustRunParticipant.new(
        key: "energy_power_ultra_supercritical_cofiring_wood_pellets",
        marginal_costs: 76.54109444,
        effective_output_capacity: 0,
        number_of_units: 0,
        availability: 0.89,
        fixed_costs: 133969444.4,
        load_profile_key: "",
        full_load_hours: 6329.1
      )
    )

    merit_order.add(
      MustRunParticipant.new(
        key: "energy_power_hydro_river",
        marginal_costs: 0,
        effective_output_capacity: 37,
        number_of_units: 3.7,
        availability: 0.98,
        fixed_costs: 3000000,
        load_profile_key: "",
        full_load_hours: 2702.702703
      )
    )

Later: add hydro technologies for other countries != NL

    merit_order.add(
      MustRunParticipant.new(
        key: "energy_power_hydro_river",
        marginal_costs: 0,
        effective_output_capacity: 37,
        number_of_units: 3.7,
        availability: 0.98,
        fixed_costs: 3000000,
        load_profile_key: "",
        full_load_hours: 2702.702703
      )
    )

    merit_order.add(
      MustRunParticipant.new(
        key: "energy_power_hydro_mountain",
        marginal_costs: 2.49208966,
        effective_output_capacity: 0,
        number_of_units: 0,
        availability: 0.98,
        fixed_costs: 51155234.43,
        load_profile_key: "",
        full_load_hours: 3942
      )
    )

Write functions for profitability as needed by @JAlsem

  • Assess which functionality is missing from the current (pseudo) code
  • Write pseudo code for the missing functions
  • Try to organize them in the existing Merit module
  • Communicate to others what is needed to get to a completely working version of these functions

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.