Parameter catalogue
Every input parameter of this FlexTool version, generated from its database schema: one table per entity class. The topic pages of Model parameters explain what the parameters do and how they work together; the parameter groups page explains the group labels.
- Unit is the unit of the default convention (MW, MWh, CUR for the model currency, tonnes of CO2).
FlexTool does not check units: a model may use others consistently. dimensionless is a ratio or a
share; MW or count is a number of units when
virtual_unitsizeis above 0. - Default is the default of the schema. When FlexTool runs it may derive or default other values; the results show what the model used.
- Allowed shapes says what a value may be: a constant, or a map (an indexed table) over periods, over time, or over both (one or two index levels); a stochastic-time map has three levels (branch, analysis_time, time). A map whose index is something else names it: a map: constraint name → coefficient. Where FlexTool checks the shape, this is what it accepts; otherwise it comes from the description or the value types of the schema (a map with n index levels).
- The same table as an Excel data dictionary, with the parameters a database uses:
python -m flextool.docs_build --xlsx catalogue.xlsx --input-db input_data.sqlite(see Make a data dictionary for your model).
commodity
A fuel or other product bought from, or sold to, outside the modelled system at a price (natural gas, coal, hydrogen for export).
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
co2_content |
tCO2/MWh | a constant | emission | Constant. | ||
price |
CUR/MWh or other unit | a constant, or a map over periods or over time (1 level) | basics | Price of the commodity. Constant, period or time. | ||
price_ladder_annual |
CUR/MWh; MWh/a | a map over tiers and price / quantity (2 levels), or a map over periods, tiers and price / quantity (3 levels) | basics | Stepped supply curve for price_method price_ladder_annual. Map of tier → price and quantity (optionally per period). Quantity is per year; a shorter solve gets its share by the hours it covers. quantity = inf can be used to mark an unlimited last tier. | ||
price_ladder_cumulative |
CUR/MWh; MWh | a map over tiers and price / quantity (2 levels) | basics | Stepped supply curve for price_method='price_ladder_cumulative'. 2d map with rows 'tier,price,quantity' — one row per tier, giving the tier's unit price and its cumulative quantity cap. 1-based integer tier index. quantity=inf marks an unbounded tail tier. Period-agnostic — the cap is a single total across the full model horizon. | ||
price_method |
a constant | price | price, price_ladder_annual, price_ladder_cumulative | basics | How the commodity's price enters the LP. 'price' = scalar or time-series price x flow (current behaviour); 'price_ladder_annual' = stepped supply curve with a per-year quantity cap per tier; 'price_ladder_cumulative' = stepped supply curve with a total-model quantity cap per tier (handoff-carried across rolling solves). | |
unitsize |
MWh | a constant | basics | Per-commodity scaling coefficient applied to the v_trade tier variable when the commodity uses the price-ladder feature (gated by commodity.price_method = price_ladder_annual or price_ladder_cumulative). When set, v_trade is expressed in user-MWh divided by this value; pick the unitsize so the largest tier quantity sits at O(10) in the scaled LP. The coefficient multiplies v_trade in the commodity_ladder_balance LHS, the per-tier cap LHS, and the per-tier objective term. When absent (the default), the price-ladder consumer substitutes 1.0 internally so v_trade is in user-MWh (identity scaling). Ignored entirely when commodity.price_method is not a price_ladder_* value. |
connection
A link that moves energy between two nodes: a transmission line, an interconnector or a pipeline, with its capacity, losses and costs.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
availability |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | 1 | basics | e.g. 0.9 means 90%. Fraction of capacity available for connection flows. Constant, period, time or period+time. | |
constraint_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the connection's capacity in service in each period on the left side of the user constraint (existing plus investments still in service minus retirements). Coefficient per MW. Capacity in construction is not included. | ||
constraint_cumulative_pre_built_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity in service at the start of each period on the left side of the user constraint. This is existing capacity plus capacity that came online in earlier periods, minus earlier retirements. Capacity coming online in the period itself is in the invested term. Coefficient per MW. | ||
constraint_in_construction_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity in construction in each period on the left side of the user constraint. Capacity is in construction from the period of the investment decision until it comes online. It is zero without a construction lead time. Coefficient per MW. | ||
constraint_invested_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity that comes online in each period on the left side of the user constraint. Without a construction lead time, this is the capacity invested in that period. Coefficient per MW. | ||
constraint_online_coeff |
unit of the constraint per unit online | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the number of units of the connection online in each time step on the left side of the user constraint. One unit is virtual_unitsize; without it, the largest existing capacity, else 1000 MW (set virtual_unitsize when the capacity is invested). Needs online variables (startup_method linear or binary); a coefficient without them is an error. With linear startup the number is continuous. For MW online, use the unit size (MW per unit) as the coefficient. | ||
constraint_retired_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity retired in each period on the left side of the user constraint. Coefficient per MW. | ||
construction_lead_time |
years | a constant, or a map over periods (1 level) | investment | Time from the investment decision until the capacity starts to operate. The start is rounded to the start of a period (see construction_lead_time_method). Investments whose rounded start is after the end of the solve or the model horizon are not offered, with a warning. Constant or period. Default 0. | ||
construction_lead_time_method |
a constant | immediate, closest_seam, previous_seam, next_seam | investment | How the start of operation (decision year plus construction_lead_time) is rounded to the start of a period. immediate: no lead time, the capacity operates from the decision period. closest_seam: the nearest period start; a tie goes to the later one. previous_seam: the period start before. next_seam: the period start after. Without a value: immediate when there is no lead time, else closest_seam. | ||
cumulative_max_capacity |
MW | a constant, or a map over periods (1 level) | investment | Maximum cumulative capacity (considers existing, invested and retired capacity). Constant or period. | ||
cumulative_min_capacity |
MW | a constant, or a map over periods (1 level) | investment | Minimum cumulative capacity (considers existing, invested and retired capacity). Constant or period. | ||
delay |
hours | a constant, or a map with 1 index level | tech_advanced | Not yet applied to connections (planned): a connection delay is ignored (the connection is modelled as if no delay were set) and the model warns about it. Model a delayed flow with a unit. Intended meaning: a time delay between the input node and the output node, either a constant time difference in hours or a map of time differences (index: time difference in hours, value: weight; the weights should sum to 1). | ||
discount_rate |
dimensionless | a constant, or a map over periods (1 level) | 0.05 | investment | e.g. 0.05 means 5% per year. Discount rate for investments (WACC). Reflects the financing cost and risk premium for this technology. When the model inflation_rate > 0, this should be a nominal rate. When inflation_rate = 0, this should be a real rate. Used to annualize investment costs over the lifetime: annuity = invest_cost x r / (1 - (1 + r)^-lifetime). 0 gives the straight-line annuity invest_cost / lifetime. No value means 0.05. Must be 0 or above. Constant or period. | |
efficiency |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | 1 | basics | e.g. 0.9 means 90%. Efficiency of the connection. Constant, period, time or period+time. | |
existing |
MW or count | a constant, or a map over periods (1 level) | basics | Existing capacity or number of units. If virtual_unitsize is given, then existing is the number of units (capacity = existing × virtual_unitsize). Otherwise existing is the existing capacity of a single unit (typically in MW). Constant or period. | ||
fixed_cost |
CUR/kW/a | a constant, or a map over periods (1 level) | investment | Annual fixed cost. New capacity pays it only while it operates. Constant or period. | ||
invest_cost |
CUR/kW | a constant, or a map over periods (1 level) | investment | Overnight investment cost of new capacity. It is paid as an annuity over the years the capacity operates. Construction time costs with their interest must be included here. Constant or period: the value of the period when the capacity is built (comes online) is used. | ||
invest_max_period |
MW | a constant, or a map over periods (1 level) | investment | Largest allowed capacity coming online in each period. Existing capacity and retirements do not change it. With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_max_total |
MW | a constant | investment | Largest allowed total investment over all solves. Every investment decision counts, also reinvestments and investments that are no longer in service. Retirements and existing capacity do not reduce it. To limit the capacity in service, use cumulative_max_capacity. Constant. | ||
invest_method |
a constant | not_allowed | not_allowed, invest_no_limit, invest_period, invest_total, invest_period_total, retire_no_limit, retire_period, retire_total, retire_period_total, invest_retire_no_limit, invest_retire_period, invest_retire_total, invest_retire_period_total, cumulative_limits | investment | Choice of investment method: not_allowed, invest and retire indicate availability of investment and retirement. no_limit removes all limits even if there are limiting values set. period uses values set in invest/retire_max/min_period. total uses values set in invest/retire_max/min_total. | |
invest_min_period |
MW | a constant, or a map over periods (1 level) | investment | Smallest required capacity coming online in each period. Existing capacity and retirements do not change it. With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_min_total |
MW | a constant | investment | Smallest required total investment over all solves. Every investment decision counts, also reinvestments and investments that are no longer in service. Retirements and existing capacity do not reduce it. To limit the capacity in service, use cumulative_max_capacity. Constant. | ||
is_DC |
a constant | no | yes, no | network | Whether the connection is DC. Its flow into a group with a non-synchronous limit counts as non-synchronous, in both directions. Default no. | |
lifetime |
years | a constant, or a map over periods (1 level) | investment | Operating lifetime. It starts when the capacity starts to operate: with a construction lead time, after the construction. Used with the interest rate to calculate the annuity. What happens at the end of the lifetime depends on lifetime_method: reinvest_automatic keeps the capacity to the end of the model horizon, reinvest_choice retires it, no_investment retires it once. Required when the connection invests or retires with a cost (invest_cost, salvage_value), and when lifetime_method is reinvest_choice or no_investment (also for existing capacity without investment). Constant or period. | ||
lifetime_method |
a constant | reinvest_automatic | reinvest_automatic, reinvest_choice, no_investment | investment | Choice how the investments behave after unit runs out of lifetime. Automatic reinvestment causes the model to keep the capacity until the end of model horizon and applies the annualized investment cost without further model choice. Choice of reinvestment removes the capacity at the end of the lifetime and the model needs to decide how much new capacity is to be built. | |
other_operational_cost |
CUR/MWh | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | basics | Other operational variable cost for trasferring over the connection. Constant, period, time or period+time. | ||
reactance |
p.u. | a constant | network | Per-unit reactance of the transmission line. Used for DC power flow when the connection is within a nodeGroup that has transfer_method set to dc_power_flow_with_angles. The susceptance used in the flow equation is base_MVA / reactance. | ||
retire_max_period |
MW | a constant, or a map over periods (1 level) | retirement | Largest allowed retirement in each period. Counts only what is retired in that period; existing capacity and investments do not change it. Constant or period. | ||
retire_max_total |
MW | a constant | retirement | Largest allowed total retirement over all solves. Investments and existing capacity do not change it. Constant. | ||
retire_min_period |
MW | a constant, or a map over periods (1 level) | retirement | Smallest required retirement in each period. Counts only what is retired in that period; existing capacity and investments do not change it. Constant or period. | ||
retire_min_total |
MW | a constant | retirement | Smallest required total retirement over all solves. Investments and existing capacity do not change it. Constant. | ||
salvage_value |
CUR/kW | a constant, or a map over periods (1 level) | retirement | Salvage value for retiring capacity. Constant or period. | ||
startup_cost |
CUR/MW | a constant, or a map over periods (1 level) | tech_advanced | Cost of starting up one MW of capacity. Constant or period. | ||
startup_method |
a constant | no_startup | no_startup, linear, binary | tech_advanced | Gives the connection online capacity in both directions. Flows and reserves are limited by the online capacity, and startup_cost is paid per MW brought online. No minimum load or minimum up/down time. Not allowed for dc_power_flow_with_angles lines. | |
transfer_method |
a constant | regular | no_losses_no_variable_cost, regular, exact, variable_cost_only, unidirectional | basics | Choice of transfer method. Options: regular (default), no_losses_no_variable_cost, variable_cost_only, exact, unidirectional. 'unidirectional' restricts flow to source → sink only (single non-negative variable); 'regular'/'exact'/'variable_cost_only' are bidirectional two-variable variants; 'no_losses_no_variable_cost' is a single signed variable with no losses and no VOM. | |
virtual_unitsize |
MW | a constant | basics | Size of one unit. With it, existing is the number of units. Binary startups commit whole units of this size. Investments and retirements are continuous; their limits are in MW. No value: the existing capacity, or 1000 MW without it. |
constraint
A constraint the user writes: its terms (flows, capacities, storage states, units online) come from the constraint_..._coeff parameters of the other classes; here its sense and its constant. A constraint with only capacity terms holds once per period, otherwise once per time step.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
constant |
the constraint's own unit | a constant, or a map over periods (1 level) | 0 | constraint | Right-hand side of the user constraint. A period map gives each period its own value; it must cover every period of the solve. Constant or period. | |
constraint_period_method |
a constant | per_timestep | per_timestep, period_total | constraint | How the user constraint is applied in time. per_timestep (default): a row for every time step (a constraint with only capacity terms has one row per period). period_total: one row per period over the sum of the time steps, each step's terms times its duration and weight, annualised (divided by the period's share of a year): flows count in MWh per year and units online in unit-hours per year; capacity terms and their existing capacity are multiplied by the hours of the year, and constant is per year. A state coefficient is not allowed. In a rolling solve the row is written only in a roll that realizes the whole period; otherwise the solve leaves it out with a warning. Constant. | |
is_enabled |
a constant | yes | yes, no | constraint | Whether the entity is enabled. Set to 'no' to disable without deleting the entity. Constant. | |
sense |
a constant | equal | greater_than, less_than, equal | constraint | The sense of the constraint ('greater_than', 'less_than' or 'equal'). |
flowGroup
A set of flows (a unit or a connection into or out of a node) that share limits, such as a maximum instant flow or a cumulative flow over a period.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
flow_aggregator |
a constant | none | none, dispatch_plots_only, standalone_aggregator_only, both | output | Choice of flow-aggregation method for this flowGroup: 'none' (used for flow limits only, no aggregated output), 'dispatch_plots_only' (used as an aggregated flowGroup within 'print_dispatch' group of nodes - do not include one flow in multiple flow aggregators to avoid double counting), 'standalone_aggregator_only' (just make time series available for manual output processing / simple plots), 'both'. | |
max_cumulative_flow |
MW | a constant, or a map over periods (1 level) | flow_limit | Largest allowed average flow into the group. A constant gives one limit per solve; a period map gives one limit per period. Average flow times the weighted hours gives the energy limit. Constant or period. | ||
max_instant_flow |
MW | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | flow_limit | Maximum instantenous flow for the aggregated flow of all group members. Constant, period, time or period+time. | ||
min_cumulative_flow |
MW | a constant, or a map over periods (1 level) | flow_limit | Smallest required average flow into the group. A constant gives one limit per solve; a period map gives one limit per period. Average flow times the weighted hours gives the energy limit. Constant or period. | ||
min_instant_flow |
MW | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | flow_limit | Minimum instantenous flow for the aggregated flow of all group members. Constant, period, time or period+time. |
group
A set of units, connections and nodes that share limits or targets (investment limits, CO2 limits, capacity margin, inertia) or that are reported together.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
base_MVA |
MVA | a constant | network | Base power for the per-unit system used in DC power flow. Default 100. susceptance = base_MVA / reactance_pu. | ||
candidate_precapacity_to_avoid_big_m |
MW | a constant | network | Small pre-existing capacity assigned to investment candidate connections in DC power flow groups that have zero existing capacity. This avoids the need for big-M / MIP constraints by ensuring the angle constraint is always active. Default 0.1 MW. The value should be small enough to not affect results but large enough for numerical stability. | ||
capacity_margin |
MW | a constant, or a map over periods (1 level) | investment | Capacity the group needs above its demand at every time step of an investment period. Used only with capacity_margin_method manual. No value means 0 (the demand must still be covered). Constant or period. | ||
capacity_margin_method |
a constant | none | none, manual, share_of_peak | investment | Whether the group needs a capacity margin in investment solves, and how the margin is given. none (default): no margin. manual: capacity_margin MW. share_of_peak: capacity_margin_share times the group's peak demand in the period. At every time step of an investment period, the capacity of the group's firm units (capacity x availability x capacity_max_coeff) and VRE units (capacity x profile x availability) must cover the group's demand plus the margin. Units fed from a storage node, connections and the units consuming from the group count by their actual flow, so exports add to the requirement; connections and lossy units inside the group are left out (their losses are not required). Units fed from fuel or commodity nodes count at capacity: the fuel is assumed to last. | |
capacity_margin_share |
dimensionless | a constant, or a map over periods (1 level) | investment | e.g. 0.15 means 15%. Capacity margin as a share of the group's peak demand: the largest sum of the demand of the group's nodes over the period's full time series (before representative periods and new_stepduration). Used only with capacity_margin_method share_of_peak. No value means 0. Constant or period. | ||
co2_max_period |
tCO2/a | a constant, or a map over periods (1 level) | emission | Largest annual CO2 emissions in each period. In a rolling solve, each roll may use the part of the limit its horizon reaches, minus what earlier rolls already emitted in that period. Constant or period. | ||
co2_max_total |
tCO2 | a constant | emission | Largest CO2 emissions over the whole model horizon. Each period counts its annual emissions times its years_represented. Rolling solves and chains of solves pass the remaining budget on. Each stochastic forecast gets the whole remaining budget. Constant. | ||
co2_method |
a constant | none | none, price, period, total, price_period, price_total, period_total, price_period_total | emission | Choice of the CO2 method: none, price, period, total, price_period, price_total, period_total, price_period_total | |
co2_price |
CUR/tCO2 | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | emission | CO2 price for a group of nodes. Constant, period, time or period+time. | ||
cumulative_max_capacity |
MW or MWh | a constant, or a map over periods (1 level) | investment | Maximum cumulative capacity for a group of entities (considers existing, invested and retired capacity). Constant or period. | ||
cumulative_min_capacity |
MW or MWh | a constant, or a map over periods (1 level) | investment | Minimum cumulative capacity for a group of entities (considers existing, invested and retired capacity). Constant or period. | ||
decomposition_method |
a constant | none | none, benders_regional | solve_advanced | Decomposition strategy to apply to this group. Currently supported: 'none' (no decomposition — default), 'benders_regional' (group is solved as an independent region in the Benders master/subproblem decomposition, with shared-commodity trade coupling handled by the master). | |
has_inertia |
a constant | no | yes, no | network | Whether the group has an inertia constraint. Without yes, inertia_limit is ignored. | |
has_non_synchronous |
a constant | no | yes, no | network | Whether the group has a non-synchronous share limit. Without yes, non_synchronous_limit is ignored. | |
include_stochastics |
a constant | no | yes, no | model | Includes the stochastic branches to be used for the nodes/units/connections in this group | |
inertia_limit |
MWs | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | network | Minimum synchronous inertia in the group. Used only when has_inertia is yes. No value (or 0) means no requirement. Constant, period, time or period+time. A time map must give a value for every time step of the solve (a missing time step is an error). Over a coarse time step the row uses the step mean. | ||
invest_max_period |
MW or MWh | a constant, or a map over periods (1 level) | investment | Largest allowed capacity coming online in each period, summed over the group's units and connections (MW) and storage nodes (MWh). With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_max_total |
MW or MWh | a constant | investment | Largest allowed total investment of the group over all solves. Every investment decision counts; retirements do not reduce it. Constant. | ||
invest_method |
a constant | not_active | not_active, invest_no_limit, invest_period, invest_total, invest_period_total, retire_no_limit, retire_period, retire_total, retire_period_total, invest_retire_no_limit, invest_retire_period, invest_retire_total, invest_retire_period_total, cumulative_limits | investment | How the group limits investment and retirement of its members. not_active: the group sets no limits. invest / retire / invest_retire: which decisions the limits apply to. _period uses the …_period limits, _total the …_total limits, _period_total both. no_limit: no limits even if values are set. cumulative_limits: uses the cumulative capacity limits. | |
invest_min_period |
MW or MWh | a constant, or a map over periods (1 level) | investment | Smallest required capacity coming online in each period, summed over the group's units and connections (MW) and storage nodes (MWh). With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_min_total |
MW or MWh | a constant | investment | Smallest required total investment of the group over all solves. Every investment decision counts; retirements do not reduce it. Constant. | ||
new_stepduration |
hours | a constant | timeline | Balances the energy of the group's nodes once per step of this length instead of every time step, e.g. daily hydrogen next to hourly electricity. Within the step, energy can move freely between time steps, and a storage node has one state per step. A unit or connection whose nodes are all in such groups also uses the longer step: it has one flow, units online and reserve per step, so the model gets smaller. Its limits, and rows that combine only such units and connections, apply to their average over the step, and ramp limits apply between steps. Units and connections with a node outside these groups keep the solve's time step, and so do those with a delay (an info line names them). Listing units or connections has no effect. Must be a multiple of the solve's step. | ||
non_synchronous_limit |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | network | e.g. 0.8 means 80%. Largest share of non-synchronous supply in the group, measured against the real demand. Flows between the group's nodes do not count. Used only when has_non_synchronous is yes; no value means 0. Constant, period, time or period+time. A time map must give a value for every time step of the solve (a missing time step is an error). Over a coarse time step the row uses the step mean. | ||
penalty_capacity_margin |
CUR/kW/a | a constant, or a map over periods (1 level) | 5000 | investment | Penalty for violating the capacity margin constraint. Uses operational discounting (not annualized over lifetime like investment costs), so the value is not directly comparable to annualized investment costs. Constant or period. | |
penalty_inertia |
CUR/MWs per hour | a constant, or a map over periods (1 level) | 5000 | network | Penalty for violating the inertia constraint. Cost scales with the duration of the violation. Constant or period. | |
penalty_non_synchronous |
CUR/MWh | a constant, or a map over periods (1 level) | 5000 | network | Penalty for violating the non synchronous constraint. Constant or period. | |
print_dispatch |
a constant | yes, no | output | Combines unit/connection flows, flowGroup aggregated flows, and other balance elements (slack, demand, internal_losses, etc.) into a set of timeseries and a preconfigured plot per group. | ||
print_indicators |
a constant | yes, no | output | Output indicators for the set of nodes in the group (Loss of Load, VRE generation, etc.). | ||
reference_node |
a constant | network | Name of the reference bus node (angle fixed to zero) for DC power flow. Optional — if not specified, automatically selected as the node with the largest existing capacity in each connected component of the DC power flow network. | |||
retire_max_period |
MW or MWh | a constant, or a map over periods (1 level) | retirement | Largest allowed retirement in each period, summed over the group's members. Needs a retire …_period option in the group's invest_method. Constant or period. | ||
retire_max_total |
MW or MWh | a constant | retirement | Largest allowed total retirement of the group over all solves. Needs a retire …_total option in the group's invest_method. Constant. | ||
retire_min_period |
MW or MWh | a constant, or a map over periods (1 level) | retirement | Smallest required retirement in each period, summed over the group's members. Needs a retire …_period option in the group's invest_method. Constant or period. | ||
retire_min_total |
MW or MWh | a constant | retirement | Smallest required total retirement of the group over all solves. Needs a retire …_total option in the group's invest_method. Constant. | ||
share_loss_of_load |
a constant | no | equal, inflow_weighted, no | flow_limit | Force the upward slack of the nodes in this group to be equal or inflow (demand) weighted | |
transfer_method |
a constant | use_connection_transfer_methods | use_connection_transfer_methods, no_losses_no_variable_cost, regular, exact, variable_cost_only, dc_power_flow_with_angles, unidirectional | network | Override transfer_method for all connections within this nodeGroup. Options: use_connection_transfer_methods (default, no override), no_losses_no_variable_cost, regular, exact, variable_cost_only, unidirectional, dc_power_flow_with_angles. Setting 'unidirectional' gates every member connection to one-way flow (source → sink only). Setting 'dc_power_flow_with_angles' uses B-theta DC power flow (requires reactance on connections). | |
use_for_representative_periods |
a constant | no | yes, no | solve_advanced | A flag whether this group of nodes is an aggregation unit for net-load representative-period selection. When 'yes', the representative-periods preprocessor aggregates the member nodes' net load (demand minus available VRE) into a single regional signal used for clustering; when 'no' (default) the group is ignored by that selection. If no group carries the flag, the selection falls back to per-node net-load signals. |
model
Settings for the whole model: which solves run and in which order, inflation, and numerical settings.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
inflation_offset_investment |
years | a constant | 0 | model | Offset for when investment costs occur within a year. Default 0 (beginning of year). | |
inflation_offset_operations |
years | a constant | 0.5 | model | Offset for when operational costs occur within a year. Default 0.5 (middle of year). | |
inflation_rate |
dimensionless | a constant | model | e.g. 0.02 means 2% per year. Model-wide inflation rate applied to all future costs. When inputs are in real (constant-price) terms, set to 0. When inputs are in nominal terms, set to expected inflation. Default: 0 (real inputs). | ||
max_flow_for_unconstrained_variables |
MW | a constant | 1000000 | model | Upper bound for capacities and flows that have no other limit: how much capacity an entity with invest_method invest_no_limit or invest_retire_no_limit (or cumulative_limits without cumulative_max_capacity) can add on top of its existing capacity, and the flow on a unit's input or output whose conversion_flow_coeff is 0. The value is used as given; with several model entities the largest value is used. Keep it large enough not to limit the real solution and small enough to avoid numerical problems. Default 1,000,000. |
|
output_horizon |
a constant | no | yes, no | output | Debug flag. yes writes one raw parquet file per LP variable and constraint, with every row of every solve and a realized column. Normal outputs do not change. | |
periods_available |
a list of values (array) | model | (Optional) Array of periods available for the model. Periods that are in the data, but are not in period_timeset. | |||
small_number_threshold |
unit of each LP coefficient | a constant | 0.0001 | model | Coefficients and right-hand-side terms whose absolute value is below this are treated as 0 when building the optimisation problem. Reduces the numerical range (conditioning) of the LP. Default 0.0001. | |
solves |
a list of values (array) | model | Sequence of solves in the model. Array. | |||
version |
a constant | 79 | model | Contains database version information. |
node
A point where energy is balanced: demand, supply and transfers meet there. A node can also be a storage (its state is the energy stored) or a price-setting market.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
annual_flow |
MWh/a | a constant, or a map over periods (1 level) | basics | Annual flow in energy units (always positive, the sign of inflow defines in/out). Inflow time series can be scaled to match annual flow. By default, there is no scaling of inflow. Constant or period. | ||
availability |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | 1 | basics | e.g. 0.9 means 90%. Fraction of capacity available for storage. Constant, period, time, period+time or stochastic time. | |
constraint_capacity_coeff |
unit of the constraint per MWh | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the node's storage capacity in service in each period on the left side of the user constraint (existing plus investments still in service minus retirements). Coefficient per MWh. Capacity in construction is not included. | ||
constraint_cumulative_pre_built_capacity_coeff |
unit of the constraint per MWh | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity in service at the start of each period on the left side of the user constraint. This is existing capacity plus capacity that came online in earlier periods, minus earlier retirements. Capacity coming online in the period itself is in the invested term. Coefficient per MWh. | ||
constraint_in_construction_capacity_coeff |
unit of the constraint per MWh | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the storage capacity in construction in each period on the left side of the user constraint. Capacity is in construction from the period of the investment decision until it comes online. It is zero without a construction lead time. Coefficient per MWh. | ||
constraint_invested_capacity_coeff |
unit of the constraint per MWh | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity that comes online in each period on the left side of the user constraint. Without a construction lead time, this is the capacity invested in that period. Coefficient per MWh. | ||
constraint_retired_capacity_coeff |
unit of the constraint per MWh | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the storage capacity retired in each period on the left side of the user constraint. Coefficient per MWh. | ||
constraint_state_coeff |
unit of the constraint per MWh | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient) to represent the participation of the storage state in user-defined constraints. [state x coefficient] will be on the left side of the equation. | ||
construction_lead_time |
years | a constant, or a map over periods (1 level) | investment | Time from the investment decision until the storage capacity starts to operate. The start is rounded to the start of a period (see construction_lead_time_method). Investments whose rounded start is after the end of the solve or the model horizon are not offered, with a warning. Constant or period. Default 0. | ||
construction_lead_time_method |
a constant | immediate, closest_seam, previous_seam, next_seam | investment | How the start of operation (decision year plus construction_lead_time) is rounded to the start of a period. immediate: no lead time, the storage capacity operates from the decision period. closest_seam: the nearest period start; a tie goes to the later one. previous_seam: the period start before. next_seam: the period start after. Without a value: immediate when there is no lead time, else closest_seam. | ||
cumulative_max_capacity |
MWh | a constant, or a map over periods (1 level) | investment | Maximum cumulative capacity (considers existing, invested and retired capacity). Constant or period. | ||
cumulative_min_capacity |
MWh | a constant, or a map over periods (1 level) | investment | Minimum cumulative capacity (considers existing, invested and retired capacity). Constant or period. | ||
discount_rate |
dimensionless | a constant, or a map over periods (1 level) | 0.05 | investment | e.g. 0.05 means 5% per year. Discount rate for investments (WACC). Reflects the financing cost and risk premium for this technology. When the model inflation_rate > 0, this should be a nominal rate. When inflation_rate = 0, this should be a real rate. Used to annualize investment costs over the lifetime: annuity = invest_cost x r / (1 - (1 + r)^-lifetime). 0 gives the straight-line annuity invest_cost / lifetime. No value means 0.05. Must be 0 or above. Constant or period. | |
energy_margin_adder |
MWh per time step of the timeline | a constant, or a map over periods (1 level), or a map over periods and time (2 levels) | 0 | investment | per time step of the timeline. Extra demand (negative inflow) added to every time step of the investment solve, when energy_margin_method = inflow_adder. The value is not a total that is divided over the steps: each time step gets the full value. On a timeline of 24 h time steps, a margin of 10 MW needs a value of 240. When the investment solve uses new_stepduration, a solve step gets the sum of the values of the time steps it combines (a constant or period value counts once per time step). Dispatch solves are not affected. 0 = off. Constant, period or period+time. |
|
energy_margin_method |
a constant | none | none, inflow_multiplier, inflow_adder | investment | How the node's investment-stage energy margin is applied. 'none' (default) = off, no scaling. 'inflow_multiplier' multiplies this node's inflow by 'energy_margin_multiplier' in the solve that carries investment periods only (dispatch solves are unaffected). 'inflow_adder' instead adds 'energy_margin_adder' MWh of extra demand (negative inflow) to each time step of that same investment solve. Both offset representative-period VRE optimism that would otherwise cause underinvestment. | |
energy_margin_multiplier |
dimensionless | a constant | 1 | investment | e.g. 1.1 means 10% more demand. Multiplier applied to this node's inflow in the investment solve only, when energy_margin_method = 'inflow_multiplier'. Offsets representative-period VRE optimism (rep-period average VRE availability exceeds the annual average). 1 = off. e.g. 1.1 builds ~10% more capacity to serve the true annual demand under the true (lower) annual VRE. Constant. | |
existing |
MWh or count | a constant, or a map over periods (1 level) | basics | Existing storage capacity or number of storage units. If virtual_unitsize is given, then existing is the number of units (capacity = existing × virtual_unitsize). Otherwise existing is the existing capacity of a single unit (typically in MWh). Constant or period. | ||
fixed_cost |
CUR/kWh/a | a constant, or a map over periods (1 level) | investment | Annual fixed cost for storage. New storage capacity pays it only while it operates. Constant or period. | ||
inflow |
MWh per time step | a constant, or a map over time (1 level), or a stochastic-time map (branch, analysis_time, time; 3 levels) | basics | per time step. Energy flowing into the node in each time step (negative is outflow, e.g. demand). The value is the energy of the whole step, not a rate: on 1 h steps it equals the average MW, and on 3 h steps it is 3 × the average MW. When the step length of your data changes, rescale the values yourself, e.g. sum hourly values to get 3 h steps, or halve MW values for 0.5 h steps. FlexTool does not convert them, and time-series values whose time names are not on the timeline are ignored. FlexTool sums the values for you only when a solve's new_stepduration coarsens the timeline, and when a group's new_stepduration balances the node per coarse step. A constant value is used as the same energy in every step. Constant, time or stochastic time. |
||
inflow_method |
a constant | use_original | no_inflow, use_original, scale_in_proportion, scale_to_annual_flow, scale_to_annual_and_peak_flow | basics | Choice how to treat inflow time series. Empty defaults to 'use_original', which does not scale the time series. 'no_inflow' ignores the inflow time series. 'scale_to_annual_flow' scales the inflow time series by a single factor (shape preserved) so its annual energy equals 'annual_flow'. The annualisation uses each timestep's share of the year: for a full or evenly sampled timeline this is 8760/'hours_in_solve' (every step weighted equally); for a representative timeset with 'timeset_weights', each timestep is weighted by its declared share of the year, so a biased sample of timesteps still annualises correctly. The same weighting is used for energy reporting and operating-cost accounting, so the energy the model is scaled to serve, reports, and costs all coincide. If 'timeset_weights' do not reflect the true representativeness of your selected timesteps, the scaling factor - and therefore the absolute demand level - shifts accordingly; see the per-node 'f' diagnostic (inflow_scaling_diagnostics.csv). 'scale_in_proprotion' calculates a scaling factor by dividing 'annual_flow' with the sum of time series inflow (after it has been annualized using 'timeline_duration_in_years'). (With a representative timeset, the annual-energy match uses 'timeset_weights' as above.) 'scale_to_annual_and_peak_flow' scales the time series to match the 'annual_flow' target while transforming the time series to match the highest load with the 'peak_inflow'. (With a representative timeset, the annual-energy match uses 'timeset_weights' as above; the peak match stays unweighted.) | |
invest_cost |
CUR/kWh | a constant, or a map over periods (1 level) | investment | Overnight investment cost of new storage capacity. It is paid as an annuity over the years the storage capacity operates. Construction time costs with their interest must be included here. Constant or period: the value of the period when the storage capacity is built (comes online) is used. | ||
invest_forced |
MWh | a constant, or a map over periods (1 level) | investment | Forces exactly this much new storage capacity to come online in the period, overriding the investment optimisation (as setting invest_min and invest_max equal). Constant or period. | ||
invest_max_period |
MWh | a constant, or a map over periods (1 level) | investment | Largest allowed storage capacity coming online in each period. Existing capacity and retirements do not change it. With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_max_total |
MWh | a constant | investment | Largest allowed total investment over all solves. Every investment decision counts, also reinvestments and investments that are no longer in service. Retirements and existing capacity do not reduce it. To limit the capacity in service, use cumulative_max_capacity. Constant. | ||
invest_method |
a constant | not_allowed | not_allowed, invest_no_limit, invest_period, invest_total, invest_period_total, retire_no_limit, retire_period, retire_total, retire_period_total, invest_retire_no_limit, invest_retire_period, invest_retire_total, invest_retire_period_total, cumulative_limits | investment | Choice of investment method: either not_allowed or then a combination of 1) investment or retirement and 2) investment limits per period, all periods (total) or no_limits. | |
invest_min_period |
MWh | a constant, or a map over periods (1 level) | investment | Smallest required storage capacity coming online in each period. Existing capacity and retirements do not change it. With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_min_total |
MWh | a constant | investment | Smallest required total investment over all solves. Every investment decision counts, also reinvestments and investments that are no longer in service. Retirements and existing capacity do not reduce it. To limit the capacity in service, use cumulative_max_capacity. Constant. | ||
lifetime |
years | a constant, or a map over periods (1 level) | investment | Operating lifetime. It starts when the storage capacity starts to operate: with a construction lead time, after the construction. Used with the interest rate to calculate the annuity. What happens at the end of the lifetime depends on lifetime_method: reinvest_automatic keeps the storage capacity to the end of the model horizon, reinvest_choice retires it, no_investment retires it once. Required when the node invests or retires with a cost (invest_cost, salvage_value), and when lifetime_method is reinvest_choice or no_investment (also for existing capacity without investment). Constant or period. | ||
lifetime_method |
a constant | reinvest_automatic | reinvest_automatic, reinvest_choice, no_investment | investment | Choice how the investments behave after unit runs out of lifetime. Automatic reinvestment causes the model to keep the capacity until the end of model horizon and applies the annualized investment cost without further model choice. Choice of reinvestment removes the capacity at the end of the lifetime and the model needs to decide how much new capacity is to be built. | |
node_type |
a constant | balance | balance_within_period, commodity, balance, storage | basics | Role of this node in the LP. 'commodity' = price-exposed source/sink with no balance constraint (e.g. fuel imports, no storage); 'balance' = energy balance maintained every timestep (default); 'storage' = balance plus a state variable (battery, reservoir); 'balance_within_period' = balance aggregated over the whole period (e.g. an annual gas budget). | |
peak_inflow |
MWh per time step | a constant, or a map over periods (1 level) | basics | per time step. The highest inflow of a time step that the scaled inflow should reach. Use the same scale and sign as inflow (negative for a demand). Used only with inflow_method = scale_to_annual_and_peak_flow. If you change the step length, rescale it as you rescale inflow. Each period reaches its own peak_inflow; with a solve's new_stepduration, peak_inflow is matched per original time step. Constant or period. |
||
penalty_down |
CUR/MWh | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | 10000 | basics | Penalty cost for increasing consumption in the node (excess energy). Constant, period, time, period+time, or stochastic time. | |
penalty_method |
a constant | regular | regular, off | basics | Whether this node has balance penalty (unserved-energy / over-supply slack) variables. 'regular' (default) keeps the penalty_up / penalty_down slack variables that let the node balance be violated at a cost. 'off' removes those slack variables entirely, making the node balance a hard equality (the solve becomes infeasible if the node cannot balance). Use 'off' only if certain that it will not make the model infeasible (a real solution exists) - infeasible models can be very difficult to debug. At the same time, 'off' will reduce variables and can direct infeasibilities to other, more desirable, nodes. | |
penalty_up |
CUR/MWh | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | 10000 | basics | Penalty cost for decreasing consumption in the node (energy not served). Constant, period, time, period+time, or stochastic time. | |
retire_max_period |
MWh | a constant, or a map over periods (1 level) | retirement | Largest allowed retirement of storage capacity in each period. Counts only what is retired in that period; existing capacity and investments do not change it. Constant or period. | ||
retire_max_total |
MWh | a constant | retirement | Largest allowed total retirement over all solves. Investments and existing capacity do not change it. Constant. | ||
retire_min_period |
MWh | a constant, or a map over periods (1 level) | retirement | Smallest required retirement of storage capacity in each period. Counts only what is retired in that period; existing capacity and investments do not change it. Constant or period. | ||
retire_min_total |
MWh | a constant | retirement | Smallest required total retirement over all solves. Investments and existing capacity do not change it. Constant. | ||
salvage_value |
CUR/kWh | a constant, or a map over periods (1 level) | retirement | Salvage value of the storage. Constant or period. | ||
self_discharge_loss |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | storage | e.g. 0.01 means 1% per hour. Loss of stored energy over time: the content shrinks by the factor 1/(1 + loss) every hour (with 0.01, by about 0.99% per hour), decaying continuously at ln(1 + loss) per hour. Constant, period, time or period+time. | ||
storage_binding_method |
a constant | bind_forward_only | bind_within_period, bind_within_solve, bind_forward_only, bind_intraperiod_blocks, bind_within_timeblock, bind_within_solve_blended_weights, bind_within_period_blended_weights, bind_forward_only_blended_weights | storage | Choice how the storage state will be maintained over discontinuous timelines. Seven cycle-scope methods (the state-continuity family): 'bind_within_timeblock' cycles state within each timeblock (cycle closes at block boundaries); 'bind_within_period' cycles within each FlexTool period and chains blocks inside the period; 'bind_within_solve' cycles across the whole solve horizon; 'bind_forward_only' (default) chains state forward across the solve with no end-to-start closure; 'bind_within_solve_blended_weights' is the representative-period variant of bind_within_solve (RP weighting + solve-level cycle closure); 'bind_within_period_blended_weights' is the RP variant of bind_within_period (per-period RP weighting, each period closes independently); 'bind_forward_only_blended_weights' is the RP variant of bind_forward_only (RP weighting, no cycle closure). One additional value, 'bind_intraperiod_blocks', is structurally an aggregation method rather than a cycle-scope method: state is held constant within each block and the block-total flow is balanced at the boundary. Silent-degrade behaviour: any '*_blended_weights' method on a node in a solve whose active timeset has no representative_period_weights is automatically downgraded to the corresponding non-RP variant for that solve, so the same storage entity can drive an RP investment solve and a chronological dispatch solve back-to-back. Separate parameters (e.g. 'storage_state_start') can force additional bindings. By default, storage start state is bound to 0. In a stochastic solve each forecast branch uses the representative periods of its period, and the blended_weights methods work per branch. In a rolling_window solve on representative periods the blended_weights methods are not applied: those nodes bind forward only (bind_forward_only), with a warning. | |
storage_nested_fix_method |
a constant | fix_nothing | fix_nothing, fix_quantity, fix_price, fix_usage | storage | Used in nested solve sequences. Set this storage as a long term storage, which end state is passed to the lower level solves as a target. Fix_price requires storage_state_reference_price |
|
storage_solve_horizon_method |
a constant | free | free, use_reference_value, use_reference_price | storage | Choice how to treat storage state at the end of time horizon of each solve. 'free' lets the model choose the end state. 'use_reference_value' forces the end state to the specific value set in 'storage_state_reference_value'. 'use_reference_price' gives the storage state a price in the objective function based on the 'storage_state_reference_price'. | |
storage_start_end_method |
a constant | fix_nothing | fix_start, fix_end, fix_start_end, fix_nothing | storage | Whether the storage state is fixed at the start and/or end of the whole model. fix_nothing (default): not fixed. fix_start, fix_end and fix_start_end use storage_state_start and storage_state_end, which must then have a value. | |
storage_state_end |
dimensionless | a constant | storage | 0-1, share of the storage capacity. Storage state at the end of the last solve, as a share of the storage capacity. Needed by fix_end and fix_start_end. Constant. | ||
storage_state_reference_price |
CUR/MWh | a constant, or a map over periods (1 level) | storage | Price for the stored energy at the end of the solve horizon. Requires 'use_reference_price' in 'storage_solve_horizon_method'. Constant or period. | ||
storage_state_reference_value |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | storage | 0-1, share of the storage capacity. Relative state of storage at then end of each solve (can be overwritten in the next solve). Requires 'use_reference_value' in 'storage_solve_horizon_method'. Constant, period, time or period+time. | ||
storage_state_start |
dimensionless | a constant | storage | 0-1, share of the storage capacity. Storage state at the start of the first solve, as a share of the storage capacity. Needed by fix_start and fix_start_end. Constant. | ||
unit_of_measure |
a constant | MWh | basics | Unit of measure of this node's amounts, e.g. m3, t, MWh_th (default MWh). A label only: FlexTool converts nothing. Flows into and out of the node, and the capacity of a unit whose output is this node (of a connection when both of its nodes have this unit), are rates in this unit per hour (MWh → MW, m3 → m3/h); storage state, storage capacity and inflow per time step are amounts (m3); annual results are per year (m3/a); prices and penalty_up/down are CUR per this unit. The per-kW costs (invest_cost, fixed_cost, salvage_value) of a unit whose capacity is in this unit, and the per-kWh costs of this node's storage, are per 0.001 of the rate or amount: 500 CUR per m3/h of capacity is entered as 0.5, and 20 CUR per m3 of storage as 0.02. An efficiency into or out of this node is output units per input unit (e.g. m3/MWh). | ||
virtual_unitsize |
MWh | a constant | basics | Size of one unit. With it, existing is the number of units. Investments and retirements are continuous; their limits are in MWh. No value: the existing capacity, or 1000 MWh without it. |
profile
A time series of shares of capacity (for example wind or solar capacity factors), used as an upper limit, a lower limit or a fixed value for a flow or a storage state.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
profile |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | basics | e.g. 0.3 means 30% of capacity. Profile values, e.g. the availability of wind power (capacity factor). Constant, period, time, period+time or stochastic time. |
solve
One optimisation run inside the model: its periods and time steps, whether it decides investments or dispatch, rolling or stochastic settings, and solver options.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
benders_in_out_weight |
dimensionless | a constant | 0 | solve_advanced | Benders decomposition: in-out separation stabilization weight (lambda) in f_sep = lambdacentre + (1-lambda)f_out. 0.0 (default) = off (exact Benders); values in (0,1) turn it on, larger = more stabilization. Only used when decomposition = 'benders'. Default 0.0. | |
benders_max_iter |
count | a constant | 50 | solve_advanced | Benders decomposition: maximum number of outer (master/subproblem) iterations. Only used when decomposition = 'benders'. Default 50. | |
benders_tolerance |
dimensionless | a constant | 0.001 | solve_advanced | Benders decomposition: relative optimality-gap tolerance (best_UB - LB)/|best_UB| for convergence of the outer loop. Only used when decomposition = 'benders'. Default 0.001. | |
contains_solves |
a constant, or a list of values (array) | solve_advanced | Array of solves - used for nested solve sequencesArray of solves - used for nested solve sequences | |||
decomposition |
a constant | none | none, benders | solve_advanced | Decomposition scheme for this solve. 'none' (default) solves monolithically. 'benders' runs the solve through the Benders region-decomposition driver (a master trade layer coordinating per-region recourse subproblems via appended optimality cuts, producing a valid lower bound) over the groups whose group.decomposition_method is 'benders_regional' (requires at least two such region groups). The choice is per solve, so an investment solve can decompose while a later dispatch solve in the same chain stays monolithic. | |
dispatch_realization_method |
a constant | within_solve | within_solve, separate_dispatch | solve_advanced | How the committed part of a stochastic solve is realized. within_solve (default): a realized: yes branch gets a realization solve automatically. separate_dispatch: always runs a separate realized dispatch solve; needs a realized: yes branch (error otherwise). | |
fix_storage_periods |
a list of values (array), or a map with 2 index levels | solve_advanced | Array of periods where the storage_values are fixed when the node has storage_include_solve_fix_method is set | |||
invest_periods |
a list of values (array), or a map with 2 index levels | solve_basics | Array of periods in which investments can be decided. With a construction lead time, the capacity comes online later. | |||
new_stepduration |
hours | a constant | timeline | Creates a new timeline from the old for this solve with this timestep duration. The new timeline sums inflow over the time steps that form each new time step (a constant inflow counts once per time step it combines) and averages the other time series (e.g. profile) over them, weighted by their durations. The new_stepduration must be a whole multiple of the timeline's time steps (on a timeline with time steps of different lengths, every new time step must end where a time step of the timeline ends); FlexTool stops with an error otherwise. |
||
period_timeset |
a map: period name → timeset name (1 level) | solve_basics | Map of periods with associated timesets that will be included in the solve. Index: period name, value: timeset name. | |||
realized_invest_periods |
a list of values (array), or a map with 2 index levels | solve_advanced | Array of the periods that will realize the investment decisions. If not used when the invest_periods exist. The realized_periods are used to realize invests as well | |||
realized_periods |
a list of values (array), or a map with 2 index levels | solve_basics | Array of periods that will be realized in the solve. | |||
reduce_system_detail_method |
a constant | none | none, reserves, inertia, non_synchronous, inertia_non_synchronous, reserves_inertia_non_synchronous, dc_power_flow, reserves_inertia_non_synchronous_dc_power_flow | solve_advanced | System detail that this solve leaves out, to make it faster. none (default): all detail. reserves: no reserve requirements. inertia: no inertia limits. non_synchronous: no non-synchronous share limits. dc_power_flow: the lines of dc_power_flow_with_angles groups are lossless transport limited by their capacity (no angles). A combination leaves out each named part. The capacity margin is always kept. | |
reduce_unit_detail_method |
a constant | none | none, integers, integers_ramps, integers_min_limits, integers_ramps_min_limits, online, online_ramps | solve_advanced | Detail of units and connections that this solve leaves out, to make it faster (typically an investment solve). none (default): all detail. integers: binary startup_method is solved as continuous and exact connections behave as regular. integers_ramps: integers, and no ramp limits or ramp costs. integers_min_limits: integers, and no min_load, capacity_min_coeff floors or minimum up / down times. integers_ramps_min_limits: integers, no ramps and no min limits. Under the integers levels, a unit or connection whose online variables nothing in the solve still uses (no start-up cost, min_load, capacity_min_coeff floor, minimum up / down time, min_load_efficiency curve, constraint_online_coeff in a user constraint, reserve, inertia or ramp limit left) has none, as with startup_method no_startup; the run log names them. online: everything of integers_min_limits, and no online variables: no start-up costs, user constraints that count units online are left out whole, min_load_efficiency units use their full-load efficiency (less fuel than the curve at part load), and ramp limits apply to the capacity. Reserves are then limited by built capacity, not online capacity, and inertia is counted from flows. online_ramps: online, and no ramp limits or ramp costs. Never adds detail. | |
rolling_duration |
hours | a constant | solve_advanced | Optional. Duration of rolling, if not stated, assumed to be the whole timeline of the solve | ||
rolling_solve_horizon |
hours | a constant | solve_advanced | Required if rolling_window solve. How long into the future the roll sees | ||
rolling_solve_jump |
hours | a constant | solve_advanced | Required if rolling_window solve. Interval between the start points of the rolls. Should be smaller than the horizon | ||
scaling |
a constant | full | off, solver_only, basic, full | solve_advanced | Numerical scaling of this solve's LP. full (default): FlexTool rescales variables, constraints and costs and sets the solver's scaling. basic: no per-quantity rescaling. solver_only: only the solver's own scaling. off: no scaling at all. Try basic or solver_only if a solve fails numerically. The --scaling run option overrides it. | |
shared_invest_periods |
a list of values (array) | solve_advanced | Periods where investments are the same in every stochastic branch (with recourse). No value or empty array: none. | |||
shared_operation_periods |
a list of values (array) | solve_advanced | Periods where operations are the same in every stochastic branch. No value: the committed time steps. Empty array: none. | |||
solve_mode |
a constant | single_solve | single_solve, rolling_window | solve_basics | A single_solve or rolling_window for a set of rolling optimisation windows solved in a sequence. | |
solver |
a constant | highs | highs, gurobi, cplex, xpress, copt | solve_advanced | Solver to use for this solve. One of polar-high's available_solvers ('highs', 'gurobi', 'cplex', 'xpress', 'copt'). HiGHS is the bundled default; commercial solvers require a separate install and license. | |
solver_arguments |
a map: option name → value (1 level) | solve_advanced | Map of HiGHS solver options (option name -> value), layered on top of the floor values in solver_config/highs.opt and below any CLI overrides (e.g. --solver-time-limit). Use this for ad-hoc HiGHS knobs that do not have a dedicated FlexTool parameter (solver_mip_gap). | |||
solver_mip_gap |
dimensionless | a constant | solve_advanced | Relative MIP optimality gap at which the solver may stop early. Normalised across solvers by polar-high. None = solver default. | ||
solver_precommand |
a constant | solve_advanced | Not used: FlexTool never runs this command. Kept only so that older databases still read. | |||
stochastic_branches |
dimensionless | a map: period, branch, analysis_time, realized → probability weight (4 levels) | solve_advanced | Forecast branches of the solve (map: period, branch, analysis_time, realized → probability weight). Weights are normalised per start time. At most one branch per start time may be realized: yes. That branch is not a weighted forecast; it adds a realization solve over the committed time steps. Without it, the solve reports investments only. | ||
stochastic_invest_method |
a constant | none | none, recourse | solve_advanced | How stochastic branches invest. none (default): one shared investment plan for all branches. recourse: each branch also invests at and after its branching period. | |
timeline_hole_multiplier |
dimensionless | a constant | 1 | solve_advanced | Multiplier applied to the inverse-step-duration term in nodeBalance_eq and storage-binding constraints across timeline gaps (holes). Tunes how strongly state differences are penalised across discontinuities in the timeline. Default 1.0 mirrors the .mod default and matches pre-v44 Python-convention behaviour. | |
years_represented |
years | a map over periods (1 level) | solve_basics | Map to indicate how many years the period represents before the next period in the solve. Used for discounting. Can be below one (multiple periods in one year). Index: period, value: years. |
timeline
The time steps of the input data and the duration of each.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
timestep_duration |
hours | a map: time step name → time step duration in hours (1 level) | timeline | Map of time steps in the timeline. Index: time step name, value: time step duration in hours. |
timeset
A selection of time steps of a timeline that a solve uses (all of them, or for example representative weeks).
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
representative_period_weights |
dimensionless | a map: base period start timestep, representative period start timestep → weight (2 levels) | solve_advanced | Representative-period weighting map (rank-2 nested Map: base period start timestep -> representative period start timestep -> weight). Created by the representative-periods preprocess tool; declares how much each representative period stands in for each base period. Its presence enables RP-aware storage-binding ('*_blended_weights'); its absence silently downgrades those methods to the non-RP behaviour. Mutually exclusive with 'timeset_weights' on the same timeset. The forecast branches of a stochastic solve use the representative periods of their period. | ||
timeline |
a constant | timeline | The name of the timeline that the timeset uses. (String) | |||
timeset_duration |
count of time steps | a map: name of the timestep that starts the timeset → duration of the block in timesteps (1 level) | timeline | Index: name of the timestep that starts the timeset, value: duration of the block in timesteps. Defines the selection: which timesteps are in the solve and how many (this sets 'hours_in_solve'). Representativeness - each timestep's share of the year - is set separately by 'timeset_weights'. | ||
timeset_weights |
dimensionless | a map over time (1 level) | timeline | Weight of each time step (map, index time). Weights how much each step counts in costs, energy and demand scaling. Normalised per period. Forecast branches use the weights of their period. Other shapes are an error. Cannot be set on a timeset that also has representative_period_weights (error). |
unit
A plant or device that turns inputs into outputs: a power plant, a wind or solar farm, an electrolyser, a heat pump, a battery inverter.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
availability |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | 1 | basics | e.g. 0.9 means 90%. Fraction of capacity available for flows from/to the unit. For online units, the online variable is multiplied by the availability. Constant, period, time, period+time or stochastic time. | |
constraint_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the unit's capacity in service in each period on the left side of the user constraint (existing plus investments still in service minus retirements). Coefficient per MW. Capacity in construction is not included. | ||
constraint_cumulative_pre_built_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity in service at the start of each period on the left side of the user constraint. This is existing capacity plus capacity that came online in earlier periods, minus earlier retirements. Capacity coming online in the period itself is in the invested term. Coefficient per MW. | ||
constraint_in_construction_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity in construction in each period on the left side of the user constraint. Capacity is in construction from the period of the investment decision until it comes online. It is zero without a construction lead time. Coefficient per MW. | ||
constraint_invested_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity that comes online in each period on the left side of the user constraint. Without a construction lead time, this is the capacity invested in that period. Coefficient per MW. | ||
constraint_online_coeff |
unit of the constraint per unit online | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the number of units online in each time step on the left side of the user constraint. One unit is virtual_unitsize; without it, the largest existing capacity, else 1000 MW (set virtual_unitsize when the capacity is invested). Needs online variables (startup_method linear or binary, or a minimum_time_method); a coefficient without them is an error. With linear startup the number is continuous. For MW online, use the unit size (MW per unit) as the coefficient. | ||
constraint_retired_capacity_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient). Puts the capacity retired in each period on the left side of the user constraint. Coefficient per MW. | ||
construction_lead_time |
years | a constant, or a map over periods (1 level) | investment | Time from the investment decision until the capacity starts to operate. The start is rounded to the start of a period (see construction_lead_time_method). Investments whose rounded start is after the end of the solve or the model horizon are not offered, with a warning. Constant or period. Default 0. | ||
construction_lead_time_method |
a constant | immediate, closest_seam, previous_seam, next_seam | investment | How the start of operation (decision year plus construction_lead_time) is rounded to the start of a period. immediate: no lead time, the capacity operates from the decision period. closest_seam: the nearest period start; a tie goes to the later one. previous_seam: the period start before. next_seam: the period start after. Without a value: immediate when there is no lead time, else closest_seam. | ||
conversion_method |
a constant | constant_efficiency | constant_efficiency, min_load_efficiency, none | basics | Choice of conversion method. | |
cumulative_max_capacity |
MW | a constant, or a map over periods (1 level) | investment | Maximum cumulative capacity (considers existing, invested and retired capacity). Constant or period. | ||
cumulative_min_capacity |
MW | a constant, or a map over periods (1 level) | investment | Minimum cumulative capacity (considers existing, invested and retired capacity). Constant or period. | ||
delay |
hours | a constant, or a map with 1 index level | tech_advanced | A time delay between the input nodes and the output nodes. Either a constant indicating the time difference in hours or a map of time differences (index: time difference in hours, value: weight). Each weight indicates its share of the original flow and the weights should sum to 1. Requires that the time resolutions in the model are always integer multiples of these time differences. | ||
discount_rate |
dimensionless | a constant, or a map over periods (1 level) | 0.05 | investment | e.g. 0.05 means 5% per year. Discount rate for investments (WACC). Reflects the financing cost and risk premium for this technology. When the model inflation_rate > 0, this should be a nominal rate. When inflation_rate = 0, this should be a real rate. Used to annualize investment costs over the lifetime: annuity = invest_cost x r / (1 - (1 + r)^-lifetime). 0 gives the straight-line annuity invest_cost / lifetime. No value means 0.05. Must be 0 or above. Constant or period. | |
efficiency |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | 1 | basics | Efficiency of the unit at full load: outputs / inputs, each flow weighted by its conversion_flow_coeff (default 1, giving plain sum of outputs / sum of inputs). May be above 1: a heat pump with COP 3 has 3; a unit whose output is measured in another unit of measure (e.g. m³ of water per MWh of electricity) uses that ratio. A min_load_efficiency unit can have different efficiency below full load (see efficiency_at_min_load). No effect on a unit without inputs or without outputs. Constant, period, time, period+time or stochastic time. | |
efficiency_at_min_load |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels) | basics | Output / input at minimum load, like efficiency (e.g. 0.4; may be above 1). Efficiency of a min_load_efficiency unit at its minimum load. Fuel use is a straight line from minimum load (this efficiency) to full load (efficiency). Has no effect when min_load is 0: the efficiency at zero output is not defined. No value: efficiency applies at minimum load too. Constant, period, time or period+time. | ||
existing |
MW or count | a constant, or a map over periods (1 level) | basics | Existing capacity or number of units. If virtual_unitsize is given, then existing is the number of units (capacity = existing × virtual_unitsize). Otherwise existing is the existing capacity of a single unit (typically in MW). Constant or period. | ||
fixed_cost |
CUR/kW/a | a constant, or a map over periods (1 level) | investment | Annual fixed cost. New capacity pays it only while it operates. Constant or period. | ||
invest_cost |
CUR/kW | a constant, or a map over periods (1 level) | investment | Overnight investment cost of new capacity. It is paid as an annuity over the years the capacity operates. Construction time costs with their interest must be included here. Constant or period: the value of the period when the capacity is built (comes online) is used. | ||
invest_max_period |
MW | a constant, or a map over periods (1 level) | investment | Largest allowed capacity coming online in each period. Existing capacity and retirements do not change it. With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_max_total |
MW | a constant | investment | Largest allowed total investment over all solves. Every investment decision counts, also reinvestments and investments that are no longer in service. Retirements and existing capacity do not reduce it. To limit the capacity in service, use cumulative_max_capacity. Constant. | ||
invest_method |
a constant | not_allowed | not_allowed, invest_no_limit, invest_period, invest_total, invest_period_total, retire_no_limit, retire_period, retire_total, retire_period_total, invest_retire_no_limit, invest_retire_period, invest_retire_total, invest_retire_period_total, cumulative_limits | investment | Choice of investment method: not_allowed, invest and retire indicate availability of investment and retirement. no_limit removes all limits even if there are limiting values set. period uses values set in invest/retire_max/min_period. total uses values set in invest/retire_max/min_total. | |
invest_min_period |
MW | a constant, or a map over periods (1 level) | investment | Smallest required capacity coming online in each period. Existing capacity and retirements do not change it. With a construction lead time, the investment is decided earlier. Constant or period. | ||
invest_min_total |
MW | a constant | investment | Smallest required total investment over all solves. Every investment decision counts, also reinvestments and investments that are no longer in service. Retirements and existing capacity do not reduce it. To limit the capacity in service, use cumulative_max_capacity. Constant. | ||
lifetime |
years | a constant, or a map over periods (1 level) | investment | Operating lifetime. It starts when the capacity starts to operate: with a construction lead time, after the construction. Used with the interest rate to calculate the annuity. What happens at the end of the lifetime depends on lifetime_method: reinvest_automatic keeps the capacity to the end of the model horizon, reinvest_choice retires it, no_investment retires it once. Required when the unit invests or retires with a cost (invest_cost, salvage_value), and when lifetime_method is reinvest_choice or no_investment (also for existing capacity without investment). Constant or period. | ||
lifetime_method |
a constant | reinvest_automatic | reinvest_automatic, reinvest_choice, no_investment | investment | Choice how the investments behave after unit runs out of lifetime. Automatic reinvestment causes the model to keep the capacity until the end of model horizon and applies the annualized investment cost without further model choice. Choice of reinvestment removes the capacity at the end of the lifetime and the model needs to decide how much new capacity is to be built. | |
min_downtime |
hours | a constant | tech_advanced | Minimum time the unit stays offline after a stop. Needs minimum_time_method. The look-back stops at a gap in the timeline and at the first step of a solve. Constant. | ||
min_load |
dimensionless | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | basics | 0-1, share of the online capacity. Minimum load of the unit as a share of its online capacity. Applies only if the unit has online variables. No value means 0. Constant, period, time, period+time or stochastic time. | ||
min_uptime |
hours | a constant | tech_advanced | Minimum time the unit stays online after a start. Needs minimum_time_method. The look-back stops at a gap in the timeline and at the first step of a solve. Constant. | ||
minimum_time_method |
a constant | min_uptime, min_downtime, both, none | tech_advanced | Choice between minimum up- and downtimes (none, min_downtime, min_uptime, both). Setting this to anything other than 'none' will activate online variables (at least linear) for the unit. Default: none (no minimum time constraints). | ||
retire_max_period |
MW | a constant, or a map over periods (1 level) | retirement | Largest allowed retirement in each period. Counts only what is retired in that period; existing capacity and investments do not change it. Constant or period. | ||
retire_max_total |
MW | a constant | retirement | Largest allowed total retirement over all solves. Investments and existing capacity do not change it. Constant. | ||
retire_min_period |
MW | a constant, or a map over periods (1 level) | retirement | Smallest required retirement in each period. Counts only what is retired in that period; existing capacity and investments do not change it. Constant or period. | ||
retire_min_total |
MW | a constant | retirement | Smallest required total retirement over all solves. Investments and existing capacity do not change it. Constant. | ||
salvage_value |
CUR/kW | a constant, or a map over periods (1 level) | retirement | Salvage value of the unit. Constant or period. | ||
startup_cost |
CUR/MW | a constant, or a map over periods (1 level) | tech_advanced | Cost of starting up one MW of capacity. Constant or period. | ||
startup_method |
a constant | no_startup | no_startup, linear, binary | tech_advanced | Whether the unit has online variables. linear: any share of the capacity can be online. binary: whole units only (slower to solve). Online status links to the previous time step; that link stops at a gap in the timeline. | |
virtual_unitsize |
MW | a constant | basics | Size of one unit. With it, existing is the number of units. Binary startups commit whole units of this size. Investments and retirements are continuous; their limits are in MW. No value: the existing capacity, or 1000 MW without it. |
connection__node
The flow between a connection and one of its nodes (for user constraints).
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
constraint_flow_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient) to represent the participation of the flow from the connection to a node in user-defined constraints. [flow x coefficient] will be on the left side of the equation. |
connection__profile
Applies a profile as a limit on the flow of a connection.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
profile_method |
a constant | none | upper_limit, lower_limit, fixed, none | basics | Choice of profile method (upper_limit, lower_limit, fixed). Negative values also possible. |
node__profile
Applies a profile as a limit on the storage state of a node.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
profile_method |
a constant | none | upper_limit, lower_limit, fixed, none | basics | Choice of profile method (upper_limit, lower_limit, fixed). Negative values also possible. |
unit__inputNode
An input of a unit: the node it takes energy or fuel from, and the properties of that flow (costs, coefficients, ramping).
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
constraint_flow_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient) to represent the participation of the flow between unit and node in user-defined constraints. [flow x coefficient] will be on the left side of the equation. | ||
conversion_flow_coeff |
dimensionless | a constant | 1 | basics | default 1. Fuel-equivalent energy per unit of this flow. It enters the unit's conversion equation, not the node balance. Applies to simple units too. 0 takes the flow out of the capacity, ramp and minimum load limits. | |
inertia_constant |
MWs/MW | a constant | network | Inertia constant for a synchronously connected unit to this node. Constant. | ||
input_share_max |
dimensionless | a constant | 1 | basics | default 1. Largest share of the unit's full-load input energy (flow x conversion_flow_coeff) that this input may supply, relative to the unit's capacity (existing + invested - retired) times availability. 1 = this input alone can run the unit at full output (no effective limit); e.g. two inputs with 0.6 each can each supply at most 60% of the full-load input, so full output needs both. A lower-energy input is handled by its conversion_flow_coeff, not here. For a unit without outputs: fraction of the unit's capacity available to this input. Not applied to inputs with conversion_flow_coeff = 0. | |
input_share_min |
dimensionless | a constant | 0 | basics | default 0. While the unit is running, the smallest share of the unit's current input energy (flow x conversion_flow_coeff) that this input must supply. 0 = no minimum. The shares of a unit's inputs may not sum above 1, and a share may not exceed the input's input_share_max. Setting it on every input with shares summing to 1 fixes the blend. Not applied to inputs with conversion_flow_coeff = 0. | |
is_non_synchronous |
a constant | no | yes, no | network | Chooses whether the unit is synchronously connected to this node. | |
other_operational_cost |
CUR/MWh | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | basics | Other operational variable cost for energy flows. Constant, period, time, period+time or stochastic time. | ||
ramp_cost |
CUR/MW | a constant | tech_advanced | Cost per MW of change in the step-average flow, up or down, between a time step and the step before it. Charged per change, independent of step length. Needs ramp_method ramp_cost or both. Constant. On a constant_efficiency unit with one input and one output, an input-side ramp cost prices the change of the unit's output flow. | ||
ramp_method |
a constant | none | ramp_limit, ramp_cost, both, none | tech_advanced | Choice of ramp method. ramp_limit limits the ramp speed. ramp_cost charges every change in the flow between consecutive time steps. both adds the limit as well. | |
ramp_speed_down |
share of capacity per minute | a constant | tech_advanced | Largest decrease of the flow between two time steps. No limit across a gap in the timeline. Constant. | ||
ramp_speed_up |
share of capacity per minute | a constant | tech_advanced | Largest increase of the flow between two time steps. No limit across a gap in the timeline. Constant. | ||
startup_energy |
MWh per MW started | a constant, or a map over periods (1 level) | tech_advanced | Energy taken from this input node per MW of capacity started up (start-ups x unit size). Used with startup_input_method startup_and_input or startup_only. Constant or period. | ||
startup_input_method |
a constant | just_input | just_input, startup_and_input, startup_only | tech_advanced | What the input arc supplies. just_input (default): the normal input flow. startup_and_input: the normal input flow, and each start-up of the unit also takes startup_energy x MW started from this node. startup_only: only the start-up energy; the arc has no flow and takes no part in the conversion, the capacity, input shares or ramps. The start-up input can be fuel (oil to start a coal unit), heat (from the tank of a CSP plant) or electricity. Needs online variables (startup_method linear or binary, or a minimum_time_method). The start-up input is priced as the node's commodity, counts in CO2 prices and caps and is dropped with the start-ups by reduce_unit_detail_method online. It is not part of constraint_flow_coeff, flow groups or the capacity margin. |
unit__outputNode
An output of a unit: the node it delivers to, and the properties of that flow (costs, coefficients, ramping).
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
capacity_max_coeff |
dimensionless | a constant | 1 | basics | default 1. Fraction of the unit's capacity (existing + invested - retired) available to this edge's upper cap (maxToSink / maxFromSource / ramp). 0 is a zero cap; to remove the edge from the capacity constraints altogether use conversion_flow_coeff = 0. For extraction CHP set to 1.0 on each output so each can reach full capacity when the other drops. | |
capacity_min_coeff |
dimensionless | a constant | 0 | basics | default 0. Optional extra floor on this output of a unit with several outputs: while the unit is online, this output must be at least capacity_min_coeff x min_load x the online capacity. The unit's minimum load (min_load) applies once, to the sum of its outputs, and is not scaled by this coefficient. 0 = no separate floor on this output. Range 0..1. | |
constraint_flow_coeff |
unit of the constraint per MW | a map: constraint name → coefficient (1 level) | constraint | A map of coefficients (Index: constraint name, value: coefficient) to represent the participation of the flow between unit and node in user-defined constraints. [flow x coefficient] will be on the left side of the equation. | ||
conversion_flow_coeff |
dimensionless | a constant | 1 | basics | default 1. Fuel-equivalent energy per unit of this flow. It enters the unit's conversion equation, not the node balance. Applies to simple units too. 0 takes the flow out of the capacity, ramp and minimum load limits. | |
inertia_constant |
MWs/MW | a constant | network | Inertia constant for a synchronously connected unit to this node. Constant. | ||
is_non_synchronous |
a constant | no | yes, no | network | Chooses whether the unit is synchronously connected to this node. | |
other_operational_cost |
CUR/MWh | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | basics | Other operational variable cost for energy flows. Constant, period, time, period+time or stochastic time. | ||
ramp_cost |
CUR/MW | a constant | tech_advanced | Cost per MW of change in the step-average flow, up or down, between a time step and the step before it. Charged per change, independent of step length. Needs ramp_method ramp_cost or both. Constant. On a constant_efficiency unit with one input and one output, an input-side ramp cost prices the change of the unit's output flow. | ||
ramp_method |
a constant | none | ramp_limit, ramp_cost, both, none | tech_advanced | Choice of ramp method. ramp_limit limits the ramp speed. ramp_cost charges every change in the flow between consecutive time steps. both adds the limit as well. | |
ramp_speed_down |
share of capacity per minute | a constant | tech_advanced | Largest decrease of the flow between two time steps. No limit across a gap in the timeline. Constant. | ||
ramp_speed_up |
share of capacity per minute | a constant | tech_advanced | Largest increase of the flow between two time steps. No limit across a gap in the timeline. Constant. |
reserve__upDown__group
The reserve requirement of a group of nodes, for one reserve and direction.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
increase_reserve_ratio |
dimensionless | a constant | reserve | Only for dynamic reserve methods. The requirement grows by this ratio times the demand of the group's nodes in each step (MW, real demand). Constant. | ||
penalty_reserve |
CUR/MW per hour | a constant | 5000 | reserve | Penalty for each MW of reserve shortfall (the reserve requirement of the group is soft). Constant. Default 5000 - applied to every reserve group that has no value of its own. | |
reservation |
MW | a constant, or a map over periods or over time (1 level), or a map over periods and time (2 levels), or a stochastic-time map (branch, analysis_time, time; 3 levels) | reserve | Amount of reserve to be reserved. Constant, period, time, period+time or stochastic time. | ||
reserve_duration |
hours | a constant | reserve | Time span over which committed reserve power must be sustainable from storage. Energy obligation = reservation_MW × reserve_duration, corrected by the reserve provider's efficiency. Only affects reserve provided by units/connections that draw on (up) or charge (down) a storage node. Absent or 0 means no storage-energy coupling. Constant. | ||
reserve_method |
a constant | no_reserve | no_reserve, timeseries_only, dynamic_only, large_failure_only, timeseries_and_dynamic, timeseries_and_large_failure, dynamic_and_large_failure, all | reserve | Choice of reserve method: no_reserve, timeseries_only, dynamic_only, large_failure_only or their combinations. Dynamic and large_failure requirements need no separate reservation. |
unit__node__profile
Applies a profile as a limit on the flow of a unit to or from a node.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
profile_method |
a constant | upper_limit | upper_limit, lower_limit, fixed, none | basics | Choice of profile method (upper_limit, lower_limit, fixed). Negative values also possible. |
reserve__upDown__connection__node
Lets a connection provide a reserve, in one direction, to a node.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
increase_reserve_ratio |
dimensionless | a constant | reserve | The reserve requirement grows by this ratio times the flow between the connection and the node, in either direction, for upward and downward reserve alike. Constant. | ||
is_enabled |
a constant | yes | yes, no | reserve | Whether the entity is enabled. Set to 'no' to disable without deleting the entity. Constant. | |
large_failure_ratio |
dimensionless | a constant | reserve | With a large_failure method, the reserve must cover the loss of this connection's flow times this ratio. Its own reserve does not count. Constant. | ||
max_share |
dimensionless | a constant | reserve | Largest share of the connection's built capacity that can be held as this reserve at this node. Constant. | ||
reliability |
dimensionless | a constant | 1 | reserve | The share of the reservation that is counted to reserves (sometimes reserve sources are not fully trusted). Constant. |
reserve__upDown__unit__node
Lets a unit provide a reserve, in one direction, to a node.
| parameter | unit | allowed shapes | default | allowed values | group | definition |
|---|---|---|---|---|---|---|
increase_reserve_ratio |
dimensionless | a constant | reserve | The reserve requirement grows by this ratio times the flow between the unit and the node, for upward and downward reserve alike. At an input node, the flow is what the unit draws. Constant. | ||
is_enabled |
a constant | yes | yes, no | reserve | Whether the entity is enabled. Set to 'no' to disable without deleting the entity. Constant. | |
large_failure_ratio |
dimensionless | a constant | reserve | With a large_failure method, the reserve must cover the loss of this unit's flow times this ratio. Its own reserve does not count. Constant. | ||
max_share |
dimensionless | a constant | reserve | Largest share of the unit's built capacity at this node that can be held as this reserve. At an input node, the capacity is the unit's full-load input there. Without a value the unit offers no reserve. Constant. | ||
reliability |
dimensionless | a constant | 1 | reserve | The share of the reservation that is counted to reserves (sometimes reserve sources are not fully trusted). Constant. |