---
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 (xUnit: MW, yUnit: MW)
(needle_combination:p_min)=
### p_min
Static minimum production for the needle combination (xUnit: MW, yUnit: MW)
(needle_combination:p_nom)=
### p_nom
The nominal production that is the rated capacity of the needle combination, only used for droop calculations (xUnit: MW, yUnit: 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. (xUnit: M3/S, yUnit: %)
(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. (xUnit: NO_UNIT, yUnit: 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 (xUnit: NO_UNIT, yUnit: 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 (xUnit: NO_UNIT, yUnit: 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. (xUnit: NO_UNIT, yUnit: 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 (xUnit: NO_UNIT, yUnit: 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 (xUnit: NO_UNIT, yUnit: 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. (xUnit: NO_UNIT, yUnit: 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 (xUnit: NO_UNIT, yUnit: MW)
(needle_combination:production_cost)=
### production_cost
Production cost depending on the production of the needle combination (xUnit: MW, yUnit: NOK/MW)
(needle_combination:min_discharge)=
### min_discharge
Minimum discharge as a function of net head (xUnit: NO_UNIT, yUnit: NO_UNIT)
(needle_combination:max_discharge)=
### max_discharge
Maximum discharge as a function of net head (xUnit: NO_UNIT, yUnit: NO_UNIT)
(needle_combination:original_pq_curves)=
### original_pq_curves
Original PQ-curve for the needle combination that includes non-convex regions (xUnit: M3/S, yUnit: 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. (xUnit: M3/S, yUnit: 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. (xUnit: M3/S, yUnit: MW)
(needle_combination:max_prod)=
### max_prod
The head dependent maximal production of the needle_combination, most accurate in incremental iterations (xUnit: NO_UNIT, yUnit: MW)
(needle_combination:min_prod)=
### min_prod
The head dependent minimal production of the needle_combination, most accurate in incremental iterations (xUnit: NO_UNIT, yUnit: MW)