Skip to content
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
259b895
Adding in compressed gas storage capex (not complete)
jmartin4u Apr 2, 2026
302aef0
Capex finished
jmartin4u Apr 8, 2026
70d5496
Opex added, compressor model crashing
jmartin4u Apr 8, 2026
b159329
Temporarily using pysam wind for speed
jmartin4u Apr 14, 2026
ea3ac03
Calculating storage cost in example, need to fix tests
jmartin4u Apr 15, 2026
6483f76
First test passing
jmartin4u Apr 15, 2026
e3d5d59
Changed compressor types, capex_per_kg test failing
jmartin4u Apr 15, 2026
b27efa3
Merge branch 'develop' into comp_h2_storage
jmartin4u Apr 15, 2026
04aa292
Storage capex per keg test fixed
jmartin4u Apr 15, 2026
0463477
Reverting example tech_config
jmartin4u Apr 15, 2026
e3bc32a
Docs + changing h2 storage constants to uninstalled (installed is ca…
jmartin4u Apr 16, 2026
18bc662
Fixing test values
jmartin4u Apr 16, 2026
595c3a5
Merge remote-tracking branch 'origin/develop' into comp_h2_storage
jmartin4u Apr 16, 2026
81db005
Moving images
jmartin4u Apr 16, 2026
ee7701e
Changelog update
jmartin4u Apr 16, 2026
70ba6a1
Merge branch 'develop' into comp_h2_storage
johnjasa Apr 16, 2026
d56c333
Updating test_hydrogen_storage
jmartin4u Apr 17, 2026
c971250
Fixing h2_storage_cost
jmartin4u Apr 17, 2026
93d23d0
Fixing double CEPCI inflation in tank cost
jmartin4u Apr 17, 2026
86d0a4b
Merge remote-tracking branch 'origin/develop' into comp_h2_storage
jmartin4u Apr 17, 2026
2e14c63
removed commodity_name from h2_storage cost config and updated format…
elenya-grant Apr 22, 2026
4f8be20
Merge branch 'develop' into comp_h2_storage
johnjasa Apr 23, 2026
d66659a
Addressing Jasa comments
jmartin4u Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,6 @@ resource_files/solar/*

# Ignore library files
library/*

# Don't ignore docs images
!docs/*/images/*.png
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
- Modified CI setup so Windows is temporarily disabled and also so unit, regression, and integration tests are run in separate jobs to speed up testing and provide more information on test failures. [PR 668](https://github.com/NatLabRockies/H2Integrate/pull/668)
- Added infrastructure for running models with non-hourly time steps via a class attribute `_time_step_bounds` and sets new time step bounds of 5-minutes to 1-hour for the grid components. [PR 653](https://github.com/NatLabRockies/H2Integrate/pull/653) and [PR 671](https://github.com/NatLabRockies/H2Integrate/pull/671)
- Remove demand-related outputs from storage performance models and replace usage with demand components [PR 666](https://github.com/NatLabRockies/H2Integrate/pull/666)
- Added a compressed gas hydrogen storage model [PR 680](https://github.com/NatLabRockies/H2Integrate/pull/680)

## 0.7.2 [April 9, 2026]

Expand Down
86 changes: 78 additions & 8 deletions docs/storage/hydrogen_storage.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,34 @@
(h2-storage-cost)=
# Bulk Hydrogen Storage Cost Model

This models the cost of bulk storage of hydrogen based on the total kg capacity and kg/h charge/discharge requirements.
The model can be found at `h2integrate\storage\hydrogen\h2_storage_cost.py`.
This file contains a `HydrogenStorageBaseCostModel` which is then used to define models for different types of storage.

## Storage Types

H2Integrate models at least three types of bulk hydrogen storage technologies:
H2Integrate models four types of bulk hydrogen storage technologies:

- **Underground Pipe Storage**: Hydrogen stored in underground pipeline networks
- **Lined Rock Caverns (LRC)**: Hydrogen stored in rock caverns with engineered linings
- **Salt Caverns**: Hydrogen stored in solution-mined salt caverns
1. **Underground Pipe Storage (`PipeStorageCostModel`)**: Hydrogen stored in underground pipeline networks
2. **Lined Rock Caverns (LRC) (`LinedRockCavernStorageCostModel`)**: Hydrogen stored in rock caverns with engineered linings
3. **Salt Caverns (`SaltCavernStorageCostModel`)**: Hydrogen stored in solution-mined salt caverns
4. **Compressed Gas Terminals (`CompressedGasStorageCostModel`)**: Hydrogen stored in compressed gas tanks up to 700 bar

These storage options provide different cost-capacity relationships suitable for various scales of hydrogen production and distribution.

## Cost Correlations
## Cost Correlations - Options 1-3

For the first three options (underground pipe, lined rock caverns, and salt caverns), cost correlations from [Papadias and Ahluwalia](https://doi.org/10.1016/j.ijhydene.2021.08.028) are used for capital cost calculation.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this citation addition!

The bulk hydrogen storage costs are modeled as functions of storage capacity using exponential correlations:

$$Cost = \exp(a(\ln(m))^2 - b\ln(m) + c)$$

where $m$ is the useable amount of H₂ stored in tonnes.

## Installed Capital Cost and Lifetime Storage Cost
Operational costs are calculated using the [HDSAM model](https://hdsam.es.anl.gov/index.php?content=hdsam) from Argonne National Laboratory, which is also used to model all costs for Option 4.
This method is shown further down this page in the "Cost Correlations - Options 4".

### Installed Capital Cost and Lifetime Storage Cost

The figures below show how storage costs scale with capacity for different storage technologies:

Expand All @@ -31,8 +40,6 @@ The figures below show how storage costs scale with capacity for different stora

*Figure 1b: Lifetime storage cost (\$/kg-H₂-stored) as a function of usable hydrogen storage capacity*

## Cost Correlation Coefficients

### Capital Cost Coefficients (Figure 1a)

| Storage | a | b | c |
Expand All @@ -48,3 +55,66 @@ The figures below show how storage costs scale with capacity for different stora
| Underground pipe storage | 0.001559 | 0.03531 | 4.5183 |
| Underground lined rock caverns | 0.092286 | 1.5565 | 8.4658 |
| Underground salt caverns | 0.085863 | 1.5574 | 8.1606 |

## Cost Correlations - Option 4

The compressed gas terminals (CGTs) are modeled using a simplified version of the [HDSAM model](https://hdsam.es.anl.gov/index.php?content=hdsam) from Argonne National Laboratory.
HDSAM was developed as hydrogen storage *and* transport model; we have only included the costs that are relevant to *storage* for CGT.

The model uses the calculation in the HDSAM "Compressed Gas H2 Terminal" sheet.
Although HDSAM as a whole calculates the "Terminal capacity (kg/day)", and "Design terminal storage capacity (kg)" values from other sheets, our simplified CGT model instead takes these as inputs.
- "Terminal capacity (kg/day)" from HDSAM is, in our model, set by the maximum value of the `hydrogen_in` input
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor but maybe worth clarifying in the docs here; is it the max across a 24-hour timespan? Since the capacity is kg/day. Or is it the kg/hr amount multiplied by 24? I bet I'll find out shortly, but worth saying here imo

Copy link
Copy Markdown
Collaborator Author

@jmartin4u jmartin4u Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's the max across the whole timeseries - happening in lines 614-617 of h2_storage_cost.py. Updating the docs text

- "Design terminal storage capacity (kg)" from HDSAM is, in our model, set by the `storage_capacity` input

For all of the capital and operating costs, CEPCI indexes from with in HDSAM were used to adjust costs to the 2018 cost year that is used by the other models.
These indices can be found in the "Feedstock & Utility Prices" tab of HDSAM.

### Installed Capital Cost

The figure below shows an example of the main CGT capital costs as calculated by HDSAM:

![HDSAM CGT Capex](images/hdsam_cgt_capex.png)

Since we are not considering transport costs in our model, the "Truck Loading Compressor" and "Truck Scale" components of capital cost are ignored by this model.

The storage compressor size and kW power consumption are calculated using HDSAM's "H2 Compressor", which is implemented in `h2integrate\storage\hydrogen\h2_transport\h2_compression.py`.
Costs are then calculated using the equations shown here in the "Cost Data" tab of HDSAM:

![HDSAM Compressor Costs](images/hdsam_compressor_costs.png)

The tank cost is calculated using HDSAM's cost figures for two discrete storage pressure levels: 350 bar and 700 bar.

![HDSAM Tank Costs](images/hdsam_tank_costs.png)

The "Buildings and structures" cost is a constant in HDSAM.
The calculations of "Piping, Supply, Discharge, and Headers", and "Plumbing, electrical, and instrumentation at individual bays" are simplified relative to the HDSAM calculations, since these tend to be very minor components of the overall cost and the full calculation would be unnecessarily complex to implement in H2I.

For piping etc., HDSAM performs a detailed calculation of the total length of pipe needed for a certain terminal capacity, then multiplies this by an estimate of pipe cost per unit length.
In our simplified model, we ran HDSAM for multiple terminal capacities and calculated the average ratio of terminal capacity to pipe length.
This ratio is the `kg_d_per_pipe_m` constant of 300 kg/day per meter of pipe.

Similarly, for plumping etc., HDSAM performs a detailed calculation of the total number of storage bays needed for a certain terminal capacity, then multiplies this by an estimate of plumbing cost per bay.
In our simplified model, we ran HDSAM for multiple terminal capacities and calculated the average ratio of terminal capacity to number of bays.
This ratio is the `kg_d_per_bay` constant of 1600 kg/day per storage bay.

Besides the main capital costs above, other minor capital costs are shown below:

![HDSAM CGT Other Capex](images/hdsam_cgt_other_capex.png)

Besides land, these costs are all calculated as a precentage of the main capital costs, in the main cost table as ("Total Capital Investment (Depreciable)").
For land, we used a similar simplification based on capacity as those used for piping/plumbing.
In our simplified model, we ran HDSAM for multiple terminal capacities and calculated the average ratio of terminal capacity to "GH2 Terminal Land Required (m2)".
This ratio is the `kg_d_per_land_m2` constant of 4 kg/day per square meter of land.

### Operating Cost

The O&M costs of the CGT as calculated by HDSAM are shown below:

![HDSAM CGT Opex](images/hdsam_cgt_opex.png)

Of these costs, electricity cost is ignored, since this is a feedstock.
To consider electricity cost, a separate electricity feedstock or generator should be connected to the hydrogen storage model via the `plant_config`.
Most of the other costs are percentages of the "Total Capital Investment", except labor.
Labor is calculated on a scaled basis using the equations in the "Cost Data" tab of HDSAM:

![HDSAM Labor](images/hdsam_labor.png)
Binary file added docs/storage/images/hdsam_cgt_capex.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/storage/images/hdsam_cgt_opex.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/storage/images/hdsam_cgt_other_capex.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/storage/images/hdsam_compressor_costs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/storage/images/hdsam_labor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/storage/images/hdsam_tank_costs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions h2integrate/core/supported_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
from h2integrate.storage.hydrogen.h2_storage_cost import (
PipeStorageCostModel,
SaltCavernStorageCostModel,
CompressedGasStorageCostModel,
LinedRockCavernStorageCostModel,
)
from h2integrate.transporters.gas_stream_combiner import GasStreamCombinerPerformanceModel
Expand Down Expand Up @@ -270,6 +271,7 @@
"StoragePerformanceModel": StoragePerformanceModel,
"StorageAutoSizingModel": StorageAutoSizingModel,
"LinedRockCavernStorageCostModel": LinedRockCavernStorageCostModel,
"CompressedGasStorageCostModel": CompressedGasStorageCostModel,
"SaltCavernStorageCostModel": SaltCavernStorageCostModel,
"MCHTOLStorageCostModel": MCHTOLStorageCostModel,
"PipeStorageCostModel": PipeStorageCostModel,
Expand Down
Loading
Loading