CSP Dispatch

class hopp.simulation.technologies.dispatch.power_sources.csp_dispatch.CspDispatch(pyomo_model: ConcreteModel, index_set: Set, system_model, financial_model, block_set_name: str = 'csp')

Bases: Dispatch

Dispatch model for Concentrating Solar Power (CSP) with thermal energy storage.

__init__(pyomo_model: ConcreteModel, index_set: Set, system_model, financial_model, block_set_name: str = 'csp')

Initialize a CSP dispatch model.

Parameters:
  • pyomo_model (pyomo.ConcreteModel) – Pyomo model instance.

  • index_set (pyomo.Set) – Index set for the model.

  • system_model – System model.

  • financial_model – Financial model.

  • block_set_name (str, optional) – Name of the block. Defaults to ‘csp’.

dispatch_block_rule(csp)

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

Parameters:

csp – CSP instance.

static _create_storage_parameters(csp)

Create parameters related to thermal energy storage.

Parameters:

csp – CSP instance.

static _create_receiver_parameters(csp)

Create parameters related to CSP receiver.

Parameters:

csp – CSP instance.

static _create_cycle_parameters(csp)

Create parameters related to the power cycle.

Parameters:

csp – CSP instance.

static _create_storage_variables(csp)

Create variables related to thermal energy storage.

Parameters:

csp – CSP instance.

static _create_receiver_variables(csp)

Create variables related to the receiver.

Parameters:

csp – CSP instance.

static _create_cycle_variables(csp)

Create variables related to the power cycle.

Parameters:

csp – CSP instance.

static _create_storage_constraints(csp)

Create constraints related to thermal energy storage.

Parameters:

csp – CSP instance.

static _create_receiver_constraints(csp)

Create constraints related to the receiver.

Parameters:

csp – CSP instance.

static _create_cycle_constraints(csp)

Create constraints related to the power cycle.

Parameters:

csp – CSP instance.

static _create_csp_port(csp)

Create pyomo ports related to CSP instance.

Parameters:

csp – CSP instance.

_create_linking_constraints()

Create linking constraints for storage, receiver and cycle.

_create_storage_linking_constraints()

Create constraints for linking storage.

_create_receiver_linking_constraints()

Create constraints for linking receiver.

_create_cycle_linking_constraints()

Create constraints for linking cycle.

initialize_parameters()

Initialize parameters for the CSP model.

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.

set_part_load_cycle_parameters()

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

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_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.

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.

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.

update_initial_conditions()

This method updates the initial conditions for the dispatch optimization, including the initial thermal energy storage, initial cycle startup inventory, and initial cycle thermal power.

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.

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 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.

property time_duration: list

Dispatch horizon time steps [hour]

property available_thermal_generation: list

Available solar thermal generation from the csp field [MWt]

property cycle_ambient_efficiency_correction: list

Cycle efficiency ambient temperature adjustment factor [-]

property condenser_losses: list

Normalized condenser parasitic losses [-]

property receiver_startup_fraction: list

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

property min_receiver_start_time: float

Minimum time to start the receiver [hr]

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 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_change_thermal_input: float

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

property field_startup_losses: float

Solar field startup or shutdown parasitic loss [MWhe]

property receiver_required_startup_energy: float

Required energy expended to start receiver [MWht]

property storage_capacity: float

Thermal energy storage capacity [MWht]

property receiver_pumping_losses: float

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

property minimum_receiver_power: float

Minimum operational thermal power delivered by receiver [MWht]

property allowable_receiver_startup_power: float

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

property field_track_losses: float

Solar field tracking parasitic loss [MWe]

property cycle_required_startup_energy: float

Required energy expended to start cycle [MWht]

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 allowable_cycle_startup_power: float

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

property minimum_cycle_thermal_power: float

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

static _check_efficiency_value(efficiency)

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

property blocks: Block
property maximum_cycle_thermal_power: float

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

property model: ConcreteModel
property maximum_cycle_power: float

Maximum cycle electric power output [MWe]

property initial_thermal_energy_storage: float

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

property initial_receiver_startup_inventory: float

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

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_initial: bool

True (1) if solar field is starting up at beginning of the horizon; False (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 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_initial: bool

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

property thermal_energy_storage: list

Thermal energy storage reserve quantity [MWht]

property receiver_startup_inventory: list

Receiver start-up energy inventory [MWht]

property receiver_thermal_power: list

Thermal power delivered by the receiver [MWt]

property receiver_startup_consumption: list

Receiver start-up power consumption [MWt]

property is_field_generating: list

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

property is_field_starting: list

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

property incur_field_start: list

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

property cycle_startup_inventory: list

Cycle start-up energy inventory [MWht]

property system_load: list

Net generation of csp system [MWe]

property cycle_generation: list

Power cycle electricity generation [MWe]

property cycle_thermal_ramp: list

Power cycle positive change in thermal energy input [MWt]

property cycle_thermal_power: list

Cycle thermal power utilization [MWt]

property is_cycle_generating: list

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

property is_cycle_starting: list

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

property incur_cycle_start: list

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