Finance Parameters#

Overview#

The finance_parameters section of the plant_config defines the financial subsystems of the plant. These parameters configure how costs, revenues, and investment metrics are calculated across all or parts of the modeled system.

Note

The plant_life parameter from the plant section of the plant_config is also used in finance calculations as the operating life of the plant.

If a user is computing finances, then at a minimum, finance_parameters must include:

  • cost_adjustment_parameters:

    • target_dollar_year: dollar-year to convert costs to.

    • cost_year_adjustment_inflation: used to adjust costs for each technology from its native cost year to the target_dollar_year (see details on cost years and cost models here)

Other variables in finance_parameters vary depending on the financial analysis structure. There are two major modes of operation:

  • Single-model mode (default): All technologies are grouped together into a single financial calculation.

  • Subgroup mode: Technologies are split into one or more subgroups, each with its own commodity and one or more finance models.

Finance Groups vs. Finance Subgroups#

Within this framework, there are two distinct layers, finance groups and finance subgroups:

Finance groups#

A finance group contains the attributes needed to run one finance model:

  • finance_model: The name of the financial model to use (e.g., ProFastLCO). Must correspond to one of the available models in self.supported_models.

  • model_inputs: A dictionary of parameters passed into the chosen finance model. These provide customization of assumptions such as discount rate, debt fraction, or cost escalation.

  • commodity (conditionally required): The product or service whose financial performance is being analyzed (e.g., hydrogen, electricity). Required if finance_subgroups are not used, otherwise defined within finance_subgroups.

Finance subgroups#

Subgroups are flexible collections of technologies that map to one or more finance groups. They allow you to:

  • Calculate financial metrics for only part of the system.

  • Compare different metrics of the same system (e.g., delivered vs. produced cost of hydrogen).

  • Run multiple models (e.g., LCOH, LCOE, LCOS, or NPV) on overlapping or distinct sets of technologies.

  • Model distributed or multi-location systems finances within a single plant configuration.

Subgroups contain information on how to construct the specific subgroup:

  • commodity: The product or service whose financial performance is being analyzed (e.g., hydrogen, electricity). Each finance subgroup is tied to a single commodity.

  • technologies: Technologies to include in the specific subgroup calculation (e.g., you might only want to include technologies that produce electricity in the levelized cost of energy calculation).

  • finance_groups: List of finance_groups that contain the finance_model and model_inputs. Required if multiple finance_groups are being used. Technology-specific finance_groups can be called by using the technology name listed in the tech_config (e.g., steel to use the steel specific finance model).

  • commodity_desc (optional): A text label to further distinguish outputs for a commodity. This is particularly useful when multiple finance models or subgroups reference the same commodity but need to produce separate outputs.

  • commodity_stream: A text label of a technology that outputs the specified commodity to use as the commodity production stream in finance calculations. This is required for every subgroup and lets you choose a specific commodity stream to use in finance calculations (such as the outputs of combiners or splitters).

  • The below two parameters are only needed to use a specified timeseries profile for finance calculations

    • use_commodity_stream_timeseries (optional): A boolean that defaults to False. If True, then flags to use a timeseries profile for the finance calculation rather than the capacity factor and rated commodity production of the commodity_stream technology.

    • commodity_stream_output: The name of timeseries profile output variable from commodity_stream to use for the finance calculation(s). This parameter is required if use_commodity_stream_timeseries is True.

Important

If no subgroups are defined, a default subgroup is created that contains all technologies and references the default finance model and commodity defined in finance_groups.

Example finance configurations#

We'll now walk through three common configurations, highlighting the differences in the plant_config files and showcasing examples that use each approach.

Single-model (no subgroups)#

If no finance_subgroups are specified, all technologies are automatically grouped into a single default subgroup. In this case:

  • commodity, commodity_stream, and finance_model must be defined directly in finance_groups.

  • A default subgroup named default is created internally.

General format:

finance_parameters:
  finance_groups:
    commodity: "hydrogen"
    commodity_stream: "electrolyzer"
    finance_model: "ProFastLCO"
    model_inputs:
      discount_rate: 0.08

Outputs are named:

finance_subgroup_default.<finance_model_output>

Examples:

Single finance model with subgroups#

If finance_groups contains a single model definition, you may split technologies into multiple subgroups. Each subgroup defines its own commodity and list of technologies but uses the shared finance model.

