You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,7 @@
12
12
- Added electricity and water consumption profiles as outputs to the `ECOElectrolyzerPerformanceModel`[PR 690](https://github.com/NatLabRockies/H2Integrate/pull/690)
13
13
- Add `PeakLoadManagementHeuristicOpenLoopStorageController` as a storage control strategy. [PR 641](https://github.com/NatLabRockies/H2Integrate/pull/641)
14
14
- Minor cleanup to `pose_optimization`[PR 695](https://github.com/NatLabRockies/H2Integrate/pull/695)
15
+
- Add per-year pricing support for Grid and Feedstock cost models, allowing price arrays of length `plant_life` in addition to scalar and per-timestep arrays. [PR 700](https://github.com/NatLabRockies/H2Integrate/pull/700)
15
16
- Added ability to have a custom/user-specified resource model [PR 698](https://github.com/NatLabRockies/H2Integrate/pull/698)
16
17
- Add `{commodity}_set_point` as an input to hydrogen fuel cell model [PR 709](https://github.com/NatLabRockies/H2Integrate/pull/709)
17
18
- Rename `n_control_window` to `n_control_window_hours` for unit clarity [PR 712](https://github.com/NatLabRockies/H2Integrate/pull/712)
Copy file name to clipboardExpand all lines: docs/technology_models/feedstocks.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -73,14 +73,15 @@ ng_feedstock:
73
73
- `commodity_rate_units` (str): Must match the performance model commodity_rate_units
74
74
- `price` (float, int, or list): Cost per unit in `USD/commodity_amount_units`. Can be:
75
75
- Scalar: Constant price for all timesteps and years
76
-
- List: Price per timestep
76
+
- List of length `n_timesteps`: Price per timestep, applied uniformly across all years
77
+
- List of length `plant_life`: Price per year of plant operation
77
78
- `annual_cost` (float, optional): Fixed cost per year in USD/year. Defaults to 0.0
78
79
- `start_up_cost` (float, optional): One-time capital cost in USD. Defaults to 0.0
79
80
- `cost_year` (int): Dollar year for cost inputs
80
81
- `commodity_amount_units` (str | None, optional): the amount units of the commodity (i.e., "MMBtu", "kg", "galUS" or "kW*h"). If None, will be set as `commodity_rate_units*h`
81
82
82
83
```{tip}
83
-
The `price` parameter is flexible - you can specify constant pricing with a single value or time-varying pricing with an array of values matching the number of simulation timesteps.
84
+
The `price` parameter is flexible - you can specify constant pricing with a single value, time-varying pricing with an array of length `n_timesteps`, or per-year pricing with an array of length `plant_life`. When `n_timesteps == plant_life`, the per-year interpretation will be used and a warning is issued for clarity.
|`electricity_out`| array[n_timesteps]| kW | Electricity flowing out of grid (buying from grid). |
52
-
|`electricity_buy_price`| scalar/array[n_timesteps]| $/kWh | Price to buy electricity from grid (optional, time-varying supported). |
53
-
|`electricity_sold`| array[n_timesteps]| kW | Electricity flowing into grid (selling to grid). |
54
-
|`electricity_sell_price`| scalar/array[n_timesteps]| $/kWh | Price to sell electricity to grid (optional, time-varying supported). |
51
+
|`electricity_buy_price`| scalar or array | $/kWh | Price to buy electricity from grid (optional). Shape is `n_timesteps` when `buy_price_mode` is `per_timestep`, or `plant_life` when `per_year`. |
52
+
|`buy_price_mode`| string | — |`"per_timestep"` or `"per_year"`. Controls the buy price input shape and cost calculation. |
53
+
|`electricity_out`| array[n_timesteps]| kW | Electricity flowing out of grid (buying). Present when `buy_price_mode` is `per_timestep` (or buy price is not set). |
54
+
|`annual_electricity_out`| array[plant_life]| kWh/yr | Annual electricity bought from grid. Present when `buy_price_mode` is `per_year`. |
55
+
|`electricity_sell_price`| scalar or array | $/kWh | Price to sell electricity to grid (optional). Shape is `n_timesteps` when `sell_price_mode` is `per_timestep`, or `plant_life` when `per_year`. |
56
+
|`sell_price_mode`| string | — |`"per_timestep"` or `"per_year"`. Controls the sell price input shape and cost calculation. |
57
+
|`electricity_sold`| array[n_timesteps]| kW | Electricity flowing into grid (selling). Present when `sell_price_mode` is `per_timestep` (or sell price is not set). |
58
+
|`annual_electricity_sold`| array[plant_life]| kWh/yr | Annual electricity sold to grid. Present when `sell_price_mode` is `per_year`. |
55
59
56
60
**Outputs**
57
61
| Name | Description |
@@ -71,3 +75,20 @@ If you're using a price-maker financial model (e.g., calculating the LCOE) and s
71
75
```{note}
72
76
The grid components are currently compatible with 5-minute (300-second) to 1-hour (3600-second) time steps.
73
77
```
78
+
79
+
### Price Input Modes
80
+
81
+
The pricing mode is controlled explicitly via `buy_price_mode` and `sell_price_mode` in the grid cost configuration. Each can be set to:
82
+
83
+
-**`per_timestep`** (default): The price is a scalar or an array of length `n_timesteps`. The cost model uses the timestep-level `electricity_out` / `electricity_sold` inputs (in kW) and converts to energy using `dt`. The resulting `VarOpEx` is a single value applied uniformly across all years.
84
+
-**`per_year`**: The price is an array of length `plant_life`. The cost model uses `annual_electricity_out` / `annual_electricity_sold` inputs (in kWh/yr, shape `plant_life`) directly, producing a per-year `VarOpEx` array with no `dt` conversion needed in the cost model.
0 commit comments