Cryogenic Tanks

Tom4K

Member
Dec 13, 2025
33
16
Cryo tanks
---------------
---------------

Cryo tanks and how to model them should be addressed here.
I would like to show some helpful information here, esp. some interesting numbers for nice substances.

But first a few thoughts about how we could model all this.

I link two pictures of the validation model I made in Matlab/Simulink :

https://mega.nz/file/ktYgSADD#-aep3IQcRInYpFuQrcX6mpcJ4OUde43UygEDanZLQlo (Cryo Tank Model TopView)
https://mega.nz/file/QxQhHQJK#pIGjxyJKkbXHKSG_Zp_WuhtjbV3mZX0sZRFZWIQPqU4 (CryoTankBoilOff)



Modeling cryo tanks
------------------------

- What is stored in a tank shall be named "substance"
- The substance stored in a tank consists of two phases: liquid and gaseous
- The fluid has a vapor pressure, which only depends on the fluid temperature
- The fluid has a vapor temperature, which only depends on the pressure in the gaseous phase
- Pressure in the liquid phase and in the gaseous phase are given as to be equal (quasi-stationary Ansatz)
- Temperature in the fluid phase and in the gaseous phase are given as to be equal (quasi-stationary Ansatz)
- So we have a (substance) pressure and a (substance) temperature at any time, everywhere, in the tank
- We have a liquid and a gaseous drain check valve on the tank to drain substance,
opening when an arbitrary given limit is exceeded, leading to (unwanted) boil-off losses
- These valves can be opened manually in addition to reduce substance in tank
- We have additional gaseous boil-off losses, especially with hydrogen, due to leakage and diffusion
- Fluid leakage is not mentioned in this model

An extended HeatBody (heat capacity- and transfer) model is included in this way :

- The tank wall consists of a Surface and an Inside
- Surface and Inside have the same heat capacity C
- Surface and Inside have different temperatures when not in equilibrium
- Surface and Inside are strongly insulated to each other (MLI insulation) but always connected together
- Inside and Substance are in close heat contact but are treated as separated heat capacities
- Parts of the Surface can be connected to different other Surfaces or ambient (vacuum or atmosphere)
- Each of these connections lead to a different heat flow to the Surface
- Heat flow to Inside can occur due to temperature difference to Surface and temperature difference to the Substance
- Surface connection to vacuum yields to black body radiation as a heatsink
- Surface connection to atmosphere yields to convective heat flow
- Surface connection to a different Surface of another heat body leads to heat exchange between the Surfaces
- Heat transfer is linear and calculated by the means of heat transfer coefficients
- Exception is heat flow to atmosphere, which is nonlinear

HeatBody model extension :
- Substance in tank can be cooled directly
(could be a spiral tube inside tank with ultra cold refrigerant (LiqHe))

Tank Model Interface
- Mass Flow In and -Out (Refueling, De-fueling), with corresponding temperatures
- Drain valves for liquid and gaseous phase
- External Heating Power
- Arbitrary number of connected surfaces with corresponding temperatures
- Wall with MLI insulation, heat exchange with atmosphere and Black Body Radiation


Discussion
----------

1. Substance in Tank
2. Tank Wall
3. Tank Surface Contacts


1. Substance in Tank

Mass of Substance :

m_substance[kg] : Integrated m_dot_substance[kg/s]

m_dot_substance[kg/s] = MassFlowIn[kg/s] - MassFlowOut[kg/s] - mpFluidDrain[kg/s] - mpGasDrain[kg/s]

MassFlowIn[kg/s] :
external
MassFlowOut[kg/s] : external

mpFluidDrain[kg/s] = mpLiquidDrainValve_VolumeLimiter[kg/s] + mpLiquidDrainValve_Manual[kg/s]

mpLiquidDrainValve_VolumeLimiter[kg/s] = 0
<=> VFluid <= V0
else: max( LiquidExceedMassFlow , mpLiquidDrainSet[kg/s] )

LiquidExceedMassFlow[kg/s] = MassFlowIn[kg/s] - MassFlowOut[kg/s]

VFluid =
Volume of fluid in tank. Calculation described below.

V0 =
TankDryStorageVolume

mpLiquidDrainSet[kg/s] : small, numerical reasonable value, like -1 g/s , adapt to tank volume

mpGasdrain[kg/s] = mpGasDrainValve_BoilOff[kg/s] + mpGasDrainValve_Manual[kg/s]

