Trough Dispatch

class hopp.simulation.technologies.dispatch.power_sources.trough_dispatch.TroughDispatch(pyomo_model: ConcreteModel, indexed_set: Set, system_model: None, financial_model: Singleowner | CustomFinancialModel, block_set_name: str = 'trough')

Bases: CspDispatch

trough_obj: Expression | float
_system_model: None
_financial_model: Singleowner | CustomFinancialModel

Dispatch optimization model for CSP trough systems.

__init__(pyomo_model: ConcreteModel, indexed_set: Set, system_model: None, financial_model: Singleowner | CustomFinancialModel, block_set_name: str = 'trough')

Initialize TroughDispatch.

Parameters:
  • pyomo_model (ConcreteModel) – Pyomo concrete model.

  • indexed_set (Set) – Indexed set.

  • system_model (None) – System model.

  • financial_model (FinancialModelType) – Financial model.

  • block_set_name (str) – Name of the block set.

update_initial_conditions()

Update initial conditions method.

max_gross_profit_objective(hybrid_blocks)

Trough CSP instance of maximum gross profit objective.

Parameters:

hybrid_blocks (Pyomo.block) – A generalized container for defining hierarchical models by adding modeling components as attributes.

min_operating_cost_objective(hybrid_blocks)

Trough CSP instance of minimum operating cost objective.

Parameters:

hybrid_blocks (Pyomo.block) – A generalized container for defining hierarchical models by adding modeling components as attributes.

_create_variables(hybrid)

Create Trough CSP variables to add to hybrid plant instance.

Parameters:

hybrid – Hybrid plant instance.

Returns:

Tuple containing created variables.
  • generation: Generation from given technology.

  • load: Load from given technology.

Return type:

tuple

static _check_efficiency_value(efficiency)

Checks efficiency is between 0 and 1 or 0 and 100. Returns fractional value

static _create_csp_port(csp)

Create pyomo ports related to CSP instance.

Parameters:

csp – CSP instance.

static _create_cycle_constraints(csp)

Create constraints related to the power cycle.

Parameters:

csp – CSP instance.

_create_cycle_linking_constraints()

Create constraints for linking cycle.

static _create_cycle_parameters(csp)

Create parameters related to the power cycle.

Parameters:

csp – CSP instance.

static _create_cycle_variables(csp)

Create variables related to the power cycle.

Parameters:

csp – CSP instance.

_create_linking_constraints()

Create linking constraints for storage, receiver and cycle.

_create_port(hybrid)

Create CSP trough port to add to hybrid plant instance.

Parameters:

hybrid – Hybrid plant instance.

Returns:

CSP Trough Port object.

Return type:

Port

static _create_receiver_constraints(csp)

Create constraints related to the receiver.

Parameters:

csp – CSP instance.

_create_receiver_linking_constraints()

Create constraints for linking receiver.

static _create_receiver_parameters(csp)

Create parameters related to CSP receiver.

Parameters:

csp – CSP instance.

static _create_receiver_variables(csp)

Create variables related to the receiver.

Parameters:

csp – CSP instance.

static _create_storage_constraints(csp)

Create constraints related to thermal energy storage.

Parameters:

csp – CSP instance.

_create_storage_linking_constraints()

Create constraints for linking storage.

static _create_storage_parameters(csp)

Create parameters related to thermal energy storage.

Parameters:

csp – CSP instance.

static _create_storage_variables(csp)

Create variables related to thermal energy storage.

Parameters:

csp – CSP instance.

property allowable_cycle_startup_power: float

Allowable power per period for cycle start-up [MWt]

property allowable_receiver_startup_power: float

Allowable power per period for receiver start-up [MWt]

property available_thermal_generation: list

Available solar thermal generation from the csp field [MWt]

property blocks: Block
property condenser_losses: list

Normalized condenser parasitic losses [-]

property cost_per_change_thermal_input: float

Penalty for change in power cycle thermal input [$/MWt]

property cost_per_cycle_generation: float

Generation cost for power cycle [$/MWhe]

property cost_per_cycle_start: float

