---
jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
jupytext_version: 1.13.8
kernelspec:
display_name: 'Python 3'
name: python3
---
(needle_combination)=
# needle_combination
A needle combination or isolated production zone of a generator with separate turbine efficiency curves. Can be used to model pelton turbines and other turbines with forbidden production zones
| | |
|---|---|
|Input connections|{ref}`generator`, {ref}`needle_comb_reserve_capability`|
|Output connections|{ref}`generator`, {ref}`needle_comb_reserve_capability`|
|License|SHOP_PELTON|
|Release version|13.0.0.a|
```{contents}
:local:
:depth: 1
```
## Introduction
The needle_combination object in SHOP is used to model both Pelton turbines and [generators](generator) with forbidden production and/or discharge zones. The SHOP_PELTON license is required to use the needle_combination object.
## Pelton turbines
When modelling a Pelton unit, the needle_combination represents the production and discharge characteristics of the unit when a specific combination of needles is controlling the flow of water through the nozzle. The attributes [p_min](needle_combination:p_min), [p_max](needle_combination:p_max), [p_nom](needle_combination:p_nom), and [turb_eff_curves](needle_combination:turb_eff_curves) are specified on the needle_combination object to describe its operating range and efficiency. Defining multiple needle_combinations and then connecting them to a generator object will enable SHOP to choose which of the needle_combinations (if any) should be used to generate power in each hour.
## Turbine with forbidden operating regions
Other turbine types, such as Francis turbines, is usually modelled as having a continuous operating range between [p_min](generator:p_min) and [p_max](generator:p_max) in SHOP. However, some turbines may experience vibration or other unwanted behaviour when discharging water or producing power in a region within its operating range. These forbidden production and/or discharge regions can be modelled by using the needle_combination object. Having needle_combinations without overlap in production and/or discharge ranges will force SHOP to not operate in the forbidden region(s). This is shown in more detail in [this example](pelton).
## MIP
Running SHOP without binary variables can lead to fractional commitment of generators and production below p_min. This problem can be more pronounced for generators modelled with needle_combinations, since it will be possible to fractionally operate on more than one needle_combination at the same time. The only way to ensure that this problem does not occur is to have an active [mip_flag](plant:mip_flag), which will force the optimization to pick only one needle_combination to operate on. Especially Pelton units delivering [reserves](reserves) may be "tempted" to operate a little bit on several needle_combinations to more easily deliver reserve capacity.
## Input and output
Most of the results for generators modelled with the use of needle_combinations are still found on the generator object, such as [production](generator:production) and [discharge](generator:discharge). A few output attributes are still saved on the needle_combination object, which can be seen in the attribute table below. The same is true for the input attributes: all input generator attributes are still used for Pelton turbines, except for p_min, p_max, p_nom, and turb_eff_curves on the needle_combination object. Some attributes exist on both the generator and needle_combination, such as [p_fcr_min (generator)](generator:p_fcr_min) and [p_fcr_min (needle_combination)](needle_combination:p_fcr_min). In these cases the needle_combination attribute is preferred over the generator attribute, but the generator attribute is still used if it is not present on the needle_combination.
## Examples
- [](pelton)
## Attributes
```{code-cell} ipython3
:tags: ['remove-input', 'full-width']
from IPython.core.display import HTML
HTML("""
""")
```
(needle_combination:p_max)=
### p_max
Static maximum production for the needle combination. Unit: MW.
(needle_combination:p_min)=
### p_min
Static minimum production for the needle combination. Unit: MW.
(needle_combination:p_nom)=
### p_nom
The nominal production that is the rated capacity of the needle combination, only used for droop calculations. Unit: MW.
(needle_combination:turb_eff_curves)=
### turb_eff_curves
The turbine efficiency curve(s) as a function of discharge through the turbine for this needle_combination. Several curves can be specified for different head levels (reference value in the XY) to make the efficiency head-dependent. Units: x: M3/S and y: %.
(needle_combination:p_fcr_min)=
### p_fcr_min
Temporary minimum production allowed for the needle combination when delivering FCR. If this is not set, any p_fcr_min attribute defined on the generator object will be used instead. Note that the p_fcr_n_min and p_fcr_d_min attributes on the needle_combination will take precedence over this attribute if both are specified. Unit (y): MW.
(needle_combination:p_fcr_n_min)=
### p_fcr_n_min
Temporary minimum production allowed for the needle combination when delivering FCR-N. If this attribute is not specified, the p_fcr_min attribute on the needle_combination object will be used instead. Unit (y): MW.
(needle_combination:p_fcr_d_min)=
### p_fcr_d_min
Temporary minimum production allowed for the needle combination when delivering FCR-D. If this attribute is not specified, the p_fcr_min attribute on the needle_combination object will be used instead. Unit (y): MW.
(needle_combination:p_fcr_max)=
### p_fcr_max
Temporary maximum production allowed for the needle combination when delivering FCR. If this is not set, any p_fcr_max attribute defined on the generator object will be used instead. Note that the p_fcr_n_max and p_fcr_d_max attributes on the needle_combination will take precedence over this attribute if both are specified. Unit (y): MW.
(needle_combination:p_fcr_n_max)=
### p_fcr_n_max
Temporary maximum production allowed for the needle combination when delivering FCR-N. If this attribute is not specified, the p_fcr_max attribute on the needle_combination object will be used instead. Unit (y): MW.
(needle_combination:p_fcr_d_max)=
### p_fcr_d_max
Temporary maximum production allowed for the needle combination when delivering FCR-D. If this attribute is not specified, the p_fcr_max attribute on the needle_combination object will be used instead. Unit (y): MW.
(needle_combination:p_frr_min)=
### p_frr_min
Minimum production allowed for the needle combination when delivering FRR. If not specified, the head-dependent minimum production for the needle combination is used as lower bound for downward FRR. Unit (y): MW.
(needle_combination:p_frr_max)=
### p_frr_max
Maximum production allowed for the needle combination when delivering FRR. If not specified, the head-dependent maximum production for the needle combination is used as upper bound for upward FRR. Unit (y): MW.
(needle_combination:production_cost)=
### production_cost
Production cost depending on the production of the needle combination. Units: x: MW and y: NOK/MW.
(needle_combination:min_discharge)=
### min_discharge
Minimum discharge as a function of net head. Units: x: NO_UNIT and y: NO_UNIT.
(needle_combination:max_discharge)=
### max_discharge
Maximum discharge as a function of net head. Units: x: NO_UNIT and y: NO_UNIT.
(needle_combination:original_pq_curves)=
### original_pq_curves
Original PQ-curve for the needle combination that includes non-convex regions. Units: x: M3/S and y: MW.
(needle_combination:convex_pq_curves)=
### convex_pq_curves
Convexified PQ-curve for the needle combination that includes all the time-dependent operating limits and remove all the nonconcave points of the original PQ curve. The slope of each segment is non-increasing. Units: x: M3/S and y: MW.
(needle_combination:final_pq_curves)=
### final_pq_curves
Final PQ curve for the needle combination that is the final form included into the MILP optimization problem. The first point of the convex PQ curve is extended to Q=0. Units: x: M3/S and y: MW.
(needle_combination:max_prod)=
### max_prod
The head dependent maximal production of the needle_combination, most accurate in incremental iterations. Unit (y): MW.
(needle_combination:min_prod)=
### min_prod
The head dependent minimal production of the needle_combination, most accurate in incremental iterations. Unit (y): MW.
(needle_combination:solver_committed_fraction)=
### solver_committed_fraction
The value of the (relaxed) binary variable uesed to model the on/off status of the needle combination in full iterations. The value could be a fractional number between 0 (off) and 1 (on) if the unit commitment constraints are relaxed (mip_flag turned off). Unit (y): NO_UNIT.