mpGasDrainValve_BoilOff[kg/s] = 0
<=> VaporizationPressure(T)[Pa] < pBoilCheckValveLimit[Pa]
else : mpBoilOffValveSet [kg/s]

VaporizationPressure(T)[Pa] :
table parameter
pBoilCheckValveLimit[Pa] : constant parameter. 1.2bar e.g. Reasonable Limit, depending on tank structure stability etc.

mpBoilOffValveSet [kg/s][kg/s] :
small, numerical reasonable value, like -0.01 g/s , adapt to tank volume



Temperatur of substance :

T_substance[K] : Integrated T_dot_substance[K/s]

T_dot_substance[K/s] = T_dot_mixture[K/s] + ( PSubstanceHeat[W] + PBoilOff[W] ) / CV [J/K]

T_dot_mixture[K/s] = (MassFlowInTemp[K]-T_substance[K]) * MassFlowIn[kg/s] / m_Sustance[kg]

PSubstanceHeat[W] :
external

PBoilOff[W] = VaporizationEnthalpy(T)[J/k] * mpGasDrainValve_BoilOff[kg/s]
CV[J(K] = cv[J/kg/k] * m_substance[kg]


(only boil-off cooling power is taken into account here, since vaporization enthalphy for a sealed tank is negligible)


Pressure of substance :

pSubstance[Pa] = VaporizationPressure(T)[Pa]
<=> VaporizationPressure(T)[Pa] < pBoilCheckValveLimit[Pa]
else : pBoilCheckValveLimit[Pa]



Mass of fluid :

mFluid[kg] = (VFluid100%[m^3] - DeltaV_Vapo[m^3]) * DensityFluid(T)[kg/m^3]

VFluid100%[m^3] = m_substance[kg] / DensityFluid(T)[kg/m^3]

DeltaV_Vapo[m^3] = ( V0[m^3] - VFluid100%[m^3] ) * rho_ratio

rho_ratio = DensityGas(T)[kg/m^3] / ( DensityFluid(T)[kg/m^3] - DensityGas(T)[kg/m^3])



Volume of fluid :

VFluid = min( V0, VFluid_unlim)

VFluid_unlim = mFluid / DensityFluid(T)[kg/m^3]




Mixture Calculation
-------------------

Given a tank with substance mass m and temperature T.
There is a fluid mass flow into the tank with temperature Tx and mass flow rate mx_dot .

Given a integration stepsize Dt (1ms e.g.) , so that mx_dot * Dt << m is given,
temperature derivation of the substance in the tank is given as follows:

T_dot = Tx * mx_dot/m

New Temperature T' of fluid in tank calculates to : T' = T + T_dot*Dt

New mass : m' = m + mx_dot*Dt

If mx_dot*Dt > m (nearly empty tank) take:

T_dot = 0
T' = Tx .
 
Upvote 0
Leakage-Losses
---------------

Leakage comes through the MassFlowOut[kg/s] inport (we can discuss that), and is therefore calculated externally.
It consists of diffusion, or leakage through small gaps.
It is the long time losses. Very important for long voyages.
So it happens even it the tank is cooled very well.

We can use an exponential Ansatz here for simplification and practical usefulness.
So m_dot_Leakage[kg/s] = m_substance[kg] / tau_leakage
leading to an exponential loss with the time_constant tau_leakage .


MLI Insulation
--------------

Substance and Inside Wall a chosen to have (similar but) but different temperatures.
There is a high heat transfer rate between them (much higher then between Walls Inside and Surface, which
are separated by the strong MLI insulation). A different solution would be to treat them a closely coupled.
That means, the heat capacity of the Inside and the heat capacity of the substance could be added, so that
there is only only temperature for substance and Inside.

I decided to separate them for practical reasons, giving advantages and disadvantages.
What worked well so far is a transfer coefficient of about 10 W/(K*m^2) in combination with an MLI insulation of
0.1 W/(K*m^2) meaning, that the is at the MLI and not between substance and wall leading to a physical and numerical
reasonable solution.



2. Tank Wall


Cooling in atmosphere
---------------------

Nußelt Heat Transfer in atmosphere model (very simplified) :

Mean Free Path (MFP) : For Air molecules, the MFP at 100 Pa is < 1cm .
Starting here, the Nußelt formula below starts to work as a rough approximation
(otherwise a temperature is not defined anyway).

In high-vacuum (< 1Pa) the heat coefficient becomes suddenly 0.

Atmosphere pressure >= 100 Pa :

vVeh(Surf) > 5m/s : alpha_atmosphere[W/K/m^2] = v[m/s]^0.78 * 7.1

vVeh(Surf) <= 5m/s : alpha_atmosphere[W/K/m^2] = v[m/s]*4 + 5.7

P_Cool[W] = alpha_atmosphere[W/K/m^2] * A_Wall[m^2] * (T_Wall[K]-T_Amb[K])


Atmosphere pressure < 100 Pa : P_Cool = 0

(we can discuss this)



3. Tank surface contacts

Linear heat transfer, trivial.



(all equations are mass- and energy conserving - hopefully)
(equations are free of algebraic loops)
(all time derivations are to be integrated by a numerical solver, Euler integration with fixed (1ms e.g.) or variable stepsize)
 
------------------
Material constants
------------------

--------
Hydrogen
--------

Temp.[K] Press.abs.[bar] Density(liq)[kg/l] Density(gas)[kg/m^3] Evaporation enthalpy[kJ/kg]

13.95 0.072 0.0770235 0.1254 449.1
14 0.074 0.0768554 0.1388 449.7
15 0.127 0.0759963 0.2228 451.8
16 0.204 0.075103 0.3385 452.9
17 0.314 0.074171 0.4922 453.1
18 0.461 0.073195 0.6902 452.2
19 0.654 0.0721693 0.9395 450
20 0.901 0.071087 1.2474 446.5
20.39 1.013 0.0707864 1.3378 445.6
21 1.208 0.0699403 1.6189 441.8
22 1.585 0.06872 2.0711 435.2
23 2.039 0.0674149 2.6119 426.8
24 2.579 0.0660112 3.2548 416.5
25 3.232 0.0644917 4.0171 404
26 3.95 0.0628337 4.9215 389
27 4.8 0.0610065 5.9999 371
28 5.77 0.0589665 7.2979 349.4
29 6.872 0.056646 8.8866 323
30 8.116 0.0539303 10.8872 290.5
31 9.51 0.0505892 13.5411 248.4
32 11.068 0.0459927 17.4983 188.5
32.18 13.13 0.0314285 31.4285 0


------
Oxygen
------

Temp.[K] Press.abs.[bar] Density(liq)[kg/l] Density(gas)[kg/m^3] Evaporation enthalpy[kJ/kg]
54.359 0.001478 1.306 0.01062 242.3
56 0.002434 1.299 0.01673 241.1
58 0.004291 1.290 0.02849 239.6
60 0.007267 1.281 0.04666 238.0
62 0.01187 1.273 0.07379 236.5
64 0.01876 1.264 0.113 234.9
66 0.02877 1.255 0.168 233.4
68 0.04294 1.246 0.243 231.8
70 0.06251 1.237 0.345 230.2
72 0.08894 1.228 0.478 228.6
74 0.1240 1.218 0.649 227.0
76 0.1695 1.209 0.866 225.3
78 0.2276 1.200 1.137 223.6
80 0.3009 1.190 1.469 221.9
82 0.3919 1.181 1.872 220.1
84 0.5035 1.171 2.356 218.3
86 0.6387 1.162 2.931 216.5
88 0.8007 1.152 3.607 214.6
90 0.9931 1.142 4.396 212.6
90.19 1.01325 1.141 4.477 212.5
92 1.219 1.132 5.308 210.6
94 1.483 1.122 6.357 208.6
96 1.789 1.112 7.555 206.4
98 2.139 1.101 8.916 204.2
100 2.54 1.091 10.45 201.9
102 2.994 1.080 12.18 199.5
104 3.506 1.069 14.12 197.1
106 4.081 1.058 16.27 194.5
108 4.722 1.047 16.67 191.8
110 5.434 1.035 21.34 189.1
112 6.222 1.024 24.28 186.2
114 7.090 1.012 27.53 183.1
116 8.043 0.9995 31.11 180.0
118 9.085 0.9869 35.06 176.7
120 10.22 0.9739 39.39 173.2
122 11.46 0.9606 44.16 169.5
124 12.80 0.9468 49.40 165.7
126 14.25 0.9326 55.15 161.7
128 15.81 0.9178 61.49 157.4
130 17.49 0.9025 68.47 152.9
132 19.29 0.8864 76.18 148.1
134 21.23 0.8696 84.72 142.9
136 23.30 0.8519 94.21 137.4
138 25.51 0.8331 104.8 131.6
140 27.88 0.8131 116.7 125.2
142 30.39 0.7916 130.3 118.2
144 33.07 0.7681 145.8 110.5
146 35.92 0.7421 164.1 101.9
148 38.96 0.7126 186.0 92.00
150 42.19 0.6775 213.7 80.09
152 45.63 0.6316 252.4 64.44
154 49.30 0.5495 329.1 36.34
154.581 50.43 0.4361 436.1 0


--------
Nitrogen
--------

Temp.[K] Press.abs.[bar] Density(liq)[kg/l] Density(gas)[kg/m^3] Evaporation enthalpy[kJ/kg]
63.125 0.1246 0.8679 0.6803 215.2
64 0.1455 0.8647 0.7745 214.3
66 0.2059 0.8570 1.066 212.2
68 0.2847 0.8490 1.435 210.0
70 0.3854 0.8408 1.896 207.7
72 0.5121 0.8324 2.462 205.3
74 0.6689 0.8237 3.147 202.9
76 0.8604 0.8148 3.967 200.4
77.36 1.01325 0.8085 4.612 198.6
78 1.091 0.8057 4.939 197.8
80 1.367 0.7963 6.080 195.1
82 1.692 0.7867 7.410 192.3
84 2.072 0.7769 8.948 189.4
86 2.512 0.7669 10.71 186.4
88 3.019 0.7566 12.74 183.2
90 3.597 0.7461 15.04 179.9
92 4.254 0.7352 17.64 176.4
94 4.994 0.7241 20.59 172.8
96 5.823 0.7127 23.92 169.0
98 6.749 0.7009 27.66 164.9
100 7.777 0.6887 31.87 160.6
102 8.913 0.6761 36.61 156.0
104 10.16 0.6630 41.94 151.1
106 11.54 0.6494 47.94 145.9
108 13.04 0.6351 54.73 140.3
110 14.67 0.6201 62.43 134.3
112 16.45 0.6042 71.23 127.8
114 18.38 0.5872 81.37 120.6
116 20.46 0.5688 93.20 112.6
118 22.71 0.5484 107.3 103.6
120 25.13 0.5252 124.5 93.09
122 27.74 0.4971 146.6 80.34
124 30.55 0.4588 178.3 63.16
126.26 33.991 0.3141 314.1 0


Some imperial units :
1 psi = 6894.757 Pa = 68.94757 mbar <=> 1bar = 14.5038 psi ; 18psi = 1.2411 bar , 16psi = 1.1bar

D.O.N.T. U.S.E. T.H.E.M. F.O.R. C.A.L.C.U.L.A.T.I.O.N.S !





---------
Sources:



https://en.wikipedia.org/wiki/Heat_transfer_coefficient )

Nußelt Heat Transfer (atmosphere) :






Appendix
--------

Proof of temperature mixture formula :

Temperature at time t :
T(t) = T

Mass at time t :
m(t) = m

Temperature at time t = t+Dt :
T(t+Dt) = (m*T + mx*Tx) / (m+mx) with mx = mx_dot*Dt , given a constant massflow rate mx_dot
( this holds due to energy conservation law, since heat capacities of fluid in tank and inflowing fluid are equal)

Temperature change :

T(t+Dt) = (m*T + mx_dot*Dt*Tx) / (m+mx_dot*Dt)
T_dot(t) = ( T(t+Dt) - T(t) ) / Dt => (definition of derivation, Newtons principiae, 16..)
T_dot(t) = (((m*T+mx_dot*Dt*Tx)/(m+mx_dot*Dt))-T)/Dt

mit mx_dot*Dt << m0 :

T(t+Dt) ~=~ (m*T + mx_dot*Dt*Tx) / m =>
T(t+Dt) = T + (mx_dot/m)*Dt*Tx und somit :
T_dot(t) = ( ( T + (mx_dot/m)*Dt*Tx ) - T ) / Dt
= ( (mx_dot/m)*Dt*Tx ) / Dt
= (mxp/m) * Tx <=>

T_dot = Tx * mx_dot/m


q.e.d
 
We need to implement some LaTex support just for @Tom4K's posts, wowza