Modules

class trident_extras.EndValueBendersCuts

Bases: ProblemModule

Name: End value Benders Cuts

Description: End value from Benders Cuts

UUID: 0fb7de37-f876-4fe0-81ce-688742cf84b5

Input time series:

Url

Description

Unit

cut_values/{scenario_num}/{reservoir_id}

Cut values for a reservoir

mu/Mm^3

iteration_count_cuts/{scenario_num}

Number of cuts

count

Input XY time series:

Url

Description

Unit

cut_rhs_values/{scenario_num}

Right hand side for the cut constraints

mu

Output time series:

Url

Description

Unit

alpha_water_values

Alpha objective function contribution

mu

Configuration parameters:

Name

Type

Default

Description

lower_res_volume_cutoff

double

0.200000

Lower limit for reservoir volume. Reservoir with volume less than this is cut off and volume variables are not set up.

__init__(self: EndValueBendersCuts) None
description = 'End value from Benders Cuts'
factory

alias of EndValueBendersCutsFactory

name = 'End value Benders Cuts'
uuid = '0fb7de37-f876-4fe0-81ce-688742cf84b5'
class trident_extras.EndValueEmpsTargetReservoirs

Bases: ProblemModule

Name: End value EMPS target reservoirs

Description: End value from EMPS as aggregated water values. Disaggregated using the target reservoir method.

UUID: c3d8472c-6248-4115-bc21-7924cf40b1b6

Input time series:

Url

Description

Unit

snowfall/{area_id}

Snowfall for an area. Used to decide which snow level to use when applying water values from EMPS.

GWh

Input XY time series:

Url

Description

Unit

snowfall_to_snow_level_mapping/{area_id}

Maps from snow amount (in GWh) to snow_level

x: GWh, y: snow_level

Input NDArrayTS:

Url

Description

Unit

emps_water_values/{area_id}

M is a two dimensional matrix that represent aggregated water values for a whole area. M[sl, l] provides the value of the water for the given snow layer(sl) and reservoir fill layer(l). The dimensions must fulfill snow_layer >= 1 and fill_layer >= 2.

mu/GWh, Dim: snow_layer, fill_layer

Output time series:

Url

Description

Unit

reservoir_regulation_degree/{reservoir_id}

Degree of regulation is computed as max_reservoir_volume / expected_annual_inflow.

years

reservoir_snow_level_index/{reservoir_id}

Snow level index

Index

Output NDArrayTS:

Url

Description

Unit

emps_water_value_layer_sizes/{reservoir_id}

The size of each water value layer.

Mm^3

Configuration parameters:

Name

Type

Default

Description

compute_regulation_degree_from_inflow

bool

False

Decides if the EndValueEmpsTargetReservoirs module should compute reservoir regulation degree from expected inflow or use a value provided by the input logical model.

energy_equivalent_limit

double

0.100000

Lower limit for the absolute value of the energy equivalent - used to ensure numeric stability and LP solve speed. Unit GWh/Mm^3

export_regulation_degree

bool

False

Decides if the EndValueEmpsTargetReservoirs module should export the computed reservoir regulation degree.

export_water_value_layers

bool

False

Set to true if water value layers should be exported.

lower_res_volume_cutoff

double

0.200000

Lower limit for reservoir volume. Reservoir with volume less than this is cut off and volume variables are not set up.

smooth_water_value_layers

bool

False

Smooth water values between depletion and filling seasons when using the EndValueEmpsTargetReservoirs module.

use_unscaled_energy_equivalent_for_end_valuation

bool

False

Set this to true if the end valuation should use the unscaled global energy equivalent regardless of relative head scaling.

__init__(self: EndValueEmpsTargetReservoirs) None
description = 'End value from EMPS as aggregated water values. Disaggregated using the target reservoir method.'
factory

alias of EndValueEmpsTargetReservoirsFactory

name = 'End value EMPS target reservoirs'
uuid = 'c3d8472c-6248-4115-bc21-7924cf40b1b6'
class trident_extras.EndValueEmpsWaterValue

Bases: ProblemModule

Name: End value EMPS water value

Description: End value from EMPS as aggregated water values.

UUID: 7b050e9c-cefe-4ea0-9bce-421e556f390e

