MHK Wave Plant

Contents

MHK Wave Plant#

MHK Wave Generator class

Wave Plant Model#

class hopp.simulation.technologies.wave.mhk_wave_plant.MHKWavePlant(site, config, cost_model_inputs=None, config_name='MhkWave')#

Bases: PowerSource

Marine Hydrokinetic (MHK) Wave Plant.

Parameters:
  • site (SiteInfo) – Site information

  • config (MHKWaveConfig) – MHK system configuration parameters

  • cost_model_inputs (dict) – An optional dictionary containing input parameters for cost modeling.

  • config_name (str)

site: SiteInfo#
config: MHKWaveConfig#
cost_model_inputs: MHKCostModelInputs | None#
config_name: str#
mhk_costs: MHKCosts | None#
create_mhk_cost_calculator(cost_model_inputs)#

Instantiates MHKCosts, cost calculator for MHKWavePlant.

Parameters:

cost_model_inputs (dict | MHKCostModelInputs) – Input parameters for cost modeling.

calculate_total_installed_cost()#
Return type:

float

system_capacity_by_num_devices(wave_size_kw)#

Sets the system capacity by adjusting the number of devices

Parameters:

wave_size_kw (float)

simulate(interconnect_kw, project_life=25, lifetime_sim=False)#

Run the system and financial model

Parameters:
  • interconnect_kw (float) – grid interconnect

  • project_life (int) – Number of years in the analysis period (expected project lifetime)

  • lifetime_sim

    For simulation modules which support simulating each year of the

    project_life, whether or not to do so; otherwise the first year data is repeated

property device_rated_power: float#
property number_devices: int#
property wave_power_matrix: List[List[float]]#
__init__(site, config, cost_model_inputs=None, config_name='MhkWave')#

Method generated by attrs for class MHKWavePlant.

Parameters:
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

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

  1. PPA, capacity payment, and curtailment revenues

  2. Federal, state, utility, and other production-based incentive income

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

Calculates the maximum feasible generation profile that could have occurred (year 1)

Parameters:

interconnect_kw (float) – Interconnection limit [kW]

Returns:

maximum feasible generation [kWh]

Return type:

list

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)

property generation_profile: list#

System power generated [kW]

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]

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

setup_performance_model()#

Sets up performance model to before simulating power production. Required by specific technologies

simulate_financials(interconnect_kw, project_life)#

Runs the finanical model for individual sub-systems

Parameters:
  • interconnect_kw (float) – float, Hybrid interconnect limit [kW]

  • project_life (int) – int, Number of year in the analysis period (execepted project lifetime) [years]

Returns:

simulate_power(project_life, lifetime_sim=False)#

Runs the system models for individual sub-systems

Parameters:
  • project_lifeint, Number of year in the analysis period (execepted project lifetime) [years]

  • lifetime_simbool, For simulation modules which support simulating each year of the project_life, whether or not to do so; otherwise the first year data is repeated

Returns:

property system_capacity_kw: float#

System’s nameplate capacity [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 [$]

value(var_name, var_value=None)#

Gets or Sets a variable value within either the system or financial PySAM models. Method looks in system model first. If unsuccessful, then it looks in the financial model.

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 value

value(var_name, var_value) Sets variable value

Parameters:
  • var_name (str) – PySAM variable name

  • var_value – (optional) PySAM variable value

Returns:

Variable value (when getter)

property annual_energy_kwh: float#

Annual energy [kWh]

property capacity_factor: float#

System capacity factor [%]

property numberHours: float#

Wave Plant Configuration#

class hopp.simulation.technologies.wave.mhk_wave_plant.MHKWaveConfig(device_rating_kw, num_devices, wave_power_matrix, fin_model, loss_array_spacing=0.0, loss_resource_overprediction=0.0, loss_transmission=0.0, loss_downtime=0.0, loss_additional=0.0, name='MHKWavePlant')#

Bases: BaseClass

Configuration class for MHKWavePlant.

Parameters:
  • device_rating_kw (float) – Rated power of the MHK device in kilowatts

  • num_devices (int) – Number of MHK devices in the system

  • wave_power_matrix (List[List[float]]) – Wave power matrix

  • fin_model (dict | obj) –

    Optional financial model. Can be any of the following:

    • a dict representing a CustomFinancialModel

    • an object representing a CustomFinancialModel instance

  • loss_array_spacing (float) – Array spacing loss in % (default: 0)

  • loss_resource_overprediction (float) – Resource overprediction loss in % (default: 0)

  • loss_transmission (float) – Transmission loss in % (default: 0)

  • loss_downtime (float) – Array/WEC downtime loss in % (default: 0)

  • loss_additional (float) – Additional losses in % (default: 0)

  • name (str)

device_rating_kw: float#
num_devices: int#
wave_power_matrix: List[List[float]]#
fin_model: dict | CustomFinancialModel#
loss_array_spacing: float#
loss_resource_overprediction: float#
loss_transmission: float#
loss_downtime: float#
loss_additional: float#
name: str#
__init__(device_rating_kw, num_devices, wave_power_matrix, fin_model, loss_array_spacing=0.0, loss_resource_overprediction=0.0, loss_transmission=0.0, loss_downtime=0.0, loss_additional=0.0, name='MHKWavePlant')#

Method generated by attrs for class MHKWaveConfig.

Parameters:
  • device_rating_kw (float)

  • num_devices (int)

  • wave_power_matrix (List[List[float]])

  • fin_model (dict | CustomFinancialModel)

  • loss_array_spacing (float)

  • loss_resource_overprediction (float)

  • loss_transmission (float)

  • loss_downtime (float)

  • loss_additional (float)

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

Wave Plant Cost Model#

For details on the cost model used in MHK Wave Plants, refer to the MHK Cost Model.