Cavern volume and storage capacity#
Functions to calculate salt cavern volumes and storage capacities.
References#
- h2ss.capacity.cavern_volume(height, diameter=85, theta=20)[source]#
Calculate the cavern volume.
Parameters#
- heightfloat
Cavern height [m]
- diameterfloat
Cavern diameter [m]
- thetafloat
Cavern roof angle [°]
Returns#
- float
Ideal cavern volume [m³]
Notes#
The cavern’s ideal shape is a cylinder of height \(h_{cylinder}\) [m] with two conical ends each with a height of \(h_{cone}\) [m] based on [1]. Since the volume of a cylinder is defined as \(\pi r^2 h_{cylinder}\) and the volume of a cone is defined as \(\frac{\pi r^2 h_{cone}}{3}\) (i.e. one third of a cylinder’s volume), the bulk cavern volume, \(V_{bulk}\) [m³] can therefore be deduced by calculating the volume of a cylinder of the cavern height, \(h\) [m] and deducting 4/3 of the volume of a cone of height \(h_{cone}\). \(r\) [m] is the radius of the cavern and \(h_{cone}\) is therefore equivalent to \(r \tan(\theta)\), where \(\theta\) [°] is the cavern roof angle.
\[V_{bulk} = \pi \, r^2 \, h - \frac{4}{3} \, \pi \, r^2 \, h_{cone}\]\[V_{bulk} = \pi \, r^2 \left(h - \frac{4}{3} \, h_{cone}\right)\]\[V_{bulk} = \pi \, r^2 \left(h - \frac{4}{3} \, r \, \tan(\theta)\right)\]
- h2ss.capacity.corrected_cavern_volume(v_cavern, scf=0.7)[source]#
Apply correction factors to the cavern volume.
Parameters#
- v_cavernfloat
Ideal cavern volume [m³]
- scffloat
Shape correction factor
Returns#
- float
Corrected cavern volume [m³]
Notes#
The corrected cavern volume, \(V_{cavern}\) [m³] is defined as
\[V_{cavern} = V_{bulk} \times SCF\]where \(V_{bulk}\) [m³] is the bulk cavern volume and \(SCF\) is the shape correction factor (deviation of the cavern’s shape due to geological differences). A \(SCF\) of 0.7 is used as the default, as defined in [1], [2], [3], and [4].
- h2ss.capacity.temperature_cavern_mid_point(height, depth_top, t_0=10, delta_t=37.5)[source]#
Cavern mid-point temperature.
Parameters#
- heightfloat
Cavern height [m]
- depth_topfloat
Cavern top depth [m]
- t_0float
Mean annual seabed surface temperature [°C]
- delta_tfloat
Geothermal gradient; change in temperature with depth [°C km⁻¹]
Returns#
- float
Mid-point temperature [K]
Notes#
See [2], Eqn. (2).
\[T_{midpoint} = T_0 + \Delta_T \, \frac{z + 0.5 \, h}{1,000} + 273.15\]where \(T_{midpoint}\) is the cavern mid-point temperature [K], \(T_0\) is the mean annual surface temperature [°C], \(\Delta_T\) is the change in temperature with depth, i.e. geothermal gradient [°C km⁻¹], \(z\) is the cavern top depth [m], and \(h\) is the cavern height [m].
A \(\Delta_T\) of 37.5 °C km⁻¹ is used based on the geothermal gradient of Kish Basin wells in the Mercia Mudstone Group reported in [5]. Note that the cavern top depth is used instead of the casing shoe depth, as the casing shoe is 30 m above the cavern top depth in this study, rather than at the cavern top as modelled in [2].
- h2ss.capacity.pressure_operating(depth_water, thickness_overburden, thickness_salt=50, rho_overburden=2400, rho_salt=2200, rho_water=1027, minf=0.3, maxf=0.8)[source]#
Cavern operating pressures.
Parameters#
- depth_waterfloat
Sea water depth [m]
- thickness_overburdenfloat
Overburden thickness / halite top depth [m]
- thickness_saltfloat
Thickness of the salt above the casing shoe [m]
- rho_overburdenfloat
Density of the overburden [kg m⁻³]
- rho_saltfloat
Density of the halite [kg m⁻³]
- rho_waterfloat
Density of the sea water [kg m⁻³]
- minffloat
Factor of lithostatic pressure for the minimum operating pressure
- maxffloat
Factor of lithostatic pressure for the maximum operating pressure
Returns#
- tuple[float, float]
Min and max operating pressures [Pa]
Notes#
\[p_{casing} = (\rho_{water} \, t_{water} + \rho_{overburden} \, t_{overburden} + \rho_{salt} \, t_{salt}) \, g\]\[p_{H_2min} = 0.3 \, p_{casing}\]\[p_{H_2max} = 0.8 \, p_{casing}\]\(p_{casing}\) is the lithostatic pressure at the casing shoe [Pa]. The thickness of the overburden, \(t_{overburden}\) [m] is the same as the depth to top of salt. \(t_{salt}\) [m] is the thickness of the salt above the casing shoe. \(t_{water}\) [m] is the sea water depth. \(\rho_{water}\), \(\rho_{overburden}\), and \(\rho_{salt}\) are the densities of the sea water, overburden, and salt, respectively [kg m⁻³]. \(g\) is the acceleration due to gravity [m s⁻²].
\(p_{H_2min}\) and \(p_{H_2max}\) are the minimum and maximum cavern operating pressures, respectively [Pa].
See [2], Eqn. (3) and (4). This function has been modified to include sea water depth and density to suit offshore conditions. The sea water density is assumed as the mean value at a temperature of 10 °C, a salinity of 35 g kg⁻¹, and a surface pressure of 1 atm [6] [7].
- h2ss.capacity.density_hydrogen_gas(p_operating_min, p_operating_max, t_mid_point)[source]#
Density of hydrogen at cavern conditions.
Parameters#
- p_operating_minfloat
Minimum operating pressure [Pa]
- p_operating_maxfloat
Maximum operating pressure [Pa]
- t_mid_pointfloat
Mid-point temperature [K]
Returns#
- tuple[float, float]
Min and max hydrogen gas densities [kg m⁻³]
Notes#
This function uses the CoolProp [8] wrapper called PyFluids [9]. See [2], Section 3.4.2 and also the CoolProp documentation for useful information on hydrogen [10]. The
pyproject.toml
configuration file has been set such that the default units used by PyFluids are SI units. PyFluids can also be used to derive the compressibility factor.Based on [3], Eqn. (3), the density can be approximated using the following equation.
\[\rho = \frac{p \, M}{Z \, R \, T}\]where \(M\) is the molar mass of hydrogen gas [kg mol⁻¹], \(R\) is the universal gas constant [J K⁻¹ mol⁻¹], \(p\) is the pressure [Pa], \(T\) is the temperature [K], \(Z\) is the compressibility factor, and \(\rho\) is the hydrogen gas density [kg m⁻³].
- h2ss.capacity.mass_hydrogen_working(rho_h2_min, rho_h2_max, v_cavern)[source]#
The working mass of hydrogen.
Parameters#
- rho_h2_minfloat
Minimum hydrogen density [kg m⁻³]
- rho_h2_maxfloat
Maximum hydrogen density [kg m⁻³]
- v_cavernfloat
Cavern volume [m³]
Returns#
- tuple[float, float, float]
Working mass and the minimum and maximum operating mass of hydrogen [kg]
Notes#
See [2], Eqn. (5) and (6). The mass of hydrogen at the minimum operating pressure represents the cushion gas requirement.
\[m_{min} = \rho_{H_2min} \, V_{cavern}\]\[m_{max} = \rho_{H_2max} \, V_{cavern}\]\[m_{working} = m_{max} - m_{min}\]The working mass of hydrogen, \(m_{working}\) [kg] is the difference between the stored mass of hydrogen at maximum, \(m_{max}\) and minimum, \(m_{min}\) operating pressures [kg], which were derived using the minimum, \(\rho_{H_2min}\) and maximum, \(\rho_{H_2max}\) hydrogen densities [kg m⁻³], respectively, and the cavern volume, \(V_{cavern}\) [m³].
- h2ss.capacity.energy_storage_capacity(m_working)[source]#
Cavern energy storage capacity.
Parameters#
- m_workingfloat
Working mass of hydrogen [kg]
Returns#
- float
Energy storage capacity of cavern [GWh]
Notes#
See [2], Eqn. (7). See also [11] for the heating values. The energy storage capacity of the cavern, \(E_{cavern}\) [GWh] is a function of the working mass of hydrogen, \(m_{working}\) [kg] and the lower heating value of hydrogen, \(LHV\) [MJ kg⁻¹].
\[E_{cavern} = \frac{m_{working} \times LHV}{3,600,000}\]