Commit 011d1913 authored by Juha Kiviluoma's avatar Juha Kiviluoma
Browse files

Fix issue #42. Allow start-ups for units without start fuel consumption or start costs.

parent 3d78755e
......@@ -152,13 +152,23 @@ unit_flow(unit)${ sum(flow, flowUnit(flow, unit)) }
unit_fuel(unit)${ sum(fuel, uFuel(unit, 'main', fuel)) }
= yes;
// Units with investment variables
unit_investLP(unit)${ not p_unit(unit, 'investMIP')
and p_unit(unit, 'maxUnitCount')
}
= yes;
unit_investMIP(unit)${ p_unit(unit, 'investMIP')
and p_unit(unit, 'maxUnitCount')
}
= yes;
// Units with special startup properties
// All units can cold start (default start category)
// NOTE! Juha needs to check why not all units can cold start
unitStarttype(unit, starttype('cold'))${ p_unit(unit, 'startCostCold')
or p_unit(unit, 'startFuelConsCold')
or p_unit(unit, 'rampSpeedToMinLoad')
}
unitStarttype(unit, 'cold') = no;
unitStarttype(unit, 'cold')${ p_unit(unit, 'startCostCold')
or p_unit(unit, 'startFuelConsCold')
or p_unit(unit, 'op00') > 0
}
= yes;
// Units with parameters regarding hot/warm starts
unitStarttype(unit, starttypeConstrained)${ p_unit(unit, 'startWarmAfterXhours')
......@@ -170,15 +180,6 @@ unitStarttype(unit, starttypeConstrained)${ p_unit(unit, 'startWarmAfterXhours')
}
= yes;
// Units with investment variables
unit_investLP(unit)${ not p_unit(unit, 'investMIP')
and p_unit(unit, 'maxUnitCount')
}
= yes;
unit_investMIP(unit)${ p_unit(unit, 'investMIP')
and p_unit(unit, 'maxUnitCount')
}
= yes;
* --- Unit Related Parameters -------------------------------------------------
......
......@@ -383,16 +383,11 @@ loop(m,
// Minimum output in the last time interval of the run-up phase equals minimum load
p_ut_runUp(unit, t)${ord(t) = 1} = p_unit(unit,'op00');
// Not all units can cold start?
// NOTE! Juha needs to check why not all units can cold start
unitStarttype(unit, 'cold') = no;
unitStarttype(unit, 'cold')${ p_unit(unit, 'startCostCold')
or p_unit(unit, 'startFuelConsCold')
or p_u_runUpTimeIntervals(unit) > 1
or (p_u_runUpTimeIntervals(unit) <= 1 and p_u_maxOutputInLastRunUpInterval(unit) < 1)
}
= yes;
) // END loop(unit)
); // END loop(unit)
unitStarttype(unit, 'cold')${ p_u_runUpTimeIntervals(unit) > 1
or (p_u_runUpTimeIntervals(unit) <= 1 and p_u_maxOutputInLastRunUpInterval(unit) < 1)
}
= yes;
); // END loop(m)
* --- Unit Shutdown Generation Levels -----------------------------------------
......
......@@ -242,20 +242,6 @@ v_shutdown.up(uft_online(unit, f, t))${ p_u_shutdownTimeIntervals(unit)
}
= 0;
// Cannot start up or shut down a unit if the interval is not active in the current horizon
// This should not be needed if t_activeNoReset is used properly
$ontext
v_startup.up(unitStarttype(unit, starttype), ft(f, t))${ ord(t) > tSolveFirst
and ord(t) <= tSolveLast
and not t_active(t)
}
= 0;
v_shutdown.up(uft(unit, f, t))${ ord(t) > tSolveFirst
and ord(t) <= tSolveLast
and not t_active(t)
}
= 0;
$offtext
//These might speed up, but they should be applied only to the new part of the horizon (should be explored)
*v_startup.l(unitStarttype(unit, starttype), f, t)${uft_online(unit, f, t) and not unit_investLP(unit) } = 0;
......
......@@ -43,7 +43,7 @@ loop(m,
];
// Unit startup costs
r_uStartupCost(unit, ft_realizedNoReset(f,t))${ sum(starttype, unitStarttype(unit, starttype)) and [ord(t) > mSettings(m, 't_start') + mSettings(m, 't_initializationPeriod')]}
r_uStartupCost(unit, ft_realizedNoReset(f,t))${uft_online(unit, f, t) and sum(starttype, unitStarttype(unit, starttype)) and [ord(t) > mSettings(m, 't_start') + mSettings(m, 't_initializationPeriod')]}
= 1e-6 // Scaling to MEUR
* sum(unitStarttype(unit, starttype),
+ r_startup(unit, starttype, f, t)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment