2D hydrogen storage in an aquifer¶
Use the existing structural-trap aquifer model for hydrogen build-up and five storage cycles. Gravity, capillarity, and tabulated dissolution are active. The bundled deck uses zero added salt; diffusion and PHREEQC are disabled.
[ ]:
startupH2sim
result = exampleBlackOilAquifer2D('numCycles', 5);
% Redraw saved accepted states.
plotBlackOilAquifer2D(result, 'outputDirectory', ...
fullfile(pwd, 'build', 'aquifer-figures'));
state = result.states{end};
gasSaturation = state.s(:, 2);
solutionRatio = state.rs;
Plume and well response¶
The 50 m × 50 m grid has a 2 m target spacing. The 500-day schedule includes 120 days of build-up, a 30-day shut-in, and five 70-day cycles. Each cycle contains 30 days of injection, 10 days idle, and 30 days withdrawal. Plume panels share a color scale. result.packedProblem identifies the setup and accepted outputs on disk.
Hydrogen loss due to dissolution¶
The dissolved share is \(100 V_{\mathrm{diss}}/(V_{\mathrm{diss}}+V_{\mathrm{free}})\), with \(V_{\mathrm{diss}}=\sum_c PV_c S_{l,c} b_{l,c}R_{s,c}\) and \(V_{\mathrm{free}}=\sum_c PV_c S_{g,c}b_{g,c}\). All volumes use the same surface conditions. This measures partitioning out of the free-gas inventory, rather than irreversible consumption or cumulative loss of injected hydrogen. Pressure decline can release dissolved hydrogen.
Inspect the fluid tables¶
These pressure-dependent properties come from the existing aquifer input tables, over 30–50 bar. They are not newly generated NIST data.
plotAquiferFluidTables(result);