new_modeling_toolkit.system.fuel package

Submodules

new_modeling_toolkit.system.fuel.candidate_fuel module

class CandidateFuel

Bases: _EnergyCarrier

A candidate fuel is one type of fuel that can be used to meet a final fuel demand, be produced by a fuel production plant, or consumed by a plant or thermal resource.

Gasoline is a final fuel; E85 ethanol and fossil gasoline are candidate fuels.

Every candidate fuel is either a commodity, which can be parametrized to have an upper limit of availability and prices, or can be produced via a fuel conversion plant. Currently, the only form of fuel conversion possible is fuel-to-fuel or electricity-to-fuel.

from_csv()

instantiate fuel objects from a csv input file

Fields:
field annual_energy_policies: dict[str, AnnualEnergyStandardContribution] = {}
Constraints:
  • category = FieldCategory.OPERATIONS

  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = to

  • default_exclude = False

field annual_price: NumericTimeseries | None = None
Constraints:
  • category = FieldCategory.OPERATIONS

  • units = dollar / MMBtu

  • excel_short_title = Annual Price

  • warning_bounds = (None, None)

  • show_year_headers = True

  • 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 availability: NumericTimeseries | None = None

This input sets the maximum potential for this commodity product. If the commodity product is used in RESOLVE, consumption of this product will never exceed the availability in a given year.

Constraints:
  • category = FieldCategory.OPERATIONS

  • units = MMBtu_per_year

  • excel_short_title = Availability

  • warning_bounds = (None, None)

  • show_year_headers = True

  • default_exclude = False

field charging_processes: dict[str, ChargeProcess] = {}
field class_name: str | None = None
field commodity: bool = True (alias 'fuel_is_commodity_bool')

Set to False if this fuel is endogenously produced; otherwise, it will be considered a ‘commodity’ with a fixed price stream and potentially a fixed consumption limit.

Constraints:
  • category = FieldCategory.OPERATIONS

  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • default_exclude = False

field demands: dict[str, DemandToProduct] = {}
field electrolyzers: dict[str, Linkage] = {}
field emission_types: dict[str, Linkage] = {}
field emissions_policies: dict[str, EmissionsContribution] = {}
Constraints:
  • category = FieldCategory.OPERATIONS

  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = to

  • default_exclude = False

field final_fuels: dict[str, Linkage] = {}
field fuel_production_plants: dict[str, Linkage] = {}
field fuel_storages: dict[str, Linkage] = {}
field fuel_transportations: dict[str, Linkage] = {}
field fuel_zones: dict[str, Linkage] = {}
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 monthly_price_multiplier: NumericTimeseries | None = None
Constraints:
  • category = FieldCategory.OPERATIONS

  • units =

  • excel_short_title = Multiplier

  • warning_bounds = (None, None)

  • show_year_headers = True

  • default_exclude = False

field name: str | tuple [Required]
field pollutants: dict[str, Linkage] = {}
field price_per_unit: NumericTimeseries | None = None (alias 'fuel_price_per_mmbtu')
Constraints:
  • category = FieldCategory.OPERATIONS

  • units = dollar / MMBtu

  • excel_short_title = Price

  • warning_bounds = (None, None)

  • show_year_headers = True

  • default_exclude = False

field processes: Annotated[dict[Union[tuple[str, str], str], Process], Metadata(category=FieldCategory.OPERATIONS)] [Optional]

These three-way linkages define the input-output relationships between products on a plant

Constraints:
  • category = FieldCategory.OPERATIONS

  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • default_exclude = False

field product_blends: dict[str, ProductToBlend] = {}
field resources: dict[str, CandidateFuelToResource] = {}
Constraints:
  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = to

  • default_exclude = False

field sector_candidate_fuel_blending: dict[tuple[str, str] | str, ThreeWayLinkage] = {}
field transportations: dict[str, ProductToTransportation] = {}
field unit: Unit | str = <Unit('MMBtu')>
field zones: dict[str, ZoneToProduct] = {}
calc_energy_demand(sector: str, final_fuel_energy_demand: Series) Series

