File:ColdnessScale.svg - Wikipedia
Article Images
The radial lines denote key temperatures, clockwise from bottom including He evaporation (dotted cyan) around 4 K ↔ 3265 GB/nJ (just CCW from the 4732.51 GB/nJ of the 2.76 K cosmic background) and N2 evaporation (dashed cyan) around 77 K ↔ 170 GB/nJ, CO2 sublimation around −78.5 °C ↔ 67.1 GB/nJ (dot-dashed cyan), H2O liquification around 0 °C ↔ 47.8 GB/nJ and evaporation around 100 °C ↔ 35.0 GB/nJ (dot-dashed green), "red-hot" (solid red) around 500 °C ↔ 16.9 GB/nJ, rock melting around 1500 °C ↔ 7.37 GB/nJ (solid magenta), graphite sublimation (dashed magenta) around 3642 °C ↔ 3.34 GB/nJ, and the surface of the sun (dotted magenta) around 5778 K ↔ 2.26 GB/nJ ≈ 2.01 nat/eV. The dashed red lines represent the min-max European temperature range (from 0 °F ↔ 51.2 GB/nJ to 100 °F ↔ 42.0 GB/nJ) on which Fahrenheit based his scale, at top of which is also the human basal temperature at around 98.6 °F ↔ 42.1 GB/nJ. Room temperature (3 o'clock) is defined as either 20 °C = 68 °F ↔ 44.6 GB/nJ ≈ 39.6 nat/eV = 1/kT or 22 °C = 71.6 °F ↔ 44.3 GB/nJ ≈ 39.3 nat/eV = 1/kT, and therefore kTroom is about 1/40 of an electron Volt.
Inverted-population states for finite-energy systems are found on the left half of this plot. These include: (i) 1024 end-on dominoes acting like stonehenge in the earth's gravitational-field (grey-dotted) at −.001[J]/(kBln[1024]) ≈ −1.04×1019 K ↔ −1.25×10−15 GB/nJ, (ii) a mole of excited Ne atoms in a He-Ne LASER ready for stimulated-emission (grey-dashed) at −1.96 [eV]/(kBln[6×1023]) ≈ −415 K ↔ −31.5 GB/nJ, and (iii) the orientation-temperature for 500,001 up out of 1,000,000 proton-spins in a 1 Tesla field (grey) at 1.41×10−26 J/(kB(ψ[1 + 1000000 − 500001] − ψ[1 + 500001])) ≈ −1.41×10−26 J/(kBln[1000000/500001 − 1]) ≈ −255 K ↔ −51.1 GB/nJ where ψ[x] is the PolyGamma function. The dot-dashed grey lines are for 500,002 and 500,003 out of 1,000,000 protons oriented spin-up in that same 1 [Tesla] field.
This plot illustrates that you can use either temperature T or reciprocal-temperature 1/kT to predict the direction of heat-flow. When you use temperature, remember that the highest possible temperature T is minus-zero-Kelvin and the lowest possible T is plus-zero-Kelvin. With coldness 1/kT, the lowest value is minus-infinity and the highest is plus-infinity so that heat energy naturally and simply flows from numerically low to numerically high 1/kT.
In the table of conversions above, note that the uncertainty-slope or coldness β≡1/kT in [GiB/nJ] or [GB/nJ] is nearly equal to the reciprocal of kT in [eV/nat]. Even more curiously, if we don't mind using binary-multiples i.e. gibiBytes instead of powers of ten, we can say that 1 [nat/eV] = 1.04827 [GiB/nJ] = 1.12557 [GB/nJ]. Hence room temperature coldness is about 40 [GiB/nJ] simply because kT at room temperature is about 1/40 [eV].
The following code generated the plot above. The legend and arrowhead were added later in Inkscape.
import numpy as np import matplotlib.pyplot as plt kb_inv = 1/1.380649e-23/np.log(2)/8/1e18 # in GB per nJ TAU = np.math.tau gib_per_nj = np.array([-140, -120, *np.arange(-100, 110, 10), 120, 140]) scale = 44.3 # Defines the 3 o'clock position angles = 2 * np.arctan(gib_per_nj/scale) r = np.ones(len(gib_per_nj)) kelvins = np.arange(-900, 1000, 100) k_angles = 2 * np.arctan(kb_inv/kelvins/scale) r_k = np.ones(len(kelvins)) celsius = np.arange(-200, 600, 100) c_angles = 2 * np.arctan(kb_inv/(273.15 + celsius)/scale) r_c = np.ones(len(c_angles)) fahrenheit = np.arange(-400, 600, 100) f_angles = 2 * np.arctan(kb_inv/(273.15 + 5*(fahrenheit-32)/9)/scale) r_f = np.ones(len(f_angles)) angle_cut = TAU/36 circle_angles = np.linspace(-(TAU/2 - angle_cut), TAU/2, 2**12) r_circ = np.ones(len(circle_angles)) semi_angles = np.linspace(0, TAU/2, 2**12) r_semi = np.ones(len(semi_angles)) size = 'x-small' def get_text(angles, labels, distance, color): for i, label in enumerate(labels): rot_angle = angles[i] * 360 / TAU plt.text(angles[i], distance + 0.1, label, color=color, ha='center', va='center', rotation=90-rot_angle, fontsize=size) fig = plt.figure(dpi=150) ax = fig.add_subplot(projection='polar') gb_distance = 1 k_distance = .8 c_distance = .6 f_distance = .4 get_text(angles, gib_per_nj, gb_distance, 'k') get_text(k_angles, kelvins, k_distance, 'b') get_text(c_angles, celsius, c_distance, 'g') get_text(f_angles, fahrenheit, f_distance, 'r') # for i, label in enumerate(gib_per_nj): # rot_angle = angles[i] * 360 / TAU # plt.text(angles[i], r[i]+.15, label, ha='center', va='center', rotation=90-rot_angle) # plt.annotate(label, (angles[i], r[i])) # Plot lines def plot_line(angle, color, line_type): ax.plot([angle, angle], [0,1], color=color, linestyle=line_type, lw=1) # Helium boiling point plot_line(2 * np.arctan(kb_inv/4./scale), 'c', ':') # N2 boiling point plot_line(2 * np.arctan(kb_inv/77./scale), 'c', '--') # CO2 sublimation plot_line(2 * np.arctan(kb_inv/(273.15-78.5)/scale), 'c', '-.') # H20 freezing freezing_angle = 2 * np.arctan(kb_inv/(273.15)/scale) plot_line(freezing_angle, 'g', '-.') # H20 boiling boiling_angle = 2 * np.arctan(kb_inv/(373.15)/scale) plot_line(boiling_angle, 'g', '-.') # Liquid water range ax.bar((boiling_angle+freezing_angle)/2, c_distance, boiling_angle-freezing_angle, color='g', alpha=0.25) # Red hot plot_line(2 * np.arctan(kb_inv/(273.15 + 500)/scale), 'r', '-') # Rock melting plot_line(2 * np.arctan(kb_inv/(273.15 + 1500)/scale), 'm', '-') # Graphite sublimation plot_line(2 * np.arctan(kb_inv/(273.15 + 3642)/scale), 'm', '--') # Surface of the Sun plot_line(2 * np.arctan(kb_inv/5778/scale), 'm', ':') # 0 °F plot_line(2 * np.arctan(kb_inv/(273.15+5*(0-32)/9)/scale), 'r', '--') # 100 °F plot_line(2 * np.arctan(kb_inv/(273.15+5*(100-32)/9)/scale), 'r', '--') # 1024 Stonehenge dominoes plot_line(2 * np.arctan(-1.25e-15/scale), 'darkgrey', ':') # HeNe laser plot_line(2 * np.arctan(-31.5/scale), 'darkgrey', '--') # 500,001 spin-up protons out of 1 million in 1T magnetic field mu_p = 1.410606797e-26 # proton magnetic moment plot_line(2 * np.arctan(kb_inv/(mu_p/(1.38e-23*np.log(1000000/500001-1)))/scale), 'darkgrey', '-') # 500,002 spin-up protons out of 1 million in 1T magnetic field plot_line(2 * np.arctan(kb_inv/(mu_p/(1.38e-23*np.log(1000000/500002-1)))/scale), 'darkgrey', '-.') # 500,003 spin-up protons out of 1 million in 1T magnetic field plot_line(2 * np.arctan(kb_inv/(mu_p/(1.38e-23*np.log(1000000/500003-1)))/scale), 'darkgrey', '-.') # Plot circles ax.plot(circle_angles, gb_distance*r_circ, 'k-') ax.plot(circle_angles, k_distance*r_circ, 'b-') ax.plot(semi_angles, c_distance * r_semi, 'g-') ax.plot(semi_angles, f_distance * r_semi, 'r-') # Plot infinities ax.plot([TAU/2], [gb_distance], 'k.') plt.text(TAU/2, 0.075 + gb_distance, r'$+\infty$', ha='center', va='center', rotation = -90, fontsize=size) ax.plot(0., k_distance, 'b.') plt.text(0., 0.075 + k_distance, r'$\pm\infty$', color='b', ha='center', va='center', rotation = 90, fontsize=size) # plt.annotate('$+\infty$', (TAU/2, 1.)) # plt.grid(visible=None) plt.axis('off') # Plot points ax.plot(angles, gb_distance*r, 'k.') ax.plot(k_angles, k_distance*r_k, 'b.') ax.plot(c_angles, c_distance * r_c, 'g.') ax.plot(f_angles, f_distance * r_f, 'r.') # Orient plot ax.set_theta_zero_location('N') ax.set_theta_direction(-1) # Set linewidths plt.setp(ax.lines, linewidth=0.6) plt.title('Universal coldness/temperature scale') plt.savefig('fig/ColdnessScale-mpl.svg');