Flexible Loads
Data Fields & Method Definitions
New
- class FlexLoadResource
- 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 class_name: str | None = None
- field cumulative_retired_capacity: ts.NumericTimeseries | None = None
- field cumulative_retired_storage_capacity: ts.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: 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 name: str | tuple [Required]
- field operational_capacity: ts.NumericTimeseries | None = None
- field operational_storage_capacity: ts.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: 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 retired_capacity: ts.NumericTimeseries | None = None
- field retired_storage_capacity: ts.NumericTimeseries | None = None
- field selected_capacity: float | None = None
- field selected_storage_capacity: float | None = None
- 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 vintage_parent_group: str | None = None
- 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
- classmethod update_duration_default(values)
Set default of duration equal to adjacency if not provided
- SAVE_PATH: ClassVar[str] = 'resources/shift'
Inherited
- class GenericResource
- 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 class_name: str | None = None
- field cumulative_retired_capacity: ts.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 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 name: str | tuple [Required]
- field operational_capacity: ts.NumericTimeseries | None = None
- 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 retired_capacity: ts.NumericTimeseries | None = None
- field selected_capacity: float | None = None
- 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 vintage_parent_group: str | None = None
- 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.
- SAVE_PATH: ClassVar[str] = 'resources/generic'
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve.
- property has_energy_budget: bool
- 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 results_reporting_category
- property results_reporting_folder
- property scaled_annual_energy_budget
- property scaled_daily_energy_budget
- property scaled_monthly_energy_budget
- property scaled_pmax_profile: Dict[int, Series]
- property scaled_pmin_profile
Flexible loads formulation is based on [1]
The FlexLoadResource class represent resources that perform demand response by shifting its load profile to reduce
consumption during high demand periods without sacrificing end-user interests. Flexible Load Resources are also commonly
referred to as “Shift DR”. Examples of flexible load resources include water heaters, electric vehicle chargers, and
smart thermostats.
FlexLoadResource inherit all attributes and constraints from ShedDrResource and StorageResource. The following are
required inputs are not unique to FlexLoadResource but should be considered carefully.
Hourly shift up and down limits:
The hourly flexibility of a resource depends on the baseline load shape assumed. Baseline load shapes determine the amount of head room that a resource can charge or discharge in each hour, as illustrated in the figure below. The baseline load shape of a flexible load resource is included in the system load profile, so any power input or power output is a deviation from the assumed default shape. This concept is unique to flex loads.
The hourly shift limits are input into Recap as power_output_max and power_input_max timeseries profiles. Power_input_max represents maximum “headroom” on loads, for example the number of “plugged in” devices minus the ( unshifted) baseline load of those devices. Power_output_max limits represent the portion of the (unshifted) baseline load that could be reduced in an hour while still maintaining an acceptable amount of “service” (cooling buildings, pumping water, etc).
Energy mileage:
For many loads there is significant potential to shift loads up and down for each hour. However, it is not acceptable for the end-user for the load to be shifted more than its underlying consumption or an energy budget. Limits on the MWh of shiftable load per day are enforced in Kit using the input ‘energy_budget_daily’. There are also optional ‘energy_budget_monthly’ and ‘energy_budget_annual’ options, but only ‘energy_budget_daily’ is required for all FlexLoadResource. Please note: the energy budget is only for the power_output of the resource, shifting will enforce an equivalent amount of power_input and therefore the actual mileage allowed will be double the input.
Where do the data inputs go?
Resource Attributes will be specified in the UI
Custom attributes below can be specified as a timeseries, placed in
data > profiles
Pmin Rating
Pmax Rating
Max Charging Rating (CSV file)
Daily Energy Budget
Annual Energy Budget