Input time series:

Url

Description

Unit

snowfall/{area_id}

Snowfall for an area. Used to decide which snow level to use when applying water values from EMPS.

GWh

Input XY time series:

Url

Description

Unit

snowfall_to_snow_level_mapping/{area_id}

Maps from snow amount (in GWh) to snow_level

x: GWh, y: snow_level

Input NDArrayTS:

Url

Description

Unit

emps_water_values/{area_id}

M is a two dimensional matrix that represent aggregated water values for a whole area. M[sl, l] provides the value of the water for the given snow layer(sl) and reservoir fill layer(l). The dimensions must fulfill snow_layer >= 1 and fill_layer >= 2.

mu/GWh, Dim: snow_layer, fill_layer

Output time series:

Url

Description

Unit

reservoir_snow_level_index/{reservoir_id}

Snow level index

Index

Configuration parameters:

Name

Type

Default

Description

energy_equivalent_limit

double

0.100000

Lower limit for the absolute value of the energy equivalent - used to ensure numeric stability and LP solve speed. Unit GWh/Mm^3

export_water_value_layers

bool

False

Set to true if water value layers should be exported.

lower_res_volume_cutoff

double

0.200000

Lower limit for reservoir volume. Reservoir with volume less than this is cut off and volume variables are not set up.

use_unscaled_energy_equivalent_for_end_valuation

bool

False

Set this to true if the end valuation should use the unscaled global energy equivalent regardless of relative head scaling.

__init__(self: EndValueEmpsWaterValue) None
description = 'End value from EMPS as aggregated water values.'
factory

alias of EndValueEmpsWaterValueFactory

name = 'End value EMPS water value'
uuid = '7b050e9c-cefe-4ea0-9bce-421e556f390e'
class trident_extras.EndValueSimple

Bases: ProblemModule

Name: End Value SIMPLE

Description: End values from energy equivalent and mock

UUID: ddfdce1a-395e-4c8c-9fd2-885869b47e46

__init__(self: EndValueSimple) None
description = 'End values from energy equivalent and mock'
factory

alias of EndValueSimpleFactory

name = 'End Value SIMPLE'
uuid = 'ddfdce1a-395e-4c8c-9fd2-885869b47e46'
class trident_extras.HydroModule

Bases: ProblemModule

Name: Hydro

Description: Models hydro units

UUID: e60638e9-2b8c-4b2e-a7d2-62f03c2d72ad

Input time series:

Url

Description

Unit

Default value

global_reservoir_absolute_max_volume_penalty

The cost of not meeting the absolute maximum volume requirement. Will be scaled by the reservoir’s energy equivalent [GWh/Mm^3] and time step length [h].

mu/(GWh^2)

1000

global_reservoir_bypass_penalty

Penalty value for bypass violations

mu/Mm^3

0.01

global_reservoir_max_bypass

Maximum allowed bypass for a given reservoir

m^3/s

global_reservoir_max_discharge

Default max allowed discharge for reservoirs

m^3/s

global_reservoir_min_bypass

Minimum allowed bypass for a given reservoir

m^3/s

global_reservoir_min_bypass_penalty

Penalty value for minimum bypass violations

mu/Mm^3

-500

global_reservoir_min_discharge

Default minimum allowed discharge for reservoirs

m^3/s

global_reservoir_min_discharge_penalty

Penalty value for minimum discharge violations

mu/Mm^3

70

global_reservoir_min_volume

Minimum allowed volume for a given reservoir

Mm^3

global_reservoir_min_volume_penalty

The cost of not meeting the minimum volume requirement. Will be scaled by the reservoir’s energy equivalent [GWh/Mm^3] and time step length [h].

mu/(GWh*h)

-500

global_reservoir_soft_max_volume_penalty

The cost of not meeting the soft maximum volume requirement. Will be scaled by the reservoir’s energy equivalent [GWh/Mm^3] and time step length [h].

mu/(GWh*h)

10

global_reservoir_spillage_penalty

Penalty value for spillage violations

mu/Mm^3

0.02

global_reservoir_target_penalty

The cost of not meeting the target requirement. Will be scaled by the reservoir’s energy equivalent [GWh/Mm^3] and time step length [h].