Penalty for power cycle start [$/start]

property cost_per_field_generation: float

Generation cost for the csp field [$/MWht]

property cost_per_field_start: float

Penalty for field start-up [$/start]

property cycle_ambient_efficiency_correction: list

Cycle efficiency ambient temperature adjustment factor [-]

property cycle_generation: list

Power cycle electricity generation [MWe]

property cycle_nominal_efficiency: float

Power cycle nominal efficiency [-]

property cycle_performance_slope: float

Slope of linear approximation of power cycle performance curve [MWe/MWt]

property cycle_pumping_losses: float

Cycle heat transfer fluid pumping power per unit energy expended [MWe/MWt]

property cycle_required_startup_energy: float

Required energy expended to start cycle [MWht]

property cycle_startup_inventory: list

Cycle start-up energy inventory [MWht]

property cycle_thermal_power: list

Cycle thermal power utilization [MWt]

property cycle_thermal_ramp: list

Power cycle positive change in thermal energy input [MWt]

dispatch_block_rule(csp)

Called during Dispatch’s __init__. Define dispatch block rules.

Parameters:

csp – CSP instance.

property field_startup_losses: float

Solar field startup or shutdown parasitic loss [MWhe]

property field_track_losses: float

Solar field tracking parasitic loss [MWe]

static get_start_datetime_by_hour(start_time: int)

Get the datetime object corresponding to the start time of year in hours.

Parameters:

start_time (int) – Start time of the simulation in hours.

Returns:

Datetime object corresponding to the start time.

Return type:

datetime.datetime

Notes

This method calculates the datetime object corresponding to the start time in hours relative to the beginning of the year.

static get_start_end_datetime(start_time: int, n_horizon: int)

Get start and end datetimes based on simulation start time and horizon length.

Parameters:
  • start_time (int) – Start time of the simulation in hours.

  • n_horizon (int) – Length of the simulation horizon in hours.

Returns:

A tuple containing the start and end datetime objects.

Return type:

tuple

Notes

This method calculates the start and end datetimes based on the provided start time and horizon length, assuming hourly data.

property incur_cycle_start: list

1 if cycle start-up penalty is incurred; 0 Otherwise [-]

property incur_field_start: list

1 if solar field start-up penalty is incurred; 0 Otherwise [-]

property initial_cycle_startup_inventory: float

Initial cycle start-up energy inventory at beginning of the horizon [MWht]

property initial_cycle_thermal_power: float

Initial cycle thermal power at beginning of the horizon [MWt]

property initial_receiver_startup_inventory: float

Initial receiver start-up energy inventory at beginning of the horizon [MWht]

property initial_thermal_energy_storage: float

Initial thermal energy storage reserve quantity at beginning of the horizon [MWht]

initialize_parameters()

Initialize parameters for the CSP model.

static interpret_user_defined_cycle_data(ud_ind_od)

Interpret user-defined cycle data.

Parameters:

ud_ind_od (list) – User-defined cycle data.

Returns:

Dictionary containing interpreted data with keys:
  • ’nT’: Number of temperature points

  • ’Tpts’: Ambient temperature points

  • ’Tlevels’: Levels of temperature

  • ’nm’: Number of mass flow rate points

  • ’mpts’: Mass flow rate points

  • ’mlevels’: Levels of mass flow rate

  • ’nTamb’: Number of ambient temperature points

  • ’Tambpts’: Ambient temperature points

  • ’Tamblevels’: Levels of ambient temperature

Return type:

dict

Notes

This method interprets user-defined cycle data and organizes it into a dictionary containing relevant information about temperature points, mass flow rate points, and ambient temperature points.

property is_cycle_generating: list

1 if cycle is generating electric power; 0 Otherwise [-]

property is_cycle_generating_initial: bool

True (1) if cycle is generating electric power at beginning of the horizon; False (0) Otherwise [-]

property is_cycle_starting: list

1 if cycle is starting up; 0 Otherwise [-]

property is_cycle_starting_initial: bool

True (1) if cycle is starting up at beginning of the horizon; False (0) Otherwise [-]

