-
Notifications
You must be signed in to change notification settings - Fork 0
Energy Balance Algorithm
MiGRIDS Lite has two main parts of its algorithm, the spinning reserve capacity (SRC) calculations and the generator time shifting. The time shifting refers to the support a storage system can give to generators, allowing bigger generators to "time shift" their on time. The spinning reserve calculations are dependent on the load and the resource, along with the spinning reserve operational parameters, which are multipliers. Finally, the fuel usages are calculated for each generator.
All of these calculations are for each hourly timestep.
- Possible resource import directly to load:
$possible \_ resource \_ import = minimum(load, ~ resource)$ - Load spinning reserve capacity needed:
$load \_ src = src \_ multiplier * load$ - by default, the
$src \_ multiplier$ is 0.1 or 10%.
- by default, the
- Diesel load spinning reserve capacity needed:
$diesel \_ src \_ required = load \_ src - storage \_ discharge \_ capacity$ - if there is no battery,
$storage \_ discharge \_ capacity$ is 0 and load spinning reserve and diesel spinning reserve are equal.
- if there is no battery,
- Naive diesel usage before minimum operating load requirements:
$dummy \_ diesel = load - wind$
- Diesel capacity required:
$diesel \_ cap \_ required = maximum(diesel \_ src \_ required, ~ dummy \_ diesel * resource \_ src \_ multiplier)$ - by default, the
$resource \_ src \_ multiplier$ is 1 or 100%, so it covers all of the resource
- by default, the
- SRC limited diesel output:
$src \_ diesel \_ output = maximum(diesel \_ minimum \_ operating \_ load, ~ dummy \_ diesel)$ - SRC limited resource to load:
$src \_ resource \_ to \_ load = load - src \_ diesel \_ output$ - SRC limited resource curtailed:
$src \_ resource \_ curtailed = resource - src \_ resource \_ to \_ load$
The time shifting first calculates what's possible based on storage charge, discharge, and total energy storage ratings. It then calculates the time shifting based on SRC and storage state of charge (SOC). It then iterates on the SOC column at least once. Once the error is less than the residual cutoff value, by default 0.005 or 0.5%, it terminates.
- Maximum possible storage charge:
$max \_ poss \_ storage \_ charge = minimum( src \_ resource \_ curtailed, ~ storage \_ rated \_ charge)$ - Maximum possible storage discharge:
$max \_ poss \_ storage \_ discharge = minimum( load - src \_ resource \_ to \_ load, ~ storage \_ rated \_ discharge)$ - Possible storage discharge:
$poss \_ storage \_ discharge = minimum(max \_ poss \_ storage \_ discharge, ~ (SOC - storage \_ rated \_ minimum)*storage \_ rated \_ capacity)$ - the
$(SOC - storage \_ rated \_ minimum)$ is to consider storage technologies or utility strategies that don't let the energy storage to go to 0% charge.
- the
- Diesel output possible:
$diesel \_ output \_ poss = load - resource \_ to \_ load - poss \_ storage \_ discharge$
- Actual storage charge:
$storage \_ charge = minimum(max \_ poss \_ storage \_ charge, (1-SOC)*storage \_ rated \_ capacity)$ - the
$(1-SOC)$ is so that once the battery is 1 or 100% fully charged, it cannot charge more.
- the
- Diesel capacity required:
$diesel \_ capacity \_ required = maximum(diesel \_ src \_ required, ~ diesel \_ output \_ poss)$ - Actual diesel output:
$diesel \_ output \_ actual = maximum(diesel \_ minimum \_ operating \_ load, ~ diesel \_ output \_ poss)$ - Actual discharge:
$storage \_ discharge = load - resource \_ to \_ load - diesel \_ output$
MiGRIDS Lite then repeats steps 1 and 2 at least once by feeding the just calculated SOC series as an initial SOC series for the new calculation. Once the error between every row of the two is less than the residual cutoff, it terminates. By default it is 0.005 or 0.5%
In equality form:
The load is shared between the generators naively. See generator dispatch strategy. The fuel curves for each generator is approximated linearly.