In this case you see that the commodity is not defined within the finance_groups and is instead defined within the finance_subgroups. In this example there are two separate financial calculations one for subgroup_a, which is for the hydrogen commodity and one for subgroup_b, which is for the ammonia commodity and includes the "electrolyzer" and "asu". If you had additional technologies in your tech_config besides those, they would have to be included in the finance_subgroups to be included in the financial calculations.

General format:

finance_parameters:
  finance_groups:
    finance_model: "ProFastLCO"
    model_inputs: #dictionary of inputs for ProFastLCO
  finance_subgroups:
    subgroup_a:
      commodity: "hydrogen" #required
      commodity_stream: "electrolyzer" #required
      technologies: ["electrolyzer"]
    subgroup_b:
      commodity: "ammonia" #required
      commodity_stream: "asu" #required
      technologies: ["electrolyzer", "asu"]

Outputs are named:

finance_subgroup_<subgroup_name>.<finance_model_output>

Examples:

Note

Within finance_groups, the commodity, finance_model, and model_inputs may be placed under a named key for the finance group and indented one level deeper. This structure is optional when only a single finance model is used, but it is supported for consistency with the format required when specifying multiple finance models (see Specifying Multiple Finance Groups).

Multiple financial models with subgroups#

When multiple finance models are needed (e.g., to calculate both NPV and LCOH, or to compare multiple finance cases), multiple finance groups can be defined and assigned to subgroups.

General format:

finance_parameters:
  finance_groups:
    group_a:
      finance_model: "ProFastLCO"
      model_inputs: {discount_rate: 0.08}
    group_b:
      finance_model: "NPVFinancial"
      model_inputs: {real_discount_rate: 0.05}
  finance_subgroups:
    subgroup_a:
      commodity: "hydrogen"
      finance_groups: ["group_a"]
      technologies: ["electrolyzer"]
    subgroup_b:
      commodity: "hydrogen"
      commodity_desc: "delivered"
      finance_groups: ["group_a", "group_b"]
      technologies: ["pipeline", "storage"]

Output naming:

  • If multiple finance groups are in the same subgroup, output names include the subgroup, commodity, description (if provided), and finance group name to avoid collisions in the OpenMDAO framework:

finance_subgroup_<subgroup_name>.<financial_model_output>_<commodity_desc>_<financial_group>
finance_subgroup_subgroup_a.LCOH_group_a
finance_subgroup_subgroup_b.LCOH_delivered_group_a
finance_subgroup_subgroup_b.NPV_hydrogen_delivered_group_b

Examples:

Key Behaviors#

  • If finance_parameters is missing --> no finance model is created.

  • If no finance_subgroups are defined → a default subgroup containing all technologies is created automatically.

  • Finance groups must not include a key named "default", as this is reserved for internal use.

  • Each subgroup must reference valid technology keys from technology_config['technologies']. Invalid keys raise errors.

  • Finance models must be listed in self.supported_models. Unknown models raise errors.

Using custom output streams for finance calculations#

Typically, the finance models use the capacity factor and rated commodity production rate of the technology specified as the commodity_stream for the finance calculations.

In some cases, the capacity factor or rated commodity production rate are not available or may not contain the information desired for the finance calculation. Some technologies, such as splitters, don't output the capacity factor or rated commodity production, they just output two timeseries profiles. Other technologies, such as the grid, output the capacity factor based on the electricity bought, but not the electricity sold. Below illustrates how to use a specified timeseries profile for the finance calculations rather than the capacity factor and rated commodity production rate output from the commodity_stream technology.

Below shows three different finance subgroups that use the timeseries outputs.

  • subgroup_a is using the wind.electricity_out profile for the finance calculation.

  • subgroup_b is using the splitter.electricity_out1 profile for the finance calculation.

  • subgroup_c is using the grid.electricity_sold profile for the finance calculation.

To use this functionality, use_commodity_stream_timeseries must be True and commodity_stream_output must be specified.

General format:

finance_parameters:
  finance_groups:
    finance_model: ProFastLCO
    model_inputs: #dictionary of inputs for ProFastLCO
  finance_subgroups:
    subgroup_a:
      commodity: electricity #required
      commodity_stream: wind # technology that electricity is output from
      use_commodity_stream_timeseries: true
      commodity_stream_output: electricity_out
      technologies: [wind]
    subgroup_b:
      commodity: electricity #required
      commodity_stream: splitter
      use_commodity_stream_timeseries: true
      commodity_stream_output: electricity_out1
      technologies: [wind, electrolyzer]
    subgroup_c:
      commodity: electricity #required
      commodity_stream: grid
      use_commodity_stream_timeseries: true
      commodity_stream_output: electricity_sold
      technologies: [grid]