flextool icon indicating copy to clipboard operation
flextool copied to clipboard

Minimum and maximum range for hourly dispatch of a dispatchable generation unit.

Open hbshrestha opened this issue 9 months ago • 7 comments

I am modelling a coal unit whose characteristics are given below. This is one among the 8 coal plants in my system. This specific plant has a capacity of 3840 MW, availability factor of 46%, min_load of 60% (0.6) and efficiency of 30%. I used no_startup for startup method. Image

I'd like to know the possible minimum and maximum value of hourly dispatch of this plant.

My initial thought is: max possible dispatch = capacity * availability = 3840 * 0.46 = 1766 MW. And min possible dispatch = capacity * availability * min_load = 3840 * 0.46 * 0.6 = 1060 MW

When I ran FlexTool and got results, the max hourly dispatch matches with the above calculation. However, there are several hours where the minimum dispatch of the plant (except when 0) is below my above calcualation of 1060 MW as shown by red circles below. Image

These mainly occur during afternoon hours when the solar PV dispatch is high. I was expecting coal plant to still behave similar to a base load and the PV to be curtailed. What could explain this behaviour? Image

hbshrestha avatar May 08 '25 20:05 hbshrestha

From this documentation of FlexTool 2.0, I infer that

max possible dispatch = existing capacity * availability * efficiency = 3840 * 0.46 * 0.3 = 529 MW min possible dispatch = existing capacity * availability * min util * efficiency = 3840 * 0.46 * 0.6 * 0.3 = 318 MW

However, I am getting the hourly dispatch above and below these max and min values respectively.

Image

hbshrestha avatar May 09 '25 09:05 hbshrestha

I also don't see a placeholder field for online variable in FlexTool 3.0.

hbshrestha avatar May 09 '25 09:05 hbshrestha

The 'min_load' parameter is really a part of the 'startup_method', so you need set the 'startup_method' to either linear or integer. The latter will force the unit to follow the minimum load strictly, but it will require 'interger' variables making the model slower. Linear allows the unit to 'start_up' partially as well.

Additionally, the if you want the 'ramp_speed_up' and 'ramp_speed_down' to have an effect on the model, the 'ramp_method' should be set to 'both' or 'ramp_limit' if the 'ramp_cost' can be ignored.

ArttuTupala avatar May 09 '25 10:05 ArttuTupala

The min_load parameter description in the documentation should be modified to tell that the startup_method creates the online variable

ArttuTupala avatar May 09 '25 10:05 ArttuTupala

Thanks for the response, Arttu! I understand now that the min_load is actually activated once the start_up method is set to linear or binary.

I also noticed that if the availability of a plant is less than min_load, then that plant does not get dispatched. As such, the availability works as a derating factor. Correct me if I am wrong!

hbshrestha avatar May 12 '25 15:05 hbshrestha

Just an addition: min_load parameter, together with min_load_efficiency, is also used by the conversion_method 'min_load_efficiency'.

jkiviluo avatar May 14 '25 12:05 jkiviluo

And yes, 'availability' is multiplied with the capacity (existing plus invested) to form an upper limit to what the unit can produce. And if then min_load is higher than availability, the unit cannot produce (as long as it has integer online variable).

jkiviluo avatar May 14 '25 12:05 jkiviluo