mu/(GWh^2)

70

hydro_plant_min_production/{hydro_plant_id}

Percentage of the maximum production that is this plants minimum production.

percentage

hydro_plant_startup_cost/{hydro_plant_id}

Cost of starting up the hydro plant

mu/startup

inflow/{inflow_name}

Normalized inflow data

m^3/s (normalized)

reservoir_absolute_max_volume_penalty/{reservoir_id}

The cost of not meeting the absolute maximum volume requirement. Will be scaled by the reservoir’s energy equivalent [GWh/Mm^3] and time step length [h].

mu/(GWh^2)

reservoir_max_bypass/{reservoir_id}

Maximum allowed bypass for a given reservoir

m^3/s

reservoir_max_discharge/{reservoir_id}

Max allowed discharge for a given reservoir

m^3/s

reservoir_max_tunnel/{upstream_node_id}/{downstream_node_id}

Maximum allowed flow for a waterway tunnel

Mm^3

reservoir_max_volume/{reservoir_id}

Maximum allowed volume for a given reservoir

Mm^3

reservoir_min_bypass/{reservoir_id}

Minimum allowed bypass for a given reservoir

m^3/s

reservoir_min_discharge/{reservoir_id}

Minimum allowed discharge for a given reservoir

m^3/s

reservoir_min_volume/{reservoir_id}

Minimum allowed volume for a given reservoir

Mm^3

reservoir_soft_max_volume_penalty/{reservoir_id}

The cost of not meeting the soft maximum volume requirement. Will be scaled by the reservoir’s energy equivalent [GWh/Mm^3] and time step length [h].

mu/(GWh*h)

reservoir_volume_target/{reservoir_id}

The volume target of a reservoir as a percentage of max volume

%

Input XY time series:

Url

Description

Unit

pq_curve/{hydro_plant_id}

PQ curves for a hydro plant

x: Mm^3, y: MW

Input XY curves:

Url

Description

Unit

discharge_head_curve/{hydro_plant_id}

The curve describes the dependency between maximum discharge and head for a given hydro power plant.

x: m, y: m^3/s

reservoir_curve/{reservoir_id}

MASL of water level as a function of volume

x: Mm^3, y: m

Output time series:

Url

Description

Unit

aggregated_reservoir_energy/{area_id}

Aggregated reservoir energy in an area

GWh

aggregated_reservoir_volume/{area_id}

Aggregated reservoir volume in an area

GWh

energy_equivalent/{obj_id}

The energy equivalent of the object. May be reservoir, junction or pump.

GWh/Mm^3

hydro_plant_production/{hydro_plant_id}

The amount of energy produced by the hydro plant

GW

hydro_plant_production_error/{hydro_plant_id}

The difference in energy produced by the hydro plant using the correct order of PQ segments and the order used in the simulation.

GW

hydro_plant_state/{hydro_plant_id}

On state of the power plant

On/Off

hydro_reserve_downward_production/{hydro_plant_id}

Delivered hydro downward reserve production for each power plant

GW

hydro_reserve_upward_production/{hydro_plant_id}

Delivered upward hydro reserve production for each power plant

GW

pq_segment_discharge/{hydro_plant_id}/{segment_id}

Discharge in a PQ segment

m^3/s

pq_segment_efficiency/{hydro_plant_id}/{segment_id}

Efficiency in a PQ segment

m^3/s

pq_segment_max_discharge/{hydro_plant_id}/{segment_id}

Max allowed discharge in a PQ segment

m^3/s

pump_flow_coeff/{pump_id}

The amount of water the pump has pumped

Mm^3

pump_power_consumption/{pump_id}

Power consumption of pump

GW

regulated_inflow_coeff/{reservoir_id}

Coefficient for regulated inflow data per reservoir

Mm^3

reservoir_bypass/{reservoir_id}

The amount of bypass flow from the reservoir

m^3/s

reservoir_discharge/{reservoir_id}

The amount of discharge from the reservoir

m^3/s

reservoir_min_bypass_violation/{reservoir_id}

Violation of minimum bypass constraint

Mm^3

reservoir_min_discharge_violation/{reservoir_id}

Violation of minimum discharge constraint

Mm^3