CandidateFuel energy demand = FinalFuel energy demand * candidate fuel blending %

Parameters:
  • sector – str of Sector name, used for filtering input data

  • final_fuel_energy_demand – pd.Series of energy demand for the FinalFuel

Returns: pd.Series of energy demand for the CandidateFuel

calc_fuel_cost(candidate_fuel_energy_demand: Series)

CandidateFuel fuel cost = CandidateFuel energy demand * candidate fuel fuel_price per mmbtu

Parameters:

candidate_fuel_energy_demand – pd.Series of calculated CandidateFuel energy demand in mmbtu

Returns: pd.Series of CandidateFuel fuel cost in $

candidate_fuel_blend(sector: str) Series
Parameters:

sector – str of Sector name

Returns: pd.Series of blend_override data for the input sector name saved on the SectorCandidateFuelBlending ThreeWayLinkage

revalidate()

Check that product price is specified if commodity is True.

SAVE_PATH: ClassVar[str] = 'candidate_fuels'
property final_fuel_name
property fuel_is_commodity_bool
property fuel_price_per_mmbtu
property pollutant_list
property thermal_resource_instances: dict[str]

new_modeling_toolkit.system.fuel.final_fuel module

class FinalFuel

Bases: Component

A final fuel represents a type of energy that can be consumed by a device, or by an energy demand subsector. A final fuel may represent several unique fuels– for example, the “diesel” final fuel might actually represent the sum of fossil diesel and renewable diesel. The purpose of a final fuel is to aggregate all fuels which have common combustion characteristics from the perspective of a device or energy demand subsector. The term “final” refers to the fact that this is the fuel that is seen at the “final” point in the energy supply chain, i.e. the point of combustion.

This component exists mainly so that the fuel share of service demand for devices can be specified via a linkage to fuels. The fuel_switchings attribute defined on a three-way linkage between final fuels and energy demand subsectors that dictates the extent, efficiency, and cost of fuel switching within a given energy demand subsector. Fuel efficiency occurs after fuel switching.

Fields:
field annual_demand: NumericTimeseries | None = None

Annual fuel demand.

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 candidate_fuels: dict[str, Linkage] = {}
field ccs_plants: dict[str, Linkage] = {}
field class_name: str | None = None
field demand: NumericTimeseries | None = None

Annual fuel demand.

field devices: dict[str, Linkage] = {}
field energy_demand_subsector_to_final_fuel_to_ccs_plant: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
field energy_demand_subsectors: dict[str, Linkage] = {}
field fuel_is_electricity: bool = False
field fuel_is_using_emissions_trajectory_override: bool = False
field fuel_price_per_mmbtu_override: NumericTimeseries | None = None
field fuel_switchings: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
field fuel_zones: dict[str, Linkage] = {}
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 name: str | tuple [Required]
field negative_emissions_technologies: dict[str, Linkage] = {}
field policies: dict[str, Linkage] = {}
field sector_candidate_fuel_blending: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
calc_energy_demand_cost_and_emissions(sector: str, energy_demand: Series)

Loop through CandidateFuels linked to the FinalFuel. For each candidate fuel, calculate the energy demand. Then loop through each pollutant on each candidate fuel and calculate emissions by pollutant type. Results are temporarily saved on the linkages (ex: FinalFuelToCandidateFuel and CandidateFuelToPollutant). After looping, results are then aggregated (by calling the `self._return_{result type}_by_candidate_fuel’ functions) and saved permanently on the linked component. Another option is to save aggregated results on the 1:1 XToFinalFuel linkage because it will not be overwritten.

Parameters:
  • sector – name of sector for filtering. Ex: “Residential” or “Industrial”

  • energy_demand – pd.Series of energy demand of FinalFuel in mmbtu

Returns:

SAVE_PATH: ClassVar[str] = 'products/final_fuels'
property candidate_fuels_list: list[CandidateFuel]

list of CandidateFuel components linked to the FinalFuel object

Type:

Returns

Module contents