new_modeling_toolkit.system.electric.resources package
Submodules
new_modeling_toolkit.system.electric.resources.flex_load module
- class FlexLoadResource
Bases:
ShedDrResource
,StorageResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_capital_cost (Annotated[float, Metadata(units=units.dollar / units.kWh_year)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
cumulative_retired_storage_capacity (ts.NumericTimeseries | None)
duration (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
energy_budget_daily (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
initial_committed_units (Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)])
max_call_duration (Annotated[int | None, Metadata(category=FieldCategory.OPERATIONS)])
min_down_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_stable_level (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
min_up_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
parasitic_loss (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
shift_direction (new_modeling_toolkit.system.electric.resources.flex_load.FlexLoadShiftDirection)
shutdown_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
start_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
state_of_charge_min (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
unit_commitment_mode (Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)])
unit_size (Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)])
- field adjacency: int [Required]
Number of adjacent hours to constrain energy shifting. Adjacency constraints ensure that if load is shifted down in one hour, an equivalent amount of load is shifted up at most X hours away, and vice versa. [hours]
- Constraints:
gt = 0
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: Annotated[float, Metadata(units=units.dollar / units.kWh_year)] = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(units=units.dollar / units.kWh_year)] [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: NumericTimeseries = None (alias 'flex_storage_duration')
Operational time of the battery at a specified power level before it runs out of energy [hours]. Note: not all flex load resources will require a duration. Only EV resources. For all others, the duration will default to the length of the adjacency window.
- Constraints:
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: Annotated[StorageDurationConstraint, Metadata(category=FieldCategory.OPERATIONS)] = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: FractionalTimeseries = None
Daily fraction of energy capacity allowed for daily dispatch [dimensionless].
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)] = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_annual_calls: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Annual number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_call_duration: Annotated[int | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Maximum duration of a single shed demand response event call [hrs].
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_daily_calls: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Daily number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_monthly_calls: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Monthly number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Max Input Profile')] [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Min Input Profile')] [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shift_direction: FlexLoadShiftDirection [Required]
If pre_consumption, flexible load resources always need to increase load first before providing power.An example of this is pre-cooling.If deferred_consumption, flexible load resources always will provide power first before increasing load.An example of this is deferring to use appliances. If either, the resource can do provide power or increase load first depending on what is optimal.
- field shutdown_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field state_of_charge_min: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)] = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M In')] [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class FlexLoadResourceGroup
Bases:
GenericResourceGroup
,FlexLoadResource
- Fields:
adjacency ()
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
annualized_storage_capital_cost ()
annualized_storage_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
charging_efficiency ()
charging_efficiency__type ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
cumulative_retired_storage_capacity ()
custom_constraints ()
discharging_efficiency ()
discharging_efficiency__type ()
duration ()
duration_constraint ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
initial_committed_units ()
integer_build_increment ()
max_annual_calls ()
max_call_duration ()
max_daily_calls ()
max_monthly_calls ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_down_time ()
min_operational_capacity ()
min_stable_level ()
min_up_time ()
name ()
operational_capacity ()
operational_storage_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
parasitic_loss ()
physical_lifetime ()
planned_capacity ()
potential ()
power_input_max ()
power_input_max__type ()
power_input_min ()
power_input_min__type ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
retired_storage_capacity ()
selected_capacity ()
selected_storage_capacity ()
shift_direction ()
shutdown_cost ()
start_cost ()
state_of_charge_min ()
stochastic_outage_rate ()
unit_commitment_mode ()
unit_size ()
variable_cost_power_input ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
- construct_operational_groups(assets: list[FlexLoadResource] = False) dict[str, AnyOperationalGroup]
Takes a list of resources of the same type and returns a list of OperationalGroup objects containing the assets which are operationally equivalent to one another.
If skip_single_member_groups is True, any group that would have only one Asset in it is not created, and a dictionary of these resources will be returned along with a dictionary of OperationalGroup objects. If skip_single_member_groups is False, an empty dictionary will be returned along with the OperationalGroups.
- Parameters:
assets β the list of Resources to create the groups from
skip_single_member_groups β whether to skip the creation of groups that would only have a single member
- Returns:
a dictionary of constructed AssetGroup instances single_member_assets: if skip_single_member_groups is True, a dictionary of all Assets that were not
assigned to a group
- Return type:
asset_groups
new_modeling_toolkit.system.electric.resources.generic module
- class GenericResource
Bases:
Asset
- Fields:
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
energy_budget_annual (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
energy_budget_daily (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
energy_budget_monthly (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_distributions (dict[str, new_modeling_toolkit.core.linkage.ResourceToOutageDistribution])
outage_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
outage_profile__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_output_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_output_max__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_output_min (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_output_min__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
reserves (dict[str, new_modeling_toolkit.core.linkage.ResourceToReserve])
resource_groups (dict[str, new_modeling_toolkit.core.linkage.ResourceToResourceGroup])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_output (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
zones (dict[str, new_modeling_toolkit.core.linkage.ResourceToZone])
- field allow_inter_period_sharing: bool = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: FractionalTimeseries | None = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: FractionalTimeseries | None = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: FractionalTimeseries | None = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: dict[str, ResourceToOutageDistribution] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: FractionalTimeseries [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: TimeseriesType | None = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: FractionalTimeseries [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: TimeseriesType | None = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: FractionalTimeseries [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: TimeseriesType | None = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: float | None = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: int | None = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: float | None = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: float | None = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: float | None = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: float | None = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: dict[str, ResourceToReserve] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: dict[str, ResourceToResourceGroup] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: NumericTimeseries [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, ResourceToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- clear_calculated_properties()
Clear the property cache so scaled profiles are recalculated after rescaling
- get_ramp_MW(modeled_year: Timestamp, timepoint_1: Tuple[Timestamp, Timestamp], timepoint_2: Tuple[Timestamp, Timestamp])
Change in output MW between two timepoints
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve.
- property outage_distribution: OutageDistribution | None
- property pmax_profile: Series
- property pmin_profile: Series
- property production_tax_credit_ts: NumericTimeseries
- property resource_group: ResourceGroup | None
- property scaled_pmax_profile: Dict[int, Series]
- class GenericResourceGroup
Bases:
AssetGroup
,GenericResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_cumulative_new_build (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
zones (dict[str, new_modeling_toolkit.core.linkage.ResourceToZone])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[None, BeforeValidator(_set_to_none)] = None
- Constraints:
func = <function _set_to_none at 0x72b1dfc4a160>
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, ResourceToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- model_post_init(_ModelMetaclass__context: Any) None
We need to both initialize private attributes and call the user-defined model_post_init method.
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve.
- property production_tax_credit_ts: NumericTimeseries
new_modeling_toolkit.system.electric.resources.hybrid module
- class HybridSolarResource
Bases:
HybridVariableResource
,SolarResource
- Fields:
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
hybrid_storage_resources ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
zones ()
- class HybridSolarResourceGroup
Bases:
HybridVariableResourceGroup
,SolarResourceGroup
,HybridSolarResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
hybrid_storage_resources ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
- class HybridStorageResource
Bases:
StorageResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_capital_cost (Annotated[float, Metadata(units=units.dollar / units.kWh_year)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
cumulative_retired_storage_capacity (ts.NumericTimeseries | None)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
parasitic_loss (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
state_of_charge_min (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: Annotated[float, Metadata(units=units.dollar / units.kWh_year)] = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(units=units.dollar / units.kWh_year)] [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: Annotated[float, Metadata(category=FieldCategory.OPERATIONS, show_year_headers=False, units=units.hour)] [Required] (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: Annotated[StorageDurationConstraint, Metadata(category=FieldCategory.OPERATIONS)] = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_variable_resources: dict[str, HybridStorageResourceToHybridVariableResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Max Input Profile')] [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Min Input Profile')] [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field state_of_charge_min: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M In')] [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property hybrid_erm_policy_linkage
Gets the ERM policy linkage for the hybrid storage resource for accessibility.
- property paired_variable_resource: HybridVariableResource
- class HybridStorageResourceGroup
Bases:
StorageResourceGroup
,HybridStorageResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
cumulative_retired_storage_capacity (ts.NumericTimeseries | None)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_cumulative_new_build (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
parasitic_loss (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
state_of_charge_min (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[None, BeforeValidator(_set_to_none)] = None
- Constraints:
func = <function _set_to_none at 0x72b1dfc4a160>
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, show_year_headers=False, units=units.hour)] = None (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time of the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: Annotated[StorageDurationConstraint, Metadata(category=FieldCategory.OPERATIONS)] = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_variable_resources: Annotated[dict[str, linkage.HybridStorageResourceToHybridVariableResource], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_input_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Max Input Profile')] [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Min Input Profile')] [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field state_of_charge_min: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M In')] [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HybridVariableResource
Bases:
VariableResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_storage_resources: dict[str, HybridStorageResourceToHybridVariableResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HybridVariableResourceGroup
Bases:
VariableResourceGroup
,HybridVariableResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_cumulative_new_build (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[None, BeforeValidator(_set_to_none)] = None
- Constraints:
func = <function _set_to_none at 0x72b1dfc4a160>
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_storage_resources: Annotated[dict[str, linkage.HybridStorageResourceToHybridVariableResource], Metadata(linkage_order='from')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HybridWindResource
Bases:
HybridVariableResource
,WindResource
- Fields:
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
hybrid_storage_resources ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
zones ()
- class HybridWindResourceGroup
Bases:
HybridVariableResourceGroup
,WindResourceGroup
,HybridWindResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
hybrid_storage_resources ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
new_modeling_toolkit.system.electric.resources.hydro module
- class HydroResource
Bases:
VariableResource
Resource with storage capacity.
Adds state-of-charge tracking.
It feels like BatteryResource could be composed of a GenericResource + Asset (that represents the storage costs), but need to think about this more before implementing.
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HydroResourceGroup
Bases:
VariableResourceGroup
,HydroResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_cumulative_new_build (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[None, BeforeValidator(_set_to_none)] = None
- Constraints:
func = <function _set_to_none at 0x72b1dfc4a160>
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- model_post_init(_ModelMetaclass__context: Any) None
We need to both initialize private attributes and call the user-defined model_post_init method.
new_modeling_toolkit.system.electric.resources.shed_dr module
- class ShedDrResource
Bases:
UnitCommitmentResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
initial_committed_units (Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)])
max_annual_calls (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
max_daily_calls (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
max_monthly_calls (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
min_down_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_stable_level (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
min_up_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
shutdown_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
start_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
unit_commitment_mode (Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)])
unit_size (Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)] = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_annual_calls: NumericTimeseries | None = None
Annual number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_call_duration: int | None = None
Maximum duration of a single shed demand response event call [hrs].
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_daily_calls: NumericTimeseries | None = None
Daily number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_monthly_calls: NumericTimeseries | None = None
Monthly number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shutdown_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)] = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class ShedDrResourceGroup
Bases:
GenericResourceGroup
,ShedDrResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
initial_committed_units ()
integer_build_increment ()
max_annual_calls ()
max_call_duration ()
max_daily_calls ()
max_monthly_calls ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_down_time ()
min_operational_capacity ()
min_stable_level ()
min_up_time ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
shutdown_cost ()
start_cost ()
stochastic_outage_rate ()
unit_commitment_mode ()
unit_size ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
- construct_operational_groups(assets: list[ShedDrResource] = False) dict[str, AnyOperationalGroup]
Takes a list of resources of the same type and returns a list of OperationalGroup objects containing the assets which are operationally equivalent to one another.
If skip_single_member_groups is True, any group that would have only one Asset in it is not created, and a dictionary of these resources will be returned along with a dictionary of OperationalGroup objects. If skip_single_member_groups is False, an empty dictionary will be returned along with the OperationalGroups.
- Parameters:
assets β the list of Resources to create the groups from
skip_single_member_groups β whether to skip the creation of groups that would only have a single member
- Returns:
a dictionary of constructed AssetGroup instances single_member_assets: if skip_single_member_groups is True, a dictionary of all Assets that were not
assigned to a group
- Return type:
asset_groups
new_modeling_toolkit.system.electric.resources.storage module
- class StorageDurationConstraint(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- class StorageResource
Bases:
GenericResource
Resource with storage capacity.
Adds state-of-charge tracking.
It feels like BatteryResource could be composed of a GenericResource + Asset (that represents the storage costs), but need to think about this more before implementing.
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
charging_efficiency (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
charging_efficiency__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
discharging_efficiency (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
discharging_efficiency__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_input_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_input_max__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_input_min (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_input_min__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
retired_storage_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_input (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: float = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: NumericTimeseries [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: FractionalTimeseries [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: TimeseriesType | None = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_retired_storage_capacity: NumericTimeseries | None = None
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: FractionalTimeseries [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: TimeseriesType | None = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: float [Required] (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: StorageDurationConstraint = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field operational_storage_capacity: NumericTimeseries | None = None
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: float = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: FractionalTimeseries [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: TimeseriesType | None = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: FractionalTimeseries [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: TimeseriesType | None = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field retired_storage_capacity: NumericTimeseries | None = None
- field state_of_charge_min: float = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: NumericTimeseries [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- check_if_operationally_equal(other)
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- clear_calculated_properties()
Clear the property cache so scaled profiles are recalculated after rescaling
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- save_cumulative_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_operational_storage_capacity()
Save the resulting operational storage capacity after the RESOLVE model has been solved.
- save_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_selected_storage_capacity()
Save the resulting selected storage capacity after the RESOLVE model has been solved.
- property imax_profile: Series
- property imin_profile: Series
- property planned_storage_capacity: Series
This property is for storage only now.
- property scaled_SOC_max_profile: Dict[int, Series]
This property is for storage only now.
- property scaled_imax_profile: Dict[int, Series]
- property scaled_imin_profile: Dict[int, Series]
- class StorageResourceGroup
Bases:
GenericResourceGroup
,StorageResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_capital_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
annualized_storage_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
cumulative_retired_storage_capacity (ts.NumericTimeseries | None)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_cumulative_new_build (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
parasitic_loss (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
power_input_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
state_of_charge_min (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_storage_capital_cost: NumericTimeseries [Optional]
- field annualized_storage_fixed_om_cost: NumericTimeseries [Optional]
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[None, BeforeValidator(_set_to_none)] = None
- Constraints:
func = <function _set_to_none at 0x72b1dfc4a160>
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: float | None = None (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time of the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: Annotated[StorageDurationConstraint, Metadata(category=FieldCategory.OPERATIONS)] = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_input_max: FractionalTimeseries [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Min Input Profile')] [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field state_of_charge_min: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M In')] [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- model_post_init(_ModelMetaclass__context: Any) None
We need to both initialize private attributes and call the user-defined model_post_init method.
new_modeling_toolkit.system.electric.resources.thermal module
- class ThermalResource
Bases:
GenericResource
Fuel-burning resource.
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.CandidateFuelToResource])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field candidate_fuels: dict[str, CandidateFuelToResource] = {}
String Input. This input links a specified candidate_fuels to this ThermalResource . (e.g. Natural_Gas to gas_CCGT).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field fuel_burn_slope: float | None = None (alias 'average_heat_rate')
Fuel burn slope (MMBTU/MWh). Aka average heat rate. The average heat rate = average fuel consumption per unit of output over a certain range of output levels. It is calculated by dividing the total fuel consumption by the total output over that range (a(x) = f(x) / x). It provides a measure of the overall efficiency of the power generation system over a given period of time or output range. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class ThermalResourceGroup
Bases:
GenericResourceGroup
,ThermalResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_cumulative_new_build (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='from')] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[None, BeforeValidator(_set_to_none)] = None
- Constraints:
func = <function _set_to_none at 0x72b1dfc4a160>
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field candidate_fuels: Annotated[dict[str, CandidateFuelToResource], Metadata(linkage_order='from', category=FieldCategory.OPERATIONS)] = {}
String Input. This input links a specified candidate_fuels to this ThermalResource . (e.g. Natural_Gas to gas_CCGT).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field cumulative_potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field fuel_burn_slope: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=units.MMBtu / units.MWh, warning_bounds=(0, 17))] = None (alias 'average_heat_rate')
Fuel burn slope (MMBTU/MWh). Aka average heat rate. The average heat rate = average fuel consumption per unit of output over a certain range of output levels. It is calculated by dividing the total fuel consumption by the total output over that range (a(x) = f(x) / x). It provides a measure of the overall efficiency of the power generation system over a given period of time or output range. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW, show_year_headers=False)] = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class ThermalUnitCommitmentResource
Bases:
ThermalResource
,UnitCommitmentResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
initial_committed_units (Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)])
min_down_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_stable_level (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
min_up_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
shutdown_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
start_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
unit_commitment_mode (Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)])
unit_size (Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)])
- field addition_to_load: float = 0
Synchronous condenser addition to load. Multiplier to commited capacity. Default 0.
- Constraints:
ge = 0
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field candidate_fuels: Annotated[dict[str, CandidateFuelToResource], Metadata(linkage_order='from', category=FieldCategory.OPERATIONS)] = {}
String Input. This input links a specified candidate_fuels to this ThermalResource . (e.g. Natural_Gas to gas_CCGT).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field fuel_burn_intercept: float | None = None
Fuel burn intercept per generating unit. Represents the minimum amount of fuel used when a unit is on. Required when resource is an operational group or does not belong to one.
- Constraints:
category = FieldCategory.OPERATIONS
units = MMBtu / hour
excel_short_title =
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field fuel_burn_slope: float | None = None (alias 'marginal_heat_rate')
The marginal heat rate represents the rate of change of fuel consumption with respect to the level of output. Mathematically, it is the derivative of the heat input function with respect to output level (m(x) = Ξ΄y / Ξ΄x). It tells us how much additional fuel is required to produce one more unit of output (megawatt hour). Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)] = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shutdown_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_fuel_use: float = 0
[UC] Amount of fuel used per unit start [MMBTU/start]
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)] = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class ThermalUnitCommitmentResourceGroup
Bases:
GenericResourceGroup
,ThermalUnitCommitmentResource
- Fields:
addition_to_load ()
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
candidate_fuels ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
fuel_burn_intercept ()
fuel_burn_slope ()
hourly_energy_policies ()
include ()
initial_committed_units ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_down_time ()
min_operational_capacity ()
min_stable_level ()
min_up_time ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
shutdown_cost ()
start_cost ()
start_fuel_use ()
stochastic_outage_rate ()
unit_commitment_mode ()
unit_size ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
new_modeling_toolkit.system.electric.resources.unit_commitment module
- class UnitCommitmentMethod(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- class UnitCommitmentResource
Bases:
GenericResource
,ABC
Aggregate similar but non-identical units to reduce decision variables while still capturing individual unit decisions and constraints. Most constraints in this class are based on IEEE paperβHeterogeneous Unit Clustering for Efficient Operational Flexibility Modelingβ See ReadTheDocs documentation for a link to the paper
- Fields:
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
zones ()
- field initial_committed_units: Series | None = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: int | None = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: float = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: int | None = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field shutdown_cost: float = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: float = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: UnitCommitmentMethod = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: float = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- check_if_operationally_equal(other)
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- class UnitCommitmentResourceGroup
Bases:
GenericResourceGroup
,UnitCommitmentResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
initial_committed_units ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_down_time ()
min_operational_capacity ()
min_stable_level ()
min_up_time ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
shutdown_cost ()
start_cost ()
stochastic_outage_rate ()
unit_commitment_mode ()
unit_size ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
new_modeling_toolkit.system.electric.resources.variable module
Module contents
- class FlexLoadResource
Bases:
ShedDrResource
,StorageResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_capital_cost (Annotated[float, Metadata(units=units.dollar / units.kWh_year)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
cumulative_retired_storage_capacity (ts.NumericTimeseries | None)
duration (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
energy_budget_daily (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
initial_committed_units (Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)])
max_call_duration (Annotated[int | None, Metadata(category=FieldCategory.OPERATIONS)])
min_down_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_stable_level (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
min_up_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
parasitic_loss (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
shift_direction (new_modeling_toolkit.system.electric.resources.flex_load.FlexLoadShiftDirection)
shutdown_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
start_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
state_of_charge_min (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
unit_commitment_mode (Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)])
unit_size (Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)])
- field adjacency: int [Required]
Number of adjacent hours to constrain energy shifting. Adjacency constraints ensure that if load is shifted down in one hour, an equivalent amount of load is shifted up at most X hours away, and vice versa. [hours]
- Constraints:
gt = 0
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: Annotated[float, Metadata(units=units.dollar / units.kWh_year)] = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(units=units.dollar / units.kWh_year)] [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: NumericTimeseries = None (alias 'flex_storage_duration')
Operational time of the battery at a specified power level before it runs out of energy [hours]. Note: not all flex load resources will require a duration. Only EV resources. For all others, the duration will default to the length of the adjacency window.
- Constraints:
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: Annotated[StorageDurationConstraint, Metadata(category=FieldCategory.OPERATIONS)] = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: FractionalTimeseries = None
Daily fraction of energy capacity allowed for daily dispatch [dimensionless].
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)] = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_annual_calls: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Annual number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_call_duration: Annotated[int | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Maximum duration of a single shed demand response event call [hrs].
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_daily_calls: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Daily number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_monthly_calls: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Monthly number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Max Input Profile')] [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Min Input Profile')] [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shift_direction: FlexLoadShiftDirection [Required]
If pre_consumption, flexible load resources always need to increase load first before providing power.An example of this is pre-cooling.If deferred_consumption, flexible load resources always will provide power first before increasing load.An example of this is deferring to use appliances. If either, the resource can do provide power or increase load first depending on what is optimal.
- field shutdown_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field state_of_charge_min: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)] = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M In')] [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class GenericResource
Bases:
Asset
- Fields:
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
energy_budget_annual (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
energy_budget_daily (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
energy_budget_monthly (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_distributions (dict[str, new_modeling_toolkit.core.linkage.ResourceToOutageDistribution])
outage_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
outage_profile__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_output_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_output_max__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_output_min (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_output_min__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
reserves (dict[str, new_modeling_toolkit.core.linkage.ResourceToReserve])
resource_groups (dict[str, new_modeling_toolkit.core.linkage.ResourceToResourceGroup])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_output (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
zones (dict[str, new_modeling_toolkit.core.linkage.ResourceToZone])
- field allow_inter_period_sharing: bool = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: FractionalTimeseries | None = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: FractionalTimeseries | None = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: FractionalTimeseries | None = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: dict[str, ResourceToOutageDistribution] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: FractionalTimeseries [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: TimeseriesType | None = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: FractionalTimeseries [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: TimeseriesType | None = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: FractionalTimeseries [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: TimeseriesType | None = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: float | None = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: int | None = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: float | None = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: float | None = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: float | None = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: float | None = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: dict[str, ResourceToReserve] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: dict[str, ResourceToResourceGroup] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: NumericTimeseries [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, ResourceToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- clear_calculated_properties()
Clear the property cache so scaled profiles are recalculated after rescaling
- get_ramp_MW(modeled_year: Timestamp, timepoint_1: Tuple[Timestamp, Timestamp], timepoint_2: Tuple[Timestamp, Timestamp])
Change in output MW between two timepoints
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve.
- property outage_distribution: OutageDistribution | None
- property pmax_profile: Series
- property pmin_profile: Series
- property production_tax_credit_ts: NumericTimeseries
- property resource_group: ResourceGroup | None
- property scaled_pmax_profile: Dict[int, Series]
- class HybridSolarResource
Bases:
HybridVariableResource
,SolarResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annual_energy_policies (Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
annualized_capital_cost (Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))])
annualized_fixed_om_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
attr_path (Optional[Union[str, pathlib.Path]])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
caiso_tx_constraints (Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
class_name (str | None)
cumulative_retired_capacity (ts.NumericTimeseries | None)
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
emissions_policies (Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
energy_budget_annual (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')])
energy_budget_daily (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')])
energy_budget_monthly (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
hourly_energy_policies (Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
hybrid_storage_resources (Annotated[dict[str, linkage.HybridStorageResourceToHybridVariableResource], Metadata(linkage_order='from')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
integer_build_increment (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
mean_time_to_repair (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
name (Union[str, tuple])
operational_capacity (ts.NumericTimeseries | None)
outage_distributions (Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')])
outage_profile (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
planned_capacity (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_output_max (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')])
power_output_max__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
power_output_min (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')])
power_output_min__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
production_tax_credit (Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
ramp_rate_1_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)])
ramp_rate_2_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)])
ramp_rate_3_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)])
ramp_rate_4_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
reserves (Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
resource_groups (Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')])
retired_capacity (ts.NumericTimeseries | None)
selected_capacity (float | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_output (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')])
vintage_parent_group (Optional[str])
zones (Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_storage_resources: Annotated[dict[str, linkage.HybridStorageResourceToHybridVariableResource], Metadata(linkage_order='from')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HybridStorageResource
Bases:
StorageResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_capital_cost (Annotated[float, Metadata(units=units.dollar / units.kWh_year)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
cumulative_retired_storage_capacity (ts.NumericTimeseries | None)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
parasitic_loss (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
state_of_charge_min (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: Annotated[float, Metadata(units=units.dollar / units.kWh_year)] = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(units=units.dollar / units.kWh_year)] [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: Annotated[float, Metadata(category=FieldCategory.OPERATIONS, show_year_headers=False, units=units.hour)] [Required] (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: Annotated[StorageDurationConstraint, Metadata(category=FieldCategory.OPERATIONS)] = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_variable_resources: dict[str, HybridStorageResourceToHybridVariableResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Max Input Profile')] [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Min Input Profile')] [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field state_of_charge_min: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M In')] [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property hybrid_erm_policy_linkage
Gets the ERM policy linkage for the hybrid storage resource for accessibility.
- property paired_variable_resource: HybridVariableResource
- class HybridVariableResource
Bases:
VariableResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_storage_resources: dict[str, HybridStorageResourceToHybridVariableResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HybridWindResource
Bases:
HybridVariableResource
,WindResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annual_energy_policies (Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
annualized_capital_cost (Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))])
annualized_fixed_om_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
attr_path (Optional[Union[str, pathlib.Path]])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
caiso_tx_constraints (Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
class_name (str | None)
cumulative_retired_capacity (ts.NumericTimeseries | None)
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
emissions_policies (Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
energy_budget_annual (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')])
energy_budget_daily (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')])
energy_budget_monthly (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
hourly_energy_policies (Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
hybrid_storage_resources (Annotated[dict[str, linkage.HybridStorageResourceToHybridVariableResource], Metadata(linkage_order='from')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
integer_build_increment (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
mean_time_to_repair (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
name (Union[str, tuple])
operational_capacity (ts.NumericTimeseries | None)
outage_distributions (Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')])
outage_profile (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
planned_capacity (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_output_max (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')])
power_output_max__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
power_output_min (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')])
power_output_min__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
production_tax_credit (Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
ramp_rate_1_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)])
ramp_rate_2_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)])
ramp_rate_3_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)])
ramp_rate_4_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
reserves (Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
resource_groups (Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')])
retired_capacity (ts.NumericTimeseries | None)
selected_capacity (float | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_output (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')])
vintage_parent_group (Optional[str])
zones (Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hybrid_storage_resources: Annotated[dict[str, linkage.HybridStorageResourceToHybridVariableResource], Metadata(linkage_order='from')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class HydroResource
Bases:
VariableResource
Resource with storage capacity.
Adds state-of-charge tracking.
It feels like BatteryResource could be composed of a GenericResource + Asset (that represents the storage costs), but need to think about this more before implementing.
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
curtailable (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
curtailment_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS)] [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class ShedDrResource
Bases:
UnitCommitmentResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
initial_committed_units (Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)])
max_annual_calls (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
max_daily_calls (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
max_monthly_calls (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
min_down_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_stable_level (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
min_up_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
shutdown_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
start_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
unit_commitment_mode (Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)])
unit_size (Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)] = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_annual_calls: NumericTimeseries | None = None
Annual number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_call_duration: int | None = None
Maximum duration of a single shed demand response event call [hrs].
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_daily_calls: NumericTimeseries | None = None
Daily number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_monthly_calls: NumericTimeseries | None = None
Monthly number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shutdown_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)] = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class StorageResource
Bases:
GenericResource
Resource with storage capacity.
Adds state-of-charge tracking.
It feels like BatteryResource could be composed of a GenericResource + Asset (that represents the storage costs), but need to think about this more before implementing.
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annualized_storage_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
charging_efficiency (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
charging_efficiency__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
discharging_efficiency (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
discharging_efficiency__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_input_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_input_max__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_input_min (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_input_min__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
retired_storage_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_input (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: float = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: NumericTimeseries [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: FractionalTimeseries [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: TimeseriesType | None = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_retired_storage_capacity: NumericTimeseries | None = None
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field discharging_efficiency: FractionalTimeseries [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: TimeseriesType | None = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: float [Required] (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: StorageDurationConstraint = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field operational_storage_capacity: NumericTimeseries | None = None
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field parasitic_loss: float = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: FractionalTimeseries [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: TimeseriesType | None = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: FractionalTimeseries [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: TimeseriesType | None = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field retired_storage_capacity: NumericTimeseries | None = None
- field state_of_charge_min: float = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: NumericTimeseries [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- check_if_operationally_equal(other)
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- clear_calculated_properties()
Clear the property cache so scaled profiles are recalculated after rescaling
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- save_cumulative_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_operational_storage_capacity()
Save the resulting operational storage capacity after the RESOLVE model has been solved.
- save_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_selected_storage_capacity()
Save the resulting selected storage capacity after the RESOLVE model has been solved.
- property imax_profile: Series
- property imin_profile: Series
- property planned_storage_capacity: Series
This property is for storage only now.
- property scaled_SOC_max_profile: Dict[int, Series]
This property is for storage only now.
- property scaled_imax_profile: Dict[int, Series]
- property scaled_imin_profile: Dict[int, Series]
- class ThermalResource
Bases:
GenericResource
Fuel-burning resource.
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.CandidateFuelToResource])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field candidate_fuels: dict[str, CandidateFuelToResource] = {}
String Input. This input links a specified candidate_fuels to this ThermalResource . (e.g. Natural_Gas to gas_CCGT).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field fuel_burn_slope: float | None = None (alias 'average_heat_rate')
Fuel burn slope (MMBTU/MWh). Aka average heat rate. The average heat rate = average fuel consumption per unit of output over a certain range of output levels. It is calculated by dividing the total fuel consumption by the total output over that range (a(x) = f(x) / x). It provides a measure of the overall efficiency of the power generation system over a given period of time or output range. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class ThermalUnitCommitmentResource
Bases:
ThermalResource
,UnitCommitmentResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
initial_committed_units (Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)])
min_down_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
min_stable_level (Annotated[float, Metadata(category=FieldCategory.OPERATIONS)])
min_up_time (Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
shutdown_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
start_cost (Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)])
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
unit_commitment_mode (Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)])
unit_size (Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)])
- field addition_to_load: float = 0
Synchronous condenser addition to load. Multiplier to commited capacity. Default 0.
- Constraints:
ge = 0
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field candidate_fuels: Annotated[dict[str, CandidateFuelToResource], Metadata(linkage_order='from', category=FieldCategory.OPERATIONS)] = {}
String Input. This input links a specified candidate_fuels to this ThermalResource . (e.g. Natural_Gas to gas_CCGT).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field fuel_burn_intercept: float | None = None
Fuel burn intercept per generating unit. Represents the minimum amount of fuel used when a unit is on. Required when resource is an operational group or does not belong to one.
- Constraints:
category = FieldCategory.OPERATIONS
units = MMBtu / hour
excel_short_title =
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field fuel_burn_slope: float | None = None (alias 'marginal_heat_rate')
The marginal heat rate represents the rate of change of fuel consumption with respect to the level of output. Mathematically, it is the derivative of the heat input function with respect to output level (m(x) = Ξ΄y / Ξ΄x). It tells us how much additional fuel is required to produce one more unit of output (megawatt hour). Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Annotated[pd.Series | None, Metadata(category=FieldCategory.OPERATIONS)] = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: Annotated[float, Metadata(category=FieldCategory.OPERATIONS)] = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: Annotated[PositiveInt | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shutdown_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: Annotated[NonNegativeFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_fuel_use: float = 0
[UC] Amount of fuel used per unit start [MMBTU/start]
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: Annotated[UnitCommitmentMethod, Metadata(category=FieldCategory.OPERATIONS)] = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: Annotated[PositiveFloat, Metadata(category=FieldCategory.OPERATIONS)] = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- class UnitCommitmentResource
Bases:
GenericResource
,ABC
Aggregate similar but non-identical units to reduce decision variables while still capturing individual unit decisions and constraints. Most constraints in this class are based on IEEE paperβHeterogeneous Unit Clustering for Efficient Operational Flexibility Modelingβ See ReadTheDocs documentation for a link to the paper
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annual_energy_policies (Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
annualized_capital_cost (Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))])
annualized_fixed_om_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
attr_path (Optional[Union[str, pathlib.Path]])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
caiso_tx_constraints (Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
class_name (str | None)
cumulative_retired_capacity (ts.NumericTimeseries | None)
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
emissions_policies (Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
energy_budget_annual (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')])
energy_budget_daily (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')])
energy_budget_monthly (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
hourly_energy_policies (Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
integer_build_increment (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
mean_time_to_repair (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
name (Union[str, tuple])
operational_capacity (ts.NumericTimeseries | None)
outage_distributions (Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')])
outage_profile (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
planned_capacity (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_output_max (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')])
power_output_max__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
power_output_min (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')])
power_output_min__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
production_tax_credit (Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
ramp_rate_1_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)])
ramp_rate_2_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)])
ramp_rate_3_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)])
ramp_rate_4_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
reserves (Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
resource_groups (Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')])
retired_capacity (ts.NumericTimeseries | None)
selected_capacity (float | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_output (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')])
vintage_parent_group (Optional[str])
zones (Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field initial_committed_units: Series | None = None
For fixed initial condition, how many units are already committed/on
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_down_time: int | None = None
Minimum downtime between commitments (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_stable_level: float = 0
Minimum stable level when committed
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_up_time: int | None = None
Minimum uptime during a commitment (hours).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field shutdown_cost: float = 0.0
Cost for each unit shutdown ($/unit shutdown). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field start_cost: float = 0.0
Cost for each unit startup ($/unit start). If using linearized UC, this cost will be linearized as well.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_commitment_mode: UnitCommitmentMethod = UnitCommitmentMethod.LINEAR
To strictly the number of shift events, set to integer. Otherwise, the default is βlinearβ and does not fully limit the number of events. Linear is the default, because this is a much simpler optimization problem and you will see minimal increase in run time. This is an acceptable assumption for many projects if you are modeling a large area which could have several Demand Response programs in different locations, each with their own call limits. When modeling smaller geographic areas, or if the project needs strict call limits set the unit_commitment attribute to βintegerβ. Note that this will increase the run time. How much will vary depending on the model complexity, but a good rule of thumb is to assume 1.5x the run time if the variables were linear.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field unit_size: float = 0.0 (alias 'unit_size_mw')
Size of each unit that can be independently committed, in MW.
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- check_if_operationally_equal(other)
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- class VariableResource
Bases:
GenericResource
- Fields:
allow_inter_period_sharing (Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)])
annual_energy_policies (Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
annualized_capital_cost (Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))])
annualized_fixed_om_cost (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))])
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
attr_path (Optional[Union[str, pathlib.Path]])
build_year (Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)])
caiso_tx_constraints (Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
class_name (str | None)
cumulative_retired_capacity (ts.NumericTimeseries | None)
curtailable (bool)
curtailment_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
emissions_policies (Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
energy_budget_annual (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')])
energy_budget_daily (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')])
energy_budget_monthly (Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
hourly_energy_policies (Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
integer_build_increment (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
mean_time_to_repair (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)])
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
name (Union[str, tuple])
operational_capacity (ts.NumericTimeseries | None)
outage_distributions (Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')])
outage_profile (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)])
outage_profile__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
planned_capacity (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
potential (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
power_output_max (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')])
power_output_max__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
power_output_min (Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')])
power_output_min__type (Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)])
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
production_tax_credit (Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')])
ptc_term (Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')])
ramp_rate_1_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)])
ramp_rate_2_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)])
ramp_rate_3_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)])
ramp_rate_4_hour (Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
reserves (Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
resource_groups (Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')])
retired_capacity (ts.NumericTimeseries | None)
selected_capacity (float | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
variable_cost_power_output (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')])
vintage_parent_group (Optional[str])
zones (Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
- field allow_inter_period_sharing: Annotated[bool, Metadata(category=FieldCategory.OPERATIONS)] = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: Annotated[float, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Capital Cost', warning_bounds=(0, 1000))] = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.dollar / units.kW_year, excel_short_title='Fixed O&M', warning_bounds=(0, 100))] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')
the path to the attributes file
- field build_year: Annotated[pd.Timestamp, Metadata(category=FieldCategory.BUILD)] = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailable: bool = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: NumericTimeseries [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field energy_budget_annual: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.year, excel_short_title='Annual')] = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.day, excel_short_title='Daily')] = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: Annotated[ts.FractionalTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.month, excel_short_title='Monthly')] = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True
Include component in system.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: Annotated[dict[str, linkage.ResourceToOutageDistribution], Metadata(linkage_order='to')] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.unitless, excel_short_title='Outage', default_exclude=True)] [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Max Output Profile')] [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: Annotated[ts.FractionalTimeseries, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Min Output Profile')] [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: Annotated[TimeseriesType | None, Metadata(category=FieldCategory.OPERATIONS)] = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field production_tax_credit: Annotated[float | None, Metadata(units=units.dollar / units.MWh, excel_short_title='PTC')] = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: Annotated[int | None, Metadata(units=units.years, excel_short_title='PTC Term')] = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour)] = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 2)] = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 3)] = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: Annotated[float | None, Metadata(category=FieldCategory.OPERATIONS, units=1 / units.hour / 4)] = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: Annotated[dict[str, linkage.ResourceToReserve], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: Annotated[dict[str, linkage.ResourceToResourceGroup], Metadata(linkage_order='to')] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_output: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.OPERATIONS, units=units.dollar / units.MWh, excel_short_title='VO&M Out')] [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: Annotated[dict[str, linkage.ResourceToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- get_sampled_profile_cf(profile: Timeseries, temporal_settings: TemporalSettings) float
Return capacity factor of given profile based on dispatch windows weights
- classmethod scale_resource_profile(profile: Timeseries, scalar: float) Timeseries
Update input timeseries given scalar