reservoir_min_volume_violation/{reservoir_id}

Violation of minimum volume constraint

Mm^3

reservoir_release/{reservoir_id}

Discharge from reservoir

m^3/s

reservoir_spillage/{reservoir_id}

The amount of spillage flow from the reservoir

m^3/s

reservoir_target_violation/{reservoir_id}

Violation of minimum target constraint

Mm^3

reservoir_volume/{reservoir_id}

The amount of water in the reservoir

Mm^3

shadow_price_inflow_balance/{reservoir_id}

The dual value of the inflow balance

mu/Mm^3

shadow_price_min_bypass_violation/{reservoir_id}

The dual value of the minimum bypass constraint

mu/Mm^3

shadow_price_min_discharge_violation/{reservoir_id}

The dual value of the minimum discharge constraint

mu/Mm^3

shadow_price_min_flow_violation/{reservoir_id}

The dual value of the minimum flow constraint

mu/Mm^3

shadow_price_min_volume_violation/{reservoir_id}

The dual value of the minimum volume constraint

mu/Mm^3

shadow_price_reservoir_balance/{reservoir_id}

The dual value of the reservoir balance

mu/Mm^3

tunnel/{reservoir_id}/{downstream_node_id}

The amount of tunnel flow from the reservoir

m^3/s

unregulated_inflow_coeff/{hydro_plant_id}

Coefficient for unregulated inflow data per hydro plant

Mm^3

waterway_flow/{waterway_id}

The amount of flow in a waterway

m^3/s

Output XY time series:

Url

Description

Unit

concave_pq_curve/{hydro_plant_id}

Concave version of PQ Curve

x: Mm^3, y: MW

Output XY curves:

Url

Description

Unit

concave_discharge_head_curve/{hydro_plant_id}

Concave version of the discharge_head_curve.

x: m, y: m^3/s

concave_reservoir_curve/{reservoir_id}

Cncave version of reservoir_curve

x: Mm^3, y: m

Configuration parameters:

Name

Type

Default

Description

allow_negative_prices

bool

False

Set this to true if you use negative prices.

combine_pq_segments_for_all_plants_if_wrong_order

bool

False

If true, the model combines all segments for all plants if any is in the wrong order. WARNING: May adversely affect both result quality and simulation time should a few plants have incorrectly set up PQ segments. Please ensure that segments have segment slopes in a strictly decending order and that no consecutive segments have the same slope.

cutoff_small_unreg_inflows

bool

False

If true, the model will disregard (or set to 0) all unregulated inflow under the limit.

energy_equivalent_limit

double

0.100000

Lower limit for the absolute value of the energy equivalent - used to ensure numeric stability and LP solve speed. Unit GWh/Mm^3

export_inflow_coefficients

bool

False

Debug setting to export inflow coefficients in the result store.

export_relative_head_scaling

bool

False

Debug setting to export relative head scaling values in the result store.

lower_res_volume_cutoff

double

0.200000

Lower limit for reservoir volume. Reservoir with volume less than this is cut off and volume variables are not set up.

redistribute_small_unregulated_inflows

bool

False

Enable to redistribute unregulated inflow coefficient below the limit to the nearest above reservoir.

refine_if_pq_segments_in_wrong_order

bool

False

If true, the model undergoes refinement when pq segments are in the wrong order.

reservoir_balance_rhs_limit

double

0.000000

Lower absolute limit for the reservoir balance right-hand-side before setting to 0.0.

small_unregulated_inflow_limit

double

0.010000

Limit for what is considered a negligible unregulated inflow for purposes of moving or discarding unregulated inflow.

use_relative_head

bool

False

Use relative head

use_volume_discharge_constraints_for_decision_problem

bool

False

Sets to use the full set of constraints when using volume dependend discharge limitations for hydro plants. False means initial volume sets the discharge limit for the whole problem.

validate_pump_efficiencies

bool

True

If true, validation of pumps will return errors if any discrepancies are detected. If false, only warnings are returned.

validate_watercourse_cycles

bool

True

If true, validation of waterways will return errors if any discrepancies are detected. If false, only warnings are returned.

__init__(self: HydroModule) None
description = 'Models hydro units'
factory

