Concentrating Solar Power (CSP) Plant#
Abstract base class for CSP generation technologies that contains shared methods.
CSP Base Model#
Base CSP Plant#
- class hopp.simulation.technologies.csp.csp_plant.CspPlant(site, config)#
Bases:
PowerSourceAbstract class for CSP technologies.
- Parameters:
- ssc: PysscWrap | PysamWrap | None#
- solar_thermal_resource: list#
- cycle_efficiency_tables: dict#
- plant_state: dict#
- outputs: CspOutputs#
- param_files: Dict[str, str]#
- param_file_paths(relative_path)#
Converts relative paths to absolute for files containing SSC default parameters.
- Parameters:
relative_path (str) – Relative path to data files
- initialize_params()#
Initializes SSC parameters using default values stored in files.
- tmy3_to_df()#
Parses TMY3 solar resource file (from SiteInfo) and coverts data to a Pandas DataFrame
Note
Be careful of leading spaces in the column names, they are hard to catch and break the parser
- Returns:
Weather file data (DataFrame)
- set_params_from_files()#
Loads default case parameters from files
- set_weather(weather_df, start_datetime=None, end_datetime=None)#
Sets ‘solar_resource_data’ for pySSC simulation. If start and end (datetime) are not provided, full year is assumed.
- Parameters:
weather_df (DataFrame) – weather information
start_datetime (datetime | None) – start of pySSC simulation
end_datetime (datetime | None) – end of pySSC simulation
- static get_plant_state_io_map()#
Gets CSP plant state inputs (initial state) and outputs (last state) variables
- Returns:
Dictionary with the key-value pairs correspond to inputs and outputs, respectively
- Return type:
dict
- set_initial_plant_state()#
Sets CSP plant initial state based on SSC initial conditions.
Note
This assumes the receiver and the power cycle are initially off
- Returns:
Dictionary containing plant state variables to be set in SSC
- Return type:
dict
- set_tes_soc(charge_percent)#
Sets CSP plant TES state-of-charge
- Parameters:
charge_percent (float) – Initial fraction of available volume that is hot [%]
- Return type:
float
- set_cycle_state(is_on=True)#
Sets cycle initial state
- Parameters:
is_on (bool) – True if cycle is initially on, False otherwise
- set_cycle_load(load_fraction)#
Sets cycle initial thermal loading
- Parameters:
load_fraction (float) – Thermal loading normalized by cycle thermal rating [-]
- get_tes_soc(time_hr)#
Gets TES state-of-charge percentage at a specified time.
- Parameters:
time_hr (int) – Hour in SSC simulation to get TES state-of-charge
- Returns:
TES state-of-charge percentage [%]
- Return type:
float
- get_cycle_load(time_hr)#
Gets cycle thermal loading at a specified time.
- Parameters:
time_hr (int) – Hour in SSC simulation to get cycle thermal loading
- Returns:
Cycle thermal loading normalized by cycle thermal rating [-]
- Return type:
float
- set_plant_state_from_ssc_outputs(ssc_outputs, seconds_relative_to_start)#
Sets CSP plant state variables based on SSC outputs dictionary
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing the previous simulation results
seconds_relative_to_start (int) – Seconds relative to SSC simulation start to get CSP plant states
- update_ssc_inputs_from_plant_state()#
Updates SSC inputs from CSP plant state attribute
- setup_performance_model()#
Runs a year long forecasting simulation of csp thermal generation, then sets power cycle efficiency tables and solar thermal resource for the dispatch model.
- run_year_for_max_thermal_gen()#
Call PySSC to estimate solar thermal resource for the whole year for dispatch model
Note
Solar field production is “forecasted” by setting TES hours to 100 and receiver start-up time and energy to very small values.
- Returns:
ssc_outputs – SSC’s output dictionary containing the previous simulation results
- Return type:
dict
- set_cycle_efficiency_tables(ssc_outputs)#
Sets cycle off-design performance tables from PySSC outputs.
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing simulation results
- set_solar_thermal_resource(ssc_outputs)#
Sets receiver estimated thermal resource using ssc outputs
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing simulation results
- scale_params(params_names=['tank_heaters', 'tank_height'])#
Scales absolute parameters within the CSP models when design changes. Scales TES tank heater power linearly with respect to TES capacity. Scales TES tank height based on TES capacity assuming a constant aspect ratio (height/diameter)
- Parameters:
params_names (list) – list of parameters to be scaled
- simulate_with_dispatch(n_periods, sim_start_time, store_outputs=True)#
Simulate CSP system using dispatch solution as targets
- Parameters:
n_periods (int) – Number of hours to simulate [hrs]
sim_start_time (int) – Start hour of simulation horizon
store_outputs (bool) – When True SSC and dispatch results are stored in CspOutputs, o.w. they are not stored
- simulate_power()#
Runs CSP system model simulate
- Returns:
SSC results dictionary
- Return type:
dict
- set_dispatch_targets(n_periods)#
Set PySSC targets using dispatch model solution.
- Parameters:
n_periods (int) – Number of hours to simulate [hrs]
- get_design_storage_mass()#
Returns active storage mass [kg]
- Return type:
float
- get_cycle_design_mass_flow()#
Returns CSP cycle design HTF mass flow rate
- Return type:
float
- get_cp_htf(tc, is_tes=True)#
Gets fluid’s specific heat at temperature
Note
Currently, this function only supports the following fluids:
Salt (60% NaNO3, 40% KNO3)
Nitrate_Salt
Therminol_VP1
- Parameters:
tc – fluid temperature in celsius
is_tes – is this the TES fluid (true) or the field fluid (false)
- Returns:
HTF specific heat at temperature TC in [J/kg/K]
- Return type:
float
- get_construction_financing_cost()#
Calculates construction financing costs based on default SAM assumptions.
- Returns:
Construction financing cost [$]
- Return type:
float
- calculate_total_installed_cost()#
Calculates CSP plant’s total installed costs using SAM’s technology specific cost calculators
- Returns:
Total installed cost [$]
- Return type:
float
- simulate(interconnect_kw, project_life=25, skip_fin=False)#
Overrides
PowerSourcefunction to ensure it cannot be called- Parameters:
interconnect_kw (float)
project_life (int)
- simulate_financials(interconnect_kw, project_life=25, cap_cred_avail_storage=True)#
Sets-up and simulates financial model for CSP plants
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
project_life (int) – (optional) Analysis period [years]
cap_cred_avail_storage (bool) – Base capacity credit on available storage (True), otherwise use only dispatched generation (False)
- calc_gen_max_feasible_kwh(interconnect_kw, cap_cred_avail_storage=True)#
Calculates the maximum feasible generation profile that could have occurred.
Timesteps that include startup (or could include startup if off and counting the potential of any stored energy) are a complication because three operating modes could exist in the same timestep (off, startup, on). This makes determining how long the power block (pb) is on, and thus its precise max generating potential, currently undetermined.
- Parameters:
interconnect_kw – Interconnection limit [kW]
cap_cred_avail_storage (bool) – bool if capacity credit should be based on available storage (true), o.w. based on generation profile only (false)
- Returns:
list of floats, maximum feasible generation [kWh]
- Return type:
List[float]
- value(var_name, var_value=None)#
Overrides
PowerSource.valueto enable the use of PySSC rather than PySAM. Method looks in system model (PySSC) first. If unsuccessful, then it looks in the financial model (PySAM).Note
If system and financial models contain a variable with the same name, only the system model variable will be set.
value(var_name)Gets variable valuevalue(var_name, var_value)Sets variable value- Parameters:
var_name – PySSC or PySAM variable name
var_value – (optional) PySAM variable value
- Returns:
Variable value (when getter)
- property _system_model#
Used for dispatch to mimic other dispatch class building in hybrid dispatch builder
- property system_capacity_kw: float#
Gross power cycle design rating [kWe]
- property cycle_capacity_kw: float#
Gross power cycle design rating [kWe]
- property solar_multiple: float#
Solar field thermal rating over the cycle thermal rating (design conditions) [-]
- property tes_hours: float#
Equivalent full-load thermal storage hours [hr]
- property tes_capacity: float#
TES energy capacity [MWt-hr]
- property cycle_thermal_rating: float#
Design cycle thermal rating [MWt]
- property field_thermal_rating: float#
Design solar field thermal rating [MWt]
- property cycle_nominal_efficiency: float#
Cycle design gross efficiency [-]
- property number_of_reflector_units: float#
Number of reflector units [-]
- property minimum_receiver_power_fraction: float#
Minimum receiver turn down fraction [-]
- property field_tracking_power: float#
Field tracking electric power [MWe]
- property htf_cold_design_temperature: float#
Cold design temperature for HTF [C]
- __init__(site, config)#
Method generated by attrs for class CspPlant.
- _get_model_dict()#
Convenience method that wraps the attrs.asdict method. Returns the object’s parameters as a dictionary.
- Returns:
dict – The provided or default, if no input provided, model settings as a dictionary.
- Return type:
dict
- as_dict()#
Creates a JSON and YAML friendly dictionary that can be save for future reloading. This dictionary will contain only Python types that can later be converted to their proper Turbine formats.
- Returns:
dict – All key, vaue pais required for class recreation.
- Return type:
dict
- assign(input_dict)#
Sets input variables in the PowerSource class or any of its subclasses (system or financial models)
- Parameters:
input_dict (dict)
- property benefit_cost_ratio: float#
Benefit cost ratio [-] = Benefits / Costs
Benefits include (using present values):
PPA, capacity payment, and curtailment revenues
Federal, state, utility, and other production-based incentive income
Salvage value
Costs: uses the present value of annual costs
- calc_capacity_credit_percent(interconnect_kw)#
Calculates the capacity credit (value) using the last simulated year’s max feasible generation profile.
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
- Returns:
capacity value [%]
- Return type:
float
- calc_nominal_capacity(interconnect_kw)#
Calculates the nominal AC net system capacity based on specific technology.
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
- Returns:
system’s nominal AC net capacity [kW]
- property capacity_credit_percent: float#
Capacity credit (eligible portion of nameplate) [%]
- property capacity_payment: list#
Capacity payment revenue [$]
- property capacity_price: list#
Capacity payment price [$/MW]
- property construction_financing_cost: float#
- copy()#
- Returns:
new instance
- property cost_installed: float#
Net capital cost [$]
- property debt_payment: tuple#
Debt total payment [$]
- property degradation: tuple#
Annual energy degradation [%/year]
- property dispatch#
Dispatch object
- property dispatch_factors: tuple#
Time-series dispatch factors normalized by PPA price [-]
- property energy_purchases: tuple#
Energy purchases from grid [$]
- property energy_sales: tuple#
PPA revenue gross [$]
- property energy_value: tuple#
PPA revenue net [$]
- export()#
- Returns:
dictionary of variables for system and financial
- property federal_depreciation_total: tuple#
Total federal tax depreciation [$]
- property federal_taxes: tuple#
Federal tax benefit (liability) [$]
- classmethod from_dict(data)#
Maps a data dictionary to an attr-defined class.
TODO: Add an error to ensure that either none or all the parameters are passed in
- Parameters:
data (dict) – dict The data dictionary to be mapped.
- Returns:
- cls
The attr-defined class.
- property gen_max_feasible: list#
Maximum feasible generation profile that could have occurred (year 1)
- classmethod get_model_defaults()#
Produces a dictionary of the keyword arguments and their defaults.
- Returns:
Dict[str, Any] – Dictionary of keyword argument: default.
- Return type:
Dict[str, Any]
- property htf_hot_design_temperature: float#
Hot design temperature for HTF [C]
- static import_financial_model(financial_model, system_model, config_name)#
- initialize_financial_values()#
These values are provided as default values from PySAM but should be customized by user
Debt, Reserve Account and Construction Financing Costs are initialized to 0 Federal Bonus Depreciation also initialized to 0
- property insurance_expense: tuple#
Insurance expense [$]
- property internal_rate_of_return: float#
Internal rate of return (after-tax) [%]
- property levelized_cost_of_energy_nominal: float#
Levelized cost (nominal) [cents/kWh]
- property levelized_cost_of_energy_real: float#
Levelized cost (real) [cents/kWh]
- property logger#
- property net_present_value: float#
After-tax cumulative NPV [$]
- property om_capacity#
Capacity-based O&M amount [$/kWcap]
- property om_capacity_expense#
O&M capacity-based expense [$]
- property om_fixed#
Fixed O&M annual amount [$/year]
- property om_fixed_expense#
O&M fixed expense [$]
- property om_production#
Production-based O&M amount [$/Mwh]
- property om_total_expense#
Total operating expenses [$]
- property om_variable#
Production-based O&M amount [$/kWh] For battery: production-based System Costs amount [$/kWh-discharged]
- Type:
For non-battery technologies
- property om_variable_expense#
O&M production-based expense [$]
- plot(figure=None, axes=None, color='b', site_border_color='k', site_alpha=0.95, linewidth=4.0)#
- property ppa_price: tuple#
PPA price [$/kWh]
- set_overnight_capital_cost(overnight_capital_cost)#
Set overnight capital costs [$/kW].
- property system_nameplate_mw: float#
System nameplate [MW]
- property tax_incentives: list#
The sum of Federal and State PTC and ITC tax incentives [$]
- property total_installed_cost: float#
Installed cost [$]
- property total_revenue: list#
Total revenue [$]
- property initial_tes_hot_mass_fraction: float#
Initial thermal energy storage fraction of mass in hot tank [-]
- property annual_energy_kwh: float#
Annual energy [kWh]
- property generation_profile: list#
System power generated [kW]
- property capacity_factor: float#
System capacity factor [%]
Base CSP Configuration#
- class hopp.simulation.technologies.csp.csp_plant.CspConfig(tech_name, cycle_capacity_kw, solar_multiple, tes_hours, fin_model=None, name='TowerPlant')#
Bases:
BaseClassConfiguration class for CspPlant.
- Parameters:
cycle_capacity_kw (float) – Power cycle design turbine gross output [kWe]
solar_multiple (float) – Solar multiple [-]
tes_hours (float) – Full load hours of thermal energy storage [hrs]
fin_model (dict | Singleowner | CustomFinancialModel | None) – Financial model for the specific technology
name (str) – Configured name for this plant
tech_name (str)
- tech_name: str#
- cycle_capacity_kw: float#
- solar_multiple: float#
- tes_hours: float#
- fin_model: dict | Singleowner | CustomFinancialModel | None#
- name: str#
- __init__(tech_name, cycle_capacity_kw, solar_multiple, tes_hours, fin_model=None, name='TowerPlant')#
Method generated by attrs for class CspConfig.
- Parameters:
tech_name (str)
cycle_capacity_kw (float)
solar_multiple (float)
tes_hours (float)
fin_model (dict | Singleowner | CustomFinancialModel | None)
name (str)
- Return type:
None
- _get_model_dict()#
Convenience method that wraps the attrs.asdict method. Returns the object’s parameters as a dictionary.
- Returns:
dict – The provided or default, if no input provided, model settings as a dictionary.
- Return type:
dict
- as_dict()#
Creates a JSON and YAML friendly dictionary that can be save for future reloading. This dictionary will contain only Python types that can later be converted to their proper Turbine formats.
- Returns:
dict – All key, vaue pais required for class recreation.
- Return type:
dict
- classmethod from_dict(data)#
Maps a data dictionary to an attr-defined class.
TODO: Add an error to ensure that either none or all the parameters are passed in
- Parameters:
data (dict) – dict The data dictionary to be mapped.
- Returns:
- cls
The attr-defined class.
- classmethod get_model_defaults()#
Produces a dictionary of the keyword arguments and their defaults.
- Returns:
Dict[str, Any] – Dictionary of keyword argument: default.
- Return type:
Dict[str, Any]
- property logger#
Base CSP Outputs#
- class hopp.simulation.technologies.csp.csp_plant.CspOutputs#
Bases:
objectObject for storing CSP outputs from SSC (SAM’s Simulation Core) and dispatch optimization.
- __init__()#
- update_from_ssc_output(ssc_outputs, skip_hr_start=0, skip_hr_end=0)#
Updates stored outputs based on SSC’s output dictionary.
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing the previous simulation results
skip_hr_start (int) – (optional) Hours to skip at beginning of simulated array
skip_hr_end (int) – (optional) Hours to skip at end of simulated array
- store_dispatch_outputs(dispatch, n_periods, sim_start_time)#
Stores dispatch model outputs for post-processing analysis.
- Parameters:
dispatch (CspDispatch) – CSP dispatch objective with attributes to store
n_periods (int) – Number of periods to store dispatch outputs
sim_start_time (int) – The first simulation hour of the dispatch horizon
Molten Salt Power Tower Plant#
Tower concentrating solar power class based on SSC’s MSPT (molten salt power tower) model
Tower Plant Model#
- class hopp.simulation.technologies.csp.tower_plant.TowerPlant(site, config)#
Bases:
CspPlantTower concentrating solar power class based on SSC’s MSPT (molten salt power tower) model
- Parameters:
site (SiteInfo) – Power source site information
config (TowerConfig) – Tower CSP configuration
- config: TowerConfig#
- optimize_field_before_sim: bool#
- set_params_from_files()#
Loads default case parameters from files
- scale_params(params_names=['tank_heaters', 'tank_height'])#
Scales SSC MSPT input parameters that don’t automatically scale with plant capacity.
- Parameters:
params_names (list) – list of parameters to be scaled. The following variable scaling is supported:
========================================= (==================== =====================================)
Method (Parameter Names Definition)
=========================================
capacity (tank_heaters Rated heater capacity for TES tanks linearly with respect to TES)
ratio (tank_height Height of HTF when tank is full constant aspect)
receiver (helio_size Heliostat height and width approximating based on a approx.)
area (helio_parasitics Heliostat parasitic power linearly with respect to heliostat)
velocity (tube_size Receiver tube diameter scaled for specified target)
=========================================
- create_field_layout_and_simulate_flux_eta_maps(optimize_tower_field=False)#
Creates heliostats field layout and simulates receiver flux efficiency maps to be stored.
- Parameters:
optimize_tower_field (bool) – If True, SolarPilot’s field and tower height optimization will before system simulation, o.w., SolarPilot will just generate field based on inputs.
- optimize_field_and_tower()#
Optimizes heliostat field, tower height, and receiver geometry (diameter and height). This method uses SolarPILOT’s internal optimization methods.
Note
We believe there is a memory leak when calling SolarPILOT’s optimization routine. This is not problematic when running a single hybrid simulation. However, this can be a problem when iterating HOPP for optimization.
- generate_field()#
Generates heliostat field based on current parameter values using SolarPilot.
- setup_performance_model()#
Sets up tower heliostat field then runs CSP setup function.
Note
Set-up functions musted be called before calculate_installed_cost()
- calculate_total_installed_cost()#
Calculates CSP plant’s total installed costs using SAM’s technology specific cost calculators
- Returns:
Total installed cost [$]
- Return type:
float
Note
This must be called after heliostat field layout is created
- estimate_receiver_pumping_parasitic(nonheated_length=0.2)#
Estimates receiver pumping parasitic power for dispatch parameter
- Parameters:
nonheated_length – percentage of non-heated length for the receiver
- Returns:
Receiver pumping power per thermal rating [MWe/MWt]
- get_receiver_design_mass_flow()#
Calculates receiver mass flow rate based on design temperature conditions.
- Returns:
Receiver design mass flow rate [kg/s]
- get_density_htf(TC)#
Calculates HTF density based on temperature.
Note
Currently, only Salt (60% NaNO3, 40% KNO3) is supported by this function.
- Parameters:
TC (float) – HTF temperature [C]
- Returns:
HTF density [kg/m^3]
- get_visc_htf(TC)#
Calculates HTF viscosity based on temperature.
Note
Currently, only Salt (60% NaNO3, 40% KNO3) is supported by this function.
- Parameters:
TC (float) – HTF temperature [C]
- Returns:
HTF viscosity [kg/m-s]
- static get_plant_state_io_map()#
Gets CSP plant state inputs (initial state) and outputs (last state) variables
- Returns:
Dictionary with the key-value pairs correspond to inputs and outputs, respectively
- Return type:
dict
- set_initial_plant_state()#
Sets CSP plant initial state based on SSC initial conditions.
Note
This assumes the receiver and the power cycle are initially off
- Returns:
Dictionary containing plant state variables to be set in SSC
- Return type:
dict
- set_tes_soc(charge_percent)#
Sets CSP plant TES state-of-charge
- Parameters:
charge_percent – Initial fraction of available volume that is hot [%]
- property solar_multiple: float#
Solar field thermal rating over the cycle thermal rating (design conditions) [-]
- property cycle_thermal_rating: float#
Design cycle thermal rating [MWt]
- property field_thermal_rating: float#
Design solar field thermal rating [MWt]
- property cycle_nominal_efficiency: float#
Cycle design gross efficiency [-]
- property number_of_reflector_units: float#
Returns number of heliostats within the field
- property minimum_receiver_power_fraction: float#
Returns minimum receiver mass flow rate turn down fraction.
- property field_tracking_power: float#
Returns power load for field to track sun position in MWe
- property htf_cold_design_temperature: float#
Returns cold design temperature for HTF [C]
- property htf_hot_design_temperature: float#
Returns hot design temperature for HTF [C]
- __init__(site, config)#
Method generated by attrs for class TowerPlant.
- Parameters:
site (SiteInfo)
config (TowerConfig)
- Return type:
None
- _get_model_dict()#
Convenience method that wraps the attrs.asdict method. Returns the object’s parameters as a dictionary.
- Returns:
dict – The provided or default, if no input provided, model settings as a dictionary.
- Return type:
dict
- property _system_model#
Used for dispatch to mimic other dispatch class building in hybrid dispatch builder
- property annual_energy_kwh: float#
Annual energy [kWh]
- as_dict()#
Creates a JSON and YAML friendly dictionary that can be save for future reloading. This dictionary will contain only Python types that can later be converted to their proper Turbine formats.
- Returns:
dict – All key, vaue pais required for class recreation.
- Return type:
dict
- assign(input_dict)#
Sets input variables in the PowerSource class or any of its subclasses (system or financial models)
- Parameters:
input_dict (dict)
- property benefit_cost_ratio: float#
Benefit cost ratio [-] = Benefits / Costs
Benefits include (using present values):
PPA, capacity payment, and curtailment revenues
Federal, state, utility, and other production-based incentive income
Salvage value
Costs: uses the present value of annual costs
- calc_capacity_credit_percent(interconnect_kw)#
Calculates the capacity credit (value) using the last simulated year’s max feasible generation profile.
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
- Returns:
capacity value [%]
- Return type:
float
- calc_gen_max_feasible_kwh(interconnect_kw, cap_cred_avail_storage=True)#
Calculates the maximum feasible generation profile that could have occurred.
Timesteps that include startup (or could include startup if off and counting the potential of any stored energy) are a complication because three operating modes could exist in the same timestep (off, startup, on). This makes determining how long the power block (pb) is on, and thus its precise max generating potential, currently undetermined.
- Parameters:
interconnect_kw – Interconnection limit [kW]
cap_cred_avail_storage (bool) – bool if capacity credit should be based on available storage (true), o.w. based on generation profile only (false)
- Returns:
list of floats, maximum feasible generation [kWh]
- Return type:
List[float]
- calc_nominal_capacity(interconnect_kw)#
Calculates the nominal AC net system capacity based on specific technology.
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
- Returns:
system’s nominal AC net capacity [kW]
- property capacity_credit_percent: float#
Capacity credit (eligible portion of nameplate) [%]
- property capacity_factor: float#
System capacity factor [%]
- property capacity_payment: list#
Capacity payment revenue [$]
- property capacity_price: list#
Capacity payment price [$/MW]
- property construction_financing_cost: float#
- copy()#
- Returns:
new instance
- property cost_installed: float#
Net capital cost [$]
- property cycle_capacity_kw: float#
Gross power cycle design rating [kWe]
- cycle_efficiency_tables: dict#
- property debt_payment: tuple#
Debt total payment [$]
- property degradation: tuple#
Annual energy degradation [%/year]
- property dispatch#
Dispatch object
- property dispatch_factors: tuple#
Time-series dispatch factors normalized by PPA price [-]
- property energy_purchases: tuple#
Energy purchases from grid [$]
- property energy_sales: tuple#
PPA revenue gross [$]
- property energy_value: tuple#
PPA revenue net [$]
- export()#
- Returns:
dictionary of variables for system and financial
- property federal_depreciation_total: tuple#
Total federal tax depreciation [$]
- property federal_taxes: tuple#
Federal tax benefit (liability) [$]
- classmethod from_dict(data)#
Maps a data dictionary to an attr-defined class.
TODO: Add an error to ensure that either none or all the parameters are passed in
- Parameters:
data (dict) – dict The data dictionary to be mapped.
- Returns:
- cls
The attr-defined class.
- property gen_max_feasible: list#
Maximum feasible generation profile that could have occurred (year 1)
- property generation_profile: list#
System power generated [kW]
- get_construction_financing_cost()#
Calculates construction financing costs based on default SAM assumptions.
- Returns:
Construction financing cost [$]
- Return type:
float
- get_cp_htf(tc, is_tes=True)#
Gets fluid’s specific heat at temperature
Note
Currently, this function only supports the following fluids:
Salt (60% NaNO3, 40% KNO3)
Nitrate_Salt
Therminol_VP1
- Parameters:
tc – fluid temperature in celsius
is_tes – is this the TES fluid (true) or the field fluid (false)
- Returns:
HTF specific heat at temperature TC in [J/kg/K]
- Return type:
float
- get_cycle_design_mass_flow()#
Returns CSP cycle design HTF mass flow rate
- Return type:
float
- get_cycle_load(time_hr)#
Gets cycle thermal loading at a specified time.
- Parameters:
time_hr (int) – Hour in SSC simulation to get cycle thermal loading
- Returns:
Cycle thermal loading normalized by cycle thermal rating [-]
- Return type:
float
- get_design_storage_mass()#
Returns active storage mass [kg]
- Return type:
float
- classmethod get_model_defaults()#
Produces a dictionary of the keyword arguments and their defaults.
- Returns:
Dict[str, Any] – Dictionary of keyword argument: default.
- Return type:
Dict[str, Any]
- get_tes_soc(time_hr)#
Gets TES state-of-charge percentage at a specified time.
- Parameters:
time_hr (int) – Hour in SSC simulation to get TES state-of-charge
- Returns:
TES state-of-charge percentage [%]
- Return type:
float
- static import_financial_model(financial_model, system_model, config_name)#
- property initial_tes_hot_mass_fraction: float#
Returns initial thermal energy storage fraction of mass in hot tank [-]
- initialize_financial_values()#
These values are provided as default values from PySAM but should be customized by user
Debt, Reserve Account and Construction Financing Costs are initialized to 0 Federal Bonus Depreciation also initialized to 0
- initialize_params()#
Initializes SSC parameters using default values stored in files.
- property insurance_expense: tuple#
Insurance expense [$]
- property internal_rate_of_return: float#
Internal rate of return (after-tax) [%]
- property levelized_cost_of_energy_nominal: float#
Levelized cost (nominal) [cents/kWh]
- property levelized_cost_of_energy_real: float#
Levelized cost (real) [cents/kWh]
- property logger#
- property net_present_value: float#
After-tax cumulative NPV [$]
- property om_capacity#
Capacity-based O&M amount [$/kWcap]
- property om_capacity_expense#
O&M capacity-based expense [$]
- property om_fixed#
Fixed O&M annual amount [$/year]
- property om_fixed_expense#
O&M fixed expense [$]
- property om_production#
Production-based O&M amount [$/Mwh]
- property om_total_expense#
Total operating expenses [$]
- property om_variable#
Production-based O&M amount [$/kWh] For battery: production-based System Costs amount [$/kWh-discharged]
- Type:
For non-battery technologies
- property om_variable_expense#
O&M production-based expense [$]
- outputs: CspOutputs#
- param_file_paths(relative_path)#
Converts relative paths to absolute for files containing SSC default parameters.
- Parameters:
relative_path (str) – Relative path to data files
- param_files: Dict[str, str]#
- plant_state: dict#
- plot(figure=None, axes=None, color='b', site_border_color='k', site_alpha=0.95, linewidth=4.0)#
- property ppa_price: tuple#
PPA price [$/kWh]
- run_year_for_max_thermal_gen()#
Call PySSC to estimate solar thermal resource for the whole year for dispatch model
Note
Solar field production is “forecasted” by setting TES hours to 100 and receiver start-up time and energy to very small values.
- Returns:
ssc_outputs – SSC’s output dictionary containing the previous simulation results
- Return type:
dict
- set_cycle_efficiency_tables(ssc_outputs)#
Sets cycle off-design performance tables from PySSC outputs.
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing simulation results
- set_cycle_load(load_fraction)#
Sets cycle initial thermal loading
- Parameters:
load_fraction (float) – Thermal loading normalized by cycle thermal rating [-]
- set_cycle_state(is_on=True)#
Sets cycle initial state
- Parameters:
is_on (bool) – True if cycle is initially on, False otherwise
- set_dispatch_targets(n_periods)#
Set PySSC targets using dispatch model solution.
- Parameters:
n_periods (int) – Number of hours to simulate [hrs]
- set_overnight_capital_cost(overnight_capital_cost)#
Set overnight capital costs [$/kW].
- set_plant_state_from_ssc_outputs(ssc_outputs, seconds_relative_to_start)#
Sets CSP plant state variables based on SSC outputs dictionary
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing the previous simulation results
seconds_relative_to_start (int) – Seconds relative to SSC simulation start to get CSP plant states
- set_solar_thermal_resource(ssc_outputs)#
Sets receiver estimated thermal resource using ssc outputs
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing simulation results
- set_weather(weather_df, start_datetime=None, end_datetime=None)#
Sets ‘solar_resource_data’ for pySSC simulation. If start and end (datetime) are not provided, full year is assumed.
- Parameters:
weather_df (DataFrame) – weather information
start_datetime (datetime | None) – start of pySSC simulation
end_datetime (datetime | None) – end of pySSC simulation
- simulate(interconnect_kw, project_life=25, skip_fin=False)#
Overrides
PowerSourcefunction to ensure it cannot be called- Parameters:
interconnect_kw (float)
project_life (int)
- simulate_financials(interconnect_kw, project_life=25, cap_cred_avail_storage=True)#
Sets-up and simulates financial model for CSP plants
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
project_life (int) – (optional) Analysis period [years]
cap_cred_avail_storage (bool) – Base capacity credit on available storage (True), otherwise use only dispatched generation (False)
- simulate_power()#
Runs CSP system model simulate
- Returns:
SSC results dictionary
- Return type:
dict
- simulate_with_dispatch(n_periods, sim_start_time, store_outputs=True)#
Simulate CSP system using dispatch solution as targets
- Parameters:
n_periods (int) – Number of hours to simulate [hrs]
sim_start_time (int) – Start hour of simulation horizon
store_outputs (bool) – When True SSC and dispatch results are stored in CspOutputs, o.w. they are not stored
- solar_thermal_resource: list#
- ssc: PysscWrap | PysamWrap | None#
- property system_capacity_kw: float#
Gross power cycle design rating [kWe]
- property system_nameplate_mw: float#
System nameplate [MW]
- property tax_incentives: list#
The sum of Federal and State PTC and ITC tax incentives [$]
- property tes_capacity: float#
TES energy capacity [MWt-hr]
- property tes_hours: float#
Equivalent full-load thermal storage hours [hr]
- tmy3_to_df()#
Parses TMY3 solar resource file (from SiteInfo) and coverts data to a Pandas DataFrame
Note
Be careful of leading spaces in the column names, they are hard to catch and break the parser
- Returns:
Weather file data (DataFrame)
- property total_installed_cost: float#
Installed cost [$]
- property total_revenue: list#
Total revenue [$]
- update_ssc_inputs_from_plant_state()#
Updates SSC inputs from CSP plant state attribute
- value(var_name, var_value=None)#
Overrides
PowerSource.valueto enable the use of PySSC rather than PySAM. Method looks in system model (PySSC) first. If unsuccessful, then it looks in the financial model (PySAM).Note
If system and financial models contain a variable with the same name, only the system model variable will be set.
value(var_name)Gets variable valuevalue(var_name, var_value)Sets variable value- Parameters:
var_name – PySSC or PySAM variable name
var_value – (optional) PySAM variable value
- Returns:
Variable value (when getter)
Tower Plant Configuration#
- class hopp.simulation.technologies.csp.tower_plant.TowerConfig(cycle_capacity_kw, solar_multiple, tes_hours, fin_model=None, tech_name='tcsmolten_salt', optimize_field_before_sim=True, scale_input_params=False, name='TowerPlant')#
Bases:
CspConfigConfiguration class for TowerPlant.
- Parameters:
cycle_capacity_kw (float) – Power cycle design turbine gross output [kWe]
solar_multiple (float) – Solar multiple [-]
tes_hours (float) – Full load hours of thermal energy storage [hrs]
fin_model (dict | Singleowner | CustomFinancialModel | None) – Financial model for the specific technology
optimize_field_before_sim (bool) – If True, SolarPilot’s field and tower height optimization will before system simulation, o.w., SolarPilot will just generate field based on inputs.
scale_input_params (bool) – If True, HOPP will run
hopp.simulation.technologies.csp.tower_plant.scale_params()before system simulation.tech_name (str)
name (str)
- tech_name: str#
- optimize_field_before_sim: bool#
- scale_input_params: bool#
- name: str#
- __init__(cycle_capacity_kw, solar_multiple, tes_hours, fin_model=None, tech_name='tcsmolten_salt', optimize_field_before_sim=True, scale_input_params=False, name='TowerPlant')#
Method generated by attrs for class TowerConfig.
- Parameters:
cycle_capacity_kw (float)
solar_multiple (float)
tes_hours (float)
fin_model (dict | Singleowner | CustomFinancialModel | None)
tech_name (str)
optimize_field_before_sim (bool)
scale_input_params (bool)
name (str)
- Return type:
None
- _get_model_dict()#
Convenience method that wraps the attrs.asdict method. Returns the object’s parameters as a dictionary.
- Returns:
dict – The provided or default, if no input provided, model settings as a dictionary.
- Return type:
dict
- as_dict()#
Creates a JSON and YAML friendly dictionary that can be save for future reloading. This dictionary will contain only Python types that can later be converted to their proper Turbine formats.
- Returns:
dict – All key, vaue pais required for class recreation.
- Return type:
dict
- cycle_capacity_kw: float#
- fin_model: dict | FinancialModelType | None#
- classmethod from_dict(data)#
Maps a data dictionary to an attr-defined class.
TODO: Add an error to ensure that either none or all the parameters are passed in
- Parameters:
data (dict) – dict The data dictionary to be mapped.
- Returns:
- cls
The attr-defined class.
- classmethod get_model_defaults()#
Produces a dictionary of the keyword arguments and their defaults.
- Returns:
Dict[str, Any] – Dictionary of keyword argument: default.
- Return type:
Dict[str, Any]
- property logger#
- solar_multiple: float#
- tes_hours: float#
Parabolic Trough Plant#
Parabolic trough concentrating solar power class based on SSC’s Parabolic trough - physical model
Trough Plant Model#
- class hopp.simulation.technologies.csp.trough_plant.TroughPlant(site, config)#
Bases:
CspPlantParabolic trough concentrating solar power class based on SSC’s Parabolic trough (physical model).
- Parameters:
site (SiteInfo) – Power source site information
config (TroughConfig) – CSP configuration
- config: TroughConfig#
- calculate_aperture_and_land_area()#
Calculates total aperture area and total land area by executing SSC
- Returns:
Total aperture [m^2], Total land area [acre]
- Return type:
tuple
- calculate_total_installed_cost()#
Calculates CSP plant’s total installed costs using SAM’s technology specific cost calculators
- Returns:
Total installed cost [$]
- Return type:
float
- static estimate_receiver_pumping_parasitic()#
Estimates receiver pumping parasitic power for dispatch parameter
Note
This function assumes a constant value because troughs pressure drop is difficult to estimate reasonably
- Returns:
Receiver pumping power per thermal rating [MWe/MWt]
- static get_plant_state_io_map()#
Gets CSP plant state inputs (initial state) and outputs (last state) variables
- Returns:
Dictionary with the key-value pairs correspond to inputs and outputs, respectively
- Return type:
dict
- set_initial_plant_state()#
Sets CSP plant initial state based on SSC initial conditions.
Note
This assumes the receiver and the power cycle are initially off
- Returns:
Dictionary containing plant state variables to be set in SSC
- Return type:
dict
- set_tes_soc(charge_percent)#
Sets CSP plant TES state-of-charge
- Parameters:
charge_percent – Initial fraction of available volume that is hot [%]
- property solar_multiple: float#
Solar field thermal rating over the cycle thermal rating (design conditions) [-]
- property cycle_thermal_rating: float#
Design cycle thermal rating [MWt]
- property field_thermal_rating: float#
Design solar field thermal rating [MWt]
- property cycle_nominal_efficiency: float#
Cycle design gross efficiency [-]
- property number_of_reflector_units: float#
Returns number of solar collector assemblies (SCA) within the field.
- property minimum_receiver_power_fraction: float#
Returns minimum field mass flowrate fraction.
- property field_tracking_power: float#
Returns power load for field to track sun position in MWe
- property htf_cold_design_temperature: float#
Returns cold design temperature for HTF [C]
- property htf_hot_design_temperature: float#
Returns hot design temperature for HTF [C]
- __init__(site, config)#
Method generated by attrs for class TroughPlant.
- Parameters:
site (SiteInfo)
config (TroughConfig)
- Return type:
None
- _get_model_dict()#
Convenience method that wraps the attrs.asdict method. Returns the object’s parameters as a dictionary.
- Returns:
dict – The provided or default, if no input provided, model settings as a dictionary.
- Return type:
dict
- property _system_model#
Used for dispatch to mimic other dispatch class building in hybrid dispatch builder
- property annual_energy_kwh: float#
Annual energy [kWh]
- as_dict()#
Creates a JSON and YAML friendly dictionary that can be save for future reloading. This dictionary will contain only Python types that can later be converted to their proper Turbine formats.
- Returns:
dict – All key, vaue pais required for class recreation.
- Return type:
dict
- assign(input_dict)#
Sets input variables in the PowerSource class or any of its subclasses (system or financial models)
- Parameters:
input_dict (dict)
- property benefit_cost_ratio: float#
Benefit cost ratio [-] = Benefits / Costs
Benefits include (using present values):
PPA, capacity payment, and curtailment revenues
Federal, state, utility, and other production-based incentive income
Salvage value
Costs: uses the present value of annual costs
- calc_capacity_credit_percent(interconnect_kw)#
Calculates the capacity credit (value) using the last simulated year’s max feasible generation profile.
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
- Returns:
capacity value [%]
- Return type:
float
- calc_gen_max_feasible_kwh(interconnect_kw, cap_cred_avail_storage=True)#
Calculates the maximum feasible generation profile that could have occurred.
Timesteps that include startup (or could include startup if off and counting the potential of any stored energy) are a complication because three operating modes could exist in the same timestep (off, startup, on). This makes determining how long the power block (pb) is on, and thus its precise max generating potential, currently undetermined.
- Parameters:
interconnect_kw – Interconnection limit [kW]
cap_cred_avail_storage (bool) – bool if capacity credit should be based on available storage (true), o.w. based on generation profile only (false)
- Returns:
list of floats, maximum feasible generation [kWh]
- Return type:
List[float]
- calc_nominal_capacity(interconnect_kw)#
Calculates the nominal AC net system capacity based on specific technology.
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
- Returns:
system’s nominal AC net capacity [kW]
- property capacity_credit_percent: float#
Capacity credit (eligible portion of nameplate) [%]
- property capacity_factor: float#
System capacity factor [%]
- property capacity_payment: list#
Capacity payment revenue [$]
- property capacity_price: list#
Capacity payment price [$/MW]
- property construction_financing_cost: float#
- copy()#
- Returns:
new instance
- property cost_installed: float#
Net capital cost [$]
- property cycle_capacity_kw: float#
Gross power cycle design rating [kWe]
- cycle_efficiency_tables: dict#
- property debt_payment: tuple#
Debt total payment [$]
- property degradation: tuple#
Annual energy degradation [%/year]
- property dispatch#
Dispatch object
- property dispatch_factors: tuple#
Time-series dispatch factors normalized by PPA price [-]
- property energy_purchases: tuple#
Energy purchases from grid [$]
- property energy_sales: tuple#
PPA revenue gross [$]
- property energy_value: tuple#
PPA revenue net [$]
- export()#
- Returns:
dictionary of variables for system and financial
- property federal_depreciation_total: tuple#
Total federal tax depreciation [$]
- property federal_taxes: tuple#
Federal tax benefit (liability) [$]
- classmethod from_dict(data)#
Maps a data dictionary to an attr-defined class.
TODO: Add an error to ensure that either none or all the parameters are passed in
- Parameters:
data (dict) – dict The data dictionary to be mapped.
- Returns:
- cls
The attr-defined class.
- property gen_max_feasible: list#
Maximum feasible generation profile that could have occurred (year 1)
- property generation_profile: list#
System power generated [kW]
- get_construction_financing_cost()#
Calculates construction financing costs based on default SAM assumptions.
- Returns:
Construction financing cost [$]
- Return type:
float
- get_cp_htf(tc, is_tes=True)#
Gets fluid’s specific heat at temperature
Note
Currently, this function only supports the following fluids:
Salt (60% NaNO3, 40% KNO3)
Nitrate_Salt
Therminol_VP1
- Parameters:
tc – fluid temperature in celsius
is_tes – is this the TES fluid (true) or the field fluid (false)
- Returns:
HTF specific heat at temperature TC in [J/kg/K]
- Return type:
float
- get_cycle_design_mass_flow()#
Returns CSP cycle design HTF mass flow rate
- Return type:
float
- get_cycle_load(time_hr)#
Gets cycle thermal loading at a specified time.
- Parameters:
time_hr (int) – Hour in SSC simulation to get cycle thermal loading
- Returns:
Cycle thermal loading normalized by cycle thermal rating [-]
- Return type:
float
- get_design_storage_mass()#
Returns active storage mass [kg]
- Return type:
float
- classmethod get_model_defaults()#
Produces a dictionary of the keyword arguments and their defaults.
- Returns:
Dict[str, Any] – Dictionary of keyword argument: default.
- Return type:
Dict[str, Any]
- get_tes_soc(time_hr)#
Gets TES state-of-charge percentage at a specified time.
- Parameters:
time_hr (int) – Hour in SSC simulation to get TES state-of-charge
- Returns:
TES state-of-charge percentage [%]
- Return type:
float
- static import_financial_model(financial_model, system_model, config_name)#
- property initial_tes_hot_mass_fraction: float#
Returns initial thermal energy storage fraction of mass in hot tank [-]
- initialize_financial_values()#
These values are provided as default values from PySAM but should be customized by user
Debt, Reserve Account and Construction Financing Costs are initialized to 0 Federal Bonus Depreciation also initialized to 0
- initialize_params()#
Initializes SSC parameters using default values stored in files.
- property insurance_expense: tuple#
Insurance expense [$]
- property internal_rate_of_return: float#
Internal rate of return (after-tax) [%]
- property levelized_cost_of_energy_nominal: float#
Levelized cost (nominal) [cents/kWh]
- property levelized_cost_of_energy_real: float#
Levelized cost (real) [cents/kWh]
- property logger#
- property net_present_value: float#
After-tax cumulative NPV [$]
- property om_capacity#
Capacity-based O&M amount [$/kWcap]
- property om_capacity_expense#
O&M capacity-based expense [$]
- property om_fixed#
Fixed O&M annual amount [$/year]
- property om_fixed_expense#
O&M fixed expense [$]
- property om_production#
Production-based O&M amount [$/Mwh]
- property om_total_expense#
Total operating expenses [$]
- property om_variable#
Production-based O&M amount [$/kWh] For battery: production-based System Costs amount [$/kWh-discharged]
- Type:
For non-battery technologies
- property om_variable_expense#
O&M production-based expense [$]
- outputs: CspOutputs#
- param_file_paths(relative_path)#
Converts relative paths to absolute for files containing SSC default parameters.
- Parameters:
relative_path (str) – Relative path to data files
- param_files: Dict[str, str]#
- plant_state: dict#
- plot(figure=None, axes=None, color='b', site_border_color='k', site_alpha=0.95, linewidth=4.0)#
- property ppa_price: tuple#
PPA price [$/kWh]
- run_year_for_max_thermal_gen()#
Call PySSC to estimate solar thermal resource for the whole year for dispatch model
Note
Solar field production is “forecasted” by setting TES hours to 100 and receiver start-up time and energy to very small values.
- Returns:
ssc_outputs – SSC’s output dictionary containing the previous simulation results
- Return type:
dict
- scale_params(params_names=['tank_heaters', 'tank_height'])#
Scales absolute parameters within the CSP models when design changes. Scales TES tank heater power linearly with respect to TES capacity. Scales TES tank height based on TES capacity assuming a constant aspect ratio (height/diameter)
- Parameters:
params_names (list) – list of parameters to be scaled
- set_cycle_efficiency_tables(ssc_outputs)#
Sets cycle off-design performance tables from PySSC outputs.
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing simulation results
- set_cycle_load(load_fraction)#
Sets cycle initial thermal loading
- Parameters:
load_fraction (float) – Thermal loading normalized by cycle thermal rating [-]
- set_cycle_state(is_on=True)#
Sets cycle initial state
- Parameters:
is_on (bool) – True if cycle is initially on, False otherwise
- set_dispatch_targets(n_periods)#
Set PySSC targets using dispatch model solution.
- Parameters:
n_periods (int) – Number of hours to simulate [hrs]
- set_overnight_capital_cost(overnight_capital_cost)#
Set overnight capital costs [$/kW].
- set_params_from_files()#
Loads default case parameters from files
- set_plant_state_from_ssc_outputs(ssc_outputs, seconds_relative_to_start)#
Sets CSP plant state variables based on SSC outputs dictionary
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing the previous simulation results
seconds_relative_to_start (int) – Seconds relative to SSC simulation start to get CSP plant states
- set_solar_thermal_resource(ssc_outputs)#
Sets receiver estimated thermal resource using ssc outputs
- Parameters:
ssc_outputs (dict) – SSC’s output dictionary containing simulation results
- set_weather(weather_df, start_datetime=None, end_datetime=None)#
Sets ‘solar_resource_data’ for pySSC simulation. If start and end (datetime) are not provided, full year is assumed.
- Parameters:
weather_df (DataFrame) – weather information
start_datetime (datetime | None) – start of pySSC simulation
end_datetime (datetime | None) – end of pySSC simulation
- setup_performance_model()#
Runs a year long forecasting simulation of csp thermal generation, then sets power cycle efficiency tables and solar thermal resource for the dispatch model.
- simulate(interconnect_kw, project_life=25, skip_fin=False)#
Overrides
PowerSourcefunction to ensure it cannot be called- Parameters:
interconnect_kw (float)
project_life (int)
- simulate_financials(interconnect_kw, project_life=25, cap_cred_avail_storage=True)#
Sets-up and simulates financial model for CSP plants
- Parameters:
interconnect_kw (float) – Interconnection limit [kW]
project_life (int) – (optional) Analysis period [years]
cap_cred_avail_storage (bool) – Base capacity credit on available storage (True), otherwise use only dispatched generation (False)
- simulate_power()#
Runs CSP system model simulate
- Returns:
SSC results dictionary
- Return type:
dict
- simulate_with_dispatch(n_periods, sim_start_time, store_outputs=True)#
Simulate CSP system using dispatch solution as targets
- Parameters:
n_periods (int) – Number of hours to simulate [hrs]
sim_start_time (int) – Start hour of simulation horizon
store_outputs (bool) – When True SSC and dispatch results are stored in CspOutputs, o.w. they are not stored
- solar_thermal_resource: list#
- ssc: PysscWrap | PysamWrap | None#
- property system_capacity_kw: float#
Gross power cycle design rating [kWe]
- property system_nameplate_mw: float#
System nameplate [MW]
- property tax_incentives: list#
The sum of Federal and State PTC and ITC tax incentives [$]
- property tes_capacity: float#
TES energy capacity [MWt-hr]
- property tes_hours: float#
Equivalent full-load thermal storage hours [hr]
- tmy3_to_df()#
Parses TMY3 solar resource file (from SiteInfo) and coverts data to a Pandas DataFrame
Note
Be careful of leading spaces in the column names, they are hard to catch and break the parser
- Returns:
Weather file data (DataFrame)
- property total_installed_cost: float#
Installed cost [$]
- property total_revenue: list#
Total revenue [$]
- update_ssc_inputs_from_plant_state()#
Updates SSC inputs from CSP plant state attribute
- value(var_name, var_value=None)#
Overrides
PowerSource.valueto enable the use of PySSC rather than PySAM. Method looks in system model (PySSC) first. If unsuccessful, then it looks in the financial model (PySAM).Note
If system and financial models contain a variable with the same name, only the system model variable will be set.
value(var_name)Gets variable valuevalue(var_name, var_value)Sets variable value- Parameters:
var_name – PySSC or PySAM variable name
var_value – (optional) PySAM variable value
- Returns:
Variable value (when getter)
Trough Plant Configuration#
- class hopp.simulation.technologies.csp.trough_plant.TroughConfig(cycle_capacity_kw, solar_multiple, tes_hours, fin_model=None, tech_name='trough_physical', name='TroughPlant')#
Bases:
CspConfigConfiguration class for TroughPlant.
- Parameters:
cycle_capacity_kw (float) – Power cycle design turbine gross output [kWe]
solar_multiple (float) – Solar multiple [-]
tes_hours (float) – Full load hours of thermal energy storage [hrs]
fin_model (dict | Singleowner | CustomFinancialModel | None) – Financial model for the specific technology
tech_name (str)
name (str)
- tech_name: str#
- name: str#
- __init__(cycle_capacity_kw, solar_multiple, tes_hours, fin_model=None, tech_name='trough_physical', name='TroughPlant')#
Method generated by attrs for class TroughConfig.
- Parameters:
cycle_capacity_kw (float)
solar_multiple (float)
tes_hours (float)
fin_model (dict | Singleowner | CustomFinancialModel | None)
tech_name (str)
name (str)
- Return type:
None
- _get_model_dict()#
Convenience method that wraps the attrs.asdict method. Returns the object’s parameters as a dictionary.
- Returns:
dict – The provided or default, if no input provided, model settings as a dictionary.
- Return type:
dict
- as_dict()#
Creates a JSON and YAML friendly dictionary that can be save for future reloading. This dictionary will contain only Python types that can later be converted to their proper Turbine formats.
- Returns:
dict – All key, vaue pais required for class recreation.
- Return type:
dict
- cycle_capacity_kw: float#
- fin_model: dict | FinancialModelType | None#
- classmethod from_dict(data)#
Maps a data dictionary to an attr-defined class.
TODO: Add an error to ensure that either none or all the parameters are passed in
- Parameters:
data (dict) – dict The data dictionary to be mapped.
- Returns:
- cls
The attr-defined class.
- classmethod get_model_defaults()#
Produces a dictionary of the keyword arguments and their defaults.
- Returns:
Dict[str, Any] – Dictionary of keyword argument: default.
- Return type:
Dict[str, Any]
- property logger#
- solar_multiple: float#
- tes_hours: float#