Reference
This is the reference for the Supercritical CO₂ Energy Storage (sCO₂ES) package (sco2es
). The solvers are written
entirely in Python, using Numba wherever possible for just-in-time (JIT) compilation and parallelization
to maximize performance.
By default, sco2es.PackedBed
uses CoolProp to calculate the properties of
CO2 and assumes that the solid particles are made of alumina, for which empirical correlations are used to calculate
relevant properties. To use a material other than alumina, create a class matching the protocol
sco2es.SolidPropsInterface
and set the sco2es.PackedBed.solid
attribute.
Warning
The model was intended for use with sCO2 as the heat transfer fluid. The sco2es.PackedBed.fluid
attribute can be
set to any CoolProp.AbstractState
object, but the code has not been tested with any other fluid.
Copyright © 2024 UCFRF, Inc. All Rights Reserved.
ModelAssumptionError
Bases: Exception
Exception raised when a model assumption is not met.
StopCriterionError
Bases: Exception
Exception raised when the charge/discharge stopping criterion is not met within the allowable time.
SolidPropsInterface
Bases: Protocol
Protocol class defining the required interface for updating temperature-dependent solid properties
for the PackedBed
model.
Parameters:
-
T
–Temperature [K].
internal_energy(T)
abstractmethod
staticmethod
Internal energy, \(e\) [J/kg].
internal_energy_linear_coeffs(T)
abstractmethod
staticmethod
Coefficients, \(\alpha_1\) [J/kg⋅K] and \(\alpha_2\) [J/kg], for the linearized expression of internal energy:
thermal_conductivity(T)
abstractmethod
staticmethod
Thermal conductivity, \(k\) [W/m⋅K].
emissivity(T)
abstractmethod
staticmethod
Emissivity, \(E\) [-].
Alumina
Bases: SolidPropsInterface
An implementation of experimental correlations for alumina's relevant properties.
internal_energy(T)
staticmethod
Internal energy of alumina 1,2.
-
K. K. Kelley, "Contributions to the data on theoretical metallurgy, XIII. High-temperature heat-content, heat-capacity, and entropy data for the elements and inorganic compounds," in Bulletin 584 Bureau of Mines, 1960. ↩
-
F. Battisti, L. de Araujo Passos, and A. da Silva, “Performance mapping of packed-bed thermal energy storage systems for concentrating solar-powered plants using supercritical carbon dioxide,” Applied Thermal Engineering, vol. 183, p. 116032, 2021. ↩
internal_energy_linear_coeffs(T)
staticmethod
Linearized internal energy coefficients of alumina 1,2.
-
K. K. Kelley, "Contributions to the data on theoretical metallurgy, XIII. High-temperature heat-content, heat-capacity, and entropy data for the elements and inorganic compounds," in Bulletin 584 Bureau of Mines, 1960. ↩
-
F. Battisti, L. de Araujo Passos, and A. da Silva, “Performance mapping of packed-bed thermal energy storage systems for concentrating solar-powered plants using supercritical carbon dioxide,” Applied Thermal Engineering, vol. 183, p. 116032, 2021. ↩
thermal_conductivity(T)
staticmethod
PackedBed
An implementation of the packed bed thermal energy storage model described by Battisti et al.1.
Assumptions:
- Constant solid phase density
- Constant wall thermal properties
- Constant axial spacing
- Constant diameter
- Constant temperature exterior wall boundary condition
-
F. Battisti, L. de Araujo Passos, and A. da Silva, “Performance mapping of packed-bed thermal energy storage systems for concentrating solar-powered plants using supercritical carbon dioxide,” Applied Thermal Engineering, vol. 183, p. 116032, 2021. ↩
Attributes:
-
n
–Number of nodes in the axial direction.
-
m
–Number of wall or lid nodes in the radial or axial directions, respectively.
-
nodes
–Total number of nodes.
-
A_cs
–Cross-sectional area of the packed bed [m2].
-
V_node
–Volume of a packed bed node [m].
-
r_wall
–Radial positions of wall nodes from centerline [m].
-
r_bound
–Radial positions of wall cell boundaries from centerline [m].
-
z_top_lid
–Axial positions of top lid nodes from charging inlet in direction of flow [m].
-
z_bottom_lid
–Axial positions of bottom lid nodes from charging inlet in direction of flow [m].
-
V_wall
–Volume of the wall cells [m3].
-
A_wall_z
–Surface area of the wall cell boundary in the axial direction [m2].
-
A_wall_r
–Surface area of the wall cell boundary in the radial direction [m2].
fluid = CP.AbstractState('BICUBIC&HEOS', 'CO2')
class-attribute
instance-attribute
CoolProp.AbstractState
object for accessing
fluid properties. By default, CO2 properties are tabulated for the Helmholtz-based equation of state (HEOS)
and bicubic interpolation is used for performance.
solid: SolidPropsInterface = Alumina
class-attribute
instance-attribute
SolidPropsInterface
for calculating temperature-dependent properties of the
solid phase.
max_iter: int = 100
class-attribute
instance-attribute
Maximum number of iterations for the loop.
atol_T_f: float = 0.05
class-attribute
instance-attribute
Absolute tolerance for fluid temperature [ºC].
atol_P: float = 0.1
class-attribute
instance-attribute
Absolute tolerance for pressure [Pa].
atol_T_s: float = 0.05
class-attribute
instance-attribute
Absolute tolerance for solid temperature [ºC].
rtol_T_wall: float = 0.0005
class-attribute
instance-attribute
Relative tolerance for wall and lid temperatures.
rtol_i_f: float = 0.0001
class-attribute
instance-attribute
Relative tolerance for fluid enthalpy.
rtol_rho_f: float = 0.001
class-attribute
instance-attribute
Relative tolerance for fluid density.
rtol_m_dot: float = 0.001
class-attribute
instance-attribute
Relative tolerance for mass flow rate.
rtol_h: float = 0.001
class-attribute
instance-attribute
Relative tolerance for volumetric and wall heat transfer coefficients.
__init__(T_initial, P, L, D, d, eps, rho_s, T_env, t_wall, k_wall, rho_wall, cp_wall, *, n=100, n_wall=10)
Parameters:
-
T_initial
(float
) –Discharge temperature [K].
-
P
(float
) –Initial pressure [Pa].
-
L
(float
) –Domain length [m].
-
D
(float
) –Internal tank diameter [m].
-
d
(float
) –Particle diameter [m].
-
eps
(float
) –Void fraction.
-
rho_s
(float
) –Density of the solid [kg/m3].
-
T_env
(float
) –Temperature of the environment [K].
-
t_wall
(ArrayLike
) –Thickness of each wall layer [m].
-
k_wall
(ArrayLike
) –Thermal conductivity of each wall layer [W/m⋅K].
-
rho_wall
(ArrayLike
) –Density of each wall layer [kg/m3].
-
cp_wall
(ArrayLike
) –Specific heat capacity of each wall layer [J/kg⋅K].
-
n
(int
, default:100
) –Number of axial nodes.
-
n_wall
(int | ArrayLike
, default:10
) –Number of nodes for each wall layer.
time_index(s=0, *, m=0, h=0)
A function for retrieving the index of the simulation time step with the closest elapsed time to the given time.
advance(T_inlet, P_inlet, m_dot_inlet, t_max=12 * 60 * 60, *, T_outlet_stop=None, dt=10, discharge=False)
Advances the simulation until the charge/discharge stopping criterion is satisfied.
Parameters:
-
T_inlet
(float
) –Inlet fluid temperature [K].
-
P_inlet
(float
) –Pressure at the inlet [Pa].
-
m_dot_inlet
(float
) –Mass flow rate of the inlet stream [kg/s].
-
t_max
(float
, default:12 * 60 * 60
) –Maximum time advancement [s].
-
T_outlet_stop
(float
, default:None
) –Outlet fluid temperature [K] condition for stopping.
-
dt
(float
, default:10
) –Time step [s].
-
discharge
(bool
, default:False
) –Flag indicating that the system is discharging.
Returns:
-
–
Time at which the charging/discharging stop criterion was satisfied.
Raises:
-
ModelAssumptionError
–Raised if the Biot number exceeds the acceptable threshold (\(Bi > 0.1\)).
-
StopCriterionError
–Raised if the stop criterion are not met within the maximum allowed charging/discharging time (
t_max
).
step(T_inlet, P_inlet, m_dot_inlet, dt, *, discharge=False)
Calculates the state of the packed bed at the next time step using an iterative algorithm.
Parameters:
-
T_inlet
(float
) –Temperature of the inlet stream [K].
-
P_inlet
(float
) –Pressure at the inlet [Pa].
-
m_dot_inlet
(float
) –Mass flow rate of the inlet stream [kg/s].
-
dt
–Time step [s].
-
discharge
(bool
, default:False
) –Flag indicating that the system is discharging.
Returns:
-
–
Number of iterations required for convergence.
solve_fluid_solid_bed(i_f_0, i_inlet, g, e_s_0, alpha1, alpha2, rho_f, rho_0, rho_s, P_intf, P_intf_0, m_dot, T_wall, T_lid_inlet, T_lid_outlet, k_eff, h_wall, h_v, A_wall, A_cs, V, eps, dz, dt)
staticmethod
Solves for the fluid enthalpy and solid temperature for the next time step.
Parameters:
-
i_f_0
–Fluid enthalpy for the previous time step [J/kg].
-
i_inlet
–Fluid enthalpy at the inlet [J/kg].
-
g
–Fluid temperature-enthalpy coupling factor [K⋅kg/J].
-
e_s_0
–Solid internal energy for the previous time step [J/kg].
-
alpha1
–First linearized parameter for solid internal energy.
-
alpha2
–Second linearized parameter for solid internal energy.
-
rho_f
–Fluid density estimates for the next time step [kg/m3].
-
rho_0
–Fluid densities for the previous time step [kg/m3].
-
rho_s
–Density of the solid [kg/m3].
-
P_intf
–Pressure estimate at the interfaces for the next time step [Pa].
-
P_intf_0
–Pressure at the interfaces for the previous time step [Pa].
-
m_dot
–Mass flow rate estimate at node interfaces [kg/s].
-
T_wall
–Wall interface temperature [K].
-
T_lid_inlet
–Temperature of the lid at the inlet [K].
-
T_lid_outlet
–Temperature of the lid at the outlet [K].
-
k_eff
–Effective thermal conductivity [W/m⋅K]
-
h_wall
–Wall heat transfer coefficient [W/m2⋅K].
-
h_v
–Volumetric heat transfer coefficient [W/m3⋅K].
-
A_wall
–Surface area of the node wall boundary [m2].
-
A_cs
–Cross-sectional area [m2].
-
V
–Node volume [m3].
-
eps
–Void fraction [-].
-
dz
–Axial node spacing [m].
-
dt
–Time step [s].
Returns:
-
i_f
–Fluid enthalpy for the next time step [J/kg].
-
T_s
–Solid temperature for the next time step [K].
solve_lid_temperature(T_lid, T_f, T_env, h_wall, k, rho, cp, z, V, A, dt, *, reverse=False)
staticmethod
Solves for the lid temperature profile for the next time step. The boundary conditions are taken as:
- Heat loss to environment by conduction at
i=0
- Heat loss to fluid by convection at
i=m-1
- Insulated at radial surfaces
The reverse
keyword can be used to reverse the axial orientation of the boundary conditions.
Parameters:
-
T_lid
–Lid temperature for the previous time step [K].
-
T_f
–Fluid temperature estimate for the next time step at convection boundary [K].
-
T_env
–Environment temperature [K].
-
h_wall
–Wall heat transfer coefficient [W/m2⋅K].
-
k
–Thermal conductivity [W/m⋅K].
-
rho
–Density [kg/m3].
-
cp
–Specific heat capacity [J/kg⋅K].
-
z
–Axial positions of node centers [m].
-
V
–Node volumes [m3].
-
A
–Area of lid [m2].
-
dt
–Time step [s].
-
reverse
–Flag for reversing boundary conditions.
solve_wall_temperature(T_wall, T_f, T_env, h_wall, k, rho, cp, r, dr, dz, V, A_r, A_z, dt)
staticmethod
Solves for the lid temperature profile for the next time step. The boundary conditions are taken as:
- Heat loss to fluid by convection at
j=0
- Heat loss to environment by conduction at
j=m-1
- Insulated axially at
i=0
andi=n-1
where the domain is discretized with n
nodes in the axial direction and m
in the radial
direction, and the wall temperature T_wall
has the shape (n, m)
.
Parameters:
-
T_wall
–Wall temperature for the previous time step [K].
-
T_f
–Fluid temperature estimate for the next time step [K].
-
T_env
–Environment temperature [K].
-
h_wall
–Wall heat transfer coefficient [W/m2⋅K].
-
k
–Thermal conductivity [W/m K].
-
rho
–Density [kg/m3].
-
cp
–Specific heat capacity [J/kg⋅K].
-
r
–Radial positions of node centers [m].
-
dr
–Radial node width [m].
-
dz
–Axial node spacing [m].
-
V
–Node volumes [m3].
-
A_r
–Area of node interfaces in the radial direction [m2].
-
A_z
–Area of node interfaces in the axial direction [m2].
-
dt
–Time step [s].
calculate_heat_transfer_coeffs(m_dot, T_f, k_f, cp_f, mu_f, k_s, E_s)
Calculates the relevant heat transfer coefficients for the packed bed.
Parameters:
-
m_dot
–Mass flow rate [kg/s].
-
T_f
–Temperature of the fluid [K].
-
k_f
–Thermal conductivity of the fluid [W/m⋅K].
-
cp_f
–Specific heat capacity of the fluid [J/kg⋅K].
-
mu_f
–Dynamic viscosity of the fluid [Pa⋅s].
-
k_s
–Thermal conductivity of the solid [W/m⋅K].
-
E_s
–Emissivity of the solid.
Returns:
-
k_eff
–Effective thermal conductivity [W/m⋅K].
-
h_wall
–Wall heat transfer coefficient [W/m2⋅K].
-
h_v
–Volumetric heat transfer coefficient [W/m3⋅K].
calculate_fluid_enthalpy(T_f, P)
Returns the fluid
mass-specific enthalpy at each node.
Parameters:
-
T_f
–Temperature [K].
-
P
–Pressure [Pa].
calculate_fluid_props(i_f, P)
Returns the fluid
temperature, thermal conductivity, density, viscosity, and
specific heat capacity at each node.
Parameters:
-
i_f
–Mass-specific enthalpy of the fluid [J/kg].
-
P
–Pressure [Pa].
Returns:
-
T_f
–Temperature of the fluid [K].
-
k_f
–Thermal conductivity of the fluid [W/m⋅K].
-
rho_f
–Density of the fluid [kg/m3].
-
mu_f
–Dynamic viscosity of the fluid [Pa⋅s].
-
cp_f
–Specific heat capacity of the fluid [J/kg⋅K].
biot_number(h_v, d, eps, k_s)
staticmethod
Calculates the biot number (\(Bi\)) for a packed bed1
-
F. Battisti, L. de Araujo Passos, and A. da Silva, “Performance mapping of packed-bed thermal energy storage systems for concentrating solar-powered plants using supercritical carbon dioxide,” Applied Thermal Engineering, vol. 183, p. 116032, 2021. ↩
Parameters:
-
h_v
–Volumetric heat transfer coefficient, \(h_v\) [W/m3⋅K].
-
d
–Particle diameter, \(d\) [m].
-
eps
–Void fraction, \(\varepsilon\).
-
k_s
–Thermal conductivity of the solid, \(k_s\) [W/m⋅K].
effective_film_thickness_ratio(k_f, k_s, eps)
staticmethod
Calculates the ratio between the effective thickness of the fluid film adjacent to the surface of two solid particles and the particle diameter according to the interpolation of Kunii and Smith1 for \(0.260 \leq \varepsilon \leq 0.476\)
where
where \(\kappa = k_s/k_f\) and the interpolation bounds are given by \(\sin^2 \theta_i = \frac{1}{n_i}\) for \(n_1 = 1.5\) and \(n_2 = 4\sqrt{3}\).
-
D. Kunii and J. Smith, “Heat transfer characteristics of porous rocks,” AIChE Journal, vol. 6, no. 1, pp. 71–78, 1960. ↩
Parameters:
-
k_s
–Thermal conductivity of the solid, \(k_s\) [W/m⋅K].
-
k_f
–Thermal conductivity of the fluid, \(k_f\) [W/m⋅K].
-
eps
–Void fraction, \(\varepsilon\).
void_radiative_heat_transfer_coeff(T, eps, E_s)
staticmethod
Calculates the void-to-void radiative heat transfer coefficient for a packed bed given by the correlation of Yagi and Kunii1
-
S. Yagi and D. Kunii, “Studies on effective thermal conductivities in packed beds,” AIChE Journal, vol. 3, no. 3, pp. 373–381, 1957. ↩
Parameters:
-
T
–Temperature, \(T\) [K].
-
eps
–Void fraction, \(\varepsilon\).
-
E_s
–Emissivity of the solid, \(E_s\).
surface_radiative_heat_transfer_coeff(T, E_s)
staticmethod
Calculates the surface-to-surface radiative heat transfer coefficient for a packed bed given by the correlation of Yagi and Kunii1
-
S. Yagi and D. Kunii, “Studies on effective thermal conductivities in packed beds,” AIChE Journal, vol. 3, no. 3, pp. 373–381, 1957. ↩
Parameters:
-
T
–Temperature, \(T\) [K].
-
E_s
–Emissivity of the solid, \(E_s\).
effective_thermal_conductivity(k_f, k_s, eps, h_rv, h_rs, phi, d, *, beta=0.9)
staticmethod
Approximates the effective thermal conductivity in a packed bed using the model of Kunii and Smith1
-
D. Kunii and J. Smith, “Heat transfer characteristics of porous rocks,” AIChE Journal, vol. 6, no. 1, pp. 71–78, 1960. ↩
Parameters:
-
k_f
–Thermal conductivity of the fluid, \(k_f\) [W/m⋅K].
-
k_s
–Thermal conductivity of the solid, \(k_s\) [W/m⋅K].
-
eps
–Void fraction. \(\varepsilon\).
-
h_rv
–Void-to-void radiative heat transfer coefficient, \(h_{rv}\) [W/m2⋅K].
-
h_rs
–Surface-to-surface radiative heat transfer coefficient, \(h_{rs}\) [W/m2⋅K].
-
phi
–Effective film thickness ratio, \(\phi\).
-
d
–Solid particle diameter, \(d\) [m].
-
beta
–Ratio of the average length between the centers of two neighboring solids to the mean particle diameter, \(\beta = 0.9\) (default).
volumetric_convective_heat_transfer_coeff(m_dot, k_f, cp_f, eps, d, D)
staticmethod
Calculates the volumetric convective heat transfer coefficient as the product of the convective heat transfer coefficient for a spherical particle and the ratio between the particles total heat transfer area and the total volume
The particle convective heat transfer coefficient is given by Pfeffer's correlation1
where \(W\) is given by
and \(G\) is the effective mass flow rate per unit area given by
The lower limit of analytical heat transfer is given by
for a heated isothermal sphere in a quiescent fluid medium; therefore, the maximum of the two values is taken.
-
R. Pfeffer, “Heat and mass transport in multiparticle systems,” Industrial & Engineering Chemistry Fundamentals, vol. 3, no. 4, pp. 380–383, 1964. ↩
Parameters:
-
m_dot
–Mass flow rate [kg/s].
-
k_f
–Thermal conductivity of the fluid, \(k_f\) [W/m⋅K].
-
cp_f
–Specific heat capacity of the fluid, \(c_{p_f}\) [J/kg⋅K].
-
eps
–Void fraction, \(\varepsilon\).
-
d
–Particle diameter, \(d\) [m].
-
D
–Diameter [m].
conv_wall_heat_transfer_coeff(m_dot, k_f, cp_f, mu_f, d, D)
staticmethod
Returns the convective heat transfer coefficient between the fluid and the wall
according to the correlation of Beek1. The Reynolds number \(Re_d\) is defined as
where \(u_0\) is the superficial velocity, or the velocity if no particles were present, given by
The Prandtl number \(Pr\) is defined as
-
J. Beek, “Design of packed catalytic reactors,” in Advances in Chemical Engineering, Elsevier, 1962, pp. 203–271. ↩
Parameters:
-
m_dot
–Mass flow rate, \(\dot{m}\) [kg/s].
-
k_f
–Thermal conductivity of the fluid, \(k_f\) [W/m⋅K].
-
cp_f
–Specific heat capacity of the fluid, \({c_p}_f\) [J/kg⋅K].
-
mu_f
–Dynamic viscosity of the fluid, \(\mu_f\) [Pa⋅s].
-
d
–Particle diameter, \(d\) [m].
-
D
–Diameter, \(D\) [m].
cond_rad_wall_heat_transfer_coeff(k_f, k_s, h_rv, h_rs, eps, d, phi)
staticmethod
Calculates the conductive and radiative wall heat transfer coefficient according to Ofuchi and Kunii1
where
and
where the wall porosity, \(\varepsilon_{wall}\), is assumed to be \(0.4\) and \(\phi_{wall}\) is given by
where \(\kappa = k_s/k_f\).
-
K. Ofuchi and D. Kunii, “Heat-transfer characteristics of packed beds with stagnant fluids,” International Journal of Heat and Mass Transfer, vol. 8, no. 5, pp. 749–757, 1965. ↩
Parameters:
-
k_f
–Thermal conductivity of the fluid, \(k_f\) [W/m⋅K].
-
k_s
–Thermal conductivity of the solid, \(k_s\) [W/m⋅K].
-
h_rv
–void-to-void radiative heat transfer coefficient, \(h_{rv}\) [W/m2⋅K].
-
h_rs
–Solid-to-solid radiative heat transfer coefficient, \(h_{rs}\) [W/m2⋅K].
-
eps
–Void fraction, \(\varepsilon\).
-
d
–Particle diameter, \(d\) [m].
-
phi
–Effective film thickness ratio, \(\phi\).
pressure_drop(dz, rho_f, mu_f, G, eps, d, *, psi=0.9, xi1=180, xi2=1.8)
staticmethod
Calculates the pressure drop using the modified Ergun's equation1
-
I. Macdonald, M. El-Sayed, K. Mow, and F. Dullien, “Flow through porous media-the Ergun equation revisited,” Industrial & Engineering Chemistry Fundamentals, vol. 18, no. 3, pp. 199–208, 1979. ↩
Parameters:
-
dz
–Axial position step size, \(\Delta z\) [m].
-
rho_f
–Density of the fluid, \(\rho_f\) [kg/m3].
-
mu_f
–Dynamic viscosity of the fluid, \(\mu_f\) [Pa⋅s].
-
G
–Effective mass flow rate per unit cross-section, \(G\) [kg/m2⋅s].
-
eps
–Void fraction, \(\varepsilon\).
-
d
–Particle diameter, \(d\) [m].
-
psi
–Sphericity, \(\psi\).
-
xi1
(float
, default:180
) –Viscous loss coefficient, \(\xi_1\).
-
xi2
(float
, default:1.8
) –Inertial loss coefficient, \(\xi_2\).