alias of HydroModuleFactory

name = 'Hydro'
uuid = 'e60638e9-2b8c-4b2e-a7d2-62f03c2d72ad'
class trident_extras.ModuleHydroRelaxation

Bases: ProblemModule

Name: HydroRelaxation

Description: Hydro balance relaxation

UUID: 0488c655-1d63-4f95-b729-26201b9d0648

Configuration parameters:

Name

Type

Default

Description

cutoff_small_unreg_inflows

bool

False

If true, the model will disregard (or set to 0) all unregulated inflow under the limit.

enable_reservoir_relaxation

bool

False

Enables reservoir relaxation functionality.

relaxation_reservoir_ids

List

[]

List of ids of reservoirs which will always be relaxed. They can not be target reservoirs. Empty list means all above limit.

relaxation_volume_limit

double

-1.000000

<Insert documentation>

small_unregulated_inflow_limit

double

0.010000

Limit for what is considered a negligible unregulated inflow for purposes of moving or discarding unregulated inflow.

__init__(self: ModuleHydroRelaxation) None
description = 'Hydro balance relaxation'
factory

alias of ModuleHydroRelaxationFactory

name = 'HydroRelaxation'
uuid = '0488c655-1d63-4f95-b729-26201b9d0648'
class trident_extras.ModuleOptimModel

Bases: ProblemModule

Name: ModuleOptimModel

Description: Solver time optimizations for Trident model

UUID: 04c0bb22-ed6b-453f-84c2-45dda4b05e55

Configuration parameters:

Name

Type

Default

Description

enable_ramping_on_cables

bool

False

Model ramping on transmission cables

model_startup_costs

bool

False

Model start up costs for thermal plants

use_relative_head

bool

False

Use relative head

__init__(self: ModuleOptimModel) None
description = 'Solver time optimizations for Trident model'
factory

alias of ModuleOptimModelFactory

name = 'ModuleOptimModel'
uuid = '04c0bb22-ed6b-453f-84c2-45dda4b05e55'
class trident_extras.ModuleReserve

Bases: ProblemModule

Name: Reserve

Description: Models reserve units

UUID: dcb788fb-53c3-4617-8563-11ceff560bba

Input time series:

Url

Description

Unit

hydro_reserve_min_production_level/{hydro_plant_id}

Minimum production level for each hydro power plant in expressed per unit, i.e. in [0,1]

GW

reserve_downward_requirement/{area_id}

Downward hydro reserve requirement per area

GW

reserve_upward_requirement/{area_id}

Upward hydro reserve requirement per area

GW

reserve_upward_requirement/{area_id}

Upward hydro reserve requirement per area

GW

reserve_violation_cost/{area_id}

Penalty for violating area wide reserve constraint

mu/GWh

thermal_plant_capacity/{thermal_plant_id}

Max production for a thermal plant

GW

thermal_plant_min_production/{thermal_plant_id}

Minimum production for a thermal plant

GW

thermal_reserve_min_production_level/{thermal_plant_id}

Minimum production level for each power plant in expressed per unit, i.e. in [0,1]

GW

Output time series:

Url

Description

Unit

hydro_reserve_downward_production/{hydro_plant_id}

Delivered hydro downward reserve production for each power plant

GW

hydro_reserve_upward_production/{hydro_plant_id}

Delivered upward hydro reserve production for each power plant

GW

shadow_price_reserve_downward_production/{area_id}

Shadow price of delivered downward reserve production for each power plant

mu/GW

shadow_price_reserve_upward_production/{area_id}

Shadow price of delivered upward reserve production for each power plant

mu/GW

thermal_reserve_downward_production/{thermal_plant_id}

Delivered thermal downward reserve production for each power plant

GW

thermal_reserve_upward_production/{thermal_plant_id}

Delivered upward thermal reserve production for each power plant

GW

Configuration parameters:

Name

Type

Default

Description

model_startup_costs

bool

False

Model start up costs for thermal plants

use_relative_head

bool

False

Use relative head

__init__(self: ModuleReserve) None
description = 'Models reserve units'
factory

alias of ModuleReserveFactory

name = 'Reserve'
uuid = 'dcb788fb-53c3-4617-8563-11ceff560bba'