property is_field_generating: list

1 if solar field is generating ‘usable’ thermal power; 0 Otherwise [-]

property is_field_generating_initial: bool

True (1) if solar field is generating ‘usable’ thermal power at beginning of the horizon; False (0) Otherwise [-]

property is_field_starting: list

1 if solar field is starting up; 0 Otherwise [-]

property is_field_starting_initial: bool

True (1) if solar field is starting up at beginning of the horizon; False (0) Otherwise [-]

property maximum_cycle_power: float

Maximum cycle electric power output [MWe]

property maximum_cycle_thermal_power: float

Maximum operational thermal power delivered to the power cycle [MWt]

property min_receiver_start_time: float

Minimum time to start the receiver [hr]

property minimum_cycle_thermal_power: float

Minimum operational thermal power delivered to the power cycle [MWt]

property minimum_receiver_power: float

Minimum operational thermal power delivered by receiver [MWht]

property model: ConcreteModel
property receiver_pumping_losses: float

Solar field and/or receiver pumping power per unit power produced [MWe/MWt]

property receiver_required_startup_energy: float

Required energy expended to start receiver [MWht]

property receiver_startup_consumption: list

Receiver start-up power consumption [MWt]

property receiver_startup_fraction: list

Estimated fraction of time period required for receiver start-up [-]

property receiver_startup_inventory: list

Receiver start-up energy inventory [MWht]

property receiver_thermal_power: list

Thermal power delivered by the receiver [MWt]

static seconds_since_newyear(dt)

Get the number of seconds elapsed since the beginning of the year.

Parameters:

dt (datetime.datetime) – Datetime object.

Returns:

Number of seconds elapsed since the beginning of the year.

Return type:

int

Notes

This method calculates the number of seconds elapsed since the beginning of the year, using a non-leap year (2009) for consistency with a multiple of 8760 hours assumption.

set_ambient_temperature_cycle_parameters(dry_bulb_temperature)

Set ambient temperature dependent cycle performance parameters.

Parameters:

dry_bulb_temperature (float or list) – Ambient dry bulb temperature(s) [°C].

Returns:

None

Notes

This method sets up ambient temperature dependent cycle performance parameters such as cycle efficiency corrections and condenser losses based on the provided dry bulb temperature(s).

set_cycle_ambient_corrections(Tdb, Tpts, etapts, wcondfpts)

Set cycle ambient corrections based on ambient temperature.

Parameters:
  • Tdb (float or list) – Ambient temperature(s) for each dispatch time step [°C].

  • Tpts (list) – Ambient temperature points with tabulated values [°C].

  • etapts (list) – Efficiency values corresponding to each Tpts.

  • wcondfpts (list) – Fraction of cycle design gross output consumed by cooling corresponding to each Tpts.

Returns:

None

Notes

This method calculates cycle ambient efficiency correction and condenser losses based on the provided ambient temperature(s) and tabulated values. The corrections are set for each dispatch time step.

set_linearized_cycle_part_load_params(norm_heat_pts, efficiency_pts)

Set linearized part-load parameters for the power cycle.

Parameters:
  • norm_heat_pts (list) – Normalized heat points for the power cycle.

  • efficiency_pts (list) – Efficiency points for the power cycle.

set_part_load_cycle_parameters()

Set parameters in dispatch model for off-design cycle performance.

set_receiver_require_startup_time_fraction(field_gen: list)

Estimates the fraction of time period required for receiver start-up.

Parameters:

field_gen (list) – Field generation profile.

Notes

This method estimates the fraction of time period required for the receiver start-up based on the field generation profile.

property storage_capacity: float

Thermal energy storage capacity [MWht]

property system_load: list

Net generation of csp system [MWe]

property thermal_energy_storage: list

Thermal energy storage reserve quantity [MWht]

property time_duration: list

Dispatch horizon time steps [hour]

update_time_series_parameters(start_time: int)

Sets up SSC simulation to get time series performance parameters after simulation.

Parameters:

start_time (int) – Hour of the year starting dispatch horizon.