CSP Dispatch

Contents

CSP Dispatch#

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

Bases: Dispatch

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

Parameters:
  • pyomo_model (ConcreteModel)

  • index_set (Set)

  • block_set_name (str)

__init__(pyomo_model, index_set, system_model, financial_model, block_set_name='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)#

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:

dict

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

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)#

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, n_horizon)#

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:

tuple – A tuple containing the start and end datetime objects.

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)#

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.datetime – Datetime object corresponding to the start time.

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:

int – Number of seconds elapsed since the beginning of the year.

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 [-]

Molten Salt Tower CSP Dispatch#

class hopp.simulation.technologies.dispatch.power_sources.tower_dispatch.TowerDispatch(pyomo_model, indexed_set, system_model, financial_model, block_set_name='tower')#

Bases: CspDispatch

Parameters:
  • pyomo_model (ConcreteModel)

  • indexed_set (Set)

  • system_model (None)

  • financial_model (Singleowner | CustomFinancialModel)

  • block_set_name (str)

tower_obj: Expression | float#
_system_model: None#
_financial_model: Singleowner | CustomFinancialModel#

Dispatch optimization model for CSP tower systems.

__init__(pyomo_model, indexed_set, system_model, financial_model, block_set_name='tower')#

Initialize TowerDispatch.

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.

max_gross_profit_objective(hybrid_blocks)#

Tower 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)#

Tower 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 Tower CSP variables to add to hybrid plant instance.

Parameters:

hybrid – Hybrid plant instance.

Returns:

tuple

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

  • load: Load from given technology.

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 tower port to add to hybrid plant instance.

Parameters:

hybrid – Hybrid plant instance.

Returns:

Port – CSP Tower Port object.

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)#

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.datetime – Datetime object corresponding to the start time.

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, n_horizon)#

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:

tuple – A tuple containing the start and end datetime objects.

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:

dict

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

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:

int – Number of seconds elapsed since the beginning of the year.

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)#

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)#

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

Parameters:

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

Parabolic Trough CSP Dispatch#

class hopp.simulation.technologies.dispatch.power_sources.trough_dispatch.TroughDispatch(pyomo_model, indexed_set, system_model, financial_model, block_set_name='trough')#

Bases: CspDispatch

Parameters:
  • pyomo_model (ConcreteModel)

  • indexed_set (Set)

  • system_model (None)

  • financial_model (Singleowner | CustomFinancialModel)

  • block_set_name (str)

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

Dispatch optimization model for CSP trough systems.

__init__(pyomo_model, indexed_set, system_model, financial_model, block_set_name='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

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

  • load: Load from given technology.

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:

Port – CSP Trough Port object.

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)#

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.datetime – Datetime object corresponding to the start time.

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, n_horizon)#

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:

tuple – A tuple containing the start and end datetime objects.

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:

dict

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

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:

int – Number of seconds elapsed since the beginning of the year.

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)#

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)#

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

Parameters:

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