{ "cells": [ { "cell_type": "markdown", "id": "6124eb4f", "metadata": {}, "source": [ "(plant)=\n", "# plant\n", "A hydropower plant which houses up to several hydropower generators and pumps\n", "\n", "| | |\n", "|---|---|\n", "|Input connections|{ref}`reservoir`, {ref}`generator`, {ref}`pump`, {ref}`junction`, {ref}`junction_gate`, {ref}`creek_intake`, {ref}`discharge_group`, {ref}`production_group`, {ref}`bid_group`, {ref}`tunnel`, {ref}`plant_reserve_capability`|\n", "|Output connections|{ref}`river`, {ref}`reservoir`, {ref}`tunnel`, {ref}`junction`, {ref}`discharge_group`, {ref}`production_group`, {ref}`bid_group`, {ref}`generator`, {ref}`pump`, {ref}`plant_reserve_capability`|\n", "|License|SHOP_OPEN|\n", "|Release version|13.0.0.a|\n", "\n", "```{contents}\n", ":local:\n", ":depth: 1\n", "```\n", "\n", "## Introduction\n", "\n", "The hydropower plant object in SHOP is used to group [generators](generator) and [pumps](pump) that share a common tunnel and penstocks. The generator and pump objects are connected to the plant object, and the plant object is in turn connected to the rest of the system through rivers, tunnels, reservoirs, etc.\n", "\n", "## Sum constraints\n", "\n", "The generator and pump objects are more fundamental building blocks compared to the plant object, but many sum constraints can be applied on the plant level, such as [max_q_constr](plant:max_q_constr) limiting the total discharge of all generators in the plant. Many of these constraints are also found on unit level (see the generator [max_q_constr](generator:max_q_constr)), and are handled more strictly in these cases. The plant sum constraints can usually be modelled as soft constraints that can be broken for a penalty. \n", "\n", "The plant object may also be connected to other \"constraint\" objects such as the [](discharge_group) and [](production_group), which will apply sum constraints on all plants and other objects connected to them.\n", "\n", "## Marginal cost calculations\n", "\n", "Calculating marginal costs and finding the best way to regulate the total plant production up and down is important for bidding into several of the electricity markets. The best profit functionality in SHOP handles these calculations on the plant level, see the [tutorial](best-profit) and [example](best-profit-basic-example) for more details.\n", "\n", "## Examples\n", " - [](best-profit)\n", " - [](best-profit-basic-example)\n", " - [](maintenance-example)\n", " - [](ramping)\n", " - [](plant-complex-ramping)\n", " - [](plant-reserve-strategy)\n", " \n", "\n", "## References\n", " - An overview on formulations and optimization methods for the unit-based short-term hydro scheduling problem {cite}`Kong2020`\n", " - Dynamic incorporation of nonlinearity into MILP formulation for short-term hydro scheduling {cite}`Skjelbred2020`\n", " - A comparison of linear interpolation and spline interpolation for turbine efficiency curves in short-term hydropower scheduling problems {cite}`Zhang2019`\n", " - Calculation of power compensation for a pumped storage hydropower plant with hydraulic short-circuit operation {cite}`Skjelbred2017b`\n", " - Combining start-up costs with non-linear head optimization of hydro storage {cite}`Skjelbred2013`\n", " \n", "\n", "## Attributes" ] }, { "cell_type": "code", "execution_count": 1, "id": "084a254b", "metadata": { "tags": [ "remove-input", "full-width" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "HTML(\"\"\"
\n", "\n", "\"\"\")" ] }, { "cell_type": "markdown", "id": "408f39fd", "metadata": {}, "source": [ "(plant:num_gen)=\n", "### num_gen\n", "Number of generators in the plant (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:num_pump)=\n", "### num_pump\n", "Number of pumps in the plant (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:less_distribution_eps)=\n", "### less_distribution_eps\n", "The tolerance level for heuristically distributing discharge on generators (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:latitude)=\n", "### latitude\n", "Reserved for future use (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:longitude)=\n", "### longitude\n", "Reserved for future use (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:power_head_optimization_factor)=\n", "### power_head_optimization_factor\n", "Individual scale factor for plant power head optimization. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:ownership)=\n", "### ownership\n", "Percentage of ownership of plant in case of shared ownership. Used to scale generator efficiency curves accordingly. (xUnit: %, yUnit: %)\n", "\n", "\n", "(plant:prod_area)=\n", "### prod_area\n", "Future deprecation: use a busbar object per price area and connect the appropriate units and markets to the busbars. Production from this plant will be sold in markets connected to the given price area (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:prod_area_flag)=\n", "### prod_area_flag\n", "Future deprecation: use a busbar object per price area and connect the appropriate units and markets to the busbars. Flag determining whether production area connection should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:prod_factor)=\n", "### prod_factor\n", "Optional fixed production factor for the plant in KWh/m3, which is used to convert between NOK/MWh and NOK/Mm3. If this is not specified (value of 0.0), SHOP will calculate a production factor for the plant based on best point operation given the initial plant head. (xUnit: KWH/MM3, yUnit: KWH/MM3)\n", "\n", "\n", "(plant:outlet_line)=\n", "### outlet_line\n", "The level (meter above sea level) of the outlet tunnel from the plant (xUnit: METER, yUnit: METER)\n", "\n", "\n", "(plant:intake_line)=\n", "### intake_line\n", "Minimum upper level used to calculate the height the pump must lift water to. The upper reservoir water level is used if it is above the value of intake_line (xUnit: NO_UNIT, yUnit: METER)\n", "\n", "\n", "(plant:main_loss)=\n", "### main_loss\n", "The loss factor for the main tunnel of the plant. Loss is assumed to be a quadratic function of flow (xUnit: S2/M5, yUnit: S2/M5)\n", "\n", "\n", "(plant:penstock_loss)=\n", "### penstock_loss\n", "The list of loss factors for the penstocks of the plant, multiple units may share a penstock. Loss is assumed to be a quadratic function of flow (xUnit: S2/M5, yUnit: S2/M5)\n", "\n", "\n", "(plant:tailrace_loss)=\n", "### tailrace_loss\n", "The head loss curve for the tailrace of the plant which can be modelled as an additional head loss related to the discharge of the plant (and bypass if intake_loss_from_bypass_flag is active). Each XY curve is referred to a downstream level in masl (xUnit: M3/S, yUnit: METER)\n", "\n", "\n", "(plant:tailrace_loss_from_bypass_flag)=\n", "### tailrace_loss_from_bypass_flag\n", "Flag determining whether bypass discharge should be included in the calculation of tailrace loss for the plant. If the flag is zero or not set, only plant discharge is used to calculate tailrace loss. If the flag is 1 and the plant is connected to a downstream reservoir, all bypass gates and all rivers that discharge into this reservoir are counted towards the tailrace loss calculation in addition to the plant discharge. If the flag is 1 and the plant is connected to a river downstream, the flow in this river is used for the tailrace loss calculation. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:intake_loss)=\n", "### intake_loss\n", "The head loss curve for the intake of the plant which can be modelled as an additional head loss related to the discharge of the plant (and bypass if intake_loss_from_bypass_flag is active). Each XY curve is referred to an upstream level in masl (xUnit: M3/S, yUnit: METER)\n", "\n", "\n", "(plant:intake_loss_from_bypass_flag)=\n", "### intake_loss_from_bypass_flag\n", "Flag determining whether bypass discharge should be included in the calculation of intake loss for the plant. If the flag is zero or not set, only plant discharge is used to calculate intake loss. If the flag is 1 and the plant is connected to an upstream reservoir, all bypass gates and all rivers that discharge out of this reservoir is counted towards the intkae loss calculation in addition to the plant discharge. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:tides)=\n", "### tides\n", "The change of plant head related to tides (xUnit: NO_UNIT, yUnit: DELTA_METER)\n", "\n", "\n", "(plant:time_delay)=\n", "### time_delay\n", "Future deprecation: All time delay should be modelled by using the river object (does not require additional license). The delay between the water leaving the plant and until it ends up in the downstream reservoir (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:shape_discharge)=\n", "### shape_discharge\n", "Future deprecation: All time delay should be modelled by using the river object (does not require additional license). Describes the shape of the delayed discharge as a wave function of ratios per time step (xUnit: HOUR, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:discharge_fee)=\n", "### discharge_fee\n", "Extra cost for plant discharge referring to the time when it was discharged by the plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:discharge_fee_flag)=\n", "### discharge_fee_flag\n", "Flag determining whether the discharge fee should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:discharge_cost_curve)=\n", "### discharge_cost_curve\n", "Extra cost depending on the discharge of the plant (xUnit: M3/S, yUnit: NOK/H/M3/S)\n", "\n", "\n", "(plant:feeding_fee)=\n", "### feeding_fee\n", "Extra cost for feeding electricity into the grid. The feeding fee is added as an extra production cost in the objective function. (xUnit: NO_UNIT, yUnit: NOK/MWH)\n", "\n", "\n", "(plant:feeding_fee_flag)=\n", "### feeding_fee_flag\n", "Flag determining whether the feed-in fee should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:production_fee)=\n", "### production_fee\n", "Fee that is used to reduce the sale price for energy delivered by this plant (xUnit: NO_UNIT, yUnit: NOK/MWH)\n", "\n", "\n", "(plant:production_fee_flag)=\n", "### production_fee_flag\n", "Flag determining whether the production fee should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:consumption_fee)=\n", "### consumption_fee\n", "Fee that is used to increase the buy price for energy consumed by this plant (xUnit: NO_UNIT, yUnit: NOK/MWH)\n", "\n", "\n", "(plant:consumption_fee_flag)=\n", "### consumption_fee_flag\n", "Flag determining whether the consumption fee should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:linear_startup_flag)=\n", "### linear_startup_flag\n", "Flag determining whether the plant should have linear startup costs when MIP is not active (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:maintenance_flag)=\n", "### maintenance_flag\n", "Flag determining whether the plant is out for maintenance or not (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:mip_flag)=\n", "### mip_flag\n", "Flag determining for which time steps to use binary variables to model generator startup and min production (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:mip_length)=\n", "### mip_length\n", "Set the binary variable length to another value other than the default length of one time step (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:mip_length_flag)=\n", "### mip_length_flag\n", "Flag determining whether the mip_length should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:gen_priority)=\n", "### gen_priority\n", "Prioritization for startup order of generators. If no generators have TXY priority, use this static generator priority. Use positive values to set priority. Value 0 means that no priority has been defined. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:n_seg_down)=\n", "### n_seg_down\n", "The number of segments below the best efficiency point of the unit in the building of original PQ curve in incremental mode (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:n_seg_up)=\n", "### n_seg_up\n", "The number of segments above the best efficiency point of the unit in the building of original PQ curve in incremental mode (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:n_mip_seg_down)=\n", "### n_mip_seg_down\n", "The number of segments below the best efficiency point of the unit in the building of original PQ curve in full mode (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:n_mip_seg_up)=\n", "### n_mip_seg_up\n", "The number of segments below the best efficiency point of the unit in the building of original PQ curve in full mode (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:dyn_pq_seg_flag)=\n", "### dyn_pq_seg_flag\n", "Flag determining whether dynamically define the segments in the building of the original PQ curve for all the units in this plant in incremental mode (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:dyn_mip_pq_seg_flag)=\n", "### dyn_mip_pq_seg_flag\n", "Flag determining whether dynamically define the segments in the building of the original PQ curve for all the units in this plant in full mode (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:build_original_pq_curves_by_discharge_limits)=\n", "### build_original_pq_curves_by_discharge_limits\n", "Flag determining whether the original PQ curve should only consider only discharge-related limits or take into account all the operating limits (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_p_constr)=\n", "### min_p_constr\n", "Time-dependent minimum production limit for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:min_p_constr_flag)=\n", "### min_p_constr_flag\n", "Flag determining whether the time-dependent minimum production limit for the plant should be included in the optimization model. If the flag is set equal to 2, all downward FCR-N, FCR-D, FRR, and RR reserve capcity allocated on the generators in the plant is also included in the constraint (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_p_penalty_flag)=\n", "### min_p_penalty_flag\n", "Flag determining whether the time-dependent minimum production limit for the plant should be a hard or soft constraint: 0 = hard; 1 = soft (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_p_penalty_cost)=\n", "### min_p_penalty_cost\n", "Given penalty cost for violating the time-dependent minimum production limit for the plant (if min_p_penalty_flag is set as 1) (xUnit: NO_UNIT, yUnit: NOK/MWH)\n", "\n", "\n", "(plant:min_p_penalty_cost_flag)=\n", "### min_p_penalty_cost_flag\n", "Flag determining whether the cost for violating the minimum production constraint should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_p_constr)=\n", "### max_p_constr\n", "Time-dependent maximum production limit for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:max_p_constr_flag)=\n", "### max_p_constr_flag\n", "Flag determining whether the time-dependent maximum production limit for the plant should be included in the optimization model. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_p_penalty_flag)=\n", "### max_p_penalty_flag\n", "Flag determining whether the time-dependent maximum production limit for the plant should be a hard or soft constraint: 0 = hard; 1 = soft (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_p_penalty_cost)=\n", "### max_p_penalty_cost\n", "Given penalty cost for violating the time-dependent maximum production limit for the plant (if max_p_penalty_flag is set as 1) (xUnit: NO_UNIT, yUnit: NOK/MWH)\n", "\n", "\n", "(plant:max_p_penalty_cost_flag)=\n", "### max_p_penalty_cost_flag\n", "Flag determining whether the cost for violating the maximum production constraint should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_q_constr)=\n", "### min_q_constr\n", "Time-dependent minimum discharge limit for the plant (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:min_q_constr_flag)=\n", "### min_q_constr_flag\n", "Flag determining whether the time-dependent minimum discharge limit for the plant should be included in the optimization (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_q_penalty_flag)=\n", "### min_q_penalty_flag\n", "Flag determining whether the time-dependent minimum discharge limit for the plant should be a hard or soft constraint: 0 = hard; 1 = soft (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_q_penalty_cost)=\n", "### min_q_penalty_cost\n", "Given penalty cost for violating the time-dependent minimum discharge limit for the plant (if min_q_penalty_flag is set as 1) (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:min_q_penalty_cost_flag)=\n", "### min_q_penalty_cost_flag\n", "Flag determining whether the cost for violating the minimum discharge constraint should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_q_constr)=\n", "### max_q_constr\n", "Time-dependent maximum discharge limit for the plant (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:max_q_constr_flag)=\n", "### max_q_constr_flag\n", "Flag determining whether the time-dependent maximum discharge limit for the plant should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_q_penalty_flag)=\n", "### max_q_penalty_flag\n", "Flag determining whether the time-dependent maximum discharge limit for the plant should be a hard or soft constraint: 0 = hard; 1 = soft (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_q_penalty_cost)=\n", "### max_q_penalty_cost\n", "Given penalty cost for violating the time-dependent maximum discharge limit for the plant by (if max_q_penalty_flag is set as 1) (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:max_q_penalty_cost_flag)=\n", "### max_q_penalty_cost_flag\n", "Flag determining whether the cost for violating the maximum discharge constraint should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_q_limit_rsv_up)=\n", "### max_q_limit_rsv_up\n", "Maximum plant discharge limit (m3/s) and upstream reservoir water level (meter above sea level) relation (xUnit: METER, yUnit: M3/S)\n", "\n", "\n", "(plant:max_q_limit_rsv_down)=\n", "### max_q_limit_rsv_down\n", "Maximum plant discharge limit (m3/s) and downstream reservoir water level (meter above sea level) relation (xUnit: METER, yUnit: M3/S)\n", "\n", "\n", "(plant:production_schedule)=\n", "### production_schedule\n", "Plant production schedule (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:production_schedule_flag)=\n", "### production_schedule_flag\n", "Flag determining whether the plant production schedule should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:discharge_schedule)=\n", "### discharge_schedule\n", "Discharge schedule (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:discharge_schedule_flag)=\n", "### discharge_schedule_flag\n", "Flag determining whether the plant discharge schedule should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:consumption_schedule)=\n", "### consumption_schedule\n", "Plant consumption schedule (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:consumption_schedule_flag)=\n", "### consumption_schedule_flag\n", "Flag determining whether the plant consumption schedule should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:upflow_schedule)=\n", "### upflow_schedule\n", "Plant upflow schedule (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:upflow_schedule_flag)=\n", "### upflow_schedule_flag\n", "Flag determining whether the plant upflow schedule should be included in the optimization model (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:sched_penalty_cost_down)=\n", "### sched_penalty_cost_down\n", "Given penalty cost for deviating below the plant schedule (xUnit: NOK, yUnit: NOK)\n", "\n", "\n", "(plant:sched_penalty_cost_up)=\n", "### sched_penalty_cost_up\n", "Given penalty cost for deviating above the plant schedule (xUnit: NOK, yUnit: NOK)\n", "\n", "\n", "(plant:power_ramping_up)=\n", "### power_ramping_up\n", "Maximum limit for increase in plant production per hour (xUnit: NO_UNIT, yUnit: MW_HOUR)\n", "\n", "\n", "(plant:power_ramping_down)=\n", "### power_ramping_down\n", "Maximum limit for decrease in plant production per hour (xUnit: NO_UNIT, yUnit: MW_HOUR)\n", "\n", "\n", "(plant:discharge_ramping_up)=\n", "### discharge_ramping_up\n", "Maximum limit for increase in plant discharge per hour (xUnit: NO_UNIT, yUnit: M3SEC_HOUR)\n", "\n", "\n", "(plant:discharge_ramping_down)=\n", "### discharge_ramping_down\n", "Maximum limit for decrease in plant discharge per hour (xUnit: NO_UNIT, yUnit: M3SEC_HOUR)\n", "\n", "\n", "(plant:block_merge_tolerance)=\n", "### block_merge_tolerance\n", "Maximum deviation in production between two time steps that allows SHOP to force these hours to have the same production in later iterations (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:block_generation_mwh)=\n", "### block_generation_mwh\n", "Gives a constant production for the plant in one or more blocks of time steps. The t-value denotes the time of the block start and the y-value the block length in minutes. The block length is repeated until a new t-value and corresponding y-value is given. (xUnit: NO_UNIT, yUnit: MINUTE)\n", "\n", "\n", "(plant:block_generation_m3s)=\n", "### block_generation_m3s\n", "Gives a constant discharge for the plant in one or more blocks of time steps. The t-value denotes the time of the block start and the y-value the block length in minutes. The block length is repeated until a new t-value and corresponding y-value is given. (xUnit: NO_UNIT, yUnit: MINUTE)\n", "\n", "\n", "(plant:frr_up_min)=\n", "### frr_up_min\n", "Minimum FRR_UP delivery for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:frr_up_max)=\n", "### frr_up_max\n", "Maximum FRR_UP delivery for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:frr_down_min)=\n", "### frr_down_min\n", "Minimum FRR_DOWN delivery for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:frr_down_max)=\n", "### frr_down_max\n", "Maximum FRR_DOWN delivery for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:rr_up_min)=\n", "### rr_up_min\n", "Minimum RR_UP delivery for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:rr_down_min)=\n", "### rr_down_min\n", "Minimum RR_DOWN delivery for the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:frr_symmetric_flag)=\n", "### frr_symmetric_flag\n", "Flag determining whether all the generators in the plant should deliver both FRR_UP and FRR_DOWN as long as they are assigned for the FRR reserve (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:bp_dyn_wv_flag)=\n", "### bp_dyn_wv_flag\n", "Flag determining whether water values in the best profit calculation should be based on dynamic results per time step from the optimization or the static end value description (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:ref_prod)=\n", "### ref_prod\n", "Production of the plant indicating the planned operating point as starting point for the best profit calculation (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:plant_unbalance_recommit)=\n", "### plant_unbalance_recommit\n", "Flag determining whether the generators in the plant should be recommitted when the optimization model changes from full mode to incremental mode and the resulting plant discharge is smaller than the optimal discharge from solver (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:spinning_reserve_up_max)=\n", "### spinning_reserve_up_max\n", "Sets a maximum limit for the sum of spinning reserves delivered in the upward direction for the plant. The sum ranges over reserves delivered on all generators and pumps in the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:spinning_reserve_down_max)=\n", "### spinning_reserve_down_max\n", "Sets a maximum limit for the sum of spinning reserves delivered in the downward direction for the plant. The sum ranges over reserves delivered on all generators and pumps in the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:ramping_steps)=\n", "### ramping_steps\n", "X-value: Production in previous timestep. Y-value: Maximum change in production in next timestep referenced production in previous timestep. Ref: Select which series to use based on input from ramping_step_reference_discharge. Changed from xy to xy_array from 15.3.4.0. (xUnit: MW, yUnit: MW)\n", "\n", "\n", "(plant:discharge_rolling_ramping_penalty_cost)=\n", "### discharge_rolling_ramping_penalty_cost\n", "The penalty cost for breaking any rolling ramping constraint applied to the plant discharge (xUnit: NO_UNIT, yUnit: NOK/M3/S)\n", "\n", "\n", "(plant:discharge_period_ramping_penalty_cost)=\n", "### discharge_period_ramping_penalty_cost\n", "The penalty cost for breaking any period ramping constraint applied to the plant discharge (xUnit: NO_UNIT, yUnit: NOK/M3/S)\n", "\n", "\n", "(plant:average_discharge_rolling_ramping_up)=\n", "### average_discharge_rolling_ramping_up\n", "Input to specify rolling ramping constraints that constrain the plant discharge upwards from the average plant discharge in a rolling time window. The x-values represent the length of the rolling time window and the y-values specify the number of meters the plant discharge can increase above the average rolling discharge. Each (x, y) point in each xy curve represents a rolling ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:average_discharge_rolling_ramping_down)=\n", "### average_discharge_rolling_ramping_down\n", "Input to specify rolling ramping constraints that constrain the plant discharge downwards from the average plant discharge in a rolling time window. The x-values represent the length of the rolling time window and the y-values specify the number of meters the plant discharge can decrease below the average rolling discharge. Each (x, y) point in each xy curve represents a rolling ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:limit_discharge_rolling_ramping_up)=\n", "### limit_discharge_rolling_ramping_up\n", "Input to specify rolling ramping constraints that constrain the plant discharge upwards from the minimal plant discharge in a rolling time window. The x-values represent the length of the rolling time window and the y-values specify the number of meters the plant discharge can increase above the minimal rolling discharge. Each (x, y) point in each xy curve represents a rolling ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:limit_discharge_rolling_ramping_down)=\n", "### limit_discharge_rolling_ramping_down\n", "Input to specify rolling ramping constraints that constrain the plant discharge downwards from the maximal plant discharge in a rolling time window. The x-values represent the length of the rolling time window and the y-values specify the number of meters the plant discharge can decrease below the maximal rolling discharge. Each (x, y) point in each xy curve represents a rolling ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:average_discharge_period_ramping_up)=\n", "### average_discharge_period_ramping_up\n", "Input to specify period ramping constraints that constrain the plant discharge upwards from the average plant discharge in a fixed time window. The x-values represent the length of the fixed time window and the y-values specify the number of meters the plant discharge can increase above the average discharge in the previous fixed time period. Each (x, y) point in each xy curve represents a period ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:average_discharge_period_ramping_down)=\n", "### average_discharge_period_ramping_down\n", "Input to specify period ramping constraints that constrain the plant discharge downwards from the average plant discharge in a fixed time window. The x-values represent the length of the fixed time window and the y-values specify the number of meters the plant discharge can decrease below the average discharge in the previous fixed time period. Each (x, y) point in each xy curve represents a period ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:limit_discharge_period_ramping_up)=\n", "### limit_discharge_period_ramping_up\n", "Input to specify period ramping constraints that constrain the plant discharge upwards from the minimal plant discharge in a fixed time window. The x-values represent the length of the fixed time window and the y-values specify the number of meters the plant discharge can increase above the minimal discharge in the previous fixed time period. Each (x, y) point in each xy curve represents a period ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:limit_discharge_period_ramping_down)=\n", "### limit_discharge_period_ramping_down\n", "Input to specify period ramping constraints that constrain the plant discharge downwards from the maximal plant discharge in a fixed time window. The x-values represent the length of the fixed time window and the y-values specify the number of meters the plant discharge can decrease below the maximal discharge in the previous fixed time period. Each (x, y) point in each xy curve represents a period ramping constraint. (xUnit: MINUTE, yUnit: M3/S)\n", "\n", "\n", "(plant:historical_discharge)=\n", "### historical_discharge\n", "The plant discharge for times before the optimization start, values after the start time of the optimization are ignored. The datatype of this attribute changed from xy to txy in version 15.3.1.0 (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:average_discharge_period_ramping_up_offset)=\n", "### average_discharge_period_ramping_up_offset\n", "The y-values must be the same as the period lengths used in the average_discharge_period_ramping_up attribute, while the strings are timestamps that specify when the first whole ramping period starts for each of the average ramping up period constraints. (xUnit: MINUTE, yUnit: MINUTE)\n", "\n", "\n", "(plant:average_discharge_period_ramping_down_offset)=\n", "### average_discharge_period_ramping_down_offset\n", "The y-values must be the same as the period lengths used in the average_discharge_period_ramping_down attribute, while the strings are timestamps that specify when the first whole ramping period starts for each of the average ramping down period constraints. (xUnit: MINUTE, yUnit: MINUTE)\n", "\n", "\n", "(plant:limit_discharge_period_ramping_up_offset)=\n", "### limit_discharge_period_ramping_up_offset\n", "The y-values must be the same as the period lengths used in the limit_discharge_period_ramping_up attribute, while the strings are timestamps that specify when the first whole ramping period starts for each of the limit ramping up period constraints. (xUnit: MINUTE, yUnit: MINUTE)\n", "\n", "\n", "(plant:limit_discharge_period_ramping_down_offset)=\n", "### limit_discharge_period_ramping_down_offset\n", "The y-values must be the same as the period lengths used in the limit_discharge_period_ramping_down attribute, while the strings are timestamps that specify when the first whole ramping period starts for each of the limit ramping down period constraints. (xUnit: MINUTE, yUnit: MINUTE)\n", "\n", "\n", "(plant:fcr_n_up_activation_time)=\n", "### fcr_n_up_activation_time\n", "The number of hours that one expects the FCR-N up reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:fcr_n_down_activation_time)=\n", "### fcr_n_down_activation_time\n", "The number of hours that one expects the FCR-N down reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:fcr_d_up_activation_time)=\n", "### fcr_d_up_activation_time\n", "The number of hours that one expects the FCR-D up reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:fcr_d_down_activation_time)=\n", "### fcr_d_down_activation_time\n", "The number of hours that one expects the FCR-D down reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:frr_up_activation_time)=\n", "### frr_up_activation_time\n", "The number of hours that one expects the FRR up reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:frr_down_activation_time)=\n", "### frr_down_activation_time\n", "The number of hours that one expects the FRR down reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:rr_up_activation_time)=\n", "### rr_up_activation_time\n", "The number of hours that one expects the RR up reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:rr_down_activation_time)=\n", "### rr_down_activation_time\n", "The number of hours that one expects the RR down reserves allocated on the units of the plant to be activated. The default value of -1 will ignore the activation factor and instead use the activation factor on global_settings (xUnit: HOUR, yUnit: HOUR)\n", "\n", "\n", "(plant:fcr_n_up_activation_factor)=\n", "### fcr_n_up_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated FCR-N up reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:fcr_n_down_activation_factor)=\n", "### fcr_n_down_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated FCR-N down reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:fcr_d_up_activation_factor)=\n", "### fcr_d_up_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated FCR-D up reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:fcr_d_down_activation_factor)=\n", "### fcr_d_down_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated FCR-D down reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:frr_up_activation_factor)=\n", "### frr_up_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated FRR up reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:frr_down_activation_factor)=\n", "### frr_down_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated FRR down reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:rr_up_activation_factor)=\n", "### rr_up_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated RR up reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:rr_down_activation_factor)=\n", "### rr_down_activation_factor\n", "The fraction (between 0.0 and 1.0) of the allocated RR down reserves on the units of the plant that is expected to be activated (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:fcr_n_up_activation_penalty_cost)=\n", "### fcr_n_up_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by FCR-N up reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:fcr_n_down_activation_penalty_cost)=\n", "### fcr_n_down_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by FCR-N down reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:fcr_d_up_activation_penalty_cost)=\n", "### fcr_d_up_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by FCR-D up reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:fcr_d_down_activation_penalty_cost)=\n", "### fcr_d_down_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by FCR-D down reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:frr_up_activation_penalty_cost)=\n", "### frr_up_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by FRR up reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:frr_down_activation_penalty_cost)=\n", "### frr_down_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by FRR down reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:rr_up_activation_penalty_cost)=\n", "### rr_up_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by RR up reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:rr_down_activation_penalty_cost)=\n", "### rr_down_activation_penalty_cost\n", "The penalty cost for violating the reserve activation constraints caused by RR down reserves on this plant (xUnit: NO_UNIT, yUnit: NOK/MM3)\n", "\n", "\n", "(plant:sum_reserve_up_max)=\n", "### sum_reserve_up_max\n", "Sets a maximum limit for the sum of all upward reserve types delivered for the plant. The sum ranges over reserves delivered on all generators and pumps in the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:sum_reserve_down_max)=\n", "### sum_reserve_down_max\n", "Sets a maximum limit for the sum of all downward reserve types delivered for the plant. The sum ranges over reserves delivered on all generators and pumps in the plant (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:max_q_reserve_constr)=\n", "### max_q_reserve_constr\n", "The maximal discharge allowed through the plant when potential upward reserve activation is considered in addition to the planned plant discharge (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:min_q_reserve_constr)=\n", "### min_q_reserve_constr\n", "The minimal discharge allowed through the plant when potential downward reserve activation is considered in addition to the planned plant discharge (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:max_q_reserve_constr_penalty_cost)=\n", "### max_q_reserve_constr_penalty_cost\n", "The penalty cost incurred for violating the max_q_reserve_constr constraint, the max_q_constr_penalty_cost is used otherwise (xUnit: NO_UNIT, yUnit: NOK/H/M3/S)\n", "\n", "\n", "(plant:min_q_reserve_constr_penalty_cost)=\n", "### min_q_reserve_constr_penalty_cost\n", "The penalty cost incurred for violating the min_q_reserve_constr constraint, the min_q_constr_penalty_cost is used otherwise (xUnit: NO_UNIT, yUnit: NOK/H/M3/S)\n", "\n", "\n", "(plant:sum_reserve_up_max_penalty_cost)=\n", "### sum_reserve_up_max_penalty_cost\n", "The penalty cost incurred for violating the sum_reserve_up_max constraint, the reserve_penalty_cost is used otherwise (xUnit: NO_UNIT, yUnit: NOK/MW)\n", "\n", "\n", "(plant:sum_reserve_down_max_penalty_cost)=\n", "### sum_reserve_down_max_penalty_cost\n", "The penalty cost incurred for violating the sum_reserve_down_max constraint, the reserve_penalty_cost is used otherwise (xUnit: NO_UNIT, yUnit: NOK/MW)\n", "\n", "\n", "(plant:reserve_tactical_activation_cost_scaling)=\n", "### reserve_tactical_activation_cost_scaling\n", "The penalty cost for violating the tactical reservoir volumes is decided by the reserve activation penalty cost scaled by this factor. If the default value of -1 is not changed, the reserve_tactical_activation_cost_scaling attribute on the global_settings object will be used instead (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:coupled_fcr_activation_flag)=\n", "### coupled_fcr_activation_flag\n", "If this flag is set to 1, 100% of the FCR-N reserves will be considered activated when building FCR-D reserve activation constraints for the reservoirs around this power plant (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:ramping_step_reference_discharge)=\n", "### ramping_step_reference_discharge\n", "If multiple ramping steps XY curves are given, this timeseries decides which curve is used. The curve with reference that is both smaller than and closest to the TXY value. If no curve references are smaller, the closest one will be used. (xUnit: M3/S, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_uptime)=\n", "### min_uptime\n", "Minimum up-time on plant level, given in whole minutes. (xUnit: MINUTE, yUnit: MINUTE)\n", "\n", "\n", "(plant:min_downtime)=\n", "### min_downtime\n", "Minimum down-time on plant level, given in whole minutes. (xUnit: MINUTE, yUnit: MINUTE)\n", "\n", "\n", "(plant:min_uptime_flag)=\n", "### min_uptime_flag\n", "Flag for turning on/off the minimum plant up-time constraints. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_downtime_flag)=\n", "### min_downtime_flag\n", "Flag for turning on/off the minimum plant down-time constraints. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:historical_production)=\n", "### historical_production\n", "The plant production for times before the optimization start. If not provided, historical production on generator level is checked. (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:historical_consumption)=\n", "### historical_consumption\n", "The plant consumption for times before the optimization start. If not provided, historical consumption on pump level is checked. (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:simultanous_generating_pumping_flag)=\n", "### simultanous_generating_pumping_flag\n", "Flag determining whether simultanously generating and pumping is allowed in the plant. Default setting is 0 (not allowed). (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_prod_reserve_strategy)=\n", "### max_prod_reserve_strategy\n", "Overrides the global_setting attribute 'plant_max_prod_reserve_strategy' if set to a value other than 'NOT SET' (default), see the documentation for 'plant_max_prod_reserve_strategy' for a description of the different strategies (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_prod_reserve_strategy)=\n", "### min_prod_reserve_strategy\n", "Overrides the global_setting attribute 'plant_min_prod_reserve_strategy' if set to a value other than 'NOT SET' (default), see the documentation for 'plant_min_prod_reserve_strategy' for a description of the different strategies (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_prod_reserve_penalty_cost)=\n", "### max_prod_reserve_penalty_cost\n", "The penalty cost for violating the maximum limits for plant production including upward reserve capacity created by 'plant_max_prod_reserve_strategy'. If not specified, the penalty is the same as for violating the max_p_constr plant constraint (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:min_prod_reserve_penalty_cost)=\n", "### min_prod_reserve_penalty_cost\n", "The penalty cost for violating the minimum limits for plant production including downward reserve capacity created by 'plant_min_prod_reserve_strategy'. If not specified, the penalty is the same as for violating the min_p_constr plant constraint (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:strict_pq_uploading_flag)=\n", "### strict_pq_uploading_flag\n", "If this flag is set to 1 for a time step, strict uploading constraints using binary variables for each PQ curve segment can be built for all generators on the plant object. See the attribute description for strict_pq_uploading_upon_detection for more information about automatic selection of hours to build strict PQ curve uploading. No strict uploading constraints are built for time steps where the flag is set to zero, or if the flag is not defined (default) (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:strict_pq_uploading_upon_detection)=\n", "### strict_pq_uploading_upon_detection\n", "Setting this attribute to 1 will turn on building of strict PQ curve uploading constraints for the genarators of the plant. These constraints will only be built if incorrrect uploading has been detected for the plant and time step in a previous iteration AND if the strict_pq_uploading_flag is set to 1. Building these constraints upon detection is turned off when this attribute is set to zero (default), which means that all hours where strict_pq_uploading_flag = 1 will include the constraints. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:production)=\n", "### production\n", "Resulting plant production, i.e. sum of resulting generator production (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:solver_production)=\n", "### solver_production\n", "Preliminary result for the sum of generator production that is returned by the linearized optimization problem (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:sim_production)=\n", "### sim_production\n", "Simulated plant production (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:prod_unbalance)=\n", "### prod_unbalance\n", "Difference between the result of the non-linear post-calculation (production) and the production determined by the linear optimization problem (solver_production) (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:consumption)=\n", "### consumption\n", "Resulting plant consumption, i.e. sum of resulting pump consumption (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:sim_consumption)=\n", "### sim_consumption\n", "Simulated plant consumption, i.e. sum of resulting pump consumption (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:solver_consumption)=\n", "### solver_consumption\n", "Preliminary result for the sum of pump consumption that is returned by the linearized optimization problem (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:cons_unbalance)=\n", "### cons_unbalance\n", "Difference between the result of the non-linear post-calculation (consumption) and the consumption determined by the linear optimization problem (solver_consumption) (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:discharge)=\n", "### discharge\n", "Resulting plant discharge, i.e. sum of resulting generator discharge (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:solver_discharge)=\n", "### solver_discharge\n", "Preliminary result for the sum of generator discharge that is returned by the linearized optimization problem (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:sim_discharge)=\n", "### sim_discharge\n", "Simulated plant discharge (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:upflow)=\n", "### upflow\n", "Resulting plant upflow, i.e. sum of resulting pump upflow (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:sim_upflow)=\n", "### sim_upflow\n", "Simulated plant upflow, i.e. sum of resulting pump upflow (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:solver_upflow)=\n", "### solver_upflow\n", "Preliminary result for the sum of pump upflow that is returned by the linearized optimization problem (xUnit: NO_UNIT, yUnit: M3/S)\n", "\n", "\n", "(plant:gross_head)=\n", "### gross_head\n", "Plant gross head, i.e. the difference between upstream reservoir water level and max(plant outlet_line, downstream reservoir water level) (xUnit: NO_UNIT, yUnit: METER)\n", "\n", "\n", "(plant:eff_head)=\n", "### eff_head\n", "Resulting plant effective head. If overall generating, effective plant head is defined as the lowest eff_head of the generators. If overall pumping, effective plant head is defined as the highest eff_head of the pumps. (xUnit: NO_UNIT, yUnit: METER)\n", "\n", "\n", "(plant:head_loss)=\n", "### head_loss\n", "Plant head loss, i.e. the plant gross head minus the lowest effective head of the unit in the plant. If overall generating, plant head loss is positive. If overall pumping, plant head loss is negative. (xUnit: NO_UNIT, yUnit: METER)\n", "\n", "\n", "(plant:min_p_penalty)=\n", "### min_p_penalty\n", "Resulting penalty when the time-dependent maximum production limit for the plant is violated (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:max_p_penalty)=\n", "### max_p_penalty\n", "Resulting penalty when the time-dependent maximum production limit for the plant is violated (xUnit: NO_UNIT, yUnit: MW)\n", "\n", "\n", "(plant:min_q_penalty)=\n", "### min_q_penalty\n", "Resulting penalty when the time-dependent minimum discharge limit for the plant is violated (xUnit: NO_UNIT, yUnit: MM3)\n", "\n", "\n", "(plant:max_q_penalty)=\n", "### max_q_penalty\n", "Resulting penalty when the time-dependent maximum discharge limit for the plant is violated (xUnit: NO_UNIT, yUnit: MM3)\n", "\n", "\n", "(plant:p_constr_penalty)=\n", "### p_constr_penalty\n", "Resulting penalty cost when the time-dependent maximum or minimum production limit for the plant is violated (xUnit: NO_UNIT, yUnit: NOK)\n", "\n", "\n", "(plant:q_constr_penalty)=\n", "### q_constr_penalty\n", "Resulting penalty cost when the time-dependent maximum or minimum discharge limit for the plant is violated (xUnit: NO_UNIT, yUnit: NOK)\n", "\n", "\n", "(plant:schedule_up_penalty)=\n", "### schedule_up_penalty\n", "Resulting penalty when deviating above the plant schedule (xUnit: NO_UNIT, yUnit: NOK)\n", "\n", "\n", "(plant:schedule_down_penalty)=\n", "### schedule_down_penalty\n", "Resulting penalty when deviating below the plant schedule (xUnit: NO_UNIT, yUnit: NOK)\n", "\n", "\n", "(plant:schedule_penalty)=\n", "### schedule_penalty\n", "Resulting penalty cost for violation of the plant schedule (xUnit: NO_UNIT, yUnit: NOK)\n", "\n", "\n", "(plant:max_prod_all)=\n", "### max_prod_all\n", "Maximum plant production if all generators not on maintenance in the plant are producing at maximum. (xUnit: MW, yUnit: MW)\n", "\n", "\n", "(plant:max_prod_available)=\n", "### max_prod_available\n", "Maximum plant production if all generators not on maintenance or committed off in the plant are producing at maximum. (xUnit: MW, yUnit: MW)\n", "\n", "\n", "(plant:max_prod_spinning)=\n", "### max_prod_spinning\n", "Maximum plant production if all the spinning generators in the plant are producing at maximum. (xUnit: MW, yUnit: MW)\n", "\n", "\n", "(plant:min_prod_spinning)=\n", "### min_prod_spinning\n", "Minimum plant production if all the spinning generators in the plant are producing at minimum. (xUnit: MW, yUnit: MW)\n", "\n", "\n", "(plant:best_profit_q)=\n", "### best_profit_q\n", "Plant discharge after changing the production of the plant from the current operating point to a new point in the best profit curve of the plant. Created after the command 'create bp_curves' has been performed (xUnit: MW, yUnit: M3/S)\n", "\n", "\n", "(plant:best_profit_mc)=\n", "### best_profit_mc\n", "Marginal production cost after changing the production of the plant from the current operating point to a new point in the best profit curve of the plant. Created after the command 'create bp_curves' has been performed (xUnit: MW, yUnit: NOK/MW)\n", "\n", "\n", "(plant:best_profit_ac)=\n", "### best_profit_ac\n", "Average production cost after changing the production of the plant from the current operating point to a new point in the best profit curve of the plant. Created after the command 'create bp_curves' has been performed (xUnit: MW, yUnit: NOK/MW)\n", "\n", "\n", "(plant:best_profit_commitment_cost)=\n", "### best_profit_commitment_cost\n", "Sum of startup costs or shutdown costs after changing the production of the plant from the current operating point to a new point in the best profit curve of the plant. Created after the command 'create bp_curves' has been performed (xUnit: MW, yUnit: NOK)\n", "\n", "\n", "(plant:best_profit_bid_matrix)=\n", "### best_profit_bid_matrix\n", "A plant bid matrix created by reducing the best_profit_mc curves when the command 'print bp_bid_matrix' is called. The maximum number of price columns in the bid matrix is set by the attribute bp_bid_matrix_points on the global_settings object. (xUnit: MW, yUnit: NOK/MW)\n", "\n", "\n", "(plant:times_of_wrong_pq_uploading)=\n", "### times_of_wrong_pq_uploading\n", "How many times the unit PQ segments are wrongly uploaded, i.e. the latter segments are fulfilled first. (xUnit: NO_UNIT, yUnit: NO_UNIT)\n", "\n", "\n", "(plant:max_prod_reserve_violation)=\n", "### max_prod_reserve_violation\n", "The violation of the maximum limit for plant production including upward reserve capacity that is created by choosing a plant_max_prod_reserve_strategy. (xUnit: MW, yUnit: MW)\n", "\n", "\n", "(plant:min_prod_reserve_violation)=\n", "### min_prod_reserve_violation\n", "The violation of the minimum limit for plant production including downward reserve capacity that is created by choosing a plant_min_prod_reserve_strategy. (xUnit: MW, yUnit: MW)" ] } ], "metadata": { "jupytext": { "text_representation": { "extension": ".md", "format_name": "myst", "format_version": 0.13, "jupytext_version": "1.13.8" } }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.9" }, "source_map": [ 11, 61, 73 ] }, "nbformat": 4, "nbformat_minor": 5 }