Cryogenic thermal calculations library for cryostat design
Project description
CryoHeatFlow
A Python package for cryogenic thermal analysis and heat transfer calculations. This package provides functions for calculating thermal conductivity, thermal power transfer, thermal boundary conductance, and multilayer insulation effectiveness.
Installation
pip install cryoheatflow
Table of Contents
Features
- Thermal conductivity calculations for various materials at cryogenic temperatures
- Thermal power transfer through conductors and insulators
- Thermal boundary conductance across joints and interfaces
- Multilayer insulation effectiveness calculations
- Area calculations for various cross-sectional geometries (coax, AWG wire, etc)
Quick Start
Calculate Thermal Conductivity
import cryoheatflow
# Get thermal conductivity for stainless steel at 10K
k_conductivity_function = cryoheatflow.conductivity.k_ss
T = 10 # Temperature in Kelvin
result = k_conductivity_function(T)
print(f'Thermal conductivity = {result} W/m*K')
Calculate Thermal Power Transfer
Let's say you wanted to connect a stainless-steel microwave coax line from a 40K stage to a 4K stage. The coax has a diameter of 0.085" (so-called "085" coax), and is 30mm long. How much heat would be transferred?
import cryoheatflow
# Select stainless steel as the material
k = cryoheatflow.conductivity.k_ss
area = cryoheatflow.area.coax_085 # 0.085" outer-diameter coax
length = 30e-3 # 30 mm
T1 = 40 # 40 K
T2 = 4 # 4 K
P, G, R = cryoheatflow.calculate_thermal_transfer(k, area, length, T1, T2)
print(f'Power transmission = {P*1e3:0.3f} mW')
print(f'Thermal conductance = {G:0.6f} W/K')
print(f'Thermal resistance = {R:0.3f} K/W')
giving us
Power transmission = 4.844 mW
Thermal conductance = 0.000135 W/K
Thermal resistance = 7432.015 K/W
Calculate thermal boundary conductance
Now let's say you want to anchor a 1.5x1.5 cm^2 sample to your 4K stage, and you put grease between the sample and the 4K stage. Your sample is going to generate 2 mW of heat load and going to warm up a little. What temperature is your sample going to be at?
First, we calculate the thermal boundary conductance (in watts per kelvin), and/or its inverse quantity, the thermal boundary resistance:
import cryoheatflow
T = 4 # Temperature in Kelvin
area_m2 = 15e-3 * 15e-3 # 15 mm x 15 mm contact area
h = cryoheatflow.conductivity.h_grease(T=T, area=area_m2)
print(f'Thermal conductance = {h:0.3f} W/K')
print(f'Thermal resistance = {1/h:0.3f} K/W')
This gives us Thermal resistance R = 38.384 K/W. We can then estimate the temperature by the simple relation
(temperature increase) = (thermal resistance) x (heating power)
Giving us a temperature increase of ~76.8 mK.
Calculate Temperature Rise
If you have a thermal conductor with a known heat load applied at one end and the other end anchored at a known temperature, you can calculate the temperature rise at the hot end.
For example, assume you have a 4mm thick x 2mm wide x 100mm long strip of aluminum 6061-T6 that's attached to a 40K coldhead at one end. If the other end of the strip has 250 mW of heat load applied to it, what will the temperature be at the hot end?
import cryoheatflow
k = cryoheatflow.conductivity.k_al6061
area = 4e-3 * 2e-3 # 4 mm x 2 mm
length = 100e-3 # 100 mm
T1 = 40 # 40 K (cold end temperature)
heat_load = 0.25 # 250 mW
T2, thermal_conductance, thermal_resistance = cryoheatflow.calculate_temperature_rise(k, area, length, T1, heat_load)
print(f'Temperature at cold end = {T1:0.3f} K')
print(f'Temperature at hot end = {T2:0.3f} K')
print(f'Thermal conductance = {thermal_conductance:0.3f} W/K')
print(f'Thermal resistance = {thermal_resistance:0.3f} K/W')
giving us
Temperature at cold end = 40.000 K
Temperature at hot end = 83.680 K
Thermal conductance = 0.006 W/K
Thermal resistance = 174.719 K/W
Multilayer Insulation Analysis
from cryoheatflow import solve_multilayer_insulation
from cryoheatflow.emissivity import Al_polished, Al_oxidized, mylar
# Calculate effectiveness of multilayer insulation
T1 = 4 # Cold side temperature (K)
T2 = 85 # Warm side temperature (K)
N = 2 # Number of mylar layers
emissivity1 = Al_oxidized # Emissivity of the first layer (e.g. 300K walls)
emissivity_mylar = mylar # Emissivity of the multilayer mylar layers
emissivity2 = Al_polished # Emissivity of the last layer (e.g. 40K walls)
area = (20e-2)**2 # Area in m^2
layer_temps, qdot = solve_multilayer_insulation(T1, T2, N, emissivity1, emissivity_mylar, emissivity2, area)
print(f'Layer temperatures: {layer_temps}')
print(f'Thermal power: {abs(qdot)} W')
Plotting Thermal Conductivity Curves
Plotting code here: https://github.com/amccaugh/cryoheatflow/blob/main/plot_thermal_conductivities.py
Available Materials
Thermal Conductivity Functions
The package provides thermal conductivity functions for various materials. Most are sourced from the NIST cryogenic thermal conductivity reference; tabulated data materials are noted separately.
k_ss- Stainless steel (316/314/304L)k_cuni- 70-30 CuNi cupronickelk_al6061- Aluminum 6061-T6k_al6063- Aluminum 6063-T5k_al1100- Aluminum 1100k_brass- Brass (UNS C26000)k_becu- Beryllium copperk_cu_rrr50- Copper (RRR=50, typically ETP or OFHC)k_cu_rrr100- Copper (RRR=100)k_g10- Fiberglass-epoxy (G-10)k_nylon- Nylon (polyamide)k_phosphor_bronze- Phosphor bronze (94.8% Cu, 5% Sn, 0.2% P) — tabulated data from Lake Shore Cryotronics, valid 1–300 Kk_nichrome- Nichrome (80% Ni, 20% Cr) — tabulated data from Lake Shore Cryotronics, valid 4–300 Kk_manganin- Manganin (83% Cu, 13% Mn, 4% Ni) — tabulated data from Lake Shore Cryotronics, valid 0.1–300 K
Thermal Boundary Conductance Functions
h_grease- Thermal conductance of grease for given contact areah_solder_pb_sn- Thermal conductance of standard lead-tin (PbSn) solder for given contact area
Emissivity Values
Al_polished- Polished aluminum (ε = 0.03)Al_oxidized- Oxidized aluminum (ε = 0.3)Cu_polished- Polished copper (ε = 0.02)Cu_oxidized- Oxidized copper (ε = 0.6)brass_polished- Polished brass (ε = 0.03)brass_oxidized- Oxidized brass (ε = 0.6)stainless- Stainless steel (ε = 0.07)mylar- Mylar (ε = 0.05)
Area Calculations
The package includes functions for calculating cross-sectional areas:
tube_area(diameter, wall_thickness)- Annular cross-section areacylinder_area(diameter)- Circular cross-section areawire_gauge_area(awg)- Wire cross-section area based on AWG (American Wire Gauge)wire_swg_area(swg)- Wire cross-section area based on SWG (Standard/Imperial Wire Gauge, BS 3737), valid for gauges 1–50coax_141,coax_085,coax_047,coax_034- Predefined coaxial cable areas
Data Sources
Thermal conductivity data is sourced from:
- NIST Cryogenics Materials Database: https://trc.nist.gov/cryogenics/materials/materialproperties.htm
- Lake Shore Cryotronics material properties table (phosphor bronze, nichrome, manganin): https://www.lakeshore.com/resources/material-properties
Emissivity and thermal boundary conductance values are from Ekin, J. (2006), Experimental Techniques for Low-Temperature Measurements, Oxford University Press, Oxford, UK.
Requirements
- Python >= 3
- NumPy
- SciPy
- Matplotlib (for plotting examples)
Acknowledgements
This package was developed by Adam McCaughan. Special thanks to the wider cryogenic-science community for the invaluable data used in this package. If you use this package in your work, please consider citing the relevant sources and acknowledging the authors.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cryoheatflow-1.1.0.tar.gz.
File metadata
- Download URL: cryoheatflow-1.1.0.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e66081dc71e837ec931a15fe28417ee55f8565422314d195653b57cafb57b53
|
|
| MD5 |
28e6ceed94f6e8a8e90a49d8a85d4f7a
|
|
| BLAKE2b-256 |
f7c773049181cb18659d26a11d9831f6e7e7cd60c4b23638bfa94255fbad4100
|
File details
Details for the file cryoheatflow-1.1.0-py3-none-any.whl.
File metadata
- Download URL: cryoheatflow-1.1.0-py3-none-any.whl
- Upload date:
- Size: 24.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
400abe21f0d029a64c0dfe1b7b9668cc762cba411601113ec554dac317a1482b
|
|
| MD5 |
50a6183aacb3ca6e18334af950e0caee
|
|
| BLAKE2b-256 |
5492e24808405acd190065931bb08dbe5fbd722d2b9a88f0b95b45f97c92ac84
|