#
# This file is the units database for use with GNU units, a units conversion
# program by Adrian Mariano adrianm@gnu.org
#
# Febuary 2024 Version 3.19
# last updated 16 February 2024
#
# Copyright (C) 1996-2002, 2004-2020, 2022, 2024
# Free Software Foundation, Inc
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA  02110-1301  USA
#
############################################################################
#
# Improvements and corrections are welcome.
#
# See the end of this file for a list of items we have chosen to exclude
# or have decided are out of scope for GNU units.  
#
# Fundamental constants in this file are the 2018 CODATA recommended values.
#
# Most units data was drawn from
#            1. NIST Special Publication 811, Guide for the
#                 Use of the International System of Units (SI).
#                 Barry N. Taylor. 2008
#                 https://www.nist.gov/pml/special-publication-811
#            2. CRC Handbook of Chemistry and Physics 70th edition
#            3. Oxford English Dictionary
#            4. Webster's New Universal Unabridged Dictionary
#            5. Units of Measure by Stephen Dresner
#            6. A Dictionary of English Weights and Measures by Ronald Zupko
#            7. British Weights and Measures by Ronald Zupko
#            8. Realm of Measure by Isaac Asimov
#            9. United States standards of weights and measures, their
#                   creation and creators by Arthur H. Frazier.
#           10. French weights and measures before the Revolution: a
#                   dictionary of provincial and local units by Ronald Zupko
#           11. Weights and Measures: their ancient origins and their
#                   development in Great Britain up to AD 1855 by FG Skinner
#           12. The World of Measurements by H. Arthur Klein
#           13. For Good Measure by William Johnstone
#           14. NTC's Encyclopedia of International Weights and Measures
#                   by William Johnstone
#           15. Sizes by John Lord
#           16. Sizesaurus by Stephen Strauss
#           17. CODATA Recommended Values of Physical Constants available at
#                   http://physics.nist.gov/cuu/Constants/index.html
#           18. How Many?  A Dictionary of Units of Measurement.  Available at
#                   http://www.ibiblio.org/units/
#           19. Numericana.  http://www.numericana.com
#           20. UK history of measurement
#                   https://metrication.uk/more/timeline/
#           21. NIST Handbook 44, Specifications, Tolerances, and
#                 Other Technical Requirements for Weighing and Measuring
#                 Devices. 2011
#           22. NIST Special Publication 447, Weights and Measures Standards
#                 of the United States: a brief history. Lewis V. Judson.
#                 1963; rev. 1976
#           23. CRC Handbook of Chemistry and Physics, 96th edition
#           24. Dictionary of Scientific Units, 6th ed.  H.G.  Jerrard and D.B.
#                 McNeill. 1992
#           25. NIST Special Publication 330, The International System of
#                 Units (SI). ed. Barry N. Taylor and Ambler Thompson. 2008
#                 https://www.nist.gov/pml/special-publication-330
#           26. BIPM Brochure, The International System of Units (SI).
#                 9th ed., 2019
#                 https://www.bipm.org/en/publications/si-brochure/
#
###########################################################################
#
# If units you use are missing or defined incorrectly, please contact me.
# If your country's local units are missing and you are willing to supply
# them, please send me a list.
#
###########################################################################

###########################################################################
#
# Brief Philosophy of this file
#
# Most unit definitions are made in terms of integers or simple fractions of
# other definitions.  The typical exceptions are when converting between two
# different unit systems, or the values of measured physical constants.  In
# this file definitions are given in the most natural and revealing way in
# terms of integer factors.
#
# If you make changes be sure to run 'units --check' to check your work.
#
# The file is USA-centric, but there is some modest effort to support other
# countries.  This file is now coded in UTF-8.  To support environments where
# UTF-8 is not available, definitions that require this character set are
# wrapped in !utf8 directives.
#
# When a unit name is used in different countries with the different meanings
# the system should be as follows:
#
# Suppose countries ABC and XYZ both use the "foo".  Then globally define
#
#   ABCfoo  <some value>
#   XYZfoo  <different value>
#
# Then, using the !locale directive, define the "foo" appropriately for each of
# the two countries with a definition like
#
# !locale ABC
#    foo  ABCfoo
# !endlocale
#
###########################################################################

!locale en_US
!  set UNITS_ENGLISH US
!endlocale

!locale en_GB
!  set UNITS_ENGLISH GB
!endlocale

!set UNITS_ENGLISH US   # Default setting for English units

!set UNITS_SYSTEM default   # Set a default value

!varnot UNITS_SYSTEM si emu esu gaussian gauss hlu natural natural-gauss hartree planck planck-red default 
!message Unknown unit system given with -u or UNITS_SYSTEM environment variable
!message Valid systems: si, emu, esu, gauss[ian], hlu, natural, natural-gauss
!message                planck, planck-red, hartree
!message Using SI
!prompt (SI)
!endvar

!var UNITS_SYSTEM si
!message SI units selected
!prompt (SI)
!endvar

###########################################################################
#                                                                         #
# Primitive units.  Any unit defined to contain a '!' character is a      #
# primitive unit which will not be reduced any further.  All units should #
# reduce to primitive units.                                              #
#                                                                         #
###########################################################################

#
# SI units
#
# On 20 May 2019, the SI was revised to define the units by fixing the
# values of physical constants that depend on those units.
#
# https://www.nist.gov/si-redefinition/
#
# The BIPM--the International Bureau of Weights and Measures--provides a
# succinct description of the new SI in its Concise Summary:
#
# https://www.bipm.org/utils/common/pdf/si-brochure/SI-Brochure-9-concise-EN.pdf
#
#     The SI is the system of units in which:
#
#       *  the unperturbed ground state hyperfine transition frequency of the
#          caesium 133 atom is delta nu_Cs = 9 192 631 770 Hz,
#       *  the speed of light in vacuum, c, is 299 792 458 m/s,
#       *  the Planck constant, h, is 6.626 070 15 * 10^-34 J s,
#       *  the elementary charge, e, is 1.602 176 634 * 10^-19 C,
#       *  the Boltzmann constant, k, is 1.380 649 * 10^-23 J/K,
#       *  the Avogadro constant, N_A, is 6.022 140 76 * 10^23 mol^-1,
#       *  the luminous efficacy of monochromatic radiation of frequency
#          540 * 10^12 Hz, K_cd, is 683 lm/W,
#
#     where the hertz, joule, coulomb, lumen, and watt, with unit symbols Hz,
#     J, C, lm, and W, respectively, are related to the units second, metre,
#     kilogram, ampere, kelvin, mole, and candela, with unit symbols s, m, kg,
#     A, K, mol, and cd, respectively, according to Hz = s^-1, J = kg m^2 s^-2,
#     C = A s, lm = cd m^2 m^-2 = cd sr, and W = kg m^2 s^-3.
# 
#     These definitions specify the exact numerical value of each constant when
#     its value is expressed in the corresponding SI unit.  By fixing the exact
#     numerical value the unit becomes defined, since the product of the
#     numerical value and the unit has to equal the value of the constant,
#     which is invariant.
# 
#     The defining constants have been chosen such that, when taken together,
#     their units cover all of the units of the SI.  In general, there is no
#     one-to-one correspondence between the defining constants and the SI base
#     units.  Any SI unit is a product of powers of these seven constants and a
#     dimensionless factor.
# 
# Until 2018, the SI was defined in terms of base units and derived units.
# These categories are no longer essential in the SI, but they are maintained
# in view of their convenience and widespread use.  They are arguably more
# intuitive than the new definitions.  (They are also essential to the
# operation of GNU units.)  The definitions of the base units, which follow
# from the definition of the SI in terms of the seven defining constants, are
# given below.
#

s         !      # The second, symbol s, is the SI unit of time.  It is defined
second    s      # by taking the fixed numerical value of the unperturbed
                 # ground-state hyperfine transition frequency of the
                 # cesium-133 atom to be 9 192 631 770 when expressed in the
                 # unit Hz, which is equal to 1/s.  
                 #
                 # This definition is a restatement of the previous one, the
                 # duration of 9192631770 periods of the radiation corresponding
                 # to the cesium-133 transition.

nu_133Cs  9192631770 Hz   # Cesium-133 transition frequency (exact)

c_SI      299792458
c         299792458 m/s   # speed of light in vacuum (exact)

m         !      # The metre, symbol m, is the SI unit of length.  It is
meter     m      # defined by taking the fixed numerical value of the speed
metre     m      # of light in vacuum, c, to be 299 792 458 when expressed in
                 # units of m/s.
                 #
                 # This definition is a rewording of the previous one and is
                 # equivalent to defining the meter as the distance light
                 # travels in 1|299792458 seconds.  The meter was originally
                 # intended to be 1e-7 of the length along a meridian from the
                 # equator to a pole.

h_SI      6.62607015e-34
h         6.62607015e-34 J s # Planck constant (exact)

kg        !      # The kilogram, symbol kg, is the SI unit of mass.  It is
kilogram  kg     # defined by taking the fixed numerical value of the Planck
                 # constant, h, to be 6.626 070 15 * 10^-34 when expressed in
                 # the unit J s which is equal to kg m^2 / s.
                 # 
                 # One advantage of fixing h to define the kilogram is that this
                 # affects constants used to define the ampere.  If the kg were
                 # defined by directly fixing the mass of something, then h
                 # would be subject to error.
                 #
                 # The previous definition of the kilogram was the mass of the
                 # international prototype kilogram.  The kilogram was the last
                 # unit whose definition relied on reference to an artifact.
                 #
                 # It is not obvious what this new definition means, or
                 # intuitively how fixing Planck's constant defines the
                 # kilogram.  To define the kilogram we need to give the mass
                 # of some reference in kilograms.  Previously the prototype in
                 # France served as this reference, and it weighed exactly 1
                 # kg.  But the reference can have any weight as long as you
                 # know the weight of the reference.  The new definition uses
                 # the "mass" of a photon, or more accurately, the mass
                 # equivalent of the energy of a photon.  The energy of a
                 # photon depends on its frequency.  If you pick a frequency,
                 # f, then the energy of the photon is hf, and hence the mass
                 # equivalent is hf/c^2.  If we reduce this expression using
                 # the constant defined values for h and c the result is a
                 # value in kilograms for the mass-equivalent of a photon of
                 # frequency f, which can therefore define the size of the
                 # kilogram.
                 #
                 # For more on the relationship between mass an Planck's
                 # constant:
                 #
                 # https://www.nist.gov/si-redefinition/kilogram-mass-and-plancks-constant
                 # This definition may still seem rather abstract: you can't
                 # place a "kilogram of radiation" on one side of a balance.
                 # Metrologists realize the kilogram using a Kibble Balance, a
                 # device which relates mechanical energy to electrical energy
                 # and can measure mass with extreme accuracy if h is known.
                 #
                 # For more on the Kibble Balance see
                 #
                 # https://www.nist.gov/si-redefinition/kilogram-kibble-balance
                 # https://en.wikipedia.org/wiki/Kibble_balance

k_SI      1.380649e-23
boltzmann 1.380649e-23 J/K   # Boltzmann constant (exact)
k         boltzmann

K         !      # The kelvin, symbol K, is the SI unit of thermodynamic
kelvin    K      # temperature.  It is defined by taking the fixed numerical
                 # value of the Boltzmann constant, k, to be 1.380 649 * 10^-23
                 # when expressed in the unit J/K, which is equal to 
                 # kg m^2/s^2 K.
                 #
                 # The boltzmann constant establishes the relationship between
                 # energy and temperature.  The average thermal energy carried
                 # by each degree of freedom is kT/2.  A monatomic ideal gas
                 # has three degrees of freedom corresponding to the three
                 # spatial directions, which means its thermal energy is
                 # (3/2) k T.
                 #
                 # The previous definition of the kelvin was based on the
                 # triple point of water.  The change in the definition of the
                 # kelvin will not have much effect on measurement practice.
                 # Practical temperature calibration makes use of two scales,
                 # the International Temperature Scale of 1990 (ITS-90), which
                 # covers the range of 0.65 K to 1357.77K and the Provisional
                 # Low Temperature Scale of 2000 (PLTS-2000), which covers the
                 # range of 0.9 mK to 1 K.
                 # https://www.bipm.org/en/committees/cc/cct/publications-cc.html
                 #
                 # The ITS-90 contains 17 reference points including things
                 # like the triple point of hydrogen (13.8033 K) or the
                 # freezing point of gold (1337.33 K), and of course the triple
                 # point of water.  The PLTS-2000 specifies four reference
                 # points, all based on properties of helium-3.
                 #
                 # The redefinition of the kelvin will not affect the values of
                 # these reference points, which have been determined by
                 # primary thermometry, using thermometers that rely only on
                 # relationships that allow temperature to be calculated
                 # directly without using any unknown quantities. Examples
                 # include acoustic thermometers, which measure the speed of
                 # sound in a gas, or electronic thermometers, which measure
                 # tiny voltage fluctuations in resistors. Both variables
                 # depend directly on temperature.

e_SI      1.602176634e-19
e         1.602176634e-19 C  # electron charge (exact)

A         !      # The ampere, symbol A, is the SI unit of electric current.
ampere    A      # It is defined by taking the fixed numerical value of the
amp       ampere # elementary charge, e, to be 1.602 176 634 * 10^-19 when
                 # expressed in the unit C, which is equal to A*s.
                 #
                 # The previous definition was the current which produces a
                 # force of 2e-7 N/m between two infinitely long wires a meter
                 # apart.  This definition was difficult to realize accurately.
                 #
                 # The ampere is actually realized by establishing the volt and
                 # the ohm, since A = V / ohm.  These measurements can be done
                 # using the Josephson effect and the quantum Hall effect,
                 # which accurately measure voltage and resistance, respectively,
                 # with reference to two fixed constants, the Josephson
                 # constant, K_J=2e/h and the von Klitzing constant, R_K=h/e^2.
                 # Under the previous SI system, these constants had official
                 # fixed values, defined in 1990.  This created a situation
                 # where the standard values for the volt and ohm were in some
                 # sense outside of SI because they depended primarily on
                 # constants different from the ones used to define SI. After
                 # the revision, since e and h have exact definitions, the
                 # Josephson and von Klitzing constants will also have exact
                 # definitions that derive from SI instead of the conventional
                 # 1990 values.
                 #
                 # In fact we know that there is a small offset between the
                 # conventional values of the electrical units based on the
                 # conventional 1990 values and the SI values.  The new
                 # definition, which brings the practical electrical units back
                 # into SI, will lead to a one time change of +0.1ppm for
                 # voltage values and +0.02ppm for resistance values.
                 #
                 # The previous definition resulted in fixed exact values for
                 # the vacuum permeability (mu0), the impedance of free space
                 # (Z0), the vacuum permittivity (epsilon0), and the Coulomb
                 # constant. With the new definition, these four values are
                 # subject to experimental error.

avogadro  6.02214076e23 / mol # Size of a mole (exact)
N_A       avogadro

mol       !      # The mole, symbol mol, is the SI unit of amount of
mole      mol    # substance.  One mole contains exactly 6.022 140 76 * 10^23
                 # elementary entities.  This number is the fixed numerical
                 # value of the Avogadro constant, N_A, when expressed in the
                 # unit 1/mol and is called the Avogadro number.  The amount of
                 # substance, symbol n, of a system is a measure of the number
                 # of specified elementary entities.  An elementary entity may
                 # be an atom, a molecule, an ion, an electron, any other
                 # particle or specified group of particles.
                 #
                 # The atomic mass unit (u) is defined as 1/12 the mass of
                 # carbon-12.  Previously the mole was defined so that a mole
                 # of carbon-12 weighed exactly 12g, or N_A u = 1 g/mol
                 # exactly. This relationship is now an experimental, 
                 # approximate relationship.
                 #
                 # To determine the size of the mole, researchers used spheres
                 # of very pure silicon-28 that weighed a kilogram.  They
                 # measured the molar mass of Si-28 using mass spectrometry and
                 # used X-ray diffraction interferometry to determine the
                 # spacing of the silicon atoms in the sphere.  Using the
                 # sphere's volume it was then possible to determine the number
                 # of silicon atoms in the sphere, and hence determine the
                 # Avogadro constant.  The results of this experiment were used 
                 # to define N_A, which is henceforth a fixed, unchanging
                 # quantity.  

cd        !      # The candela, symbol cd, is the SI unit of luminous intensity
candela   cd     # in a given direction.  It is defined by taking the fixed
                 # numerical value of the luminous efficacy of monochromatic
                 # radiation of the frequency 540e12 Hz to be 683 when
                 # expressed in the unit lumen/watt, which is equal to
                 # cd sr/W, or cd sr s^3/kg m^2
                 #
                 # This definition is a rewording of the previous definition.
                 # Luminous intensity differs from radiant intensity (W/sr) in
                 # that it is adjusted for human perceptual dependence on
                 # wavelength.  The frequency of 540e12 Hz (yellow;
                 # wavelength approximately 555 nm in vacuum) is where human
                 # perception is most efficient.
                 
K_cd 683 lumen/W # Luminous efficiency at 540e12 Hz (exact)

# Angular Measure
#
# The radian and steradian are defined as dimensionless primitive units.
# The radian is equal to m/m and the steradian to m^2/m^2 so these units are
# dimensionless.  Retaining them as named units is useful because it allows
# clarity in expressions and makes the meaning of unit definitions more clear.
# These units will reduce to 1 in conversions but not for sums of units or for
# arguments to functions.
#

radian    !dimensionless   # Plane angle subtended at the center of a circle by
                           #   an arc equal in length to the radius of the
                           #   circle.  
                           #   Dimension: LENGTH (of arc) / DISTANCE (radius)

sr        !dimensionless   # Solid angle which cuts off an area of the surface
steradian sr               #   of the sphere equal to that of a square with
                           #   sides of length equal to the radius of the
                           #   sphere.
                           #   Dimension: AREA (of surface) / DISTANCE^2
                           #                                         (radius^2)
#
# A primitive non-SI unit
#

bit       !      # Basic unit of information (entropy).  The entropy in bits
                 #   of a random variable over a finite alphabet is defined
                 #   to be the sum of -p(i)*log2(p(i)) over the alphabet where
                 #   p(i) is the probability that the random variable takes
                 #   on the value i.

#
# Currency: the primitive unit of currency is defined in currency.units. 
# It is usually the US$ or the euro, but it is user selectable.  
#

#
# Absolute value
#

abs(x)                  noerror sqrt(x^2)  

###########################################################################
#                                                                         #
# Prefixes (longer names must come first)                                 #
#                                                                         #
###########################################################################

quetta-                 1e30     # Allegedly from "q" plus Greek "deka" (ten)
ronna-                  1e27     # Allegedly from "r" plus Greek "ennea" (nine)
yotta-                  1e24     # Greek or Latin "octo" (eight)
zetta-                  1e21     # Latin "septem" (seven)
exa-                    1e18     # Greek "hex" (six)
peta-                   1e15     # Greek "pente" (five)
tera-                   1e12     # Greek "teras" (monster)
giga-                   1e9      # Greek "gigas" (giant)
mega-                   1e6      # Greek "megas" (large)
myria-                  1e4      # Not an official SI prefix
kilo-                   1e3      # Greek "chilioi" (thousand)
hecto-                  1e2      # Greek "hekaton" (hundred)
deca-                   1e1      # Greek "deka" (ten)
deka-                   deca
deci-                   1e-1     # Latin "decimus" (tenth)
centi-                  1e-2     # Latin "centum" (hundred)
milli-                  1e-3     # Latin "mille" (thousand)
micro-                  1e-6     # Latin "micro" or Greek "mikros" (small)
nano-                   1e-9     # Latin "nanus" or Greek "nanos" (dwarf)
pico-                   1e-12    # Spanish "pico" (a bit)
femto-                  1e-15    # Danish-Norwegian "femten" (fifteen)
atto-                   1e-18    # Danish-Norwegian "atten" (eighteen)
zepto-                  1e-21    # Latin "septem" (seven)
yocto-                  1e-24    # Greek or Latin "octo" (eight)
ronto-                  1e-27    # Allegedly "r" plus Latin "novum" (nine)
quecto-                 1e-30    # Allegedly "q" plus Latin "decim" (ten)

quarter-                1|4
semi-                   0.5
demi-                   0.5
hemi-                   0.5
half-                   0.5
double-                 2
triple-                 3
treble-                 3

kibi-                   2^10     # In response to the improper and confusing
mebi-                   2^20     # use of SI prefixes for powers of two,
gibi-                   2^30     # the International Electrotechnical
tebi-                   2^40     # Commission aproved these binary prefixes
pebi-                   2^50     # in IEC 60027-2 Amendment 2 (1999).
exbi-                   2^60
zebi-                   2^70     # Zebi- and yobi- were added in the 2005 ed.,
yobi-                   2^80     # later superseded by ISO/IEC 80000-13:2008.
robi-                   2^90
quebi-                  2^100
Ki-                     kibi
Mi-                     mebi
Gi-                     gibi
Ti-                     tebi
Pi-                     pebi
Ei-                     exbi
Zi-                     zebi
Yi-                     yobi
Ri-                     robi
Qi-                     quebi

Q-                      quetta
R-                      ronna
Y-                      yotta
Z-                      zetta
E-                      exa
P-                      peta
T-                      tera
G-                      giga
M-                      mega
k-                      kilo
h-                      hecto
da-                     deka
d-                      deci
c-                      centi
m-                      milli
u-                      micro   # it should be a mu but u is easy to type
n-                      nano
p-                      pico
f-                      femto
a-                      atto
z-                      zepto
y-                      yocto
r-                      ronto
q-                      quecto

#
# Names of some numbers
#

one                     1
two                     2
double                  2
couple                  2
three                   3
triple                  3
four                    4
quadruple               4
five                    5
quintuple               5
six                     6
seven                   7
eight                   8
nine                    9
ten                     10
eleven                  11
twelve                  12
thirteen                13
fourteen                14
fifteen                 15
sixteen                 16
seventeen               17
eighteen                18
nineteen                19
twenty                  20
thirty                  30
forty                   40
fifty                   50
sixty                   60
seventy                 70
eighty                  80
ninety                  90
hundred                 100
thousand                1000
million                 1e6

twoscore                two score
threescore              three score
fourscore               four score
fivescore               five score
sixscore                six score
sevenscore              seven score
eightscore              eight score
ninescore               nine score
tenscore                ten score
twelvescore             twelve score

# These number terms were described by N. Chuquet and De la Roche in the 16th
# century as being successive powers of a million.  These definitions are still
# used in most European countries.  The current US definitions for these
# numbers arose in the 17th century and don't make nearly as much sense.  These
# numbers are listed in the CRC Concise Encyclopedia of Mathematics by Eric
# W. Weisstein.

shortbillion               1e9
shorttrillion              1e12
shortquadrillion           1e15
shortquintillion           1e18
shortsextillion            1e21
shortseptillion            1e24
shortoctillion             1e27
shortnonillion             1e30
shortnoventillion          shortnonillion
shortdecillion             1e33
shortundecillion           1e36
shortduodecillion          1e39
shorttredecillion          1e42
shortquattuordecillion     1e45
shortquindecillion         1e48
shortsexdecillion          1e51
shortseptendecillion       1e54
shortoctodecillion         1e57
shortnovemdecillion        1e60
shortvigintillion          1e63

centillion              1e303
googol                  1e100

longbillion               million^2
longtrillion              million^3
longquadrillion           million^4
longquintillion           million^5
longsextillion            million^6
longseptillion            million^7
longoctillion             million^8
longnonillion             million^9
longnoventillion          longnonillion
longdecillion             million^10
longundecillion           million^11
longduodecillion          million^12
longtredecillion          million^13
longquattuordecillion     million^14
longquindecillion         million^15
longsexdecillion          million^16
longseptdecillion         million^17
longoctodecillion         million^18
longnovemdecillion        million^19
longvigintillion          million^20

# These numbers fill the gaps left by the long system above.

milliard                1000 million
billiard                1000 million^2
trilliard               1000 million^3
quadrilliard            1000 million^4
quintilliard            1000 million^5
sextilliard             1000 million^6
septilliard             1000 million^7
octilliard              1000 million^8
nonilliard              1000 million^9
noventilliard           nonilliard
decilliard              1000 million^10

# For consistency

longmilliard              milliard
longbilliard              billiard
longtrilliard             trilliard
longquadrilliard          quadrilliard
longquintilliard          quintilliard
longsextilliard           sextilliard
longseptilliard           septilliard
longoctilliard            octilliard
longnonilliard            nonilliard
longnoventilliard         noventilliard
longdecilliard            decilliard

# The long centillion would be 1e600.  The googolplex is another
# familiar large number equal to 10^googol.  These numbers give overflows.

#
# The short system prevails in English speaking countries
#

billion                 shortbillion
trillion                shorttrillion
quadrillion             shortquadrillion
quintillion             shortquintillion
sextillion              shortsextillion
septillion              shortseptillion
octillion               shortoctillion
nonillion               shortnonillion
noventillion            shortnoventillion
decillion               shortdecillion
undecillion             shortundecillion
duodecillion            shortduodecillion
tredecillion            shorttredecillion
quattuordecillion       shortquattuordecillion
quindecillion           shortquindecillion
sexdecillion            shortsexdecillion
septendecillion         shortseptendecillion
octodecillion           shortoctodecillion
novemdecillion          shortnovemdecillion
vigintillion            shortvigintillion

#
# Numbers used in India 
#

lakh                    1e5
crore                   1e7
arab                    1e9
kharab                  1e11
neel                    1e13
padm                    1e15
shankh                  1e17

#############################################################################
#                                                                           #
# Derived units which can be reduced to the primitive units                 #
#                                                                           #
#############################################################################



#
# Named SI derived units (officially accepted)
#

newton                  kg m / s^2   # force
N                       newton
pascal                  N/m^2        # pressure or stress
Pa                      pascal
joule                   N m          # energy
J                       joule
watt                    J/s          # power
W                       watt
coulomb                 A s          # charge
C                       coulomb
volt                    W/A          # potential difference
V                       volt
ohm                     V/A          # electrical resistance
siemens                 A/V          # electrical conductance
S                       siemens
farad                   C/V          # capacitance
F                       farad
weber                   V s          # magnetic flux
Wb                      weber
henry                   V s / A      # inductance, also Wb/A, but needs to be
H                       henry        #   defined this way for CGS units
tesla                   Wb/m^2       # magnetic flux density
T                       tesla
hertz                   /s           # frequency
Hz                      hertz

#
# Dimensions.  These are here to help with dimensional analysis and
# because they will appear in the list produced by hitting '?' at the
# "You want:" prompt to tell the user the dimension of the unit.
#

LENGTH                  meter
AREA                    LENGTH^2
VOLUME                  LENGTH^3
MASS                    kilogram
AMOUNT                  mole
ANGLE                   radian
SOLID_ANGLE             steradian
MONEY                   US$
FORCE                   newton
PRESSURE                FORCE / AREA
STRESS                  FORCE / AREA
FREQUENCY               hertz
WAVELENGTH              LENGTH
WAVENUMBER              1/WAVELENGTH          # number of waves per distance
VELOCITY                DISPLACEMENT / TIME   # a vector (includes direction)
SPEED                   DISTANCE / TIME       # a scalar 
ACCELERATION            VELOCITY / TIME
MOMENTUM                MASS VELOCITY    # Also ENERGY / VELOCITY or IMPULSE
IMPULSE                 FORCE TIME
DISPLACEMENT            LENGTH
DISTANCE                LENGTH
ELONGATION              LENGTH
STRAIN                  ELONGATION / LENGTH
ENERGY                  joule
POWER                   watt
WORK                    FORCE DISTANCE
DENSITY                 MASS / VOLUME
LINEAR_DENSITY          MASS / LENGTH
SPECIFIC_ENERGY         ENERGY / MASS
VISCOSITY               FORCE TIME / AREA
KINEMATIC_VISCOSITY     VISCOSITY / DENSITY
CURRENT                 ampere
CHARGE                  coulomb
CAPACITANCE             farad
RESISTANCE              ohm
CONDUCTANCE             siemens
# It may be easier to understand the relationship by considering
# an object with specified dimensions and resistivity, whose
# resistance is given by the resistivity * length / area. 
RESISTIVITY             RESISTANCE AREA / LENGTH
CONDUCTIVITY            CONDUCTANCE LENGTH / AREA
INDUCTANCE              henry
E_FIELD                 ELECTRIC_POTENTIAL / LENGTH
B_FIELD                 tesla
# The D and H fields are related to the E and B fields by factors of
# epsilon and mu respectively, so their units can be found by
# multiplying/dividing by the epsilon0 and mu0.  The more complex
# definitions below make it possible to use D_FIELD and E_FIELD to
# convert between SI and CGS units for these dimensions.
D_FIELD                 E_FIELD epsilon0 / epsilon0_SI  #   mu0_SI c^2 F / m
H_FIELD                 B_FIELD / (mu0/mu0_SI)
ELECTRIC_DIPOLE_MOMENT  C m
MAGNETIC_DIPOLE_MOMENT  J / T
POLARIZATION            ELECTRIC_DIPOLE_MOMENT / VOLUME
MAGNETIZATION           MAGNETIC_DIPOLE_MOMENT / VOLUME
ELECTRIC_POTENTIAL      ENERGY / CHARGE #volt
VOLTAGE                 ELECTRIC_POTENTIAL
E_FLUX                  E_FIELD AREA    
D_FLUX                  D_FIELD AREA
B_FLUX                  B_FIELD AREA    
H_FLUX                  H_FIELD AREA

#
# units derived easily from SI units
#

gram                    millikg
gm                      gram
g                       gram
tonne                   1000 kg
t                       tonne
metricton               tonne
sthene                  tonne m / s^2
funal                   sthene
pieze                   sthene / m^2
quintal                 100 kg
bar                     1e5 Pa     # About 1 atm
b                       bar
vac                     millibar
micron                  micrometer # One millionth of a meter
bicron                  picometer  # One brbillionth of a meter
cc                      cm^3
are                     100 m^2
a                       are
liter                   1000 cc       # The liter was defined in 1901 as the
oldliter                1.000028 dm^3 # space occupied by 1 kg of pure water at
L                       liter         # the temperature of its maximum density
l                       liter         # under a pressure of 1 atm.  This was
                                      # supposed to be 1000 cubic cm, but it
                                      # was discovered that the original
                                      # measurement was off.  In 1964, the
                                      # liter was redefined to be exactly 1000
                                      # cubic centimeters.
Ah                      amp hour   # Unit of charge                                      
mho                     siemens    # Inverse of ohm, hence ohm spelled backward
galvat                  ampere     # Named after Luigi Galvani
angstrom                1e-10 m    # Convenient for describing molecular sizes
xunit                   xunit_cu      # Used for measuring x-ray wavelengths.
siegbahn                xunit         # Originally defined to be 1|3029.45 of
xunit_cu             1.00207697e-13 m # the spacing of calcite planes at 18
xunit_mo             1.00209952e-13 m # degC.  It was intended to be exactly
                                      # 1e-13 m, but was later found to be
                                      # slightly off.  Current usage is with
                                      # reference to common x-ray lines, either
                                      # the K-alpha 1 line of copper or the
                                      # same line of molybdenum.
angstromstar   1.00001495 angstrom # Defined by JA Bearden in 1965 to replace 
                                   #   the X unit.  The wavelength of the
                                   #   tungsten K alpha1 line was defined as
                                   #   exactly 0.20901 angstrom star, with the
                                   #   value chosen to try to make the new
                                   #   unit close to the angstrom.  
silicon_d220     1.920155716e-10 m # Silicon lattice spacing
siliconlattice sqrt(8) silicon_d220# Silicon lattice parameter, (a), the side
                                   #   length of the unit cell for the diamond
                                   #   centered cubic structure of silicon.
fermi                   1e-15 m    # Convenient for describing nuclear sizes
                                   #   Nuclear radius is from 1 to 10 fermis
barn                    1e-28 m^2  # Used to measure cross section for
                                   #   particle physics collision, said to
                                   #   have originated in the phrase "big as
                                   #   a barn".
shed                    1e-24 barn # Defined to be a smaller companion to the
                                   #   barn, but it's too small to be of
                                   #   much use.
brewster                micron^2/N # measures stress-optical coef
diopter                 /m         # measures reciprocal of lens focal length
fresnel                 1e12 Hz    # occasionally used in spectroscopy
shake                   1e-8 sec
svedberg                1e-13 s    # Used for measuring the sedimentation
                                   # coefficient for centrifuging.
gamma                   microgram  # Also used for 1e-9 tesla
lambda                  microliter
spat                    1e12 m     # Rarely used for astronomical measurements
preece                  1e13 ohm m # resistivity
planck                  J s        # action of one joule over one second
sturgeon                /henry     # magnetic reluctance
daraf                   1/farad    # elastance (farad spelled backwards)
leo                     10 m/s^2
poiseuille              N s / m^2  # viscosity
mayer                   J/g K      # specific heat
mired                   / microK   # reciprocal color temperature.  The name
                                   #   abbreviates micro reciprocal degree.
crocodile               megavolt   # used informally in UK physics labs
metricounce             25 g
mounce                  metricounce
finsenunit              1e5 W/m^2  # Measures intensity of ultraviolet light
                                   # with wavelength 296.7 nm.
fluxunit                1e-26 W/m^2 Hz # Used in radio astronomy to measure
                                       #   the energy incident on the receiving
                                       #   body across a specified frequency
                                       #   bandwidth.  [12]
jansky                  fluxunit   # K. G. Jansky identified radio waves coming
Jy                      jansky     # from outer space in 1931.
flick       W / cm^2 sr micrometer # Spectral radiance or irradiance
pfu                    / cm^2 sr s # particle flux unit -- Used to measure
                                   #   rate at which particles are received by
                                   #   a spacecraft as particles per solid
                                   #   angle per detector area per second. [18]
pyron            cal_IT / cm^2 min # Measures heat flow from solar radiation,
                                   #   from Greek work "pyr" for fire.
katal                   mol/sec    # Measure of the amount of a catalyst.  One
kat                     katal      #   katal of catalyst enables the reaction
                                   #   to consume or produce one mol/sec.
solarluminosity         382.8e24 W # A common yardstick for comparing the
                                   #   output of different stars.
                # http://nssdc.gsfc.nasa.gov/planetary/factsheet/sunfact.html
# at mean Earth-Sun distance
solarirradiance         solarluminosity / (4 pi sundist^2)
solarconstant           solarirradiance
TSI                     solarirradiance         # total solar irradiance

#
# time
#

sec                     s
minute                  60 s
min                     minute
hour                    60 min
hr                      hour
day                     24 hr
d                       day
da                      day
week                    7 day
wk                      week
sennight                7 day
fortnight               14 day
blink                   1e-5 day   # Actual human blink takes 1|3 second
ce                      1e-2 day
cron                    1e6 years
watch                   4 hours    # time a sentry stands watch or a ship's
                                   # crew is on duty.
bell                    1|8 watch  # Bell would be sounded every 30 minutes.

# French Revolutionary Time or Decimal Time.  It was Proposed during
# the French Revolution.  A few clocks were made, but it never caught
# on.  In 1998 Swatch defined a time measurement called ".beat" and
# sold some watches that displayed time in this unit.

decimalhour             1|10 day            
decimalminute           1|100 decimalhour   
decimalsecond           1|100 decimalminute 
beat                    decimalminute          # Swatch Internet Time

#
# angular measure
#

circle                  2 pi radian
degree                  1|360 circle
deg                     degree
arcdeg                  degree
arcmin                  1|60 degree
arcminute               arcmin
'                       arcmin
arcsec                  1|60 arcmin
arcsecond               arcsec
"                       arcsec
''                      "
rightangle              90 degrees
quadrant                1|4 circle
quintant                1|5 circle
sextant                 1|6 circle

sign                    1|12 circle # Angular extent of one sign of the zodiac
turn                    circle
revolution              turn
rev                     turn
pulsatance              radian / sec
gon                     1|100 rightangle  # measure of grade
grade                   gon
centesimalminute        1|100 grade
centesimalsecond        1|100 centesimalminute
milangle                1|6400 circle     # Official NIST definition.
                                          # Another choice is 1e-3 radian.
pointangle              1|32 circle  # Used for reporting compass readings
centrad                 0.01 radian  # Used for angular deviation of light
                                     # through a prism.
mas                     milli arcsec # Used by astronomers
seclongitude            circle (seconds/day) # Astronomers measure longitude
                                     # (which they call right ascension) in
                                     # time units by dividing the equator into
                                     # 24 hours instead of 360 degrees.
#
# Some geometric formulas
#

circlearea(r)   units=[m;m^2] range=[0,) pi r^2 ; sqrt(circlearea/pi)
spherevolume(r) units=[m;m^3] range=[0,) 4|3 pi r^3 ; \
                                         cuberoot(spherevolume/4|3 pi)
spherevol()     spherevolume
square(x)       range=[0,)          x^2 ; sqrt(square)

#
# Solid angle measure
#

sphere                  4 pi sr
squaredegree            1|180^2 pi^2 sr
squareminute            1|60^2 squaredegree
squaresecond            1|60^2 squareminute
squarearcmin            squareminute
squarearcsec            squaresecond
sphericalrightangle     1|8 sphere
octant                  1|8 sphere

#
# Concentration measures
#

percent                 0.01
%                       percent
mill                    0.001     # Originally established by Congress in 1791
                                  # as a unit of money equal to 0.001 dollars,
                                  # it has come to refer to 0.001 in general.
                                  # Used by some towns to set their property
                                  # tax rate, and written with a symbol similar
                                  # to the % symbol but with two 0's in the
                                  # denominator.  [18]
proof                   1|200     # Alcohol content measured by volume at
                                  # 60 degrees Fahrenheit.  This is a USA
                                  # measure.  In Europe proof=percent.
ppm                     1e-6
partspermillion         ppm
ppb                     1e-9
partsperbillion         ppb       # USA billion
ppt                     1e-12
partspertrillion        ppt       # USA trillion
karat                   1|24      # measure of gold purity
caratgold               karat
gammil                  mg/l
basispoint              0.01 %    # Used in finance
fine                    1|1000    # Measure of gold purity

# The pH scale is used to measure the concentration of hydronium (H3O+) ions in
# a solution.  A neutral solution has a pH of 7 as a result of dissociated
# water molecules.

pH(x) units=[1;mol/liter] range=(0,) 10^(-x) mol/liter ; (-log(pH liters/mol))


#
# Temperature
#
# Two types of units are defined: units for converting temperature differences
# and functions for converting absolute temperatures.  Conversions for
# differences start with "deg" and conversions for absolute temperature start
# with "temp".
#
# If the temperature inside is 72 degrees Fahrenheit and you want to
# convert this to degrees Celsius then you need absolute temperature:
#
# You have: tempF(72)
# You want: tempC
#         22.222222
#
# If the temperature rose 72 degrees Fahrenheit during the chemical reaction
# then this is a temperature difference:
#
# You have: 72 degF
# You want: degC
#        * 40
#        / 0.025
#

TEMPERATURE             kelvin
TEMPERATURE_DIFFERENCE  kelvin

# In 1741 Anders Celsius introduced a temperature scale with water boiling at
# 0 degrees and freezing at 100 degrees at standard pressure. After his death
# the fixed points were reversed and the scale was called the centigrade
# scale.  Due to the difficulty of accurately measuring the temperature of
# melting ice at standard pressure, the centigrade scale was replaced in 1954
# by the Celsius scale which is defined by subtracting 273.15 from the
# temperature in Kelvins.  This definition differed slightly from the old
# centigrade definition, but the Kelvin scale depends on the triple point of
# water rather than a melting point, so it can be measured accurately.

tempC(x) units=[1;K] domain=[-273.15,) range=[0,) \
                             x K + stdtemp ; (tempC +(-stdtemp))/K
tempcelsius() tempC
degcelsius              K
degC                    K

# Fahrenheit defined his temperature scale by setting 0 to the coldest
# temperature he could produce in his lab with a salt water solution and by
# setting 96 degrees to body heat.  In Fahrenheit's words:
#
#    Placing the thermometer in a mixture of sal ammoniac or sea
#    salt, ice, and water a point on the scale will be found which
#    is denoted as zero. A second point is obtained if the same
#    mixture is used without salt. Denote this position as 30. A
#    third point, designated as 96, is obtained if the thermometer
#    is placed in the mouth so as to acquire the heat of a healthy
#    man."  (D. G. Fahrenheit, Phil. Trans. (London) 33, 78, 1724)

tempF(x) units=[1;K] domain=[-459.67,) range=[0,) \
                (x+(-32)) degF + stdtemp ; (tempF+(-stdtemp))/degF + 32
tempfahrenheit() tempF
degfahrenheit           5|9 degC
degF                    5|9 degC


degreesrankine          degF              # The Rankine scale has the
degrankine              degreesrankine    # Fahrenheit degree, but its zero
degreerankine           degF              # is at absolute zero.
degR                    degrankine
tempR                   degrankine
temprankine             degrankine

tempreaumur(x)    units=[1;K] domain=[-218.52,) range=[0,) \
                  x degreaumur+stdtemp ; (tempreaumur+(-stdtemp))/degreaumur
degreaumur              10|8 degC # The Reaumur scale was used in Europe and
                                  # particularly in France.  It is defined
                                  # to be 0 at the freezing point of water
                                  # and 80 at the boiling point.  Reaumur
                                  # apparently selected 80 because it is
                                  # divisible by many numbers.

degK                    K         # "Degrees Kelvin" is forbidden usage.
tempK                   K         # For consistency

# Gas mark is implemented below but in a terribly ugly way.  There is
# a simple formula, but it requires a conditional which is not
# presently supported.
#
# The formula to convert to degrees Fahrenheit is:
#
# 25 log2(gasmark) + k_f   gasmark<=1
# 25 (gasmark-1) + k_f     gasmark>=1
#
# k_f = 275
#
gasmark[degR] \
  .0625    634.67 \
  .125     659.67 \
  .25      684.67 \
  .5       709.67 \
  1        734.67 \
  2        759.67 \
  3        784.67 \
  4        809.67 \
  5        834.67 \
  6        859.67 \
  7        884.67 \
  8        909.67 \
  9        934.67 \
  10       959.67


# The Beaufort wind force scale was developed from 1805-1807 by Sir Francis
# Beaufort to categorize wind conditions at sea. It is normally defined from
# Beaufort 0, also called "Force 0," through Beaufort 12. Beaufort numbers
# 13-17 were later defined for tropical cyclones but are rarely used. The
# original Beaufort scale was qualitative and did not relate directly to wind
# speed. In 1906, George Simpson of the British Met Office fit wind-speed
# measurements to visual Beaufort estimates made from five coastal and inland
# stations in Britain. Simpson's formula was adopted by the World Meterological
# Organization in 1946 to produce a table, known as WMO Code 1100, giving mean
# (and min/max) wind speed equivalents at a height of 10 meters for each
# Beaufort number. This is the "operational" Beaufort scale that mariners
# use. Meterological and climatic researchers typically use a "scientific"
# Beaufort scale based on more recent and comprehensive fits. See Wallbrink and
# Cook, Historical Wind Speed Equivalents Of The Beaufort Scale, 1850-1950, at
# https://icoads.noaa.gov/reclaim/pdf/Hisklim13.pdf
#
beaufort_WMO1100(B) units=[1;m/s] domain=[0,17] range=[0,) \
                    0.836 B^3|2 m/s; (beaufort_WMO1100 s / 0.836 m)^2|3

beaufort(B) units=[1;m/s] domain=[0,17] range=[0,) \
            beaufort_WMO1100(B); ~beaufort_WMO1100(beaufort)

# Units cannot handle wind chill or heat index because they are two-variable
# functions, but they are included here for your edification.  Clearly these
# equations are the result of a model fitting operation.
#
# wind chill index (WCI) a measurement of the combined cooling effect of low
#      air temperature and wind on the human body. The index was first defined
#      by the American Antarctic explorer Paul Siple in 1939. As currently used
#      by U.S. meteorologists, the wind chill index is computed from the
#      temperature T (in  deg F) and wind speed V (in mi/hr) using the formula:
#          WCI = 0.0817(3.71 sqrt(V) + 5.81 - 0.25V)(T - 91.4) + 91.4.
#      For very low wind speeds, below 4 mi/hr, the WCI is actually higher than
#      the air temperature, but for higher wind speeds it is lower than the air
#      temperature.
#
# heat index (HI or HX) a measure of the combined effect of heat and
#      humidity on the human body. U.S. meteorologists compute the index
#      from the temperature T (in  deg F) and the relative humidity H (as a
#      value from 0 to 1).
#        HI = -42.379 + 2.04901523 T + 1014.333127 H - 22.475541 TH
#             - .00683783 T^2 - 548.1717 H^2 + 0.122874 T^2 H + 8.5282 T H^2
#             - 0.0199 T^2 H^2.

#
# Physical constants
#

# Basic constants

pi                      3.14159265358979323846
tau                     2 pi
phi                     (sqrt(5)+1)/2
light                   c
coulombconst          alpha hbar c / e^2 # Coulomb constant          
k_C                     coulombconst     #   Gets overridden in CGS modes
k_C_SI       alpha hbar_SI c_SI / e_SI^2 
epsilon0_SI             1 / 4 pi k_C_SI  # Vacuum electric permittivity
epsilon0                1 / 4 pi k_C     #   Also overridden in CGS modes
mu0_SI            1 / epsilon0_SI c_SI^2 # Vacuum magnetic permeability
mu0                     1 / epsilon0 c^2 #   Also overridden in CGS modes
Z0                      4 pi k_C / c     # Free space impedance
energy                  c^2              # Convert mass to energy
hbar                    h / 2 pi
hbar_SI                 h_SI / 2 pi
spin                    hbar
G_SI            6.67430e-11
G               6.67430e-11 N m^2 / kg^2 # Newtonian gravitational constant

# Physico-chemical constants

atomicmassunit_SI   1.66053906660e-27    # Unified atomic mass unit, defined as
atomicmassunit      1.66053906660e-27 kg # Unified atomic mass unit, defined as
u                       atomicmassunit   #   1|12 of the mass of carbon 12.
amu                     atomicmassunit   #   The relationship N_A u = 1 g/mol
dalton                  u                #   is approximately, but not exactly 
Da                      dalton           #   true (with the 2019 SI).
                                         #   Previously the mole was defined to
                                         #   make this relationship exact.
amu_chem                1.66026e-27 kg   # 1|16 of the weighted average mass of
                                         #   the 3 naturally occuring neutral
                                         #   isotopes of oxygen
amu_phys                1.65981e-27 kg   # 1|16 of the mass of a neutral
                                         #   oxygen 16 atom
gasconstant             k N_A            # Molar gas constant (exact)
R                       gasconstant
kboltzmann              boltzmann
molarvolume             R stdtemp / atm  # Volume occupied by one mole of an
V_m                     molarvolume      #   ideal gas at STP. (exact)
loschmidt         avogadro / molarvolume # Molecules per cubic meter of an
n0                      loschmidt        #   ideal gas at STP.  Loschmidt did
                                         #   work similar to Avogadro.
molarvolume_si  N_A siliconlattice^3 / 8 # Volume of a mole of crystalline
                                         #   silicon. The unit cell contains 8
                                         #   silicon atoms and has a side
                                         #   length of siliconlattice.
stefanboltzmann pi^2 k^4 / 60 hbar^3 c^2 # The power per area radiated by a
sigma                   stefanboltzmann  #   blackbody at temperature T is
                                         #   given by sigma T^4. (exact)
wiendisplacement     (h c/k)/4.9651142317442763  # Wien's Displacement Law gives
                                         #   the frequency at which the
                                         #   Planck spectrum has maximum
                                         #   intensity.  The relation is lambda
                                         #   T = b where lambda is wavelength,
                                         #   T is temperature and b is the Wien
                                         #   displacement.  This relation is
                                         #   used to determine the temperature
                                         #   of stars.  The constant is the
                                         #   solution to x=5(1-exp(-x)).
                                         #   This expression has no experimental
                                         #   error, and x is defined exactly
                                         #   by the equation above, so it is
                                         #   an exact definition.  
K_J90 483597.9 GHz/V    # Direct measurement of the volt is difficult.  Until
K_J   2e/h              #   recently, laboratories kept Weston cadmium cells as
                        #   a reference, but they could drift.  In 1987 the
                        #   CGPM officially recommended the use of the
                        #   Josephson effect as a laboratory representation of
                        #   the volt.  The Josephson effect occurs when two
                        #   superconductors are separated by a thin insulating
                        #   layer.  A "supercurrent" flows across the insulator
                        #   with a frequency that depends on the potential
                        #   applied across the superconductors.  This frequency
                        #   can be very accurately measured.  The Josephson
                        #   constant K_J relates the measured frequency to the
                        #   potential.  Two values given, the conventional
                        #   (exact) value from 1990, which was used until the
                        #   2019 SI revision, and the current exact value.
R_K90 25812.807 ohm     # Measurement of the ohm also presents difficulties.
R_K   h/e^2             #   The old approach involved maintaining resistances
                        #   that were subject to drift.  The new standard is
                        #   based on the Hall effect.  When a current carrying
                        #   ribbon is placed in a magnetic field, a potential
                        #   difference develops across the ribbon.  The ratio
                        #   of the potential difference to the current is
                        #   called the Hall resistance.  Klaus von Klitzing
                        #   discovered in 1980 that the Hall resistance varies
                        #   in discrete jumps when the magnetic field is very
                        #   large and the temperature very low.  This enables
                        #   accurate realization of the resistance h/e^2 in the
                        #   lab.  The 1990 value was an exact conventional 
                        #   value used until the SI revision in 2019. This value
                        #   did not agree with measurements.  The new value
                        #   is exact.

# The 2019 update to SI gives exact definitions for R_K and K_J.  Previously
# the electromagnetic units were realized using the 1990 conventional values
# for these constants, and as a result, the standard definitions were in some
# sense outside of SI.  The revision corrects this problem.  The definitions
# below give the 1990 conventional values for the electromagnetic units in
# terms of 2019 SI.  

ampere90 (K_J90 R_K90 / K_J R_K) A
coulomb90 (K_J90 R_K90 / K_J R_K) C
farad90 (R_K90/R_K) F
henry90 (R_K/R_K90) H
ohm90 (R_K/R_K90) ohm
volt90 (K_J90/K_J) V
watt90 (K_J90^2 R_K90 / K_J^2 R_K) W

# Various conventional values

gravity                 9.80665 m/s^2    # std acceleration of gravity (exact)
                                         #   Established by the 3rd CGPM in
                                         #   1901.  This is a nominal midrange
                                         #   value, originally based on the
                                         #   acceleration of a body at sea
                                         #   level at 45 degrees latitude.
                                         #   The value was actually determined
                                         #   by measuring at the International
                                         #   Bureau and correcting the
                                         #   measurement by a theoretical
                                         #   cofficient to get the 45 deg
                                         #   latitude sea level value.
                                         #   (Wikipedia: Standard gravity)
force                   gravity          # use to turn masses into forces
atm                     101325 Pa        # Standard atmospheric pressure
atmosphere              atm
Hg             13.5951 gram force / cm^3 # Standard weight of mercury (exact)
water                   gram force/cm^3  # Standard weight of water (exact)
waterdensity            gram / cm^3      # Density of water
H2O                     water
wc                      water            # water column
mach                    331.46 m/s       # speed of sound in dry air at STP
standardtemp            273.15 K         # standard temperature
stdtemp                 standardtemp
normaltemp              tempF(70)        # for gas density, from NIST
normtemp                normaltemp       # Handbook 44

# Weight of mercury and water at different temperatures using the standard
# force of gravity.

Hg10C         13.5708 force gram / cm^3  # These units, when used to form
Hg20C         13.5462 force gram / cm^3  # pressure measures, are not accurate
Hg23C         13.5386 force gram / cm^3  # because of considerations of the
Hg30C         13.5217 force gram / cm^3  # revised practical temperature scale.
Hg40C         13.4973 force gram / cm^3
Hg60F         13.5574 force gram / cm^3
H2O0C         0.99987 force gram / cm^3
H2O5C         0.99999 force gram / cm^3
H2O10C        0.99973 force gram / cm^3
H2O15C        0.99913 force gram / cm^3
H2O18C        0.99862 force gram / cm^3
H2O20C        0.99823 force gram / cm^3
H2O25C        0.99707 force gram / cm^3
H2O50C        0.98807 force gram / cm^3
H2O100C       0.95838 force gram / cm^3

# Atomic constants

hartree            4.3597447222071e-18 J # Approximate electric potential energy
E_h                     hartree          #   of the hydrogen atom in its ground
                                         #   state, and approximately twice its
                                         #   ionization energy.  The hartree
                                         #   energy is traditionally defined as
                                         #      coulombconst^2 m_e e^4 / hbar^2,
                                         #   but it can be measured to greater
                                         #   precision using the relationship
                                         #      hartree = 2 h c Rinfinity
                                         #   because Rinfinity is one of the
                                         #   most accurately measured physical
                                         #   constants.  Because h and c are
                                         #   exact we can choose either hartree
                                         #   or Rinfinity from CODATA to use as
                                         #   the primary value without
                                         #   affecting the precision.  
Rinfinity               hartree / 2 h c  # The wavelengths of a spectral series
R_H          Rinfinity m_p / (m_e + m_p) #   can be expressed as
                                         #     1/lambda = R (1/m^2 - 1/n^2).
                                         #   where R is a number that various
                                         #   slightly from element to element.
                                         #   For hydrogen, R_H is the value,
                                         #   and for heavy elements, the value
                                         #   approaches Rinfinity, which can be
                                         #   computed from
                                         #      Rinfinity = m_e c alpha^2 / 2 h
                                         #   with loss of precision. Rinfinity
                                         #   is one of the most accurately
                                         #   measured physical constants and is
                                         #   known to higher precision than m_e
                                         #   or alpha.
alpha                    7.2973525693e-3 # The fine structure constant was
                                         #   introduced to explain fine
                                         #   structure visible in spectral
                                         #   lines.  
bohrradius              hbar / alpha m_e c
a0                      bohrradius
prout                   185.5 keV        # nuclear binding energy equal to 1|12
                                         #   binding energy of the deuteron
conductancequantum      e^2 / pi hbar
G0                      conductancequantum
magneticfluxquantum     pi hbar / e
Phi0                    magneticfluxquantum

# Particle radius

electronradius    coulombconst e^2 / electronmass c^2   # Classical
deuteronchargeradius    2.12799e-15 m
protonchargeradius      0.8751e-15 m

# Masses of elementary particles

electronmass_SI         electronmass_u atomicmassunit_SI
electronmass_u          5.48579909065e-4
electronmass            5.48579909065e-4 u
m_e                     electronmass
muonmass                0.1134289259 u
m_mu                    muonmass
taumass                 1.90754 u
m_tau                   taumass
protonmass              1.007276466621 u
m_p                     protonmass
neutronmass             1.00866491595 u
m_n                     neutronmass
deuteronmass            2.013553212745 u    # Nucleus of deuterium, one
m_d                     deuteronmass        #   proton and one neutron
alphaparticlemass       4.001506179127 u    # Nucleus of He, two protons
m_alpha                 alphaparticlemass   #   and two neutrons
tritonmass              3.01550071621 u     # Nucleus of H3, one proton
m_t                     tritonmass          #   and two neutrons
helionmass              3.014932247175 u    # Nucleus of He3, two protons
m_h                     helionmass          #   and one neutron

# particle wavelengths: the compton wavelength of a particle is
# defined as h / m c where m is the mass of the particle.

electronwavelength      h / m_e c
lambda_C                electronwavelength
protonwavelength        h / m_p c
lambda_C,p              protonwavelength
neutronwavelength       h / m_n c
lambda_C,n              neutronwavelength
muonwavelength          h / m_mu c
lambda_C,mu             muonwavelength

# The g-factor or dimensionless magnetic moment is a quantity that
# characterizes the magnetic moment of a particle.  The electron g-factor is
# one of the most precisely measured values in physics, with a relative
# uncertainty of 1.7e-13.  

g_d                     0.8574382338       # Deuteron g-factor
g_e                    -2.00231930436256   # Electron g-factor
g_h                    -4.255250615        # Helion g-factor
g_mu                   -2.0023318418       # Muon g-factor
g_n                    -3.82608545         # Neutron g-factor
g_p                     5.5856946893       # Proton g-factor
g_t                     5.957924931        # Triton g-factor

fermicoupling           1.1663787e-5 / GeV^2

# Magnetic moments (derived from the more accurate g-factors)
#
# The magnetic moment is g * mu_ref * spin where in most cases
# the reference is the nuclear magneton, and all of the particles
# except the deuteron have spin 1/2.  

bohrmagneton            e hbar / 2 electronmass  # Reference magnetic moment for
mu_B                    bohrmagneton             #   the electron
mu_e                    g_e mu_B / 2             # Electron spin magnet moment
mu_mu                 g_mu mu_B m_e / 2 muonmass # Muon spin magnetic moment
nuclearmagneton         mu_B m_e / protonmass    # Convenient reference magnetic
mu_N                    nuclearmagneton          #   moment for heavy particles
mu_p                    g_p mu_N / 2             # Proton magnetic moment
mu_n                    g_n mu_N / 2             # Neutron magnetic moment
mu_d                    g_d mu_N            # Deuteron magnetic moment, spin 1
mu_t                    g_t mu_N / 2             # Triton magnetic moment
mu_h                    g_h mu_N / 2             # Helion magnetic moment

#
# Units derived from physical constants
#

kgf                     kg force
technicalatmosphere     kgf / cm^2
at                      technicalatmosphere
hyl                     kgf s^2 / m   # Also gram-force s^2/m according to [15]
mmHg                    mm Hg
torr                    atm / 760  # The torr, named after Evangelista
                                   # Torricelli, and is very close to the mm Hg
tor                     Pa         # Suggested in 1913 but seldom used [24].
                                   # Eventually renamed the Pascal.  Don't 
                                   # confuse the tor with the torr.  
inHg                    inch Hg    
inH2O                   inch water
mmH2O                   mm water
eV                      e V      # Energy acquired by a particle with charge e
electronvolt            eV       #   when it is accelerated through 1 V
lightyear               c julianyear # The 365.25 day year is specified in
ly                      lightyear    # NIST publication 811
lightsecond             c s
lightminute             c min
parsec                  au / tan(arcsec)    # Unit of length equal to distance
pc                      parsec              #   from the Sun to a point having
                                            #   heliocentric parallax of 1
                                            #   arcsec (derived from parallax
                                            #   second).  A distant object with
                                            #   parallax theta will be about
                                            #   (arcsec/theta) parsecs from the
                                            #   Sun (using the approximation
                                            #   that tan(theta) = theta).
rydberg                 1|2 hartree         # Rydberg energy
crith                   0.089885 gram       # The crith is the mass of one
                                            #   liter of hydrogen at standard
                                            #   temperature and pressure.
amagat                  N_A / molarvolume   # Used to measure gas as a number
amagatvolume            mol molarvolume     #   density
lorentz                 bohrmagneton / h c  # Used to measure the extent
                                            #   that the frequency of light
                                            #   is shifted by a magnetic field.
cminv                   h c / cm            # Unit of energy used in infrared
invcm                   cminv               #   spectroscopy.
wavenumber              1/cm                # 
kcal_mol                kcal_th / mol N_A   # kcal/mol is used as a unit of
                                            #   energy by physical chemists.
#
# CGS system based on centimeter, gram and second
#

dyne                    cm gram / s^2   # force
dyn                     dyne
erg                     cm dyne         # energy
poise                   gram / cm s     # viscosity, honors Jean Poiseuille
P                       poise
rhe                     /poise          # reciprocal viscosity
stokes                  cm^2 / s        # kinematic viscosity
St                      stokes
stoke                   stokes
lentor                  stokes          # old name
Gal                     cm / s^2        # acceleration, used in geophysics
galileo                 Gal             # for Earth's gravitational field
                                        # (note that "gal" is for gallon
                                        # but "Gal" is the standard symbol
                                        # for the gal which is evidently a
                                        # shortened form of "galileo".)
barye                   dyne/cm^2       # pressure
barad                   barye           # old name
kayser                  1/cm            # Proposed as a unit for wavenumber
balmer                  kayser          # Even less common name than "kayser"
kine                    cm/s            # velocity
bole                    g cm / s        # momentum
pond                    gram force
glug                gram force s^2 / cm # Mass which is accelerated at
                                        #   1 cm/s^2 by 1 gram force
darcy           centipoise cm^2 / s atm # Measures permeability to fluid flow.
                                        #   One darcy is the permeability of a
                                        #   medium that allows a flow of cc/s
                                        #   of a liquid of centipoise viscosity
                                        #   under a pressure gradient of
                                        #   atm/cm.  Named for H. Darcy.
mobileohm               cm / dyn s      # mobile ohm, measure of mechanical
                                        #   mobility
mechanicalohm           dyn s / cm      # mechanical resistance
acousticalohm           dyn s / cm^5    # ratio of the sound pressure of
                                        #   1 dyn/cm^2 to a source of strength
                                        #   1 cm^3/s
ray                     acousticalohm
rayl                    dyn s / cm^3    # Specific acoustical resistance
eotvos                  1e-9 Gal/cm     # Change in gravitational acceleration
                                        #   over horizontal distance
#
# Electromagnetic CGS Units
# 
# For measuring electromagnetic quantities in SI, we introduce the new base
# dimension of current, define the ampere to measure current, and derive the
# other electromagnetic units from the ampere.  With the CGS units one approach
# is to use the basic equations of electromagnetism to define units that
# eliminate constants from those equations.  Coulomb's law has the form
#
#          F = k_C q1 q2 / r^2
#
# where k_C is the Coulomb constant equal to 1|4 pi epsilon0 in SI units.
# Ampere's force law takes the form
#
#          dF/dl = 2 k_A I1 I2 / r
#
# where k_A is the ampere constant.  In the CGS system we force either k_C or
# k_A to 1 which then defines either a unit for charge or a unit for current.
# The other unit then becomes a derived unit.  When k_C is 1 the ESU system
# results.  When k_A is 1 the EMU system results.  Note that these parameters
# are not independent of each other: Maxwell's equations indicate that
#         
#           k_C / k_A = c^2
#
# where c is the speed of light. 
#
# One more choice is needed to define a complete system.  Using Coulomb's law
# we define the electric field as the force per unit charge
#
#           E = k_C 1 / r^2.
#
# But what about the magnetic field?  It is derived from Ampere's law but we
# have the option of adding a proportionality constant, k_B, that may have
# dimensions:
#
#           B = 2 k_A k_B I / r
#
# We can choose k_B = 1, which is done in the SI, ESU and EMU systems.  But if
# instead we give k_B units of length/time then the magnetic field has
# the same units as the electric field.  This choice leads to the Gaussian
# and Heaviside-Lorentz systems.
#
# The relations above are used to determine the dimensions, but the units are
# derived from the base units of CGS, not directly from those formulas.  We
# will use the notation [unit] to refer to the dimension of the unit in
# brackets.  This same process gives rise to the SI units such as the tesla, 
# which is defined by
#
#         [tesla] = [2 (1/4 pi c^2 epsilon0) amp / m] = [(mu0 / 2) amp / m]
#
# which gives kg / A s^2 as expected.  
#
# References:
#
# Classical Electrodynamics by John David Jackson, 3rd edition. 
# Cardarelli, Francois. 1999.  Scientific Unit Conversion. 2nd ed.  Trans.
#     M.J.  Shields.  London: Springer-Verlag. ISBN 1-85233-043-0
#
#
# All of the CGS systems result in electromagnetic units that involve the square
# roots of the centimeter and gram.  This requires a change in the primitive
# units.
# 

!var UNITS_SYSTEM esu emu gaussian gauss hlu
sqrt_cm                 ! 
sqrt_centimeter         sqrt_cm
+m                      100 sqrt_cm^2
sqrt_g                  !
sqrt_gram               sqrt_g
+kg                     kilo sqrt_g^2
!endvar

# Electrostatic CGS (ESU)
#
# This system uses the statcoulomb as the fundamental unit of charge, with
# derived units that parallel the conventional terminology but use the stat-
# prefix.  The statcoulomb is derived from Coulomb's law based on the dyne
#
#                      dyne = statcoulomb^2 / k_C cm^2.
#
# and in the EUS system, k_C=1.  The statcoulomb is also called the
# franklin or esu.
#
# The ESU system was specified by a committee report in 1873 and rarely used.

statcoulomb             sqrt(dyne cm^2/k_C)   # Charge such that two charges
esu                     statcoulomb           # of 1 statC separated by 1 cm
statcoul                statcoulomb           # exert a force of 1 dyne
statC                   statcoulomb
stC                     statcoulomb
franklin                statcoulomb
Fr                      franklin

!var UNITS_SYSTEM esu
!message CGS-ESU units selected
!prompt (ESU)
+coulombconst           1
+epsilon0               1 / k_C               # SI relation: 1 / 4 pi k_C
+A                      10 c_SI statamp
!endvar

statampere              statcoulomb / s
statamp                 statampere
statA                   statampere
stA                     statampere
statvolt                dyne cm / statamp sec
statV                   statvolt
stV                     statvolt
statfarad               statamp sec / statvolt
statF                   statfarad
stF                     statfarad
cmcapacitance           statfarad
stathenry               statvolt sec / statamp
statH                   stathenry
stH                     stathenry
statohm                 statvolt / statamp
stohm                   statohm
statmho                 /statohm
stmho                   statmho
statweber               statvolt sec
statWb                  statweber
stWb                    statweber
stattesla               statWb/cm^2   # Defined by analogy with SI; rarely
statT                   stattesla     #   if ever used
stT                     stattesla
debye                   1e-10 statC angstrom # unit of electrical dipole moment
helmholtz               debye/angstrom^2     # Dipole moment per area
jar                     1000 statfarad       # approx capacitance of Leyden jar

# Electromagnetic CGS (EMU)
#
# The abampere is the fundamental unit of this system, with the derived units
# using the ab- prefix.  The dimensions of the abampere are defined by assuming
# that k_A=1, which 
#
#            [dyne / cm]  = [2 abampere^2 / cm]
#
# where the brackets indicate taking the dimension of the unit in base units
# and discarding any constant factors.  This results in the definition from
# base CGS units of:
#
#            abampere = sqrt(dyne). 
#
# The abampere is also called the biot.  The magnetic field unit (the gauss)
# follows from the assumption that k_B=1, which means
#
#            B = 2 I / r,
#
# and hence the dimensions of the gauss are given by
#
#            [gauss] = [2 abampere / cm]
#
# or rewriting in terms of the base units
#
#            gauss = abampere / cm.
#
# The definition given below is different because it is in a form that
# gives a valid reduction for SI and ESU and still gives the correct 
# result in EMU.  (It can be derived from Faraday's law.)  
#
# The EMU system was developed by Gauss and Weber and formalized as a system in
# a committee report by the British Association for the Advancement of Science
# in 1873.  

abampere                10 A            # Current which produces a force of
abamp                   abampere        #   2 dyne/cm between two infinitely
aA                      abampere        #   long wires that are 1 cm apart
abA                     abampere
biot                    abampere
Bi                      biot

!var UNITS_SYSTEM emu
!message CGS-EMU units selected
!prompt (EMU)
+coulombconst           c^2
+epsilon0               1 / k_C        # SI relation: 1 / 4 pi k_C
+abampere               sqrt(dyne)
+A                      0.1 abamp
!endvar

abcoulomb               abamp sec
abcoul                  abcoulomb
abC                     abcoulomb
abfarad                 abampere sec / abvolt
abF                     abfarad
abhenry                 abvolt sec / abamp
abH                     abhenry
abvolt                  dyne cm  / abamp sec
abV                     abvolt
abohm                   abvolt / abamp
abmho                   /abohm
maxwell                 erg / abamp       # Also called the "line"
Mx                      maxwell
gauss                   maxwell / cm^2    # The magnetic field 2 cm from a wire
Gs                      gauss             # carrying a current of 1 abampere
oersted                 gauss / mu0   # From the relation H = B / mu
Oe                      oersted      
gilbert                 gauss cm / mu0
Gb                      gilbert
Gi                      gilbert
unitpole                4 pi maxwell    # unit magnetic pole
emu                     erg/gauss  # "electro-magnetic unit", a measure of
                                   # magnetic moment, often used as emu/cm^3
                                   # to specify magnetic moment density.

# Electromagnetic CGS (Gaussian)
#
# The Gaussian system uses the statcoulomb and statamp from the ESU system
# derived by setting k_C=1, but it defines the magnetic field unit differently
# by taking k_B=c instead of k_B=1.  As noted above, k_C and k_A are not
# independent.  With k_C=1 we must have k_A=c^-2.  This results in the magnetic
# field unit, the gauss, having dimensions give by:
#
#         [gauss] = [2 (c^-2) c statamp / cm] = [statamp / c cm]
#
# We then define the gauss using base CGS units to obtain
#
#         gauss = statamp / ((cm/s) cm) = statcoulomb / cm^2.
#
# Note that this definition happens to give the same result as the definition
# for the EMU system, so the definitions of the gauss are consistent.
#
# This definition gives the same dimensions for the E and B fields and was also
# known as the "symmetric system".  This system was proposed by Hertz in 1888.

!var UNITS_SYSTEM gaussian gauss
!message CGS-Gaussian units selected
!prompt (Gaussian)
!endvar
!var UNITS_SYSTEM gaussian gauss natural-gauss 
+coulombconst           1
+A                      10 c_SI statamp
      # Some SI-based definitions need re-scaling
      # by factors of "c" and/or "4 pi":
+epsilon0               1 / k_C        # SI relation: 1 / 4 pi k_C
+mu0                    1 / epsilon0   # SI relation: 1 / epsilon0 c^2
+bohrmagneton           (e hbar / 2 electronmass) / c
+magneticfluxquantum    c (pi hbar / e)
+maxwell                c (erg / abamp)
+weber                  c (J / A)
!endvar

# Electromagnetic CGS (Heaviside-Lorentz)

# The Heaviside-Lorentz system is similar to the Gaussian system, but it is
# "rationalized" so that factors of 4 pi do not appear in Maxwell's equations.
# The SI system is similarly rationalized, but the other CGS systems are not.
#
# The factor of 4 pi appears instead in Coulomb's law, so in this system
# k_C = 1 / 4 pi, which means the charge unit is defined by
#
#                      dyne = (1 / 4 pi) hlu_charge^2 / cm^2.
# 
# Since we have the leading constant of (1 / 4pi) the numerical value of the
# charge number is larger by sqrt(4pi), which in turns means that the HLU
# charge unit is smaller by this multiple.  But note that the dimensions of the
# charge unit are the same as the Gaussian system, so both systems measure
# charge with cm^(3/2) g^(1/2) / s, but the amount of charge for this dimension
# differs by a factor of sqrt(4pi) between the two systems.
#
# Ampere's law for the Heaviside-Lorentz system has the form
#
#                B = 1/(2 pi c) * I/r

# The Heaviside-Lorentz system does not appear to have any named units, so we
# use "hlu" for "Heaviside-Lorentz unit" so we can define values for the basic
# units in this system.

hlu_charge    statcoulomb / sqrt(4 pi) 
hlu_current   hlu_charge / sec
hlu_volt      erg / hlu_charge
hlu_efield    hlu_volt / cm
hlu_bfield    sqrt(4 pi) gauss

!var UNITS_SYSTEM hlu
!message CGS-Heaviside-Lorentz Units selected
!prompt (HLU)
!endvar
!var UNITS_SYSTEM hlu natural planck planck-red
+coulombconst           1 / 4 pi
+A                      10 c_SI statamp 
        # Some SI-based magnetism definitions
        # need re-scaling by factors of "c":
+mu0                    1 / epsilon0   # SI relation: 1 / epsilon0 c^2
+bohrmagneton           (e hbar / 2 electronmass) / c
+magneticfluxquantum    c (pi hbar / e)
+weber                  c (J / A)
+maxwell                c (erg / abamp)
!endvar

# "Natural units" (high energy physics and cosmology)
#
# In particle physics "natural units" (which don't seem to have a more specific
# name) are defined by setting hbar = c = boltzmann = 1.  In this system the
# electron volt is the only base unit.  The electromagnetic units can be 
# derived from the rationalized Heaviside-Lorentz units or from Gaussian units.
# The default form is the rationalized HLU derived version.
#
# The basic mechanical and thermodynamic definitions for the natural
# units are identical in both systems.  These appear below.  The
# natural-gauss system has additional electromagnetic redefinitions
# that appear above in the "Electromagnetic CGS (Gaussian)" Section.

# These are the Heaviside-Lorentz natural units

natural_energy          eV
natural_charge          e / sqrt(4 pi alpha)
natural_time            hbar / natural_energy
natural_length          natural_time c
natural_mass            natural_energy / c^2
natural_temp            natural_energy / boltzmann
natural_force           natural_energy / natural_length
natural_power           natural_energy / natural_time
natural_volt            natural_energy / natural_charge
natural_Efield          natural_volt   / natural_length
natural_Bfield          natural_Efield / c
natural_current         natural_charge / natural_time

!var UNITS_SYSTEM natural
!message Natural units selected (Heavyside-Lorentz based)
!prompt (natural)
!endvar

!var UNITS_SYSTEM natural-gauss
!message Natural units selected (Gaussian based)
!prompt (natgauss)
!endvar

# These definitions are the same in both natural unit systems

!var UNITS_SYSTEM natural natural-gauss
+eV                     !
+h                      2 pi
+c                      1
+boltzmann              1
+m                      e_SI / hbar_SI c_SI eV
+kg                     (c_SI^2 / e_SI) eV
+s                      e_SI / hbar_SI eV
+K                      (k_SI / e_SI) eV
!endvar

#
# Planck units
#
# Planck units are a set of "natural" units based on physical constants c, G,
# hbar, boltzmann's constant, and epsilon0, often used when working with
# gravitational theory.  In planck units, all quantities are dimensionless.
# Some variations are possible for exactly how the units are defined.  We
# provide two variations, the rationalized planck units and the
# rationalized-reduced planck units.
#
# In both forms the units are defined by c = hbar = boltzmann = 1. 
# But the choice of rationalized and reduced affects how epsilon0 and G
# are treated.  
#
# In the "rationalized" units, factors of 4 pi do not appear in Maxwell's 
# equation, and Coulomb's law bears a factor of 1/4 pi.  See the section on
# the Heaviside-Lorentz units for more about this.  The choice of rationalized 
# units means that epsilon0 = 1.  (In the unrationalized case, which is not
# supported, 1/(4 pi epsilon0) = 1.)  
#
# The "reduced" units similarly are defined to eliminate factors of 8 pi
# from the Einstein field equations for gravitation.  With reduced units
# we set 8 pi G = 1 and with the unreduced units, simply G = 1.

# Rationalized, unreduced planck units

planckmass              sqrt(hbar c / G)
m_P                     planckmass
planckenergy            planckmass c^2
E_P                     planckenergy
plancktime              hbar / planckenergy
t_P                     plancktime
plancklength            plancktime c
l_P                     plancklength
plancktemperature       planckenergy / k
T_P                     plancktemperature
planckforce             planckenergy / plancklength
planckcharge            sqrt(epsilon0 hbar c)
planckcurrent           planckcharge / plancktime
planckvolt              planckenergy / planckcharge
planckEfield            planckvolt / plancklength
planckBfield            planckEfield / c

# Rationalized, reduced planck units

planckmass_red          sqrt(hbar c / 8 pi G)
planckenergy_red        planckmass_red c^2
plancktime_red          hbar / planckenergy_red
plancklength_red        plancktime_red c
plancktemperature_red   planckenergy_red / k
planckforce_red         planckenergy_red / plancklength_red
planckcharge_red        sqrt(epsilon0 hbar c)
planckcurrent_red       planckcharge_red / plancktime_red
planckvolt_red          planckenergy_red / planckcharge_red
planckEfield_red        planckvolt_red / plancklength_red
planckBfield_red        planckEfield_red /c


!var UNITS_SYSTEM planck
!message Planck units selected
!prompt (planck)
+c 1
+h 2 pi
+G 1
+boltzmann 1
+kg sqrt(G_SI / hbar_SI c_SI)
+s  c_SI^2 / hbar_SI kg 
+m  s / c_SI            
+K  k_SI / hbar_SI s    
!endvar


!var UNITS_SYSTEM planck-red
!message Reduced planck units selected
!prompt (planck reduced)
+c 1
+h 2 pi
+G 1/8 pi
+boltzmann 1
+kg sqrt(8 pi G_SI / hbar_SI c_SI)
+s  c_SI^2 / hbar_SI kg
+m  s / c_SI           
+K  k_SI / hbar_SI s   
!endvar

#
# Some historical electromagnetic units
#

intampere               0.999835 A    # Defined as the current which in one
intamp                  intampere     #   second deposits .001118 gram of
                                      #   silver from an aqueous solution of
                                      #   silver nitrate.
intfarad                0.999505 F
intvolt                 1.00033 V
intohm                  1.000495 ohm  # Defined as the resistance of a
                                      #   uniform column of mercury containing
                                      #   14.4521 gram in a column 1.063 m
                                      #   long and maintained at 0 degC.
daniell                 1.042 V       # Meant to be electromotive force of a
                                      #   Daniell cell, but in error by .04 V
faraday                 N_A e mol     # Charge that must flow to deposit or
faraday_phys            96521.9 C     #   liberate one gram equivalent of any
faraday_chem            96495.7 C     #   element.  (The chemical and physical
faradayconst            N_A e         #   values are off slightly from what is
                                      #   obtained by multiplying by amu_chem
                                      #   or amu_phys.  These values are from
                                      #   a 1991 NIST publication.)  Note that
                                      #   there is also a Faraday constant,
                                      #   which has units of C/mol.  
kappline                6000 maxwell  # Named by and for Gisbert Kapp
siemensunit             0.9534 ohm    # Resistance of a meter long column of
                                      #   mercury with a 1 mm cross section.
#
# Printed circuit board units.  
#
# Iowa State University Center for Nondestructive Evaluation
# Electrical Conductivity and Resistivity
# https://www.nde-ed.org/Physics/Materials/Physical_Chemical/Electrical.xhtml
#
# Conductivity is often expressed as a percentage of IACS.  A copper wire a
# meter long with a 1 mm^2 cross section has a resistance of 1|58 ohm at 
# 20 deg C.  Copper density also has a standard IACS value at that temperature.
#

copperconductivity      58 siemens m / mm^2     # A wire a meter long with
IACS                    copperconductivity      #   a 1 mm^2 cross section
copperdensity           8.89 g/cm^3             # The "ounce" measures the     
ouncecopper             oz / ft^2 copperdensity #   thickness of copper used   
ozcu                    ouncecopper             #   in circuitboard fabrication
                                                
#
# Photometric units
#

LUMINOUS_INTENSITY      candela
LUMINOUS_FLUX           lumen
LUMINOUS_ENERGY         talbot
ILLUMINANCE             lux
EXITANCE                lux

candle                  1.02 candela  # Standard unit for luminous intensity
hefnerunit              0.9 candle    #   in use before candela
hefnercandle            hefnerunit    #
violle                  20.17 cd      # luminous intensity of 1 cm^2 of
                                      #   platinum at its temperature of
                                      #   solidification (2045 K)

lumen                   cd sr         # Luminous flux (luminous energy per
lm                      lumen         #    time unit)

talbot                  lumen s       # Luminous energy
lumberg                 talbot        # References give these values for
lumerg                  talbot        #    lumerg and lumberg both.  Note that
                                      #    a paper from 1948 suggests that
                                      #    lumerg should be 1e-7 talbots so
                                      #    that lumergs/erg = talbots/joule.
                                      #    lumerg = luminous erg
lux                     lm/m^2        # Illuminance or exitance (luminous
lx                      lux           #   flux incident on or coming from
phot                    lumen / cm^2  #   a surface)
ph                      phot          #
footcandle              lumen/ft^2    # Illuminance from a 1 candela source
                                      #    at a distance of one foot
metercandle             lumen/m^2     # Illuminance from a 1 candela source
                                      #    at a distance of one meter

mcs                     metercandle s # luminous energy per area, used to
                                      #    measure photographic exposure

nox                     1e-3 lux      # These two units were proposed for
skot                    1e-3 apostilb # measurements relating to dark adapted
                                      # eyes.
# Luminance measures

LUMINANCE               nit

nit                     cd/m^2        # Luminance: the intensity per projected
stilb                   cd / cm^2     # area of an extended luminous source.
sb                      stilb         # (nit is from latin nitere = to shine.)

apostilb                cd/pi m^2
asb                     apostilb
blondel                 apostilb      # Named after a French scientist.

# Equivalent luminance measures.  These units are units which measure
# the luminance of a surface with a specified exitance which obeys
# Lambert's law.  (Lambert's law specifies that luminous intensity of
# a perfectly diffuse luminous surface is proportional to the cosine
# of the angle at which you view the luminous surface.)

equivalentlux           cd / pi m^2   # luminance of a 1 lux surface
equivalentphot          cd / pi cm^2  # luminance of a 1 phot surface
lambert                 cd / pi cm^2
footlambert             cd / pi ft^2

# The bril is used to express "brilliance" of a source of light on a
# logarithmic scale to correspond to subjective perception.  An increase of 1
# bril means doubling the luminance.  A luminance of 1 lambert is defined to
# have a brilliance of 1 bril.

bril(x) units=[1;lambert]  2^(x+-100) lamberts ;log2(bril/lambert)+100

# Some luminance data from the IES Lighting Handbook, 8th ed, 1993

sunlum                  1.6e9 cd/m^2  # at zenith
sunillum                100e3 lux     # clear sky
sunillum_o              10e3 lux      # overcast sky
sunlum_h                6e6 cd/m^2    # value at horizon
skylum                  8000 cd/m^2   # average, clear sky
skylum_o                2000 cd/m^2   # average, overcast sky
moonlum                 2500 cd/m^2

#
# Photographic Exposure Value
# This section by Jeff Conrad (jeff_conrad@msn.com)
#
# The Additive system of Photographic EXposure (APEX) proposed in ASA
# PH2.5-1960 was an attempt to simplify exposure determination for people who
# relied on exposure tables rather than exposure meters.  Shortly thereafter,
# nearly all cameras incorporated exposure meters, so the APEX system never
# caught on, but the concept of exposure value remains in use.  Though given as
# 'Ev' in ASA PH2.5-1960, it is now more commonly indicated by 'EV'.  EV is
# related to exposure parameters by
#
#            A^2   LS   ES
#     2^EV = --- = -- = --
#             t    K    C
#
# Where
#     A = Relative aperture (f-number)
#     t = Exposure time in seconds
#     L = Scene luminance in cd/m2
#     E = Scene illuminance in lux
#     S = Arithmetic ISO speed
#     K = Reflected-light meter calibration constant
#     C = Incident-light meter calibration constant
#
# Strictly, an exposure value is a combination of aperture and exposure time,
# but it's also commonly used to indicate luminance (or illuminance).
# Conversion to luminance or illuminance units depends on the ISO speed and the
# meter calibration constant.  Common practice is to use an ISO speed of 100.
# Calibration constants vary among camera and meter manufacturers: Canon,
# Nikon, and Sekonic use a value of 12.5 for reflected-light meters, while
# Kenko (formerly Minolta) and Pentax use a value of 14.  Kenko and Sekonic use
# a value of 250 for incident-light meters with flat receptors.
#
# The values for in-camera meters apply only averaging, weighted-averaging, or
# spot metering--the multi-segment metering incorporated in most current
# cameras uses proprietary algorithms that evaluate many factors related to the
# luminance distribution of what is being metered; they are not amenable to
# simple conversions, and are usually not disclosed by the manufacturers.

s100                    100 / lx s            # ISO 100 speed
iso100                  s100

# Reflected-light meter calibration constant with ISO 100 speed

k1250                   12.5 (cd/m2) / lx s   # For Canon, Nikon, and Sekonic
k1400                   14   (cd/m2) / lx s   # For Kenko (Minolta) and Pentax

# Incident-light meter calibration constant with ISO 100 film

c250                    250 lx / lx s         # flat-disc receptor

# Exposure value to scene luminance with ISO 100 imaging media

# For Kenko (Minolta) or Pentax
#ev100(x) units=[;cd/m^2] range=(0,) 2^x k1400 / s100; log2(ev100 s100/k1400)
# For Canon, Nikon, or Sekonic
ev100(x) units=[1;cd/m^2] range=(0,) 2^x k1250 / s100; log2(ev100 s100/k1250)
EV100()  ev100

# Exposure value to scene illuminance with ISO 100 imaging media

iv100(x) units=[1;lx] range=(0,) 2^x c250 / s100; log2(iv100 s100 / c250)

# Other Photographic Exposure Conversions
# 
# As part of APEX, ASA PH2.5-1960 proposed several logarithmic quantities
# related by
#
#    Ev = Av + Tv = Bv + Sv
#
# where
#  Av = log2(A^2)       Aperture value
#  Tv = log2(1/t)       Time value
#  Sv = log2(N Sx)      Speed value
#  Bv = log2(B S / K)   Luminance ("brightness") value
#  Iv = log2(I S / C)   Illuminance value
#
# and
#  A  = Relative aperture (f-number)
#  t  = Exposure time in seconds
#  Sx = Arithmetic ISO speed in 1/lux s
#  B  = luminance in cd/m2
#  I  = luminance in lux

# The constant N derives from the arcane relationship between arithmetic
# and logarithmic speed given in ASA PH2.5-1960.  That relationship
# apparently was not obvious--so much so that it was thought necessary
# to explain it in PH2.12-1961.  The constant has had several values
# over the years, usually without explanation for the changes.  Although
# APEX had little impact on consumer cameras, it has seen a partial
# resurrection in the Exif standards published by the Camera & Imaging
# Products Association of Japan.

#N_apex         2^-1.75 lx s    # precise value implied in ASA PH2.12-1961,
                                # derived from ASA PH2.5-1960.
#N_apex         0.30 lx s       # rounded value in ASA PH2.5-1960, 
                                # ASA PH2.12-1961, and ANSI PH2.7-1986
#N_apex         0.3162 lx s     # value in ANSI PH2.7-1973
N_exif          1|3.125 lx s    # value in Exif 2.3 (2010), making Sv(5) = 100
K_apex1961      11.4 (cd/m2) / lx s    # value in ASA PH2.12-1961
K_apex1971      12.5 (cd/m2) / lx s    # value in ANSI PH3.49-1971; more common
C_apex1961      224 lx / lx s   # value in PH2.12-1961 (20.83 for I in 
                                #   footcandles; flat sensor?)
C_apex1971      322 lx / lx s   # mean value in PH3.49-1971 (30 +/- 5 for I in
                                # footcandles; hemispherical sensor?)
N_speed         N_exif
K_lum           K_apex1971
C_illum         C_apex1961

# Units for Photographic Exposure Variables
#
# Practical photography sometimes pays scant attention to units for exposure
# variables.  In particular, the "speed" of the imaging medium is treated as if
# it were dimensionless when it should have units of reciprocal lux seconds;
# this practice works only because "speed" is almost invariably given in
# accordance with international standards (or similar ones used by camera
# manufacturers)--so the assumed units are invariant.  In calculating
# logarithmic quantities--especially the time value Tv and the exposure value
# EV--the units for exposure time ("shutter speed") are often ignored; this
# practice works only because the units of exposure time are assumed to be in
# seconds, and the missing units that make the argument to the logarithmic
# function dimensionless are silently provided.
#
# In keeping with common practice, the definitions that follow treat "speeds"
# as dimensionless, so ISO 100 speed is given simply as '100'.  When
# calculating the logarithmic APEX quantities Av and Tv, the definitions
# provide the missing units, so the times can be given with any appropriate
# units.  For example, giving an exposure time of 1 minute as either '1 min' or
# '60 s' will result in Tv of -5.9068906.
#
# Exposure Value from f-number and Exposure Time
# 
# Because nonlinear unit conversions only accept a single quantity,
# there is no direct conversion from f-number and exposure time to
# exposure value EV.  But the EV can be obtained from a combination of
# Av and Tv.  For example, the "sunny 16" rule states that correct
# exposure for a sunlit scene can achieved by using f/16 and an exposure
# time equal to the reciprocal of the ISO speed in seconds; this can be
# calculated as
#
#    ~Av(16) + ~Tv(1|100 s),
#
# which gives 14.643856.  These conversions may be combined with the
# ev100 conversion:
#
#    ev100(~Av(16) + ~Tv(1|100 s))
#
# to yield the assumed average scene luminance of 3200 cd/m^2.

# convert relative aperture (f-number) to aperture value
Av(A)           units=[1;1] domain=[-2,) range=[0.5,)  2^(A/2); 2 log2(Av)
# convert exposure time to time value
Tv(t)           units=[1;s] range=(0,)  2^(-t) s; log2(s / Tv)
# convert logarithmic speed Sv in ASA PH2.5-1960 to ASA/ISO arithmetic speed;
# make arithmetic speed dimensionless
# 'Sv' conflicts with the symbol for sievert; you can uncomment this function
# definition if you don't need that symbol
#Sv(S)    units=[1;1] range=(0,) 2^S / (N_speed/lx s); log2((N_speed/lx s) Sv)
Sval(S)   units=[1;1] range=(0,) 2^S / (N_speed/lx s); log2((N_speed/lx s) Sval)

# convert luminance value Bv in ASA PH2.12-1961 to luminance
Bv(x)           units=[1;cd/m^2] range=(0,) \
                2^x K_lum N_speed ; log2(Bv / (K_lum N_speed))

# convert illuminance value Iv in ASA PH2.12-1961 to illuminance
Iv(x)           units=[1;lx] range=(0,) \
                2^x C_illum N_speed ; log2(Iv / (C_illum N_speed))

# convert ASA/ISO arithmetic speed Sx to ASA logarithmic speed in 
# ASA PH2.5-1960; make arithmetic speed dimensionless
Sx(S)           units=[1;1] domain=(0,) \
                log2((N_speed/lx s) S); 2^Sx / (N_speed/lx s)

# convert DIN speed/ISO logarithmic speed in ISO 6:1993 to arithmetic speed
# for convenience, speed is treated here as if it were dimensionless
Sdeg(S)         units=[1;1] range=(0,) 10^((S - 1) / 10) ; (1 + 10 log(Sdeg))
Sdin()          Sdeg

# Numerical Aperture and f-Number of a Lens
#
# The numerical aperture (NA) is given by
#
#   NA = n sin(theta)
#
# where n is the index of refraction of the medium and theta is half
# of the angle subtended by the aperture stop from a point in the image
# or object plane. For a lens in air, n = 1, and
#
#   NA = 0.5 / f-number
#
# convert NA to f-number
numericalaperture(x) units=[1;1] domain=(0,1] range=[0.5,) \
                     0.5 / x ; 0.5 / numericalaperture
NA()            numericalaperture
#
# convert f-number to itself; restrict values to those possible
fnumber(x)      units=[1;1] domain=[0.5,) range=[0.5,) x ; fnumber

# Referenced Photographic Standards
#
# ASA PH-2.5-1960. USA Standard, Method for Determining (Monochrome,
#    Continuous-Tone) Speed of Photographic Negative Materials.
# ASA PH2.12-1961. American Standard, General-Purpose Photographic
#    Exposure Meters (photoelectric type).
# ANSI PH3.49-1971. American National Standard for general-purpose
#    photographic exposure meters (photoelectric type).
# ANSI PH2.7-1973. American National Standard Photographic Exposure Guide.
# ANSI PH2.7-1986. American National Standard for Photography --
#    Photographic Exposure Guide.
# CIPA DC-008-2010. Exchangeable image file format for digital still
#    cameras: Exif Version 2.3
# ISO 6:1993.  International Standard, Photography -- Black-and-white
#    pictorial still camera negative film/process systems --
#    Determination of ISO Speed.


#
# Astronomical time measurements
#
# Astronomical time measurement is a complicated matter.  The length of the
# true day at a given place can be 21 seconds less than 24 hours or 30 seconds
# over 24 hours.  The two main reasons for this are the varying speed of
# Earth in its elliptical orbit and the fact that the Sun moves on the ecliptic
# instead of along the celestial equator.  To devise a workable system for time
# measurement, Simon Newcomb (1835-1909) used a fictitious "mean Sun".
# Consider a first fictitious Sun traveling along the ecliptic at a constant
# speed and coinciding with the true Sun at perigee and apogee.  Then
# considering a second fictitious Sun traveling along the celestial equator at
# a constant speed and coinciding with the first fictitious Sun at the
# equinoxes.  The second fictitious Sun is the "mean Sun".  From this equations
# can be written out to determine the length of the mean day, and the tropical
# year.  The length of the second was determined based on the tropical year
# from such a calculation and was officially used from 1960-1967 until atomic
# clocks replaced astronomical measurements for a standard of time.  All of the
# values below give the mean time for the specified interval.
#
# See "Mathematical Astronomy Morsels" by Jean Meeus for more details
# and a description of how to compute the correction to mean time.
#

TIME                    second

anomalisticyear         365.2596 days       # The time between successive
                                            #   perihelion passages of 
                                            #   Earth.
siderealyear            365.256360417 day   # The time for Earth to make
                                            #   one revolution around the Sun
                                            #   relative to the stars.
tropicalyear            365.242198781 day   # The time needed for the mean Sun
                                            #   as defined above to increase
                                            #   its longitude by 360 degrees.
                                            #   Most references defined the
                                            #   tropical year as the interval
                                            #   between vernal equinoxes, but
                                            #   this is misleading.  The length
                                            #   of the season changes over time
                                            #   because of the eccentricity of
                                            #   Earth's orbit.  The time
                                            #   between vernal equinoxes is
                                            #   approximately 365.24237 days
                                            #   around the year 2000.  See
                                            #   "Mathematical Astronomy
                                            #   Morsels" for more details.
eclipseyear             346.62 days         # The line of nodes is the
                                            #   intersection of the plane of
                                            #   Earth's orbit around the Sun
                                            #   with the plane of the Moon's
                                            #   orbit around Earth.  Eclipses
                                            #   can only occur when the Moon
                                            #   and Sun are close to this
                                            #   line.  The line rotates and
                                            #   appearances of the Sun on the
                                            #   line of nodes occur every
                                            #   eclipse year.
saros                   223 synodicmonth    # The Earth, Moon and Sun appear in
                                            #   the same arrangement every
                                            #   saros, so if an eclipse occurs,
                                            #   then one saros later, a similar
                                            #   eclipse will occur.  (The saros
                                            #   is close to 19 eclipse years.)
                                            #   The eclipse will occur about
                                            #   120 degrees west of the
                                            #   preceding one because the
                                            #   saros is not an even number of
                                            #   days.  After 3 saros, an
                                            #   eclipse will occur at
                                            #   approximately the same place.
solarday                day                 # Time from noon to noon
siderealday             86164.09054 s       # The sidereal day is the interval
siderealhour            1|24 siderealday    #   between two successive transits
siderealminute          1|60 siderealhour   #   of a star over the meridian,
siderealsecond          1|60 siderealminute #   or the time required  for
                                            #   Earth to make one rotation
                                            #   relative to the stars.  Another
                                            #   way to think about it is to
                                            #   imagine looking down at the
                                            #   solar system and noting when
                                            #   Earth has made a rotation.
                                            #   The more usual solar day is the
                                            #   time required to make a
                                            #   rotation relative to the Sun,
                                            #   which means the same point on
                                            #   Earth faces the Sun again.
                                            #   Because Earth moves in its
                                            #   orbit, it has to rotate a bit
                                            #   more to face the Sun again,
                                            #   hence the solar day is slightly
                                            #   longer than the sidereal day.
                                            #   The value given here is the
                                            #   mean day length taken from
                                            #   ssd.jpl.nasa.gov/astro_par.html
                                            #   which in turn cites the
                                            #   "Explanatory Supplement to the
                                            #   Astronomical Almanac", 1992.
anomalisticmonth        27.55454977 day     # Time for the Moon to travel from
                                            #   perigee to perigee
nodicalmonth            27.2122199 day      # The nodes are the points where
draconicmonth           nodicalmonth        #   an orbit crosses the ecliptic.
draconiticmonth         nodicalmonth        #   This is the time required to
                                            #   travel from the ascending node
                                            #   to the next ascending node.
siderealmonth           27.321661 day       # Time required for the Moon to
                                            #   orbit the Earth
lunarmonth              29 days + 12 hours + 44 minutes + 2.8 seconds
                                            # Mean time between full moons.
synodicmonth            lunarmonth          #   Full moons occur when the Sun
lunation                synodicmonth        #   and Moon are on opposite sides
lune                    1|30 lunation       #   of the Earth.  Since the Earth
lunour                  1|24 lune           #   moves around the Sun, the Moon
                                            #   has to move a bit further in its
                                            #   orbit to return to the full moon
                                            #   configuration.
year                    tropicalyear
yr                      year
month                   1|12 year
mo                      month
lustrum                 5 years             # The Lustrum was a Roman
                                            #   purification ceremony that took
                                            #   place every five years.
                                            #   Classically educated Englishmen
                                            #   used this term.
decade                  10 years
century                 100 years
millennium              1000 years
millennia               millennium
solaryear               year
lunaryear               12 lunarmonth
calendaryear            365 day
commonyear              365 day
leapyear                366 day
 
# The Julian year is The length of an average year over a 4-year cycle in the
# Julian calendar.  The calendar was proposed by Julius Caesar in 46 BCE and
# took effect the following year. It has a normal year of 365 days and a leap
# year of 366 days every four years.  Though this calendar was used in
# Europe for more than 1600 years, it drifts from the topical year by
# about 1 day every 128 years, which became noticeable over its period
# of use.

# This growing discrepancy between the seasons and the calendar was perhaps
# confusing but was also of concern to the Catholic Church because it led to a
# shift in the date of Easter.  To correct this discrepancy, Pope Gregory XIII
# introduced the more accurate Gregorian calendar in 1582.  The Gregorian year
# is the length of an average year over a 400-year cycle in the Gregorian
# calendar.  Every year that is exactly divisible by four is a
# leap year, except for years that are exactly divisible by 100, unless these
# centurial years are exactly divisible by 400.  This calendar was adopted by
# many Catholic countries when it was proclaimed, but was not adopted by many
# other countries until much later; Britain and the British Empire, including
# what is now the eastern part of the United States, adopted it in 1752.  See
# https://en.wikipedia.org/wiki/List_of_adoption_dates_of_the_Gregorian_calendar_by_country
# for additional details.

julianyear              365.25 days
gregorianyear           365.2425 days
                                            
islamicyear             354 day          # A year of 12 lunar months. They
islamicleapyear         355 day          # began counting on July 16, AD 622
                                         # when Muhammad emigrated to Medina
                                         # (the year of the Hegira).  They need
                                         # 11 leap days in 30 years to stay in
                                         # sync with the lunar year which is a
                                         # bit longer than the 29.5 days of the
                                         # average month.  The months do not
                                         # keep to the same seasons, but
                                         # regress through the seasons every
                                         # 32.5 years.
islamicmonth            1|12 islamicyear # They have 29 day and 30 day months.

# The Hebrew year is also based on lunar months, but synchronized to the solar
# calendar.  The months vary irregularly between 29 and 30 days in length, and
# the years likewise vary.  The regular year is 353, 354, or 355 days long.  To
# keep up with the solar calendar, a leap month of 30 days is inserted every
# 3rd, 6th, 8th, 11th, 14th, 17th, and 19th years of a 19 year cycle.  This
# gives leap years that last 383, 384, or 385 days.

#
# Planetary data from JPL's planet fact sheets.  Each planet has its
# own sheet at https://nssdc.gsfc.nasa.gov/planetary/factsheet/<name>fact.html
# The source for data on the fact sheets is described at
# https://nssdc.gsfc.nasa.gov/planetary/factsheet/fact_notes.html
# and they also indicate that the values listed are not "official" values:
# there is no single set of agreed upon values.  

# Sidereal days.  The sidereal day is the time required for a planet to make a
# revolution relative to the stars.  This is the default day value.  

mercuryday              mercuryday_sidereal
venusday                venusday_sidereal
earthday                earthday_sidereal
marsday                 marsday_sidereal
jupiterday              jupiterday_sidereal
saturnday               saturnday_sidereal
uranusday               uranusday_sidereal
neptuneday              neptuneday_sidereal
plutoday                plutoday_sidereal

mercuryday_sidereal     1407.6 hr   # Mercury is in a 3:2 resonance lock
                                    # where it makes 3 rotations per 2 orbits
                                    # so 3 sidereal days = 2 years
venusday_sidereal       5832.6 hr   # Retrograde
earthday_sidereal       siderealday
marsday_sidereal        24.6229 hr
jupiterday_sidereal     9.9250 hr
saturnday_sidereal      10.656 hr
uranusday_sidereal      17.24 hr    # Retrograde
neptuneday_sidereal     16.11 hr
plutoday_sidereal       153.2928 hr # Retrograde

# In astronomy, an object's rotation is "prograde" if it rotates in
# the same direction as the primary object it orbits.  Prograde
# rotation is the more common case: in Earth's solar system, Mercury,
# Earth, Mars, Jupiter, Saturn, and Neptune have prograde rotation.
# When an object rotates opposite the direction of its primary object,
# the object's rotation is "retrograde".  Venus, Uranus, and Pluto have
# retrograde rotation.
#
# The solar (or synodic) day is the time from noon to noon on a planet.  This
# is different from the sidereal day because the planet has moved in its orbit,
# so (if its rotation is prograde) it needs additional rotation to return to
# the same orientation relative to the Sun.  In one orbital period (a year),
# this amounts to one additional complete rotation, so the number of sidereal
# days in a year is one greater than the number of solar days.
#
# If the planet's rotation is retrograde, less rotation is needed to return to
# the same orientation relative to the Sun, and the number of sidereal days in
# a year is one fewer than the number of solar days.
#
# The solar day can be computed from the sidereal day in the typical prograde
# case by:
#       solar_day = sidereal_day year / (year - sidereal_day)
# If the planet's rotation is retrograde like Venus then the formula is
#       solar_day = sidereal_day year / (year + sidereal_day)
# If the sidereal day and year are the same length then the same face of the
# planet faces the Sun and there is no solar day.

mercuryday_solar        4222.6 hr 
venusday_solar          2802.0 hr
earthday_solar          24 hr
marsday_solar           24.6597 hr
jupiterday_solar        9.9259 hr
saturnday_solar         10.656 hr
uranusday_solar         17.24 hr
neptuneday_solar        16.11 hr
plutoday_solar          153.2820 hr

# Sidereal years 

mercuryyear             87.969 day
venusyear               224.701 day
earthyear               siderealyear
marsyear                686.980 day
jupiteryear             4332.589 day
saturnyear              10759.22 day
uranusyear              30685.4 day
neptuneyear             60189 day
plutoyear               90560 day

# Equatorial radii for the planets from JPL fact sheets

mercuryradius           2440.5 km
venusradius             6051.8 km
earthradius             6378.137 km
marsradius              3396.2 km
jupiterradius           71492 km   # 1 bar level
saturnradius            60268 km   # 1 bar level
uranusradius            25559 km   # 1 bar level
neptuneradius           24764 km   # 1 bar level
plutoradius             1188 km

# Volumetric mean radii

mercuryradius_mean      2440.5 km
venusradius_mean        6051.8 km
earthradius_mean        6371 km
marsradius_mean         3389.5 km
jupiterradius_mean      69911 km
saturnradius_mean       58232 km
uranusradius_mean       25362 km
neptuneradius_mean      24622 km
plutoradius_mean        1188 km

# Polar radii

mercuryradius_polar      2438.3 km
venusradius_polar        6051.8 km
marsradius_polar         3376.2 km
jupiterradius_polar      66854 km
saturnradius_polar       54364 km
uranusradius_polar       24973 km
neptuneradius_polar      24341 km
plutoradius_polar        1188 km

mercurysundist_min      46.000 Gm
mercurysundist_max      69.818 Gm
venussundist_min        107.480 Gm
venussundist_max        108.941 Gm
earthsundist_min        sundist_min
earthsundist_max        sundist_max
marssundist_min         206.650 Gm
marssundist_max         249.261 Gm
jupitersundist_min      740.595 Gm
jupitersundist_max      816.363 Gm
saturnsundist_min       1357.554 Gm
saturnsundist_max       1506.527 Gm
uranussundist_min       2732.696 Gm
uranussundist_max       3001.390 Gm
neptunesundist_min      4471.050 Gm
neptunesundist_max      4558.857 Gm
plutosundist_min        4434.987 Gm
plutosundist_max        7304.326 Gm

sundist                 1.0000010178 au # mean Earth-Sun distance
moondist                384400 km       # mean Earth-Moon distance
sundist_near            147.095 Gm      # Earth-Sun distance at perihelion
sundist_min             sundist_near
sundist_far             152.100 Gm      # Earth-Sun distance at aphelion
sundist_max             sundist_far

# The Earth-Moon distances at perigee and apogee are different for every
# lunation.  The values here are the extremes for 1500-2500 according to
# Jean Meeus's Astronomical Algorithms (1991, 332).

moondist_min            356371 km      # minimum distance at perigee 1500-2500
moondist_max            406720 km      # maximum distance at apogee 1500-2500

# Objects on Earth are charted relative to a perfect ellipsoid whose
# dimensions are specified by different organizations.  The ellipsoid is
# specified by an equatorial radius and a flattening value which defines the
# polar radius.

earthflattening         IERS_earthflattening
earthradius_equatorial  IERS_earthradius_equatorial
earthradius_polar       (1-earthflattening) earthradius_equatorial

# The World Geodetic System maintains a standard, WGS84, which is used by the
# the GPS system.  This system uses a conventional ellipsoid that was fixed in
# 1984 and has remained constant so that data collected at different times is
# referenced to the same ellipsoid.   https://epsg.io/4326

WGS84_earthflattening         1|298.257223563
WGS84_earthradius_equatorial  6378137 m
WGS84_earthradius_polar   (1-WGS84_earthflattening) WGS84_earthradius_equatorial

# The International Earth Rotation Service (IERS) attempts to
# maintain an accurate model of Earth, with updates to maintain the highest
# possible accuracy, even though this makes it more difficult to relate geodetic
# measurements made at different times.
# IERS Conventions, Chapter 1, General definitions and numerical standards (16 November 2017)
# https://iers-conventions.obspm.fr/content/chapter1/icc1.pdf

IERS_earthflattening        1|298.25642
IERS_earthradius_equatorial 6378136.6 m
IERS_earthradius_polar      (1-IERS_earthflattening) IERS_earthradius_equatorial


landarea                148.847e6 km^2
oceanarea               361.254e6 km^2

moonradius              1738 km         # mean value
sunradius               6.96e8 m

# Many astronomical values can be measured most accurately in a system of units
# using the astronomical unit and the mass of the Sun as base units.  The
# uncertainty in the gravitational constant makes conversion to SI units
# significantly less accurate.

# The astronomical unit was defined to be the length of the of the semimajor
# axis of a massless object with the same year as Earth.  With such a
# definition in force, and with the mass of the Sun set equal to one, Kepler's
# third law can be used to solve for the value of the gravitational constant.

# Kepler's third law says that (2 pi / T)^2 a^3 = G M where T is the orbital
# period, a is the size of the semimajor axis, G is the gravitational constant
# and M is the mass.  With M = 1 and T and a chosen for Earth's orbit, we
# find sqrt(G) = (2 pi / T) sqrt(AU^3).  This constant is called the Gaussian
# gravitational constant, apparently because Gauss originally did the
# calculations.  However, when the original calculation was done, the value
# for the length of Earth's year was inaccurate.  The value used is called
# the Gaussian year.  Changing the astronomical unit to bring it into
# agreement with more accurate values for the year would have invalidated a
# lot of previous work, so instead the astronomical unit has been kept equal
# to this original value.  This is accomplished by using a standard value for
# the Gaussian gravitational constant.  This constant is called k.

gauss_k                 0.01720209895   # This beast has dimensions of
                                        # au^(3|2) / day and is exact.
gaussianyear      (2 pi / gauss_k) days # Year that corresponds to the Gaussian
                                        # gravitational constant. This is a
                                        # fictional year, and doesn't
                                        # correspond to any celestial event.
astronomicalunit         149597870700 m # IAU definition from 2012, exact
au                     astronomicalunit # ephemeris for the above described
                                        # astronomical unit.  (See the NASA
                                        # site listed above.)
GMsun    132712440041.279419 km^3 / s^2 # heliocentric gravitational constant
solarmass                       GMsun/G # is known more accurately than G.
sunmass                       solarmass # Estimated from DE440


# The following are masses for planetary systems, not just the planet itself,
# except for the case of Earth, where the Moon is excluded.  Masses are
# relative to G because they are known much more accurately than G.
#
# See https://ssd.jpl.nasa.gov/astro_par.html.  Values are from
# the DE440 Ephemeris: https://ssd.jpl.nasa.gov/doc/Park.2021.AJ.DE440.pdf

mercurymass             22031.868551 km^3 / s^2 G
venusmass               324858.592000 km^3 / s^2 G
marsmass                42828.375816 km^3 / s^2 G
jupitermass             126712764.100000 km^3 / s^2 G
saturnmass              37940584.841800 km^3 / s^2 G
uranusmass              5794556.400000 km^3 / s^2 G
neptunemass             6836527.100580 km^3 / s^2 G
plutomass               975.500000 km^3 / s^2 G
ceresmass               62.62890 km^3 / s^2 G
vestamass               17.288245 km^3 / s^2 G

earthmass               398600.435507 km^3 / s^2 G    # Earth alone
moonmass                4902.800118 km^3 / s^2 G
moonearthmassratio      moonmass/earthmass
earthmoonmass           earthmass+moonmass

moongravity             1.62 m/s^2

# Earth gravity values at the equator and poles.  These values are
# obtained from the WGS84 model.

gravity_equatorial      9.7803263359 m / s^2
gravity_polar           9.8321849378 m / s^2

# The Hubble constant gives the speed at which distance galaxies are moving
# away from Earth according to v = H0*d, where H0 is the hubble constant
# and d is the distance to the galaxy.

hubble                  70 km/s/Mpc        # approximate
H0                      hubble

# Parallax is the angular difference between the topocentric (on Earth's
# surface) and geocentric (at Earth's center) direction toward a celestial body
# when the body is at a given altitude.  When the body is on the horizon, the
# parallax is the horizontal parallax; when the body is on the horizon and the
# observer is on the equator, the parallax is the equatorial horizontal
# parallax.  When the body is at zenith, the parallax is zero.

lunarparallax  asin(earthradius_equatorial / moondist) # Moon equatorial 
moonhp         lunarparallax                           # horizontal parallax
                                                       # at mean distance

# Light from celestial objects is attenuated by passage through Earth's
# atmosphere.  A body near the horizon passes through much more air than an
# object at zenith, and is consequently less bright.  Air mass is the ratio of
# the length of the optical path at a given altitude (angle above the horizon)
# to the length at zenith.  Air mass at zenith is by definition unity; at the
# horizon, air mass is approximately 38, though the latter value can vary
# considerably with atmospheric conditions.  The general formula is # E = E0
# exp(-c X), where E0 is the value outside Earth's atmosphere, E is the value
# seen by an observer, X is the air mass and c is the extinction coefficient.
# A common value for c in reasonably clear air is 0.21, but values can be
# considerably greater in urban areas.  Apparent altitude is that perceived by
# an observer; it includes the effect of atmospheric refraction.  There is no
# shortage of formulas for air mass
# (https://en.wikipedia.org/wiki/Air_mass_(astronomy)); all are subject to
# variations in local atmospheric conditions.  The formula used here is simple
# and is in good agreement with rigorously calculated values under standard
# conditions.
#
# Extraterrestrial illuminance or luminance of an object at a given altitude
# determined with vmag() or SB_xxx() below can be multiplied by
# atm_transmission() or atm_transmissionz() to estimate the terrestrial value.
#
# Kasten and Young (1989) air mass formula. alt is apparent altitude
# Reference:
# Kasten, F., and A.T. Young. 1989. "Revised Optical Air Mass Tables
#     and Approximation Formula."  Applied Optics.  Vol. 28, 4735-4738.
#     Bibcode:1989ApOpt..28.4735K. doi:10.1364/AO.28.004735.

airmass(alt) units=[degree;1] domain=[0,90] noerror \
    1 / (sin(alt) + 0.50572 (alt / degree + 6.07995)^-1.6364)

# zenith is apparent zenith angle (zenith = 90 deg - alt)
airmassz(zenith) units=[degree;1] domain=[0,90] noerror \
    1 / (cos(zenith) + 0.50572 (96.07995 - zenith / degree)^-1.6364)

# For reasonably clear air at sea level; values may need adjustment for
# elevation and local atmospheric conditions
# for scotopic vision (510 nm), appropriate for the dark-adapted eye
# extinction_coeff           0.26
# for photopic vision, appropriate for observing brighter objects such
# as the full moon
extinction_coeff        0.21

atm_transmission(alt) units=[degree;1] domain=[0,90] noerror \
                        exp(-extinction_coeff airmass(alt))

# in terms of zenith angle (zenith = 90 deg - alt)
atm_transmissionz(zenith) units=[degree;1] domain=[0,90] noerror \
                        exp(-extinction_coeff airmassz(zenith))

# Moon and Sun data at mean distances
moonvmag               -12.74  # Moon apparent visual magnitude at mean distance
sunvmag                -26.74  # Sun apparent visual magnitude at mean distance
moonsd  asin(moonradius / moondist) # Moon angular semidiameter at mean distance
sunsd     asin(sunradius / sundist) # Sun angular semidiameter at mean distance

# Visual magnitude of star or other celestial object.  The system of stellar
# magnitudes, developed in ancient Greece, assigned magnitudes from 1
# (brightest) to 6 (faintest visible to the naked eye).  In 1856, British
# astronomer Norman Pogson made the system precise, with a magnitude 1 object
# 100 times as bright as a magnitude 6 object, and each magnitude differing
# from the next by a constant ratio; the ratio, sometimes known as Pogson's
# ratio, is thus 100^0.2, or approximately 2.5119.  The logarithm of 100^0.2 is
# 0.4, hence the common use of powers of 10 and base-10 logarithms.
#
# Reference:
# Allen, C.W. 1976.  Astrophysical Quantities, 3rd ed. 1973, reprinted
#     with corrections, 1976.  London: Athlone.
#
# The function argument is the (dimensionless) visual magnitude; reference
# illuminance of 2.54e-6 lx is from Allen (2000, 21), and is for outside
# Earth's atmosphere.  Illuminance values can be adjusted to terrestrial values
# by multiplying by one of the atm_transmission functions above.

# Illuminance from apparent visual magnitude
vmag(mag) units=[1;lx] domain=[,]  range=(0,] \
                       2.54e-6 lx 10^(-0.4 mag); -2.5 log(vmag / (2.54e-6 lx))

# Surface brightness of a celestial object of a given visual magnitude
# is a logarithmic measure of the luminance the object would have if its
# light were emitted by an object of specified solid angle; it is
# expressed in magnitudes per solid angle.  Surface brightness can be
# obtained from the visual magnitude by
#    S = m + 2.5 log(pi pi k a b),
# where k is the phase (fraction illuminated), a is the equatorial
# radius, and b is the polar radius.  For 100% illumination (e.g., full
# moon), this is often simplified to
#    S = m + 2.5 log(pi k s^2),
# where s is the object's angular semidiameter; the units of s determine
# the units of solid angle.  The visual magnitude and semidiameter must
# be appropriate for the object's distance; for other than 100%
# illumination, the visual magnitude must be appropriate for the phase.
# Luminance values are for outside Earth's atmosphere; they can be
# adjusted to terrestrial values by multiplying by one of the atm_transmission
# functions above.

# luminance from surface brightness in magnitudes per square degree
SB_degree(sb) units=[1;cd/m^2] domain=[,] range=(0,] \
    vmag(sb) / squaredegree ; \
    ~vmag(SB_degree squaredegree)

# luminance from surface brightness in magnitudes per square minute
SB_minute(sb) units=[1;cd/m^2] domain=[,] range=(0,] \
    vmag(sb) / squareminute ; \
    ~vmag(SB_minute squareminute)

# luminance from surface brightness in magnitudes per square second
SB_second(sb) units=[1;cd/m^2] domain=[,] range=(0,] \
    vmag(sb) / squaresecond ; \
    ~vmag(SB_second squaresecond)

# luminance from surface brightness in magnitudes per steradian
SB_sr(sb) units=[1;cd/m^2] domain=[,] range=(0,] \
    vmag(sb) / sr ; \
    ~vmag(SB_sr sr)

SB()            SB_second
SB_sec()        SB_second
SB_min()        SB_minute
SB_deg()        SB_degree

# The brightness of one tenth-magnitude star per square degree outside
# Earth's atmosphere; often used for night sky brightness.
S10     SB_degree(10)

# Examples for magnitude and surface brightness functions
# Sun illuminance from visual magnitude
#     You have: sunvmag
#     You want:
#           Definition: -26.74 = -26.74
#     You have: vmag(sunvmag)
#     You want: lx
#           * 126134.45
#           / 7.9280482e-06
#
# Moon surface brightness from visual magnitude and semidiameter at 100%
# illumination (full moon):
#     You have: moonvmag
#     You want:
#           Definition: -12.74 = -12.74
#     You have: moonsd
#     You want: arcsec
#           * 932.59484
#           / 0.001072277
#     You have: moonvmag + 2.5 log(pi 932.59484^2)
#     You want:
#           Definition: 3.3513397
#
# Similar example with specific data obtained from another source (JPL
# Horizons, https://ssd.jpl.nasa.gov/horizons.cgi); semidiameter is in
# arcseconds
#
#     You have: -12.9 + 2.5 log(pi 2023.201|2^2)
#     You want:
#           Definition: 3.3679199
#     You have: SB_second(-12.9 + 2.5 log(pi 2023.201|2^2))
#     You want:
#           Definition: 4858.6547 cd / m^2
#
# If surface brightness is provided by another source (e.g., Horizons),
# it can simply be used directly:
# You have: SB_second(3.3679199)
# You want: cd/m^2
#         * 4858.6546
#         / 0.0002058183
# The illuminance and luminance values are extraterrestrial (outside
# Earth's atmosphere).  The values at Earth's surface are less than these
# because of atmospheric extinction.  For example, in the last example
# above, if the Moon were at an altitude of 55 degrees, the terrestrial
# luminance could be calculated with
#     You have: SB_second(3.3679199)
#     You want: cd/m^2
#           * 4858.6546
#           / 0.0002058183
#     You have: _ atm_transmission(55 deg)
#     You want: cd/m^2
#           * 3760.6356
#           / 0.0002659125
# If desired, photographic exposure can be determined with EV100(),
# leading to acceptable combinations of aperture and exposure time.
# For the example above, but with the Moon at 10 degrees,
#     You have: SB_second(3.3679199) atm_transmission(10 deg)
#     You want: EV100
#           13.553962

#
# The Hartree system of atomic units, derived from fundamental units
# of mass (of the electron), action (Planck's constant), charge, and
# the Coulomb constant.  This system is used in the fields of physical
# chemistry and condensed matter physics.  
#

# Fundamental units

atomicmass              electronmass
atomiccharge            e
atomicaction            hbar
atomicenergy            hartree

# Derived units

atomicvelocity          sqrt(atomicenergy / atomicmass)
atomictime              atomicaction / atomicenergy
atomiclength            atomicvelocity atomictime
atomicforce             atomicenergy / atomiclength
atomicmomentum          atomicenergy / atomicvelocity
atomiccurrent           atomiccharge / atomictime
atomicpotential         atomicenergy / atomiccharge   # electrical potential
atomicvolt              atomicpotential
atomicEfield            atomicpotential / atomiclength
atomicBfield            atomicEfield / atomicvelocity
atomictemperature       atomicenergy / boltzmann

#
# In Hartree units, m_e = hbar = e = coulombconst = bohrradius = alpha*c = 1
#

!var UNITS_SYSTEM hartree
!message Hartree units selected
!prompt (hartree)
+hartree      1
+kg           1/electronmass_SI
+K            k_SI / hbar_SI s 
+m            alpha c_SI electronmass_SI / hbar_SI
+s            alpha c_SI m
+A            1 / s e_SI
!endvar

#
# These thermal units treat entropy as charge, from [5]
#

thermalcoulomb          J/K        # entropy
thermalampere           W/K        # entropy flow
thermalfarad            J/K^2
thermalohm              K^2/W      # thermal resistance
fourier                 thermalohm
thermalhenry            J K^2/W^2  # thermal inductance
thermalvolt             K          # thermal potential difference


#
# United States units
#

# linear measure

# The US Metric Law of 1866 legalized the metric system in the USA and
# defined the meter in terms of the British system with the exact
# 1 meter = 39.37 inches.  On April 5, 1893 Thomas Corwin Mendenhall,
# Superintendent of Weights and Measures, decided, in what has become
# known as the "Mendenhall Order" that the meter and kilogram would be the
# fundamental standards in the USA.  The definition from 1866 was turned
# around to give an exact definition of the yard as 3600|3937 meters This
# definition was used until July of 1959 when the definition was changed
# to bring the US and other English-speaking countries into agreement; the
# Canadian value of 1 yard = 0.9144 meter (exactly) was chosen because it
# was approximately halfway between the British and US values; it had the
# added advantage of making 1 inch = 25.4 mm (exactly).  Since 1959, the
# "international" foot has been exactly 0.3048 meters.  At the same time,
# it was decided that any data expressed in feet derived from geodetic
# surveys within the US would continue to use the old definition and call
# the old unit the "survey foot."
#
# Until 1 January 2023, the US continued to define the statute
# mile, furlong, chain, rod, link, and fathom in terms of the US survey
# foot.  Since then, use of the US survey foot has been officially
# deprecated, with its use limited to historical and legacy applications.
# These units are now defined in terms of the international foot.
#
# Sources:
# NIST Special Publication 447, Sects. 5, 7, and 8.
# NIST Handbook 44, 2024 ed., Appendix C.
# Canadian Journal of Physics, 1959, 37:(1) 84, 10.1139/p59-014.

inch                    2.54 cm          # Exact, international inch (1959)
in                      inch
foot                    12 inch
feet                    foot
ft                      foot
yard                    3 ft
yd                      yard
mile                    5280 ft          # The mile was enlarged from 5000 ft
                                         # to this number in order to make
                                         # it an even number of furlongs.
                                         # (The Roman mile is 5000 romanfeet.)
line                    1|12 inch  # Also defined as '.1 in' or as '1e-8 Wb'
rod                     16.5 ft
pole                    rod
perch                   rod
furlong                 40 rod           # From "furrow long"
statutemile             mile
league                  3 mile           # Intended to be an hour's walk

# surveyor's measure
# The US survey foot is officially deprecated as of 1 January 2023
US                      1200|3937 m/ft   # These four values will convert
US-                     US               #   international measures to
survey-                 US               #   US Survey measures
geodetic-               US
int                     3937|1200 ft/m   # Convert US Survey measures to
int-                    int              #   international measures

# values based on the US survey foot are deprecated as of 1 January 2023
surveyorschain          66 surveyft
surveychain             surveyorschain
surveyorspole           1|4 surveyorschain
surveyorslink           1|100 surveyorschain
USacre                  10 surveychain^2
USacrefoot              USacre surveyfoot

chain                   66 ft
link                    1|100 chain
ch                      chain
intacre                 10 chain^2       # Acre based on international ft
intacrefoot             acre foot
acrefoot                intacrefoot
acre                    intacre
ac                      acre
section                 mile^2
township                36 section
homestead               160 acre # Area of land granted by the 1862 Homestead
                                 # Act of the United States Congress
gunterschain            surveyorschain

engineerschain          100 ft
engineerslink           1|100 engineerschain
ramsdenschain           engineerschain
ramsdenslink            engineerslink

gurleychain             33 feet           # Andrew Ellicott chain is the
gurleylink              1|50 gurleychain  # same length

wingchain               66 feet           # Chain from 1664, introduced by
winglink                1|80 wingchain    # Vincent Wing, also found in a
                                          # 33 foot length with 40 links.
# early US length standards

# The US has had four standards for the yard: one by Troughton of London
# (1815); bronze yard #11 (1856); the Mendhall yard (1893), consistent
# with the definition of the meter in the metric joint resolution of
# Congress in 1866, but defining the yard in terms of the meter; and the
# international yard (1959), which standardized definitions for Australia,
# Canada, New Zealand, South Africa, the UK, and the US.
# Sources: Pat Naughtin (2009), Which Inch?:
# https://metricationmatters.org/docs/WhichInch.pdf, 
# Lewis E.  Barbrow and Lewis V.  Judson (1976).  NBS Special
# Publication 447, Weights and Measures Standards of the United States: A
# Brief History.

troughtonyard           914.42190 mm
bronzeyard11            914.39980 mm
mendenhallyard          surveyyard
internationalyard       yard

# nautical measure

fathom                  6 ft     # Originally defined as the distance from
                                 #   fingertip to fingertip with arms fully
                                 #   extended.
nauticalmile            1852 m   # Supposed to be one minute of latitude at
                                 # the equator.  That value is about 1855 m.
                                 # Early estimates of Earth's circumference
                                 # were a bit off.  The value of 1852 m was
                                 # made the international standard in 1929.
                                 # The US did not accept this value until
                                 # 1954.  The UK switched in 1970.
                                 
# The cable is used for depth in water and has a wide range of definitions

intcable                1|10 nauticalmile # international cable
uscable                 120 fathom	  # value after 1 January 2023
surveycable             120 USfathom	  # value before 1 January 2023
UScable                 surveycable
cableslength            cable
cablelength             cable
navycablelength         cable
brcable                 1|10 brnauticalmile   
admiraltycable          brcable

marineleague            3 nauticalmile
geographicalmile        brnauticalmile
knot                    nauticalmile / hr
click                   km       # US military slang
klick                   click

# Avoirdupois weight

pound                   0.45359237 kg   # Exact, International Pound (1959)
lb                      pound           # From the Latin libra
grain                   1|7000 pound    # The grain is the same in all three
                                        # weight systems.  It was originally
                                        # defined as the weight of a barley
                                        # corn taken from the middle of the
                                        # ear.
ounce                   1|16 pound
oz                      ounce
dram                    1|16 ounce
dr                      dram
ushundredweight         100 pounds
cwt                     hundredweight
shorthundredweight      ushundredweight
uston                   shortton
shortton                2000 lb
quarterweight           1|4 uston
shortquarterweight      1|4 shortton
shortquarter            shortquarterweight

# Troy Weight.  In 1828 the troy pound was made the first United States
# standard weight.  It was to be used to regulate coinage.

troypound               5760 grain
troyounce               1|12 troypound
ozt                     troyounce
pennyweight             1|20 troyounce  # Abbreviated "d" in reference to a
dwt                     pennyweight     #   Frankish coin called the "denier"
                                        #   minted in the late 700's.  There
                                        #   were 240 deniers to the pound.
assayton                mg ton / troyounce  # mg / assayton = troyounce / ton
usassayton              mg uston / troyounce
brassayton              mg brton / troyounce
fineounce               troyounce       # A troy ounce of 99.5% pure gold

# Some other jewelers units

metriccarat             0.2 gram        # Defined in 1907
metricgrain             50 mg
carat                   metriccarat
ct                      carat
jewelerspoint           1|100 carat
silversmithpoint        1|4000 inch
momme                   3.75 grams      # Traditional Japanese unit based
                                        # on the chinese mace.  It is used for
                                        # pearls in modern times and also for
                                        # silk density.  The definition here
                                        # was adopted in 1891.
# Apothecaries' weight

appound                 troypound
apounce                 troyounce
apdram                  1|8 apounce
apscruple               1|3 apdram

# Liquid measure

usgallon                231 in^3        # US liquid measure is derived from
gal                     gallon          # the British wine gallon of 1707.
quart                   1|4 gallon      # See the "winegallon" entry below
pint                    1|2 quart       # more historical information.
gill                    1|4 pint
usquart                 1|4 usgallon
uspint                  1|2 usquart
usgill                  1|4 uspint
usfluidounce            1|16 uspint
fluiddram               1|8 usfloz
minimvolume             1|60 fluiddram
qt                      quart
pt                      pint
floz                    fluidounce
usfloz                  usfluidounce
fldr                    fluiddram
liquidbarrel            31.5 usgallon
usbeerbarrel            2 beerkegs
beerkeg                 15.5 usgallon   # Various among brewers
ponykeg                 1|2 beerkeg
winekeg                 12 usgallon
petroleumbarrel         42 usgallon     # Originated in Pennsylvania oil
barrel                  petroleumbarrel # fields, from the winetierce
bbl                     barrel
ushogshead              2 liquidbarrel
usfirkin                9 usgallon

# Dry measures: The Winchester Bushel was defined by William III in 1702 and
# legally adopted in the US in 1836.

usbushel                2150.42 in^3  # Volume of 8 inch cylinder with 18.5
bu                      bushel        # inch diameter (rounded)
peck                    1|4 bushel
uspeck                  1|4 usbushel
brpeck                  1|4 brbushel
pk                      peck
drygallon               1|2 uspeck
dryquart                1|4 drygallon
drypint                 1|2 dryquart
drybarrel               7056 in^3     # Used in US for fruits, vegetables,
                                      #   and other dry commodities except for
                                      #   cranberries.
cranberrybarrel         5826 in^3     # US cranberry barrel
heapedbushel            1.278 usbushel# The following explanation for this
                                      #   value was provided by Wendy Krieger
                                      #   <os2fan2@yahoo.com> based on
                                      #   guesswork.  The cylindrical vessel is
                                      #   18.5 inches in diameter and 1|2 inch
                                      #   thick.  A heaped bushel includes the
                                      #   contents of this cylinder plus a heap
                                      #   on top.  The heap is a cone 19.5
                                      #   inches in diameter and 6 inches
                                      #   high.  With these values, the volume
                                      #   of the bushel is 684.5 pi in^3 and
                                      #   the heap occupies 190.125 pi in^3.
                                      #   Therefore, the heaped bushel is
                                      #   874.625|684.5 bushels.  This value is
                                      #   approximately 1.2777575 and it rounds
                                      #   to the value listed for the size of
                                      #   the heaped bushel.  Sometimes the
                                      #   heaped bushel is reported as 1.25
                                      #   bushels.  This same explanation gives
                                      #   that value if the heap is taken to
                                      #   have an 18.5 inch diameter.

# Grain measures.  The bushel as it is used by farmers in the USA is actually
# a measure of mass which varies for different commodities.  Canada uses the
# same bushel masses for most commodities, but not for oats.

wheatbushel             60 lb
soybeanbushel           60 lb
cornbushel              56 lb
ryebushel               56 lb
barleybushel            48 lb
oatbushel               32 lb
ricebushel              45 lb
canada_oatbushel        34 lb

# Wine and Spirits measure

ponyvolume              1 usfloz
jigger                  1.5 usfloz   # Can vary between 1 and 2 usfloz
shot                    jigger     # Sometimes 1 usfloz
eushot                  25 ml      # EU standard spirits measure
fifth                   1|5 usgallon
winebottle              750 ml     # US industry standard, 1979
winesplit               1|4 winebottle
magnum                  1.5 liter  # Standardized in 1979, but given
                                   # as 2 qt in some references
metrictenth             375 ml
metricfifth             750 ml
metricquart             1 liter

# Old British bottle size

reputedquart            1|6 brgallon
reputedpint             1|2 reputedquart
brwinebottle            reputedquart       # Very close to 1|5 winegallon

# French champagne bottle sizes

split                   200 ml
jeroboam                2 magnum
rehoboam                3 magnum
methuselah              4 magnum
imperialbottle          4 magnum
salmanazar              6 magnum
balthazar               8 magnum
nebuchadnezzar          10 magnum
solomon                 12 magnum
melchior                12 magnum
sovereign               17.5 magnum
primat                  18 magnum
goliath                 18 magnum
melchizedek             20 magnum
midas                   20 magnum

# The wine glass doesn't seem to have an official standard, but the same value
# is suggested by several sources in the US. 

wineglass               150 mL 

# In the UK, serving size offerings legally mandated by The Weights and
# Measures (Specified Quantities) (Unwrapped Bread and Intoxicating
# Liquor) Order 2011, effective 1st October 2011.  The quantities--not
# the names--are mandated.  Lawful size offerings are these or multiples
# thereof, but other sizes can be provided at the express request of a
# buyer.

smallwineglass          125 mL
mediumwineglass         175 mL

# Values vary considerably among countries and even more so in practice.  The
# "standard" US value gives 5 glasses per standard 750 ml bottle.  Old practice
# in the UK was 125 ml per glass, or 6 glasses per bottle. Some sources suggest
# a more recent common value of 250 ml per glass, or 3 glasses per
# bottle; as a multiple of 125 ml, this would be a lawful serving size offering.
#
# The value refers to the size of the serving, not the total volume of the
# glass, which is typically not filled above the height of its greatest
# diameter.
#
# A unit of alcohol is a specified amount of pure ethyl alcohol, expressed as a
# mass or volumetric equivalent.  Many countries use the same concept but use
# different terms. "Alcohol unit" is used officially in the UK; the US, Canada,
# and Australia use "standard drink."  Values vary considerably among
# countries.  The UK value of 8 g is nominally the amount of alcohol that a
# typical adult can metabolize in one hour.

alcoholunitus           14 g   / ethanoldensity
alcoholunitca           13.6 g / ethanoldensity
alcoholunituk            8 g   / ethanoldensity
alcoholunitau           10 g   / ethanoldensity

# Common serving sizes have roughly equivalent amounts of alcohol, as
# illustrated by US examples for wine (12% Alcohol By Volume), beer (5% ABV),
# and spirits (80 proof).
#
# alcoholunitus / 12% = 147.8 mL, close to the "standard" serving of 150 mL.
# alcoholunitus / 5% = 11.995346 floz, close to a standard 12 floz bottle or can
# alcoholunitus / 80 proof = 1.4994182 floz, close to a standard "shot" or jigger

# https://www.rethinkingdrinking.niaaa.nih.gov/
# https://www.cdc.gov/alcohol/faqs.htm
# https://www.canada.ca/en/health-canada/services/substance-use/alcohol/low-risk-alcohol-drinking-guidelines
# https://www.drinkaware.co.uk/
# https://www.drinkaware.co.uk/facts/alcoholic-drinks-and-units
# https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/545937/UK_CMOs__report.pdf
# https://adf.org.au/reducing-risk/alcohol/alcohol-guidelines/
# https://www.health.gov.au/topics/alcohol/about-alcohol/standard-drinks-guide
# https://en.wikipedia.org/wiki/Unit_of_alcohol
# https://en.wikipedia.org/wiki/Standard_drink

# Coffee 
#
# The recommended ratio of coffee to water. Values vary considerably;
# one is from the  Specialty Coffee Association of America: Brewing Best Practices
# https://sca.coffee/research/protocols-best-practices

coffeeratio             55 g/L  # +/- 10%

# other recommendations are more loose, e.g.,
# http://www.ncausa.org/About-Coffee/How-to-Brew-Coffee


#
# Water is "hard" if it contains various minerals, especially calcium
# carbonate.
#

clarkdegree     grains/brgallon # Content by weigh of calcium carbonate
gpg             grains/usgallon # Divide by water's density to convert to
                                #   a dimensionless concentration measure
#
# Shoe measures
#

shoeiron                1|48 inch    # Used to measure leather in soles
shoeounce               1|64 inch    # Used to measure non-sole shoe leather

# USA shoe sizes.  These express the length of the shoe or the length
# of the "last", the form that the shoe is made on.  But note that
# this only captures the length.  It appears that widths change 1/4
# inch for each letter within the same size, and if you change the
# length by half a size then the width changes between 1/8 inch and
# 1/4 inch.  But this may not be standard.  If you know better, please
# contact me.

shoesize_delta          1|3 inch     # USA shoe sizes differ by this amount
shoe_men0               8.25 inch
shoe_women0             (7+11|12) inch
shoe_boys0              (3+11|12) inch
shoe_girls0             (3+7|12) inch

shoesize_men(n) units=[1;inch]   shoe_men0 + n shoesize_delta ; \
                                (shoesize_men+(-shoe_men0))/shoesize_delta
shoesize_women(n) units=[1;inch] shoe_women0 + n shoesize_delta ; \
                                (shoesize_women+(-shoe_women0))/shoesize_delta
shoesize_boys(n) units=[1;inch]  shoe_boys0 + n shoesize_delta ; \
                                (shoesize_boys+(-shoe_boys0))/shoesize_delta
shoesize_girls(n) units=[1;inch] shoe_girls0 + n shoesize_delta ; \
                                (shoesize_girls+(-shoe_girls0))/shoesize_delta

# European shoe size.  According to
#      http://www.shoeline.com/footnotes/shoeterm.shtml
# shoe sizes in Europe are measured with Paris points which simply measure
# the length of the shoe.

europeshoesize          2|3 cm

#
# USA slang units
#

buck                    US$
fin                     5 US$
sawbuck                 10 US$
usgrand                 1000 US$
greenback               US$
key                     kg           # usually of marijuana, 60's
lid                     1 oz         # Another 60's weed unit
footballfield           usfootballfield
usfootballfield         100 yards
canadafootballfield     110 yards    # And 65 yards wide
marathon                26 miles + 385 yards

#
# British
#

# The length measure in the UK was defined by a bronze bar manufactured in
# 1844.  Various conversions were sanctioned for convenience at different
# times, which makes conversions before 1963 a confusing matter.  Apparently
# previous conversions were never explicitly revoked.  Four different
# conversion factors appear below.  Multiply them times an imperial length
# units as desired.  The Weights and Measures Act of 1963 switched the UK away
# from their bronze standard and onto a definition of the yard in terms of the
# meter.  This happened after an international agreement in 1959 to align the
# world's measurement systems.

UK                      UKlength_SJJ
UK-                     UK
british-                UK

UKlength_B            0.9143992 meter / yard  # Benoit found the yard to be
                                              #   0.9143992 m at a weights and
                                              #   measures conference around
                                              #   1896.   Legally sanctioned
                                              #   in 1898.
UKlength_SJJ          0.91439841 meter / yard # In 1922, Seers, Jolly and
                                              #   Johnson found the yard to be
                                              #   0.91439841 meters.
                                              #   Used starting in the 1930's.
UKlength_K              meter / 39.37079 inch # In 1816 Kater found this ratio
                                              #   for the meter and inch.  This
                                              #   value was used as the legal
                                              #   conversion ratio when the
                                              #   metric system was legalized
                                              #   for contract in 1864.
UKlength_C            meter / 1.09362311 yard # In 1866 Clarke found the meter
                                              #   to be 1.09362311 yards.  This
                                              #   conversion was legalized
                                              #   around 1878.
brnauticalmile          6080 ft               # Used until 1970 when the UK
brknot                  brnauticalmile / hr   #   switched to the international
admiraltymile           brnauticalmile        #   nautical mile.
admiraltyknot           brknot
seamile                 6000 ft
shackle                 15 fathoms            # Adopted 1949 by British navy

# British Imperial weight is mostly the same as US weight.  A few extra
# units are added here.

clove                   7 lb
stone                   14 lb
tod                     28 lb
brquarterweight         1|4 brhundredweight
brhundredweight         8 stone
longhundredweight       brhundredweight
longton                 20 brhundredweight
brton                   longton

# British Imperial volume measures

brminim                 1|60 brdram
brscruple               1|3 brdram
fluidscruple            brscruple
brdram                  1|8 brfloz
brfluidounce            1|20 brpint
brfloz                  brfluidounce
brgill                  1|4 brpint
brpint                  1|2 brquart
brquart                 1|4 brgallon
brgallon                4.54609 l      # The British Imperial gallon was
                                       # defined in 1824 to be the volume of
                                       # water which weighed 10 pounds at 62
                                       # deg F with a pressure of 30 inHg.
                                       # It was also defined as 277.274 in^3,
                                       # Which is slightly in error.  In
                                       # 1963 it was defined to be the volume
                                       # occupied by 10 pounds of distilled
                                       # water of density 0.998859 g/ml weighed
                                       # in air of density 0.001217 g/ml
                                       # against weights of density 8.136 g/ml.
                                       # This gives a value of approximately
                                       # 4.5459645 liters, but the old liter
                                       # was in force at this time.  In 1976
                                       # the definition was changed to exactly
                                       # 4.54609 liters using the new
                                       # definition of the liter (1 dm^3).
brbarrel                36 brgallon    # Used for beer
brbushel                8 brgallon
brheapedbushel          1.278 brbushel
brquarter               8 brbushel
brchaldron              36 brbushel

# Obscure British volume measures.  These units are generally traditional
# measures whose definitions have fluctuated over the years.  Often they
# depended on the quantity being measured.  They are given here in terms of
# British Imperial measures.  For example, the puncheon may have historically
# been defined relative to the wine gallon or beer gallon or ale gallon
# rather than the British Imperial gallon.

bag                     4 brbushel
bucket                  4 brgallon
kilderkin               2 brfirkin
last                    40 brbushel
noggin                  brgill
pottle                  0.5 brgallon
pin                     4.5 brgallon
puncheon                72 brgallon
seam                    8 brbushel
coomb                   4 brbushel
boll                    6 brbushel
firlot                  1|4 boll
brfirkin                9 brgallon     # Used for ale and beer
cran                    37.5 brgallon  # measures herring, about 750 fish
brwinehogshead          52.5 brgallon  # This value is approximately equal
brhogshead              brwinehogshead #   to the old wine hogshead of 63
                                       #   wine gallons.  This adjustment
                                       #   is listed in the OED and in
                                       #   "The Weights and Measures of
                                       #   England" by R. D. Connor
brbeerhogshead          54 brgallon
brbeerbutt              2 brbeerhogshead
registerton             100 ft^3  # Used for internal capacity of ships
shippington             40 ft^3   # Used for ship's cargo freight or timber
brshippington           42 ft^3   #
freightton            shippington # Both register ton and shipping ton derive
                                  # from the "tun cask" of wine.
displacementton         35 ft^3   # Approximate volume of a longton weight of
                                  # sea water.  Measures water displaced by
                                  # ships.
waterton                224 brgallon
strike                  70.5 l    # 16th century unit, sometimes
                                  #   defined as .5, 2, or 4 bushels
                                  #   depending on the location.  It
                                  #   probably doesn't make a lot of
                                  #   sense to define in terms of imperial
                                  #   bushels.  Zupko gives a value of
                                  #   2 Winchester grain bushels or about
                                  #   70.5 liters.
amber                   4 brbushel# Used for dry and liquid capacity [18]

# British volume measures with "imperial"

imperialminim           brminim
imperialscruple         brscruple
imperialdram            brdram
imperialfluidounce      brfluidounce
imperialfloz            brfloz
imperialgill            brgill
imperialpint            brpint
imperialquart           brquart
imperialgallon          brgallon
imperialbarrel          brbarrel
imperialbushel          brbushel
imperialheapedbushel    brheapedbushel
imperialquarter         brquarter
imperialchaldron        brchaldron
imperialwinehogshead    brwinehogshead
imperialhogshead        brhogshead
imperialbeerhogshead    brbeerhogshead
imperialbeerbutt        brbeerbutt
imperialfirkin          brfirkin

# obscure British lengths

barleycorn              1|3 UKinch   # Given in Realm of Measure as the
                                     # difference between successive shoe sizes
nail                    1|16 UKyard  # Originally the width of the thumbnail,
                                     #   or 1|16 ft.  This took on the general
                                     #   meaning of 1|16 and settled on the
                                     #   nail of a yard or 1|16 yards as its
                                     #   final value.  [12]
UKpole                  16.5 UKft    # This was 15 Saxon feet, the Saxon
rope                    20 UKft      #   foot (aka northern foot) being longer
englishell              45 UKinch
flemishell              27 UKinch
ell                     englishell   # supposed to be measure from elbow to
                                     #   fingertips
span                    9 UKinch     # supposed to be distance from thumb
                                     #   to pinky with full hand extension
goad                    4.5 UKft     # used for cloth, possibly named after the
                                     #   stick used for prodding animals.

# misc obscure British units

hide                    120 acre  # English unit of land area dating to the 7th
                                  #   century, originally the amount of land
                                  #   that a single plowman could cultivate,
                                  #   which varied from 60-180 acres regionally.
                                  #   Standardized at Normon conquest.
virgate                 1|4 hide
nook                    1|2 virgate
rood                    furlong rod  # Area of a strip a rod by a furlong
englishcarat            troyounce/151.5 # Originally intended to be 4 grain
                                        #   but this value ended up being
                                        #   used in the London diamond market
mancus                  2 oz
mast                    2.5 lb
nailkeg                 100 lbs
basebox                 31360 in^2      # Used in metal plating

# alternate spellings

gramme                  gram
litre                   liter
dioptre                 diopter
sulphur                 sulfur

#
# Units derived the human body (may not be very accurate)
#

geometricpace           5 ft   # distance between points where the same
                               # foot hits the ground
pace                    2.5 ft # distance between points where alternate
                               # feet touch the ground
USmilitarypace          30 in  # United States official military pace
USdoubletimepace        36 in  # United States official doubletime pace
fingerbreadth           7|8 in # The finger is defined as either the width
fingerlength            4.5 in #   or length of the finger
finger                  fingerbreadth
palmwidth               hand   # The palm is a unit defined as either the width
palmlength              8 in   #   or the length of the hand
hand                    4 inch # width of hand
shaftment               6 inch # Distance from tip of outstretched thumb to the
                               #   opposite side of the palm of the hand.  The
                               #   ending -ment is from the old English word
                               #   for hand. [18]
smoot              5 ft + 7 in # Created as part of an MIT fraternity prank.
                               #   In 1958 Oliver Smoot was used to measure
                               #   the length of the Harvard Bridge, which was
                               #   marked off in Smoot lengths.  These
                               #   markings have been maintained on the bridge
                               #   since then and repainted by subsequent
                               #   incoming fraternity members.  During a
                               #   bridge renovation the new sidewalk was
                               #   scored every Smoot rather than at the
                               #   customary 6 ft spacing.
tomcruise       5 ft + 7.75 in # Height of Tom Cruise

#
# Cooking measures
#

# Common abbreviations

tbl                     tablespoon
tbsp                    tablespoon
tblsp                   tablespoon
Tb                      tablespoon
tsp                     teaspoon
saltspoon               1|4 tsp

# US measures

uscup                   8 usfloz
ustablespoon            1|16 uscup
usteaspoon              1|3 ustablespoon
ustbl                   ustablespoon
ustbsp                  ustablespoon
ustblsp                 ustablespoon
ustsp                   usteaspoon
metriccup               250 ml
stickbutter             1|4 lb            # Butter in the USA is sold in one
                                          # pound packages that contain four
                                          # individually wrapped pieces.  The
                                          # pieces are marked into tablespoons,
                                          # making it possible to measure out
                                          # butter by volume by slicing the
                                          # butter.

legalcup                240 ml            # The cup used on nutrition labeling
legaltablespoon         1|16 legalcup
legaltbsp               legaltablespoon

# Scoop size.  Ice cream scoops in the US are marked with numbers
# indicating the number of scoops required to fill a US quart.

scoop(n)  units=[1;cup] domain=[4,100] range=[0.04,1] \
           32 usfloz / n ; 32 usfloz / scoop


# US can sizes.

number1can              10 usfloz
number2can              19 usfloz
number2.5can            3.5 uscups
number3can              4 uscups
number5can              7 uscups
number10can             105 usfloz

# British measures

brcup                   1|2 brpint
brteacup                1|3 brpint
brtablespoon            15 ml             # Also 5|8 brfloz, approx 17.7 ml
brteaspoon              1|3 brtablespoon  # Also 1|4 brtablespoon
brdessertspoon          2 brteaspoon
dessertspoon            brdessertspoon
dsp                     dessertspoon
brtsp                   brteaspoon
brtbl                   brtablespoon
brtbsp                  brtablespoon
brtblsp                 brtablespoon

# Australian

australiatablespoon     20 ml
austbl                  australiatablespoon
austbsp                 australiatablespoon
austblsp                australiatablespoon
australiateaspoon       1|4 australiatablespoon
austsp                  australiateaspoon

# Italian

etto                    100 g          # Used for buying items like meat and
etti                    etto           #   cheese.

# Chinese

catty                   0.5 kg
oldcatty                4|3 lbs        # Before metric conversion.
tael                    1|16 oldcatty  # Should the tael be defined both ways?
mace                    0.1 tael
oldpicul                100 oldcatty
picul                   100 catty      # Chinese usage

# Indian

seer                    14400 grain    # British Colonial standard
ser                     seer
maund                   40 seer
pakistanseer            1 kg
pakistanmaund           40 pakistanseer
chittak                 1|16 seer
tola                    1|5 chittak
ollock                  1|4 liter      # Is this right?

# Japanese

japancup                200 ml

# densities of cooking ingredients from The Cake Bible by Rose Levy Beranbaum
# so you can convert '2 cups sugar' to grams, for example, or in the other
# direction grams could be converted to 'cup flour_scooped'.

butter                  8 oz/uscup
butter_clarified        6.8 oz/uscup
cocoa_butter            9 oz/uscup
shortening              6.75 oz/uscup   # vegetable shortening
oil                     7.5 oz/uscup
cakeflour_sifted        3.5 oz/uscup    # The density of flour depends on the
cakeflour_spooned       4 oz/uscup      # measuring method.  "Scooped",  or
cakeflour_scooped       4.5 oz/uscup    # "dip and sweep" refers to dipping a
flour_sifted            4 oz/uscup      # measure into a bin, and then sweeping
flour_spooned           4.25 oz/uscup   # the excess off the top.  "Spooned"
flour_scooped           5 oz/uscup      # means to lightly spoon into a measure
breadflour_sifted       4.25 oz/uscup   # and then sweep the top.  Sifted means
breadflour_spooned      4.5 oz/uscup    # sifting the flour directly into a
breadflour_scooped      5.5 oz/uscup    # measure and then sweeping the top.
cornstarch              120 grams/uscup
dutchcocoa_sifted       75 g/uscup      # These are for Dutch processed cocoa
dutchcocoa_spooned      92 g/uscup
dutchcocoa_scooped      95 g/uscup
cocoa_sifted            75 g/uscup      # These are for nonalkalized cocoa
cocoa_spooned           82 g/uscup
cocoa_scooped           95 g/uscup
heavycream              232 g/uscup
milk                    242 g/uscup
sourcream               242 g/uscup
molasses                11.25 oz/uscup
cornsyrup               11.5 oz/uscup
honey                   11.75 oz/uscup
sugar                   200 g/uscup
powdered_sugar          4 oz/uscup
brownsugar_light        217 g/uscup     # packed
brownsugar_dark         239 g/uscup

baking_powder           4.6 grams / ustsp
salt                    6 g / ustsp
koshersalt              2.8 g / ustsp   # Diamond Crystal kosher salt
koshersalt_morton       4.8 g / ustsp   # Morton kosher salt
                                        # Values are from the nutrition info
                                        # on the packages


# Egg weights and volumes for a USA large egg

egg                     50 grams        # without shell
eggwhite                30 grams
eggyolk                 18.6 grams
eggvolume               3 ustablespoons + 1|2 ustsp
eggwhitevolume          2 ustablespoons
eggyolkvolume           3.5 ustsp

# Alcohol density

ethanoldensity          0.7893 g/cm^3   # From CRC Handbook, 91st Edition
alcoholdensity          ethanoldensity

#
# Density measures.  Density has traditionally been measured on a variety of
# bizarre nonlinear scales.
#

# Density of a sugar syrup is frequently measured in candy making procedures.
# In the USA the boiling point of the syrup is measured.  Some recipes instead
# specify the density using degrees Baume.  Conversion between degrees Baume
# and the boiling point measure has proved elusive.  This table appeared in one
# text, and provides a fragmentary relationship to the concentration.
#
# temp(C)  conc (%)
#   100      30
#   101      40
#   102      50
#   103      60
#   106      70
#   112      80
#   123      90
#   140      95
#   151      97
#   160      98.2
#   166      99.5
#   171      99.6
#
# The best source identified to date came from "Boiling point elevation of
# technical sugarcane solutions and its use in automatic pan boiling" by
# Michael Saska.  International Sugar Journal, 2002, 104, 1247, pp 500-507.
#
# But I'm using equation (3) which is credited to Starzak and Peacock,
# "Water activity coefficient in aqueous solutions of sucrose--A comprehensive
# data analysis.  Zuckerindustrie, 122, 380-387.  (I couldn't find this
# document.)
#
# Note that the range of validity is uncertain, but answers are in agreement
# with the above table all the way to 99.6.
#
# The original equation has a parameter for the boiling point of water, which
# of course varies with altitude.  It also includes various other model
# parameters.  The input is the molar concentration of sucrose in the solution,
# (moles sucrose) / (total moles).
#
# Bsp 3797.06 degC
# Csp 226.28 degC
# QQ -17638 J/mol
# asp -1.0038
# bsp -0.24653
# tbw 100 degC     # boiling point of water
# sugar_bpe_orig(x) ((1-QQ/R Bsp * x^2 (1+asp x + bsp x^2) (tbw + Csp) \
#           /(tbw+stdtemp)) /  (1+(tbw + Csp)/Bsp *ln(1-x))-1) * (tbw + Csp)
#
# To convert mass concentration (brix) to molar concentration
#
# sc(x)  (x / 342.3) / (( x/342.3) + (100-x)/18.02); \
#        100 sc 342.3|18.02 / (sc (342.3|18.02-1)+1)
#
# Here is a simplified version of this equation where the temperature of boiling
# water has been fixed at 100 degrees Celsius and the argument is now the
# concentration (brix).
#
# sugar_bpe(x) ((1+ 0.48851085 * sc(x)^2 (1+ -1.0038 sc(x) + -0.24653 sc(x)^2)) \
#                   / (1+0.08592964 ln(1-sc(x)))-1) 326.28 K
#
#
# The formula is not invertible, so to implement it in units we unfortunately
# must turn it into a table.

# This table gives the boiling point elevation as a function of the sugar syrup
# concentration expressed as a percentage.

sugar_conc_bpe[K] \
 0 0.0000   5 0.0788  10 0.1690  15 0.2729  20 0.3936  25 0.5351  \
30 0.7027  35 0.9036  40 1.1475  42 1.2599  44 1.3825  46 1.5165  \
48 1.6634  50 1.8249  52 2.0031  54 2.2005  56 2.4200  58 2.6651  \
60 2.9400  61 3.0902  62 3.2499  63 3.4198  64 3.6010  65 3.7944  \
66 4.0012  67 4.2227  68 4.4603  69 4.7156  70 4.9905  71 5.2870  \
72 5.6075  73 5.9546  74 6.3316  75 6.7417  76 7.1892  77 7.6786  \
78.0  8.2155  79.0  8.8061  80.0  9.4578  80.5  9.8092  81.0 10.1793  \
81.5 10.5693  82.0 10.9807  82.5 11.4152  83.0 11.8743  83.5 12.3601  \
84.0 12.8744  84.5 13.4197  85.0 13.9982  85.5 14.6128  86.0 15.2663  \
86.5 15.9620  87.0 16.7033  87.5 17.4943  88.0 18.3391  88.5 19.2424  \
89.0 20.2092  89.5 21.2452  90.0 22.3564  90.5 23.5493  91.0 24.8309  \
91.5 26.2086  92.0 27.6903  92.5 29.2839  93.0 30.9972  93.5 32.8374  \
94.0 34.8104  94.5 36.9195  95.0 39.1636  95.5 41.5348  96.0 44.0142  \
96.5 46.5668  97.0 49.1350  97.5 51.6347  98.0 53.9681  98.1 54.4091  \
98.2 54.8423  98.3 55.2692  98.4 55.6928  98.5 56.1174  98.6 56.5497  \
98.7 56.9999  98.8 57.4828  98.9 58.0206  99.0 58.6455  99.1 59.4062  \
99.2 60.3763  99.3 61.6706  99.4 63.4751  99.5 66.1062  99.6 70.1448  \
99.7 76.7867

# Using the brix table we can use this to produce a mapping from boiling point
# to density which makes all of the units interconvertible.  Because the brix
# table stops at 95 this approach works up to a boiling point elevation of 39 K
# or a boiling point of 139 C / 282 F, which is the "soft crack" stage in candy
# making.  The "hard crack" stage continues up to 310 F.

# Boiling point elevation
sugar_bpe(T) units=[K;g/cm^3] domain=[0,39.1636] range=[0.99717,1.5144619] \
               brix(~sugar_conc_bpe(T)); sugar_conc_bpe(~brix(sugar_bpe))
# Absolute boiling point (produces an absolute temperature)
sugar_bp(T) units=[K;g/cm^3] domain=[373.15,412.3136] \
                                         range=[0.99717,1.5144619] \
                        brix(~sugar_conc_bpe(T-tempC(100))) ;\
                        sugar_conc_bpe(~brix(sugar_bp))+tempC(100)

# In practice dealing with the absolute temperature is annoying because it is
# not possible to convert to a nested function, so you're stuck retyping the
# absolute temperature in Kelvins to convert to celsius or Fahrenheit.  To
# prevent this we supply definitions that build in the temperature conversion
# and produce results in the Fahrenheit and Celsius scales.  So using these
# measures, to convert 46 degrees Baume to a Fahrenheit boiling point:
#
#      You have: baume(45)
#      You want: sugar_bpF
#              239.05647
#
sugar_bpF(T) units=[1;g/cm^3] domain=[212,282.49448] range=[0.99717,1.5144619]\
                        brix(~sugar_conc_bpe(tempF(T)+-tempC(100))) ;\
                        ~tempF(sugar_conc_bpe(~brix(sugar_bpF))+tempC(100))
sugar_bpC(T) units=[1;g/cm^3] domain=[100,139.1636] range=[0.99717,1.5144619]\
                        brix(~sugar_conc_bpe(tempC(T)+-tempC(100))) ;\
                        ~tempC(sugar_conc_bpe(~brix(sugar_bpC))+tempC(100))

# Degrees Baume is used in European recipes to specify the density of a sugar
# syrup.  An entirely different definition is used for densities below
# 1 g/cm^3.  An arbitrary constant appears in the definition.  This value is
# equal to 145 in the US, but was according to [], the old scale used in
# Holland had a value of 144, and the new scale or Gerlach scale used 146.78.

baumeconst 145      # US value
baume(d) units=[1;g/cm^3] domain=[0,145) range=[1,) \
                          (baumeconst/(baumeconst+-d)) g/cm^3 ; \
                          (baume+((-g)/cm^3)) baumeconst / baume

# It's not clear if this value was ever used with negative degrees.
twaddell(x) units=[1;g/cm^3] domain=[-200,) range=[0,) \
                             (1 + 0.005 x) g / cm^3 ; \
                             200 (twaddell / (g/cm^3) +- 1)

# The degree quevenne is a unit for measuring the density of milk.
# Similarly it's unclear if negative values were allowed here.
quevenne(x) units=[1;g/cm^3] domain=[-1000,) range=[0,) \
                             (1 + 0.001 x) g / cm^3 ; \
                             1000 (quevenne / (g/cm^3) +- 1)

# Degrees brix measures sugar concentration by weigh as a percentage, so a
# solution that is 3 degrees brix is 3% sugar by weight.  This unit was named
# after Adolf Brix who invented a hydrometer that read this percentage
# directly.  This data is from Table 114 of NIST Circular 440, "Polarimetry,
# Saccharimetry and the Sugars".  It gives apparent specific gravity at 20
# degrees Celsius of various sugar concentrations.  As rendered below this
# data is converted to apparent density at 20 degrees Celsius using the
# density figure for water given in the same NIST reference.  They use the
# word "apparent" to refer to measurements being made in air with brass
# weights rather than vacuum.

brix[0.99717g/cm^3]\
    0 1.00000  1 1.00390  2 1.00780  3 1.01173  4 1.01569  5 1.01968 \
    6 1.02369  7 1.02773  8 1.03180  9 1.03590 10 1.04003 11 1.04418 \
   12 1.04837 13 1.05259 14 1.05683 15 1.06111 16 1.06542 17 1.06976 \
   18 1.07413 19 1.07853 20 1.08297 21 1.08744 22 1.09194 23 1.09647 \
   24 1.10104 25 1.10564 26 1.11027 27 1.11493 28 1.11963 29 1.12436 \
   30 1.12913 31 1.13394 32 1.13877 33 1.14364 34 1.14855 35 1.15350 \
   36 1.15847 37 1.16349 38 1.16853 39 1.17362 40 1.17874 41 1.18390 \
   42 1.18910 43 1.19434 44 1.19961 45 1.20491 46 1.21026 47 1.21564 \
   48 1.22106 49 1.22652 50 1.23202 51 1.23756 52 1.24313 53 1.24874 \
   54 1.25439 55 1.26007 56 1.26580 57 1.27156 58 1.27736 59 1.28320 \
   60 1.28909 61 1.29498 62 1.30093 63 1.30694 64 1.31297 65 1.31905 \
   66 1.32516 67 1.33129 68 1.33748 69 1.34371 70 1.34997 71 1.35627 \
   72 1.36261 73 1.36900 74 1.37541 75 1.38187 76 1.38835 77 1.39489 \
   78 1.40146 79 1.40806 80 1.41471 81 1.42138 82 1.42810 83 1.43486 \
   84 1.44165 85 1.44848 86 1.45535 87 1.46225 88 1.46919 89 1.47616 \
   90 1.48317 91 1.49022 92 1.49730 93 1.50442 94 1.51157 95 1.51876

# Density measure invented by the American Petroleum Institute.  Lighter
# petroleum products are more valuable, and they get a higher API degree.
#
# The intervals of range and domain should be open rather than closed.
#
apidegree(x) units=[1;g/cm^3] domain=[-131.5,) range=[0,) \
                              141.5 g/cm^3 / (x+131.5) ; \
                              141.5 (g/cm^3) / apidegree + (-131.5)
#
# Average densities of various woods (dried)
# Data from The Wood Database https://www.wood-database.com
#

# North American Hardwoods

wood_cherry             35 lb/ft^3
wood_redoak             44 lb/ft^3
wood_whiteoak           47 lb/ft^3
wood_blackwalnut        38 lb/ft^3
wood_walnut             wood_blackwalnut
wood_birch              43 lb/ft^3
wood_hardmaple          44 lb/ft^3

wood_bigleafmaple       34 lb/ft^3
wood_boxeldermaple      30 lb/ft^3
wood_redmaple           38 lb/ft^3
wood_silvermaple        33 lb/ft^3
wood_stripedmaple       32 lb/ft^3
wood_softmaple         (wood_bigleafmaple \
                      + wood_boxeldermaple \
                      + wood_redmaple \
                      + wood_silvermaple \
                      + wood_stripedmaple) / 5
wood_poplar             29 lb/ft^3
wood_beech              45 lb/ft^3

# North American Softwoods

wood_jeffreypine        28 lb/ft^3
wood_ocotepine          44 lb/ft^3
wood_ponderosapine      28 lb/ft^3

wood_loblollypine       35 lb/ft^3
wood_longleafpine       41 lb/ft^3
wood_shortleafpine      35 lb/ft^3
wood_slashpine          41 lb/ft^3
wood_yellowpine        (wood_loblollypine \
                      + wood_longleafpine \
                      + wood_shortleafpine \
                      + wood_slashpine) / 4
wood_redpine            34 lb/ft^3

wood_easternwhitepine   25 lb/ft^3
wood_westernwhitepine   27 lb/ft^3
wood_whitepine         (wood_easternwhitepine + wood_westernwhitepine) / 2

wood_douglasfir         32 lb/ft^3

wood_blackspruce        28 lb/ft^3
wood_engelmannspruce    24 lb/ft^3
wood_redspruce          27 lb/ft^3
wood_sitkaspruce        27 lb/ft^3
wood_whitespruce        27 lb/ft^3
wood_spruce            (wood_blackspruce \
                      + wood_engelmannspruce \
                      + wood_redspruce \
                      + wood_sitkaspruce \
                      + wood_whitespruce) / 5

# Other woods 

wood_basswood           26 lb/ft^3
wood_balsa               9 lb/ft^3
wood_ebony_gaboon       60 lb/ft^3
wood_ebony_macassar     70 lb/ft^3
wood_mahogany           37 lb/ft^3   # True (Honduran) mahogany,
                                     # Swietenia macrophylla
wood_teak               41 lb/ft^3   
wood_rosewood_brazilian 52 lb/ft^3
wood_rosewood_honduran  64 lb/ft^3
wood_rosewood_indian    52 lb/ft^3
wood_cocobolo           69 lb/ft^3          
wood_bubinga            56 lb/ft^3
wood_zebrawood          50 lb/ft^3
wood_koa                38 lb/ft^3
wood_snakewood          75.7 lb/ft^3
wood_lignumvitae        78.5 lb/ft^3
wood_blackwood          79.3 lb/ft^3
wood_blackironwood      84.5 lb/ft^3 # Krugiodendron ferreum, listed
                                     #   in database as the heaviest wood

#
# Modulus of elasticity of selected woods.
# Data from The Wood Database https://www.wood-database.com
#

# North American Hardwoods

wood_mod_beech              1.720e6 lbf/in^2
wood_mod_birchyellow        2.010e6 lbf/in^2
wood_mod_birch              wood_mod_birchyellow
wood_mod_cherry             1.490e6 lbf/in^2
wood_mod_hardmaple          1.830e6 lbf/in^2

wood_mod_bigleafmaple       1.450e6 lbf/in^2
wood_mod_boxeldermaple      1.050e6 lbf/in^2
wood_mod_redmaple           1.640e6 lbf/in^2
wood_mod_silvermaple        1.140e6 lbf/in^2
wood_mod_softmaple         (wood_mod_bigleafmaple \
                          + wood_mod_boxeldermaple \
                          + wood_mod_redmaple \
                          + wood_mod_silvermaple) / 4

wood_mod_redoak             1.761e6 lbf/in^2
wood_mod_whiteoak           1.762e6 lbf/in^2
wood_mod_poplar             1.580e6 lbf/in^2
wood_mod_blackwalnut        1.680e6 lbf/in^2
wood_mod_walnut             wood_mod_blackwalnut

# North American Softwoods

wood_mod_jeffreypine        1.240e6 lbf/in^2
wood_mod_ocotepine          2.209e6 lbf/in^2
wood_mod_ponderosapine      1.290e6 lbf/in^2

wood_mod_loblollypine       1.790e6 lbf/in^2
wood_mod_longleafpine       1.980e6 lbf/in^2
wood_mod_shortleafpine      1.750e6 lbf/in^2
wood_mod_slashpine          1.980e6 lbf/in^2
wood_mod_yellowpine        (wood_mod_loblollypine \
                          + wood_mod_longleafpine \
                          + wood_mod_shortleafpine \
                          + wood_mod_slashpine) / 4

wood_mod_redpine            1.630e6 lbf/in^2

wood_mod_easternwhitepine   1.240e6 lbf/in^2
wood_mod_westernwhitepine   1.460e6 lbf/in^2
wood_mod_whitepine         (wood_mod_easternwhitepine + \
                            wood_mod_westernwhitepine) / 2

wood_mod_douglasfir         1.765e6  lbf/in^2

wood_mod_blackspruce        1.523e6 lbf/in^2
wood_mod_englemannspruce    1.369e6 lbf/in^2
wood_mod_redspruce          1.560e6 lbf/in^2
wood_mod_sitkaspruce        1.600e6 lbf/in^2
wood_mod_whitespruce        1.315e6 lbf/in^2
wood_mod_spruce            (wood_mod_blackspruce \
                          + wood_mod_englemannspruce \
                          + wood_mod_redspruce + wood_mod_sitkaspruce \
                          + wood_mod_whitespruce) / 5

# Other woods 

wood_mod_balsa              0.538e6 lbf/in^2
wood_mod_basswood           1.460e6 lbf/in^2
wood_mod_blackwood          2.603e6 lbf/in^2  # African, Dalbergia melanoxylon
wood_mod_bubinga            2.670e6 lbf/in^2
wood_mod_cocobolo           2.712e6 lbf/in^2
wood_mod_ebony_gaboon       2.449e6 lbf/in^2
wood_mod_ebony_macassar     2.515e6 lbf/in^2
wood_mod_blackironwood      2.966e6 lbf/in^2  # Krugiodendron ferreum
wood_mod_koa                1.503e6 lbf/in^2
wood_mod_lignumvitae        2.043e6 lbf/in^2
wood_mod_mahogany           1.458e6 lbf/in^2  # True (Honduran) mahogany,
                                              # Swietenia macrophylla
wood_mod_rosewood_brazilian 2.020e6 lbf/in^2
wood_mod_rosewood_honduran  3.190e6 lbf/in^2
wood_mod_rosewood_indian    1.668e6 lbf/in^2
wood_mod_snakewood          3.364e6 lbf/in^2
wood_mod_teak               1.781e6 lbf/in^2
wood_mod_zebrawood          2.374e6 lbf/in^2

#
# Area of countries and other regions.  This is the "total area" which
# includes land and water areas within international boundaries and
# coastlines.  Data from January, 2019.  
#
# except as noted, sources are
# https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_area
# US Central Intelligence Agency: The World Factbook
# https://www.cia.gov/the-world-factbook/

area_russia              17098246 km^2
area_antarctica          14000000 km^2
# area_canada is covered below as sum of province and territory areas
area_china                9596961 km^2
# area_unitedstates is covered below as sum of state areas
# includes only the 50 states and District of Columbia
area_us                   area_unitedstates
area_brazil               8515767 km^2
area_australia            7692024 km^2
# area_europeanunion is covered below as sum of member areas
area_india                3287263 km^2
area_argentina            2780400 km^2
area_kazakhstan           2724900 km^2
area_algeria              2381741 km^2
area_drcongo              2344858 km^2
area_greenland            2166086 km^2
area_saudiarabia          2149690 km^2
area_mexico               1964375 km^2
area_indonesia            1910931 km^2
area_sudan                1861484 km^2
area_libya                1759540 km^2
area_iran                 1648195 km^2
area_mongolia             1564110 km^2
area_peru                 1285216 km^2
area_chad                 1284000 km^2
area_niger                1267000 km^2
area_angola               1246700 km^2
area_mali                 1240192 km^2
area_southafrica          1221037 km^2
area_colombia             1141748 km^2
area_ethiopia             1104300 km^2
area_bolivia              1098581 km^2
area_mauritania           1030700 km^2
area_egypt                1002450 km^2
area_tanzania              945087 km^2
area_nigeria               923768 km^2
area_venezuela             916445 km^2
area_pakistan              881912 km^2
area_namibia               825615 km^2
area_mozambique            801590 km^2
area_turkey                783562 km^2
area_chile                 756102 km^2
area_zambia                752612 km^2
area_myanmar               676578 km^2
area_burma                area_myanmar
area_afghanistan           652230 km^2
area_southsudan            644329 km^2
area_france                640679 km^2
area_somalia               637657 km^2
area_centralafrica         622984 km^2
area_ukraine               603500 km^2
area_crimea                 27000 km^2  # occupied by Russia; included in
                                        # (Encyclopedia Britannica)
area_madagascar            587041 km^2
area_botswana              581730 km^2
area_kenya                 580367 km^2
area_yemen                 527968 km^2
area_thailand              513120 km^2
area_spain                 505992 km^2
area_turkmenistan          488100 km^2
area_cameroon              475422 km^2
area_papuanewguinea        462840 km^2
area_sweden                450295 km^2
area_uzbekistan            447400 km^2
area_morocco               446550 km^2
area_iraq                  438317 km^2
area_paraguay              406752 km^2
area_zimbabwe              390757 km^2
area_japan                 377973 km^2
area_germany               357114 km^2
area_congorepublic         342000 km^2
area_finland               338424 km^2
area_vietnam               331212 km^2
area_malaysia              330803 km^2
area_norway                323802 km^2
area_ivorycoast            322463 km^2
area_poland                312696 km^2
area_oman                  309500 km^2
area_italy                 301339 km^2
area_philippines           300000 km^2
area_ecuador               276841 km^2
area_burkinafaso           274222 km^2
area_newzealand            270467 km^2
area_gabon                 267668 km^2
area_westernsahara         266000 km^2
area_guinea                245857 km^2
# area_unitedkingdom is covered below
area_uganda                241550 km^2
area_ghana                 238533 km^2
area_romania               238397 km^2
area_laos                  236800 km^2
area_guyana                214969 km^2
area_belarus               207600 km^2
area_kyrgyzstan            199951 km^2
area_senegal               196722 km^2
area_syria                 185180 km^2
area_golanheights            1150 km^2  # occupied by Israel; included in 
                                        # Syria (Encyclopedia Britannica)
area_cambodia              181035 km^2
area_uruguay               176215 km^2
area_somaliland            176120 km^2
area_suriname              163820 km^2
area_tunisia               163610 km^2
area_bangladesh            147570 km^2
area_nepal                 147181 km^2
area_tajikistan            143100 km^2
area_greece                131990 km^2
area_nicaragua             130373 km^2
area_northkorea            120540 km^2
area_malawi                118484 km^2
area_eritrea               117600 km^2
area_benin                 114763 km^2
area_honduras              112492 km^2
area_liberia               111369 km^2
area_bulgaria              110879 km^2
area_cuba                  109884 km^2
area_guatemala             108889 km^2
area_iceland               103000 km^2
area_southkorea            100210 km^2
area_hungary                93028 km^2
area_portugal               92090 km^2
area_jordan                 89342 km^2
area_serbia                 88361 km^2
area_azerbaijan             86600 km^2
area_austria                83871 km^2
area_uae                    83600 km^2
area_czechia                78865 km^2
area_czechrepublic         area_czechia
area_panama                 75417 km^2
area_sierraleone            71740 km^2
area_ireland                70273 km^2
area_georgia                69700 km^2
area_srilanka               65610 km^2
area_lithuania              65300 km^2
area_latvia                 64559 km^2
area_togo                   56785 km^2
area_croatia                56594 km^2
area_bosnia                 51209 km^2
area_costarica              51100 km^2
area_slovakia               49037 km^2
area_dominicanrepublic      48671 km^2
area_estonia                45227 km^2
area_denmark                43094 km^2
area_netherlands            41850 km^2
area_switzerland            41284 km^2
area_bhutan                 38394 km^2
area_taiwan                 36193 km^2
area_guineabissau           36125 km^2
area_moldova                33846 km^2
area_belgium                30528 km^2
area_lesotho                30355 km^2
area_armenia                29743 km^2
area_solomonislands         28896 km^2
area_albania                28748 km^2
area_equitorialguinea       28051 km^2
area_burundi                27834 km^2
area_haiti                  27750 km^2
area_rwanda                 26338 km^2
area_northmacedonia         25713 km^2
area_djibouti               23200 km^2
area_belize                 22966 km^2
area_elsalvador             21041 km^2
area_israel                 20770 km^2
area_slovenia               20273 km^2
area_fiji                   18272 km^2
area_kuwait                 17818 km^2
area_eswatini               17364 km^2
area_easttimor              14919 km^2
area_bahamas                13943 km^2
area_montenegro             13812 km^2
area_vanatu                 12189 km^2
area_qatar                  11586 km^2
area_gambia                 11295 km^2
area_jamaica                10991 km^2
area_kosovo                 10887 km^2
area_lebanon                10452 km^2
area_cyprus                  9251 km^2
area_puertorico              9104 km^2  # United States territory; not included
                                        #   in United States area
area_westbank                5860 km^2  # (CIA World Factbook)
area_hongkong                2755 km^2
area_luxembourg              2586 km^2
area_singapore                716 km^2
area_gazastrip                360 km^2  # (CIA World Factbook)
area_malta                    316 km^2  # smallest EU country
area_liechtenstein            160 km^2
area_monaco                     2.02 km^2
area_vaticancity                0.44 km^2

# Members as of 1 Feb 2020
area_europeanunion        area_austria + area_belgium + area_bulgaria \
                        + area_croatia + area_cyprus + area_czechia + area_denmark \
                        + area_estonia + area_finland + area_france + area_germany \
                        + area_greece + area_hungary + area_ireland + area_italy \
                        + area_latvia + area_lithuania + area_luxembourg \
                        + area_malta + area_netherlands + area_poland \
                        + area_portugal + area_romania + area_slovakia \
                        + area_slovenia + area_spain + area_sweden
area_eu                   area_europeanunion

#
# Areas of the individual US states
#
# https://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_area
#
# United States Summary: 2010, Population and Housing Unit Counts, Table 18, p. 41
# Issued September 2012

area_alaska               1723336.8 km^2
area_texas                 695661.6 km^2
area_california            423967.4 km^2
area_montana               380831.1 km^2
area_newmexico             314917.4 km^2
area_arizona               295233.5 km^2
area_nevada                286379.7 km^2
area_colorado              269601.4 km^2
area_oregon                254799.2 km^2
area_wyoming               253334.5 km^2
area_michigan              250486.8 km^2
area_minnesota             225162.8 km^2
area_utah                  219881.9 km^2
area_idaho                 216442.6 km^2
area_kansas                213100.0 km^2
area_nebraska              200329.9 km^2
area_southdakota           199728.7 km^2
area_washington            184660.8 km^2
area_northdakota           183107.8 km^2
area_oklahoma              181037.2 km^2
area_missouri              180540.3 km^2
area_florida               170311.7 km^2
area_wisconsin             169634.8 km^2
area_georgia_us            153910.4 km^2
area_illinois              149995.4 km^2
area_iowa                  145745.9 km^2
area_newyork               141296.7 km^2
area_northcarolina         139391.0 km^2
area_arkansas              137731.8 km^2
area_alabama               135767.4 km^2
area_louisiana             135658.7 km^2
area_mississippi           125437.7 km^2
area_pennsylvania          119280.2 km^2
area_ohio                  116097.7 km^2
area_virginia              110786.6 km^2
area_tennessee             109153.1 km^2
area_kentucky              104655.7 km^2
area_indiana                94326.2 km^2
area_maine                  91633.1 km^2
area_southcarolina          82932.7 km^2
area_westvirginia           62755.5 km^2
area_maryland               32131.2 km^2
area_hawaii                 28313.0 km^2
area_massachusetts          27335.7 km^2
area_vermont                24906.3 km^2
area_newhampshire           24214.2 km^2
area_newjersey              22591.4 km^2
area_connecticut            14357.4 km^2
area_delaware                6445.8 km^2
area_rhodeisland             4001.2 km^2
area_districtofcolumbia       177.0 km^2

area_unitedstates          area_alabama + area_alaska + area_arizona \
                         + area_arkansas + area_california + area_colorado \
                         + area_connecticut + area_delaware \
                         + area_districtofcolumbia + area_florida \
                         + area_georgia_us + area_hawaii + area_idaho \
                         + area_illinois + area_indiana + area_iowa \
                         + area_kansas + area_kentucky + area_louisiana \
                         + area_maine + area_maryland + area_massachusetts \
                         + area_michigan + area_minnesota + area_mississippi \
                         + area_missouri + area_montana + area_nebraska \
                         + area_nevada + area_newhampshire + area_newjersey \
                         + area_newmexico + area_newyork + area_northcarolina \
                         + area_northdakota + area_ohio + area_oklahoma \
                         + area_oregon + area_pennsylvania + area_rhodeisland \
                         + area_southcarolina + area_southdakota \
                         + area_tennessee + area_texas + area_utah \
                         + area_vermont + area_virginia + area_washington \
                         + area_westvirginia + area_wisconsin + area_wyoming

# Total area of Canadian province and territories
#
# Statistics Canada, "Land and freshwater area, by province and territory",
# 2016-10-07:
#
# https://www150.statcan.gc.ca/n1/pub/11-402-x/2012000/chap/geo/tbl/tbl06-eng.htm

area_ontario                    1076395 km^2    # confederated 1867-Jul-01
area_quebec                     1542056 km^2    # confederated 1867-Jul-01
area_novascotia                 55284 km^2      # confederated 1867-Jul-01
area_newbrunswick               72908 km^2      # confederated 1867-Jul-01
area_canada_original            area_ontario + area_quebec + area_novascotia \
                                             + area_newbrunswick
area_manitoba                   647797 km^2     # confederated 1870-Jul-15
area_britishcolumbia            944735 km^2     # confederated 1871-Jul-20
area_princeedwardisland         5660 km^2       # confederated 1873-Jul-01
area_canada_additional          area_manitoba + area_britishcolumbia \
                                              + area_princeedwardisland
area_alberta                    661848 km^2     # confederated 1905-Sep-01
area_saskatchewan               651036 km^2     # confederated 1905-Sep-01
area_newfoundlandandlabrador    405212 km^2     # confederated 1949-Mar-31
area_canada_recent              area_alberta + area_saskatchewan \
                                             + area_newfoundlandandlabrador
area_canada_provinces           area_canada_original + area_canada_additional \
                                                     + area_canada_recent
area_northwestterritories       1346106 km^2    # NT confederated 1870-Jul-15
area_yukon                      482443 km^2     # YT confederated 1898-Jun-13
area_nunavut                    2093190 km^2    # NU confederated 1999-Apr-01
area_canada_territories         area_northwestterritories + area_yukon \
                                              + area_nunavut
area_canada                     area_canada_provinces + area_canada_territories

# area-uk-countries.units - UK country (/province) total areas
# https://en.wikipedia.org/wiki/Countries_of_the_United_Kingdom#Statistics
# GB is official UK country code for some purposes but internally is a Kingdom
#
# areas from A Beginners Guide to UK Geography 2019 v1.0, Office for National Statistics
# England: country; 0927-Jul-12 united; 1603-Mar-24 union of crowns
area_england            132947.76 km^2
#
# Wales: 1282 conquered; 1535 union; principality until 2011
area_wales              21224.48 km^2
#
# England and Wales: nation; 1535 union
area_englandwales       area_england + area_wales
#
# Scotland: country; ~900 united; 1603-Mar-24 union of crowns
area_scotland           80226.36 km^2
#
# Great Britain: kingdom; excludes NI;
# 1707 Treaty and Acts of Union: union of parliaments
area_greatbritain       area_england + area_wales + area_scotland
area_gb                 area_greatbritain
#
# Northern Ireland: province; Ireland: 1177 Henry II lordship;
# 1542 Henry VIII kingdom; 1652 Cromwell commonwealth;
# 1691 William III kingdom; 1800 Acts of Union: UK of GB & Ireland;
# 1921 Irish Free State independent of UK
area_northernireland    14133.38 km^2
#
# United Kingdom of GB & NI: 1800 Acts of Union: UK of GB & Ireland;
# 1921 Irish Free State independent of UK
area_unitedkingdom      area_greatbritain + area_northernireland
area_uk                 area_unitedkingdom

#
# Units derived from imperial system
#

ouncedal                oz ft / s^2     # force which accelerates an ounce
                                        #    at 1 ft/s^2
poundal                 lb ft / s^2     # same thing for a pound
tondal                  longton ft / s^2    # and for a ton
pdl                     poundal
osi                     ounce force / inch^2   # used in aviation
psi                     pound force / inch^2
psia                    psi             # absolute pressure
                                        #   Note that gauge pressure can be given
                                        #   using the gaugepressure() and
                                        #   psig() nonlinear unit definitions
tsi                     ton force / inch^2
reyn                    psi sec
slug                    lbf s^2 / ft
slugf                   slug force
slinch                  lbf s^2 / inch  # Mass unit derived from inch second
slinchf                 slinch force    #   pound-force system.  Used in space
                                        #   applications where in/sec^2 was a
                                        #   natural acceleration measure.
geepound                slug
lbf                     lb force
tonf                    ton force
lbm                     lb
kip                     1000 lbf     # from kilopound
ksi                     kip / in^2
mil                     0.001 inch
thou                    0.001 inch
tenth                   0.0001 inch  # one tenth of one thousandth of an inch
millionth               1e-6 inch    # one millionth of an inch
circularinch            1|4 pi in^2  # area of a one-inch diameter circle
circleinch              circularinch #    A circle with diameter d inches has
                                     #    an area of d^2 circularinches
cylinderinch         circleinch inch # Cylinder h inch tall, d inches diameter
                                     #    has volume d^2 h cylinder inches
circularmil             1|4 pi mil^2 # area of one-mil diameter circle
cmil                    circularmil
cental                  100 pound
centner                 cental

# Shotgun gauge measures the inside diameter of the barrel by counting
# the number of spherical lead balls you can make to fit that barrel
# using a pound of lead.  Equivalently, this means that an n gauge gun
# has a bore diameter that fits a ball of lead that weighs 1|n pounds
 
shotgungauge(ga)        units=[1;m] domain=(0,] range=(0,] \
                        2 ~spherevol(1 pound / ga leaddensity) ; \
                        1 pound / leaddensity spherevol(shotgungauge/2)
shotgunga()             shotgungauge
caliber                 0.01 inch    # for measuring bullets

duty                    ft lbf
celo                    ft / s^2
jerk                    ft / s^3
australiapoint          0.01 inch    # The "point" is used to measure rainfall
                                     #   in Australia
sabin                   ft^2         # Measure of sound absorption equal to the
                                     #   absorbing power of one square foot of
                                     #   a perfectly absorbing material.  The
                                     #   sound absorptivity of an object is the
                                     #   area times a dimensionless
                                     #   absorptivity coefficient.
standardgauge          4 ft + 8.5 in # Standard width between railroad track
flag                   5 ft^2        # Construction term referring to sidewalk.
rollwallpaper          30 ft^2       # Area of roll of wall paper
fillpower              in^3 / ounce  # Density of down at standard pressure.
                                     #   The best down has 750-800 fillpower.
pinlength              1|16 inch     # A #17 pin is 17/16 in long in the USA.
buttonline             1|40 inch     # The line was used in 19th century USA
                                     #   to measure width of buttons.
beespace               1|4 inch      # Bees will fill any space that is smaller
                                     #   than the bee space and leave open
                                     #   spaces that are larger.  The size of
                                     #   the space varies with species.
diamond                8|5 ft        # Marking on US tape measures that is
                                     #   useful to carpenters who wish to place
                                     #   five studs in an 8 ft distance.  Note
                                     #   that the numbers appear in red every
                                     #   16 inches as well, giving six
                                     #   divisions in 8 feet.
retmaunit              1.75 in       # Height of rack mountable equipment.
U                      retmaunit     #   Equipment should be 1|32 inch narrower
RU                     U             #   than its U measurement indicates to
                                     #   allow for clearance, so 4U=(6+31|32)in
                                     #   RETMA stands for the former name of
                                     #   the standardizing organization, Radio
                                     #   Electronics Television Manufacturers
                                     #   Association.  This organization is now
                                     #   called the Electronic Industries
                                     #   Alliance (EIA) and the rack standard
                                     #   is specified in EIA RS-310-D.
count                  per pound     # For measuring the size of shrimp
flightlevel            100 ft        # Flight levels are used to ensure safe
FL                     flightlevel   #   vertical separation between aircraft
                                     #   despite variations in local air
                                     #   pressure.  Flight levels define
                                     #   altitudes based on a standard air
                                     #   pressure so that altimeter calibration
                                     #   is not needed.  This means that
                                     #   aircraft at separated flight levels
                                     #   are guaranteed to be separated.
                                     #   Hence the definition of 100 feet is
                                     #   a nominal, not true, measure.
                                     #   Customarily written with no space in
                                     #   the form FL290, which will not work in
                                     #   units.  But note "FL 290" will work.  

#
# Other units of work, energy, power, etc
#

# Calorie: approximate energy to raise a gram of water one degree celsius

calorie                 cal_th       # Default is the thermochemical calorie
cal                     calorie
calorie_th              4.184 J      # Thermochemical calorie, defined in 1930
thermcalorie            calorie_th   #   by Frederick Rossini as 4.1833 J to 
cal_th                  calorie_th   #   avoid difficulties associated with the 
                                     #   uncertainty in the heat capacity of 
                                     #   water.  In 1948 the value of the joule 
                                     #   was changed, so the thermochemical
                                     #   calorie was redefined to 4.184 J.
                                     #   This kept the energy measured by this
                                     #   unit the same. 
calorie_IT              4.1868 J     # International (Steam) Table calorie,
cal_IT                  calorie_IT   #   defined in 1929 as watt-hour/860 or
                                     #   equivalently 180|43 joules.  At this
                                     #   time the international joule had a
                                     #   different value than the modern joule,
                                     #   and the values were different in the
                                     #   USA and in Europe.  In 1956 at the
                                     #   Fifth International Conference on
                                     #   Properties of Steam the exact
                                     #   definition given here was adopted. 
calorie_15              4.18580 J    # Energy to go from 14.5 to 15.5 degC
cal_15                  calorie_15
calorie_fifteen         cal_15
calorie_20              4.18190 J    # Energy to go from 19.5 to 20.5 degC
cal_20                  calorie_20
calorie_twenty          calorie_20
calorie_4               4.204 J      # Energy to go from 3.5 to 4.5 degC
cal_4                   calorie_4
calorie_four            calorie_4
cal_mean                4.19002 J    # 1|100 energy to go from 0 to 100 degC
Calorie                 kilocalorie  # the food Calorie
thermie              1e6 cal_15      # Heat required to raise the
                                     # temperature of a tonne of
                                     # water from 14.5 to 15.5 degC.

# btu definitions: energy to raise a pound of water 1 degF

btu                     btu_IT       # International Table BTU is the default
britishthermalunit      btu
btu_IT                  cal_IT lb degF / gram K
btu_th                  cal_th lb degF / gram K
btu_mean                cal_mean lb degF / gram K
btu_15                  cal_15 lb degF / gram K
btu_ISO                 1055.06 J    # Exact, rounded ISO definition based
                                     #    on the IT calorie
quad                    quadrillion btu

ECtherm                 1e5 btu_ISO    # Exact definition
UStherm                 1.054804e8 J   # Exact definition
therm                   UStherm

# Water latent heat from [23]

water_fusion_heat       6.01 kJ/mol / (18.015 g/mol) # At 0 deg C
water_vaporization_heat 2256.4 J/g  # At saturation, 100 deg C, 101.42 kPa

# Specific heat capacities of various substances
#
# SPECFIC_HEAT          ENERGY / MASS / TEMPERATURE_DIFFERENCE
# SPECFIC_HEAT_CAPACITY ENERGY / MASS / TEMPERATURE_DIFFERENCE

specificheat_water      calorie / g K
water_specificheat      specificheat_water
     # Values from www.engineeringtoolbox.com/specific-heat-metals-d_152.html
specificheat_aluminum   0.91 J/g K
specificheat_antimony   0.21 J/g K
specificheat_barium     0.20 J/g K
specificheat_beryllium  1.83 J/g K
specificheat_bismuth    0.13 J/g K
specificheat_cadmium    0.23 J/g K
specificheat_cesium     0.24 J/g K
specificheat_chromium   0.46 J/g K
specificheat_cobalt     0.42 J/g K
specificheat_copper     0.39 J/g K
specificheat_gallium    0.37 J/g K
specificheat_germanium  0.32 J/g K
specificheat_gold       0.13 J/g K
specificheat_hafnium    0.14 J/g K
specificheat_indium     0.24 J/g K
specificheat_iridium    0.13 J/g K
specificheat_iron       0.45 J/g K
specificheat_lanthanum  0.195 J/g K
specificheat_lead       0.13 J/g K
specificheat_lithium    3.57 J/g K
specificheat_lutetium   0.15 J/g K
specificheat_magnesium  1.05 J/g K
specificheat_manganese  0.48 J/g K
specificheat_mercury    0.14 J/g K
specificheat_molybdenum 0.25 J/g K
specificheat_nickel     0.44 J/g K
specificheat_osmium     0.13 J/g K
specificheat_palladium  0.24 J/g K
specificheat_platinum   0.13 J/g K
specificheat_plutonum   0.13 J/g K
specificheat_potassium  0.75 J/g K
specificheat_rhenium    0.14 J/g K
specificheat_rhodium    0.24 J/g K
specificheat_rubidium   0.36 J/g K
specificheat_ruthenium  0.24 J/g K
specificheat_scandium   0.57  J/g K
specificheat_selenium   0.32 J/g K
specificheat_silicon    0.71 J/g K
specificheat_silver     0.23 J/g K
specificheat_sodium     1.21 J/g K
specificheat_strontium  0.30 J/g K
specificheat_tantalum   0.14 J/g K
specificheat_thallium   0.13 J/g K
specificheat_thorium    0.13 J/g K
specificheat_tin        0.21 J/g K
specificheat_titanium   0.54 J/g K
specificheat_tungsten   0.13 J/g K
specificheat_uranium    0.12 J/g K
specificheat_vanadium   0.39 J/g K
specificheat_yttrium    0.30 J/g K
specificheat_zinc       0.39 J/g K
specificheat_zirconium  0.27 J/g K
specificheat_ethanol    2.3  J/g K
specificheat_ammonia    4.6 J/g K
specificheat_freon      0.91 J/g K   # R-12 at 0 degrees Fahrenheit
specificheat_gasoline   2.22 J/g K
specificheat_iodine     2.15 J/g K
specificheat_oliveoil   1.97 J/g K

#  en.wikipedia.org/wiki/Heat_capacity#Table_of_specific_heat_capacities
specificheat_hydrogen   14.3 J/g K
specificheat_helium     5.1932 J/g K
specificheat_argon      0.5203 J/g K
specificheat_tissue     3.5 J/g K
specificheat_diamond    0.5091 J/g K
specificheat_granite    0.79 J/g K
specificheat_graphite   0.71 J/g K
specificheat_ice        2.11 J/g K
specificheat_asphalt    0.92 J/g K
specificheat_brick      0.84 J/g K
specificheat_concrete   0.88 J/g K
specificheat_glass_silica 0.84 J/g K
specificheat_glass_flint  0.503 J/g K
specificheat_glass_pyrex  0.753 J/g K
specificheat_gypsum     1.09 J/g K
specificheat_marble     0.88 J/g K
specificheat_sand       0.835 J/g K
specificheat_soil       0.835 J/g K
specificheat_wood       1.7 J/g K

specificheat_sucrose    1.244 J/g K #www.sugartech.co.za/heatcapacity/index.php


# Energy densities of various fuels
#
# Most of these fuels have varying compositions or qualities and hence their
# actual energy densities vary.  These numbers are hence only approximate.
#
# E1. http://www.aps.org/policy/reports/popa-reports/energy/units.cfm
# E2. https://web.archive.org/web/20100825042309/http://www.ior.com.au/ecflist.html

tonoil                  1e10 cal_IT    # Ton oil equivalent.  A conventional
                                       # value for the energy released by
toe                     tonoil         # burning one metric ton of oil. [18,E1]
                                       # Note that energy per mass of petroleum
                                       # products is fairly constant.
                                       # Variations in volumetric energy
                                       # density result from variations in the
                                       # density (kg/m^3) of different fuels.
                                       # This definition is given by the
                                       # IEA/OECD.
toncoal                 7e9 cal_IT     # Energy in metric ton coal from [18].
                                       # This is a nominal value which
                                       # is close to the heat content
                                       # of coal used in the 1950's
barreloil               5.8 Mbtu       # Conventional value for barrel of crude
                                       # oil [E1].  Actual range is 5.6 - 6.3.
naturalgas_HHV          1027 btu/ft3   # Energy content of natural gas.  HHV
naturalgas_LHV          930 btu/ft3    # is for Higher Heating Value and
naturalgas              naturalgas_HHV # includes energy from condensation
                                       # combustion products.  LHV is for Lower
                                       # Heating Value and excludes these.
                                       # American publications typically report
                                       # HHV whereas European ones report LHV.
charcoal                30 GJ/tonne
woodenergy_dry          20 GJ/tonne    # HHV, a cord weights about a tonne
woodenergy_airdry       15 GJ/tonne    # 20% moisture content
coal_bituminous         27 GJ / tonne
coal_lignite            15 GJ / tonne
coal_US                 22 GJ / uston  # Average for US coal (short ton), 1995
ethanol_HHV         84000 btu/usgallon
ethanol_LHV         75700 btu/usgallon
diesel             130500 btu/usgallon
gasoline_LHV       115000 btu/usgallon
gasoline_HHV       125000 btu/usgallon
gasoline                gasoline_HHV
heating                 37.3 MJ/liter
fueloil                 39.7 MJ/liter  # low sulphur
propane                 93.3 MJ/m^3
butane                  124 MJ/m^3

# The US EPA defines a "miles per gallon equivalent" for alternative
# energy vehicles:

mpg_e          miles / gallon gasoline_LHV
MPGe           mpg_e

# These values give total energy from uranium fission.  Actual efficiency
# of nuclear power plants is around 30%-40%.  Note also that some reactors
# use enriched uranium around 3% U-235.  Uranium during processing or use
# may be in a compound of uranium oxide or uranium hexafluoride, in which
# case the energy density would be lower depending on how much uranium is
# in the compound.

uranium_pure     200 MeV avogadro / (235.0439299 g/mol)  # Pure U-235
uranium_natural         0.7% uranium_pure        # Natural uranium: 0.7% U-235

# Celsius heat unit: energy to raise a pound of water 1 degC

celsiusheatunit         cal lb degC / gram K
chu                     celsiusheatunit

# "Apparent" average power in an AC circuit, the product of rms voltage
# and rms current, equal to the true power in watts when voltage and
# current are in phase.  In a DC circuit, always equal to the true power.

VA                      volt ampere

kWh                     kilowatt hour

# The horsepower is supposedly the power of one horse pulling.   Obviously
# different people had different horses.

horsepower              550 foot pound force / sec    # Invented by James Watt
mechanicalhorsepower    horsepower
hp                      horsepower
metrichorsepower        75 kilogram force meter / sec # PS=Pferdestaerke in
electrichorsepower      746 W                         # Germany
boilerhorsepower        9809.50 W
waterhorsepower         746.043 W
brhorsepower            horsepower   # Value corrected Dec, 2019.  Was 745.7 W.
donkeypower             250 W
chevalvapeur            metrichorsepower

#
# Heat Transfer
#
# Thermal conductivity, K, measures the rate of heat transfer across
# a material.  The heat transferred is
#     Q = K dT A t / L
# where dT is the temperature difference across the material, A is the
# cross sectional area, t is the time, and L is the length (thickness).
# Thermal conductivity is a material property.

THERMAL_CONDUCTIVITY    POWER / AREA (TEMPERATURE_DIFFERENCE/LENGTH)
THERMAL_RESISTIVITY     1/THERMAL_CONDUCTIVITY

# Thermal conductance is the rate at which heat flows across a given
# object, so the area and thickness have been fixed.  It depends on
# the size of the object and is hence not a material property.

THERMAL_CONDUCTANCE     POWER / TEMPERATURE_DIFFERENCE
THERMAL_RESISTANCE      1/THERMAL_CONDUCTANCE

# Thermal admittance is the rate of heat flow per area across an
# object whose thickness has been fixed.  Its reciprocal, thermal
# insulation, is used to for measuring the heat transfer per area
# of sheets of insulation or cloth that are of specified thickness.

THERMAL_ADMITTANCE      THERMAL_CONDUCTIVITY / LENGTH
THERMAL_INSULANCE       THERMAL_RESISTIVITY LENGTH
THERMAL_INSULATION      THERMAL_RESISTIVITY LENGTH

Rvalue                  degF ft^2 hr / btu
Uvalue                  1/Rvalue
europeanUvalue          watt / m^2 K
RSI                     degC m^2 / W
clo                     0.155 degC m^2 / W # Supposed to be the insulance
                                           # required to keep a resting person
                                           # comfortable indoors.  The value
                                           # given is from NIST and the CRC,
                                           # but [5] gives a slightly different
                                           # value of 0.875 ft^2 degF hr / btu.
tog                     0.1 degC m^2 / W   # Also used for clothing.


# Thermal Conductivity of a few materials

diamond_natural_thermal_conductivity    2200 W / m K
diamond_synthetic_thermal_conductivity  3320 W / m K  # 99% pure C12
silver_thermal_conductivity             406 W / m K
aluminum_thermal_conductivity           205 W / m K
copper_thermal_conductivity             385 W / m K
gold_thermal_conductivity               314 W / m K
iron_thermal_conductivity               79.5 W / m K
stainless_304_thermal_conductivity      15.5 W / m K  # average value

# The bel was defined by engineers of Bell Laboratories to describe the
# reduction in audio level over a length of one mile. It was originally
# called the transmission unit (TU) but was renamed around 1923 to honor
# Alexander Graham Bell. The bel proved inconveniently large so the decibel
# has become more common.  The decibel is dimensionless since it reports a
# ratio, but it is used in various contexts to report a signal's power
# relative to some reference level.

bel(x)     units=[1;1] range=(0,) 10^(x);    log(bel)    # Basic bel definition
decibel(x) units=[1;1] range=(0,) 10^(x/10); 10 log(decibel) # Basic decibel
dB()       decibel                                           # Abbreviation
dBW(x)     units=[1;W] range=(0,) dB(x) W ;  ~dB(dBW/W)      # Reference = 1 W
dBk(x)     units=[1;W] range=(0,) dB(x) kW ; ~dB(dBk/kW)     # Reference = 1 kW
dBf(x)     units=[1;W] range=(0,) dB(x) fW ; ~dB(dBf/fW)     # Reference = 1 fW
dBm(x)     units=[1;W] range=(0,) dB(x) mW ; ~dB(dBm/mW)     # Reference = 1 mW
dBmW(x)    units=[1;W] range=(0,) dBm(x) ;   ~dBm(dBmW)      # Reference = 1 mW
dBJ(x)     units=[1;J] range=(0,) dB(x) J; ~dB(dBJ/J)        # Energy relative
                                     # to 1 joule.  Used for power spectral
                                     # density since W/Hz = J


# When used to measure amplitude, voltage, or current the signal is squared
# because power is proportional to the square of these measures.  The root
# mean square (RMS) voltage is typically used with these units.

dB_amplitude(x) units=[1;1]  dB(0.5 x) ; ~dB(dB_amplitude^2) 
dBV(x)  units=[1;V] range=(0,) dB(0.5 x) V;~dB(dBV^2 / V^2) # Reference = 1 V
dBmV(x) units=[1;V] range=(0,) dB(0.5 x) mV;~dB(dBmV^2/mV^2)# Reference = 1 mV
dBuV(x) units=[1;V] range=(0,) dB(0.5 x) microV ; ~dB(dBuV^2 / microV^2)
                                   # Reference = 1 microvolt

# Here are dB measurements for current.  Be aware that dbA is also 
# a unit for frequency weighted sound pressure.  
dBA(x)  units=[1;A] range=(0,) dB(0.5 x) A;~dB(dBA^2 / A^2) # Reference = 1 A
dBmA(x) units=[1;A] range=(0,) dB(0.5 x) mA;~dB(dBmA^2/mA^2)# Reference = 1 mA
dBuA(x) units=[1;A] range=(0,) dB(0.5 x) microA ; ~dB(dBuA^2 / microA^2)
                                                    # Reference = 1 microamp

# Referenced to the voltage that causes 1 mW dissipation in a 600 ohm load.
# Originally defined as dBv but changed to prevent confusion with dBV.
# The "u" is for unloaded.
dBu(x) units=[1;V] range=(0,) dB(0.5 x) sqrt(mW 600 ohm) ; \
                              ~dB(dBu^2 / mW 600 ohm)
dBv(x) units=[1;V] range=(0,) dBu(x) ; ~dBu(dBv)  # Synonym for dBu

# Measurements for sound in air, referenced to the threshold of human hearing
# Note that sound in other media typically uses 1 micropascal as a reference
# for sound pressure.  Units dBA, dBB, dBC, refer to different frequency
# weightings meant to approximate the human ear's response.

# sound pressure level
dBSPL(x) units=[1;Pa] range=(0,) dB(0.5 x) 20 microPa ;  \
                                 ~dB(dBSPL^2 / (20 microPa)^2)
# sound intensity level
dBSIL(x) units=[1;W/m^2] range=(0,) dB(x) 1e-12 W/m^2; \
                                    ~dB(dBSIL / (1e-12 W/m^2))
# sound power level (The W in SWL is for the reference power, 1 W.)
dBSWL(x) units=[1;W] range=(0,) dB(x) 1e-12 W; ~dB(dBSWL/1e-12 W)

# The neper is another similar logarithmic unit.  Note that the neper
# is defined based on the ratio of amplitudes rather than the power
# ratio like the decibel.  This means that if the data is power, and
# you convert to nepers you should take the square root of the data
# to convert to amplitude.  If you want to convert nepers to a power
# measurement you need to square the resulting output.  

neper(x)       units=[1;1]  range=(0,)  exp(x);      ln(neper)
centineper(x)  units=[1;1]  range=(0,)  exp(x/100);  100 ln(centineper)
Np()           neper
cNp()          centineper
Np_power(x)    units=[1;1]  Np(2 x) ; ~Np(Np_power)/2

# Misc other measures

ENTROPY                 ENERGY / TEMPERATURE
clausius                1e3 cal/K       # A unit of physical entropy
langley                 thermcalorie/cm^2    # Used in radiation theory
poncelet                100 kg force m / s
tonrefrigeration        uston 144 btu / lb day # One ton refrigeration is
                                        # the rate of heat extraction required
                                        # turn one ton of water to ice in
                                        # a day.  Ice is defined to have a
                                        # latent heat of 144 btu/lb.
tonref                  tonrefrigeration
refrigeration           tonref / ton
frigorie                1000 cal_15     # Used in refrigeration engineering.
airwatt                 8.5 (ft^3/min) inH2O # Measure of vacuum power as
                                             # pressure times air flow.

# The unit "tnt" is defined so that you can write "tons tnt".  The
# question of which ton, exactly, is intended.  The answer is that
# nobody knows: 
#
# Quoting the footnote from page 13 of
# The Effects of Nuclear Weapons, 3rd ed.
# https://www.fourmilab.ch/etexts/www/effects/eonw_1.pdf
# 
#     The majority of the experimental and theoretical values of the
#     explosive energy released by TNT range from 900 to 1,100 calories per
#     gram. At one time, there was some uncertainty as to whether the term
#     "kiloton" of TNT referred to a short kiloton (2*10^6 pounds), a metric
#     kiloton (2.205*10^6 pounds), or a long kiloton (2.24*10^6 pounds). In
#     order to avoid ambiguity, it was agreed that the term "kiloton" would
#     refer to the release of 10^12 calories of explosive energy. This is
#     equivalent to 1 short kiloton of TNT if the energy release is 1,102
#     calories per gram or to 1 long kiloton if the energy is 984 calories
#     per gram of TNT.
#
# It is therefore not well-defined how much energy a "gram of tnt" is,
# though this term does appear in some references.

tnt                     1e9 cal_th / ton   # Defined exact value

# Nuclear weapon yields 

davycrocket             10 ton tnt         # lightest US tactical nuclear weapon
hiroshima               15.5 kiloton tnt   # Uranium-235 fission bomb
nagasaki                21 kiloton tnt     # Plutonium-239 fission bomb
fatman                  nagasaki
littleboy               hiroshima
ivyking                 500 kiloton tnt    # most powerful fission bomb
castlebravo             15 megaton tnt     # most powerful US test
tsarbomba               50 megaton tnt     # most powerful test ever: USSR,
                                           # 30 October 1961
b53bomb                 9 megaton tnt
                 # http://rarehistoricalphotos.com/gadget-first-atomic-bomb/
trinity                 18 kiloton tnt     # July 16, 1945
gadget                  trinity

#
# Permeability: The permeability or permeance, n, of a substance determines
# how fast vapor flows through the substance.  The formula W = n A dP
# holds where W is the rate of flow (in mass/time), n is the permeability,
# A is the area of the flow path, and dP is the vapor pressure difference.
#

perm_0C                 grain / hr ft^2 inHg
perm_zero               perm_0C
perm_0                  perm_0C
perm                    perm_0C
perm_23C                grain / hr ft^2 in Hg23C
perm_twentythree        perm_23C

#
# Counting measures
#

pair                    2
brace                   2
nest                    3     # often used for items like bowls that
                              #   nest together
hattrick                3     # Used in sports, especially cricket and ice
                              #   hockey to report the number of goals.
dicker                  10
dozen                   12
bakersdozen             13
score                   20
flock                   40
timer                   40
shock                   60
toncount                100   # Used in sports in the UK
longhundred             120   # From a germanic counting system
gross                   144
greatgross              12 gross
tithe                   1|10  # From Anglo-Saxon word for tenth

# Paper counting measure

shortquire              24
quire                   25
shortream               480
ream                    500
perfectream             516
bundle                  2 reams
bale                    5 bundles

#
# Paper measures
#

# USA paper sizes

lettersize              8.5 inch 11 inch
legalsize               8.5 inch 14 inch
ledgersize              11 inch 17 inch
executivesize           7.25 inch 10.5 inch
Apaper                  8.5 inch 11 inch
Bpaper                  11 inch 17 inch
Cpaper                  17 inch 22 inch
Dpaper                  22 inch 34 inch
Epaper                  34 inch 44 inch

# Correspondence envelope sizes.  #10 is the standard business
# envelope in the USA. 

envelope6_25size        3.5 inch 6 inch
envelope6_75size        3.625 inch 6.5 inch
envelope7size           3.75 inch 6.75 inch
envelope7_75size        3.875 inch 7.5 inch
envelope8_625size       3.625 inch 8.625 inch
envelope9size           3.875 inch 8.875 inch
envelope10size          4.125 inch 9.5 inch
envelope11size          4.5 inch 10.375 inch
envelope12size          4.75 inch 11 inch
envelope14size          5 inch 11.5 inch
envelope16size          6 inch 12 inch

# Announcement envelope sizes (no relation to metric paper sizes like A4)

envelopeA1size          3.625 inch 5.125 inch  # same as 4bar
envelopeA2size          4.375 inch 5.75 inch
envelopeA6size          4.75 inch 6.5 inch
envelopeA7size          5.25 inch 7.25 inch
envelopeA8size          5.5 inch 8.125 inch   
envelopeA9size          5.75 inch 8.75 inch
envelopeA10size         6 inch 9.5 inch

# Baronial envelopes

envelope4bar            3.625 inch 5.125 inch  # same as A1
envelope5_5bar          4.375 inch 5.75 inch
envelope6bar            4.75 inch 6.5 inch

# Coin envelopes

envelope1baby           2.25 inch 3.5 inch     # same as #1 coin
envelope00coin          1.6875 inch 2.75 inch
envelope1coin           2.25 inch 3.5 inch
envelope3coin           2.5 inch 4.25 inch
envelope4coin           3 inch 4.5 inch
envelope4_5coin         3 inch 4.875 inch
envelope5coin           2.875 inch 5.25 inch
envelope5_5coin         3.125 inch 5.5 inch
envelope6coin           3.375 inch 6 inch
envelope7coin           3.5 inch 6.5 inch

# The metric paper sizes are defined so that if a sheet is cut in half
# along the short direction, the result is two sheets which are
# similar to the original sheet.  This means that for any metric size,
# the long side is close to sqrt(2) times the length of the short
# side.  Each series of sizes is generated by repeated cuts in half,
# with the values rounded down to the nearest millimeter.

A0paper                 841 mm 1189 mm   # The basic size in the A series
A1paper                 594 mm  841 mm   # is defined to have an area of
A2paper                 420 mm  594 mm   # one square meter.
A3paper                 297 mm  420 mm
A4paper                 210 mm  297 mm
A5paper                 148 mm  210 mm
A6paper                 105 mm  148 mm
A7paper                  74 mm  105 mm
A8paper                  52 mm   74 mm
A9paper                  37 mm   52 mm
A10paper                 26 mm   37 mm

B0paper                1000 mm 1414 mm   # The basic B size has an area
B1paper                 707 mm 1000 mm   # of sqrt(2) square meters.
B2paper                 500 mm  707 mm
B3paper                 353 mm  500 mm
B4paper                 250 mm  353 mm
B5paper                 176 mm  250 mm
B6paper                 125 mm  176 mm
B7paper                  88 mm  125 mm
B8paper                  62 mm   88 mm
B9paper                  44 mm   62 mm
B10paper                 31 mm   44 mm

C0paper                 917 mm 1297 mm   # The basic C size has an area
C1paper                 648 mm  917 mm   # of sqrt(sqrt(2)) square meters.
C2paper                 458 mm  648 mm
C3paper                 324 mm  458 mm   # Intended for envelope sizes
C4paper                 229 mm  324 mm
C5paper                 162 mm  229 mm
C6paper                 114 mm  162 mm
C7paper                  81 mm  114 mm
C8paper                  57 mm   81 mm
C9paper                  40 mm   57 mm
C10paper                 28 mm   40 mm

# gsm (Grams per Square Meter), a sane, metric paper weight measure

gsm                     grams / meter^2

# In the USA, a collection of crazy historical paper measures are used.  Paper
# is measured as a weight of a ream of that particular type of paper.  This is
# sometimes called the "substance" or "basis" (as in "substance 20" paper).
# The standard sheet size or "basis size" varies depending on the type of
# paper.  As a result, 20 pound bond paper and 50 pound text paper are actually
# about the same weight.  The different sheet sizes were historically the most
# convenient for printing or folding in the different applications.  These
# different basis weights are standards maintained by American Society for
# Testing Materials (ASTM) and the American Forest and Paper Association
# (AF&PA).

poundbookpaper          lb / 25 inch 38 inch ream
lbbook                  poundbookpaper
poundtextpaper          poundbookpaper
lbtext                  poundtextpaper
poundoffsetpaper        poundbookpaper    # For offset printing
lboffset                poundoffsetpaper
poundbiblepaper         poundbookpaper    # Designed to be lightweight, thin,
lbbible                 poundbiblepaper   # strong and opaque.
poundtagpaper           lb / 24 inch 36 inch ream
lbtag                   poundtagpaper
poundbagpaper           poundtagpaper
lbbag                   poundbagpaper
poundnewsprintpaper     poundtagpaper
lbnewsprint             poundnewsprintpaper
poundposterpaper        poundtagpaper
lbposter                poundposterpaper
poundtissuepaper        poundtagpaper
lbtissue                poundtissuepaper
poundwrappingpaper      poundtagpaper
lbwrapping              poundwrappingpaper
poundwaxingpaper        poundtagpaper
lbwaxing                poundwaxingpaper
poundglassinepaper      poundtagpaper
lbglassine              poundglassinepaper
poundcoverpaper         lb / 20 inch 26 inch ream
lbcover                 poundcoverpaper
poundindexpaper         lb / 25.5 inch 30.5 inch ream
lbindex                 poundindexpaper
poundindexbristolpaper  poundindexpaper
lbindexbristol          poundindexpaper
poundbondpaper          lb / 17 inch 22 inch ream  # Bond paper is stiff and
lbbond                  poundbondpaper             # durable for repeated
poundwritingpaper       poundbondpaper             # filing, and it resists
lbwriting               poundwritingpaper          # ink penetration.
poundledgerpaper        poundbondpaper
lbledger                poundledgerpaper
poundcopypaper          poundbondpaper
lbcopy                  poundcopypaper
poundblottingpaper      lb / 19 inch 24 inch ream
lbblotting              poundblottingpaper
poundblankspaper        lb / 22 inch 28 inch ream
lbblanks                poundblankspaper
poundpostcardpaper      lb / 22.5 inch 28.5 inch ream
lbpostcard              poundpostcardpaper
poundweddingbristol     poundpostcardpaper
lbweddingbristol        poundweddingbristol
poundbristolpaper       poundweddingbristol
lbbristol               poundbristolpaper
poundboxboard           lb / 1000 ft^2
lbboxboard              poundboxboard
poundpaperboard         poundboxboard
lbpaperboard            poundpaperboard

# When paper is marked in units of M, it means the weight of 1000 sheets of the
# given size of paper.  To convert this to paper weight, divide by the size of
# the paper in question.

paperM                  lb / 1000

# In addition paper weight is reported in "caliper" which is simply the
# thickness of one sheet, typically in inches.  Thickness is also reported in
# "points" where a point is 1|1000 inch.  These conversions are supplied to
# convert these units roughly (using an approximate density) into the standard
# paper weight values.

pointthickness          0.001 in
paperdensity            0.8 g/cm^3        # approximate--paper densities vary!
papercaliper            in paperdensity
paperpoint              pointthickness paperdensity

#
# Printing
#

fournierpoint           0.1648 inch / 12  # First definition of the printers
                                          # point made by Pierre Fournier who
                                          # defined it in 1737 as 1|12 of a
                                          # cicero which was 0.1648 inches.
olddidotpoint           1|72 frenchinch   # Francois Ambroise Didot, one of
                                          # a family of printers, changed
                                          # Fournier's definition around 1770
                                          # to fit to the French units then in
                                          # use.
bertholdpoint           1|2660 m          # H. Berthold tried to create a
                                          # metric version of the didot point
                                          # in 1878.
INpoint                 0.4 mm            # This point was created by a
                                          # group directed by Fermin Didot in
                                          # 1881 and is associated with the
                                          # imprimerie nationale.  It doesn't
                                          # seem to have been used much.
germandidotpoint        0.376065 mm       # Exact definition appears in DIN
                                          # 16507, a German standards document
                                          # of 1954.  Adopted more broadly  in
                                          # 1966 by ???
metricpoint             3|8 mm            # Proposed in 1977 by Eurograf
oldpoint                1|72.27 inch      # The American point was invented
printerspoint           oldpoint          # by Nelson Hawks in 1879 and
texpoint                oldpoint          # dominates USA publishing.
                                          # It was standardized by the American
                                          # Typefounders Association at the
                                          # value of 0.013837 inches exactly.
                                          # Knuth uses the approximation given
                                          # here (which is very close).  The
                                          # comp.fonts FAQ claims that this
                                          # value is supposed to be 1|12 of a
                                          # pica where 83 picas is equal to 35
                                          # cm.  But this value differs from
                                          # the standard.
texscaledpoint          1|65536 texpoint  # The TeX typesetting system uses
texsp                   texscaledpoint    # this for all computations.
computerpoint           1|72 inch         # The American point was rounded
point                   computerpoint
computerpica            12 computerpoint  # to an even 1|72 inch by computer
postscriptpoint         computerpoint     # people at some point.
pspoint                 postscriptpoint
twip                    1|20 point        # TWentieth of an Imperial Point
Q                       1|4 mm            # Used in Japanese phototypesetting
                                          # Q is for quarter
frenchprinterspoint     olddidotpoint
didotpoint              germandidotpoint  # This seems to be the dominant value
europeanpoint           didotpoint        # for the point used in Europe
cicero                  12 didotpoint

stick                   2 inches

# Type sizes

excelsior               3 oldpoint
brilliant               3.5 oldpoint
diamondtype             4 oldpoint
pearl                   5 oldpoint
agate                   5.5 oldpoint  # Originally agate type was 14 lines per
                                      #   inch, giving a value of 1|14 in.
ruby                    agate         # British
nonpareil               6 oldpoint
mignonette              6.5 oldpoint
emerald                 mignonette    # British
minion                  7 oldpoint
brevier                 8 oldpoint
bourgeois               9 oldpoint
longprimer              10 oldpoint
smallpica               11 oldpoint
pica                    12 oldpoint
english                 14 oldpoint
columbian               16 oldpoint
greatprimer             18 oldpoint
paragon                 20 oldpoint
meridian                44 oldpoint
canon                   48 oldpoint

# German type sizes

nonplusultra            2 didotpoint
brillant                3 didotpoint
diamant                 4 didotpoint
perl                    5 didotpoint
nonpareille             6 didotpoint
kolonel                 7 didotpoint
petit                   8 didotpoint
borgis                  9 didotpoint
korpus                  10 didotpoint
corpus                  korpus
garamond                korpus
mittel                  14 didotpoint
tertia                  16 didotpoint
text                    18 didotpoint
kleine_kanon            32 didotpoint
kanon                   36 didotpoint
grobe_kanon             42 didotpoint
missal                  48 didotpoint
kleine_sabon            72 didotpoint
grobe_sabon             84 didotpoint

#
# Information theory units.  Note that the name "entropy" is used both
# to measure information and as a physical quantity.
#

INFORMATION             bit

nat                     (1/ln(2)) bits       # Entropy measured base e
hartley                 log2(10) bits        # Entropy of a uniformly
ban                     hartley              #   distributed random variable
                                             #   over 10 symbols.
dit                     hartley              # from Decimal digIT

#
# Computer
#

bps                     bit/sec              # Sometimes the term "baud" is
                                             #   incorrectly used to refer to
                                             #   bits per second.  Baud refers
                                             #   to symbols per second.  Modern
                                             #   modems transmit several bits
                                             #   per symbol.
byte                    8 bit                # Not all machines had 8 bit
B                       byte                 #   bytes, but these days most of
                                             #   them do.  But beware: for
                                             #   transmission over modems, a
                                             #   few extra bits are used so
                                             #   there are actually 10 bits per
                                             #   byte.
octet                   8 bits               # The octet is always 8 bits
nybble                  4 bits               # Half of a byte. Sometimes
                                             #   equal to different lengths
                                             #   such as 3 bits.
nibble                  nybble
nyp                     2 bits               # Donald Knuth asks in an exercise
                                             #   for a name for a 2 bit
                                             #   quantity and gives the "nyp"
                                             #   as a solution due to Gregor
                                             #   Purdy.  Not in common use.
meg                     megabyte             # Some people consider these
                                             # units along with the kilobyte
gig                     gigabyte             # to be defined according to
                                             # powers of 2 with the kilobyte
                                             # equal to 2^10 bytes, the
                                             # megabyte equal to 2^20 bytes and
                                             # the gigabyte equal to 2^30 bytes
                                             # but these usages are forbidden
                                             # by SI.  Binary prefixes have
                                             # been defined by IEC to replace
                                             # the SI prefixes.  Use them to
                                             # get the binary units KiB, MiB,
                                             # GiB, etc.
jiffy                   0.01 sec     # This is defined in the Jargon File
jiffies                 jiffy        # (http://www.jargon.org) as being the
                                     # duration of a clock tick for measuring
                                     # wall-clock time.  Supposedly the value
                                     # used to be 1|60 sec or 1|50 sec
                                     # depending on the frequency of AC power,
                                     # but then 1|100 sec became more common.
                                     # On linux systems, this term is used and
                                     # for the Intel based chips, it does have
                                     # the value of .01 sec.  The Jargon File
                                     # also lists two other definitions:
                                     # millisecond, and the time taken for
                                     # light to travel one foot.
cdaudiospeed      44.1 kHz 2*16 bits # CD audio data rate at 44.1 kHz with 2
                                     # samples of sixteen bits each.
cdromspeed       75 2048 bytes / sec # For data CDs (mode1) 75 sectors are read
                                     # each second with 2048 bytes per sector.
                                     # Audio CDs do not have sectors, but
                                     # people sometimes divide the bit rate by
                                     # 75 and claim a sector length of 2352.
                                     # Data CDs have a lower rate due to
                                     # increased error correction overhead.
                                     # There is a rarely used mode (mode2) with
                                     # 2336 bytes per sector that has fewer
                                     # error correction bits than mode1.
dvdspeed                 1385 kB/s   # This is the "1x" speed of a DVD using
                                     # constant linear velocity (CLV) mode.
                                     # Modern DVDs may vary the linear velocity
                                     # as they go from the inside to the
                                     # outside of the disc.
                       # See http://www.osta.org/technology/dvdqa/dvdqa4.htm

FIT         / 1e9 hour # Failures In Time, number of failures per billion hours

#
# The IP address space is divided into subnets.  The number of hosts
# in a subnet depends on the length of the subnet prefix.  This is
# often written as /N where N is the number of bits in the prefix.
#
# https://en.wikipedia.org/wiki/Subnetwork
#
# These definitions gives the number of hosts for a subnet whose
# prefix has the specified length in bits.
#

ipv4subnetsize(prefix_len) units=[1;1]  domain=[0,32] range=[1,4294967296] \
                         2^(32-prefix_len) ; 32-log2(ipv4subnetsize)
ipv4classA               ipv4subnetsize(8)
ipv4classB               ipv4subnetsize(16)
ipv4classC               ipv4subnetsize(24)

ipv6subnetsize(prefix_len) units=[1;1] domain=[0,128] \
                         range=[1,340282366920938463463374607431768211456] \
                         2^(128-prefix_len) ; 128-log2(ipv6subnetsize)

#
# Musical measures.  Musical intervals expressed as ratios.  Multiply
# two intervals together to get the sum of the interval.  The function
# musicalcent can be used to convert ratios to cents.
#

# Perfect intervals

octave                  2
majorsecond             musicalfifth^2 / octave
majorthird              5|4
minorthird              6|5
musicalfourth           4|3
musicalfifth            3|2
majorsixth              musicalfourth majorthird
minorsixth              musicalfourth minorthird
majorseventh            musicalfifth majorthird
minorseventh            musicalfifth minorthird

pythagoreanthird        majorsecond musicalfifth^2 / octave
syntoniccomma           pythagoreanthird / majorthird
pythagoreancomma        musicalfifth^12 / octave^7

# Equal tempered definitions

semitone                octave^(1|12)
musicalcent(x) units=[1;1] range=(0,) semitone^(x/100) ; \
                                      100 log(musicalcent)/log(semitone)

#
# Musical note lengths.
#

wholenote               !
MUSICAL_NOTE_LENGTH     wholenote
halfnote                1|2 wholenote
quarternote             1|4 wholenote
eighthnote              1|8 wholenote
sixteenthnote           1|16 wholenote
thirtysecondnote        1|32 wholenote
sixtyfourthnote         1|64 wholenote
dotted                  3|2
doubledotted            7|4
breve                   doublewholenote
semibreve               wholenote
minimnote               halfnote
crotchet                quarternote
quaver                  eighthnote
semiquaver              sixteenthnote
demisemiquaver          thirtysecondnote
hemidemisemiquaver      sixtyfourthnote
semidemisemiquaver      hemidemisemiquaver

#
# yarn and cloth measures
#

# yarn linear density

woolyarnrun             1600 yard/pound # 1600 yds of "number 1 yarn" weighs
                                        # a pound.
yarncut                 300 yard/pound  # Less common system used in
                                        # Pennsylvania for wool yarn
cottonyarncount         840 yard/pound
linenyarncount          300 yard/pound  # Also used for hemp and ramie
worstedyarncount        1680 ft/pound
metricyarncount         meter/gram
denier                  1|9 tex            # used for silk and rayon
manchesteryarnnumber    drams/1000 yards   # old system used for silk
pli                     lb/in
typp                    1000 yd/lb   # abbreviation for Thousand Yard Per Pound
asbestoscut             100 yd/lb    # used for glass and asbestos yarn

tex                     gram / km    # rational metric yarn measure, meant
drex                    0.1 tex      # to be used for any kind of yarn
poumar                  lb / 1e6 yard

# yarn and cloth length

skeincotton             80*54 inch   # 80 turns of thread on a reel with a
                                     #  54 in circumference (varies for other
                                     #  kinds of thread)
cottonbolt              120 ft       # cloth measurement
woolbolt                210 ft
bolt                    cottonbolt
heer                    600 yards
cut                     300 yards    # used for wet-spun linen yarn
lea                     300 yards

sailmakersyard          28.5 in
sailmakersounce         oz / sailmakersyard 36 inch

silkmomme               momme / 25 yards 1.49 inch  # Traditional silk weight
silkmm                  silkmomme        # But it is also defined as
                                         # lb/100 yd 45 inch.  The two
                                         # definitions are slightly different
                                         # and neither one seems likely to be
                                         # the true source definition.

#
# drug dosage
#

mcg                     microgram        # Frequently used for vitamins
iudiptheria             62.8 microgram   # IU is for international unit
iupenicillin            0.6 microgram
iuinsulin               41.67 microgram
drop                    1|20 ml          # The drop was an old "unit" that was
                                         # replaced by the minim.  But I was
                                         # told by a pharmacist that in his
                                         # profession, the conversion of 20
                                         # drops per ml is actually used.
bloodunit               450 ml           # For whole blood.  For blood
                                         # components, a blood unit is the
                                         # quantity of the component found in a
                                         # blood unit of whole blood.  The
                                         # human body contains about 12 blood
                                         # units of whole blood.

#
# misc medical measure
#

frenchcathetersize      1|3 mm           # measure used for the outer diameter
                                         # of a catheter
charriere               frenchcathetersize


#
# fixup units for times when prefix handling doesn't do the job
#

hectare                 hectoare
megohm                  megaohm
kilohm                  kiloohm
microhm                 microohm
megalerg                megaerg    # 'L' added to make it pronounceable [18].

#
# Money
#
# Note that US$ is the primitive unit so other currencies are
# generally given in US$.
#

unitedstatesdollar      US$
usdollar                US$
$                       dollar
mark                    germanymark
#bolivar                 venezuelabolivar       # Not all databases are 
#venezuelabolivarfuerte  1e-5 bolivar           #    supplying these
#bolivarfuerte           1e-5 bolivar           # The currency was revalued 
#oldbolivar              1|1000 bolivarfuerte   # twice
peseta                  spainpeseta
rand                    southafricarand
escudo                  portugalescudo
guilder                 netherlandsguilder
hollandguilder          netherlandsguilder
peso                    mexicopeso
yen                     japanyen
lira                    turkeylira
rupee                   indiarupee
drachma                 greecedrachma
franc                   francefranc
markka                  finlandmarkka
britainpound            unitedkingdompound
greatbritainpound       unitedkingdompound
unitedkingdompound      ukpound
poundsterling           britainpound
yuan                    chinayuan

# Unicode Currency Names

!utf8
icelandkróna            icelandkrona
polandzłoty             polandzloty
tongapa’anga            tongapa'anga
#venezuelabolívar        venezuelabolivar
vietnamđồng             vietnamdong
mongoliatögrög          mongoliatugrik
sãotomé&príncipedobra   saotome&principedobra
!endutf8

UKP                     GBP        # Not an ISO code, but looks like one, and
                                   # sometimes used on usenet.

!include currency.units

# Money on the gold standard, used in the late 19th century and early
# 20th century.

olddollargold           23.22 grains goldprice  # Used until 1934
newdollargold           96|7 grains goldprice   # After Jan 31, 1934
dollargold              newdollargold
poundgold               113 grains goldprice    # British pound

# Precious metals

goldounce               goldprice troyounce
silverounce             silverprice troyounce
platinumounce           platinumprice troyounce
XAU                     goldounce
XPT                     platinumounce
XAG                     silverounce

# Nominal masses of US coins.  Note that dimes, quarters and half dollars
# have weight proportional to value.  Before 1965 it was $40 / kg.

USpennyweight           2.5 grams         # Since 1982, 48 grains before
USnickelweight          5 grams
USdimeweight            US$ 0.10 / (20 US$ / lb)   # Since 1965
USquarterweight         US$ 0.25 / (20 US$ / lb)   # Since 1965
UShalfdollarweight      US$ 0.50 / (20 US$ / lb)   # Since 1971
USdollarweight          8.1 grams         # Weight of Susan B. Anthony and
                                          #   Sacagawea dollar coins

# British currency

quid                    britainpound        # Slang names
fiver                   5 quid
tenner                  10 quid
monkey                  500 quid
brgrand                 1000 quid
bob                     shilling

shilling                1|20 britainpound   # Before decimalisation, there
oldpence                1|12 shilling       # were 20 shillings to a pound,
farthing                1|4 oldpence        # each of twelve old pence
guinea                  21 shilling         # Still used in horse racing
crown                   5 shilling
florin                  2 shilling
groat                   4 oldpence
tanner                  6 oldpence
brpenny                 0.01 britainpound
pence                   brpenny
tuppence                2 pence
tuppenny                tuppence
ha'penny                halfbrpenny
hapenny                 ha'penny
oldpenny                oldpence
oldtuppence             2 oldpence
oldtuppenny             oldtuppence
threepence              3 oldpence    # threepence never refers to new money
threepenny              threepence
oldthreepence           threepence
oldthreepenny           threepence
oldhalfpenny            halfoldpenny
oldha'penny             oldhalfpenny
oldhapenny              oldha'penny
brpony                  25 britainpound

# Canadian currency

loony                   1 canadadollar    # This coin depicts a loon
toony                   2 canadadollar

# Cryptocurrency

satoshi                 1e-8 bitcoin
XBT                     bitcoin           # nonstandard code

# Inflation.
#
# Currently US inflation as reported by the BLS CPI index is available.
# The UScpi() table reports the USA consumer price index.  Note that 
# if you specify a year like 2015, that refers to the CPI reported
# for December of 2014 (which is released in mid January 2015),
# so it refers to the point right at the start of the given year. 
# Months are increments of 1|12 on the year, so the January 2015
# release will be 2015+1|12 = 2015.08333.  

!include cpi.units

USCPI()            UScpi
USCPI_now          UScpi_now
USCPI_lastdate     UScpi_lastdate
cpi()              UScpi
CPI()              UScpi
cpi_now            UScpi_now
CPI_now            UScpi_now
cpi_lastdate       UScpi_lastdate
CPI_lastdate       UScpi_lastdate

# These definitions hide the CPI index and directly convert US dollars
# from a specified date to current dollars.  You can use this to convert
# historical dollars to present value or to convert money in the past
# between two dates.

dollars_in()       USdollars_in
US$in()            USdollars_in
$in()              USdollars_in

# This definition gives the dimensionless US inflation factor since the
# specified date.

inflation_since()  USinflation_since


#
# Units used for measuring volume of wood
#

cord                    4*4*8 ft^3   # 4 ft by 4 ft by 8 ft bundle of wood
facecord                1|2 cord
cordfoot                1|8 cord     # One foot long section of a cord
cordfeet                cordfoot
housecord               1|3 cord     # Used to sell firewood for residences,
                                     #   often confusingly called a "cord"
boardfoot               ft^2 inch    # Usually 1 inch thick wood
boardfeet               boardfoot
fbm                     boardfoot    # feet board measure
stack                   4 yard^3     # British, used for firewood and coal [18]
rick                    4 ft 8 ft 16 inches # Stack of firewood, supposedly
                                     #   sometimes called a face cord, but this
                                     #   value is equal to 1|3 cord.  Name
                                     #   comes from an old Norse word for a
                                     #   stack of wood.
stere                   m^3
timberfoot              ft^3         # Used for measuring solid blocks of wood
standard                120 12 ft 11 in 1.5 in  # This is the St Petersburg or
                                     #   Pittsburg standard.  Apparently the
                                     #   term is short for "standard hundred"
                                     #   which was meant to refer to 100 pieces
                                     #   of wood (deals).  However, this
                                     #   particular standard is equal to 120
                                     #   deals which are 12 ft by 11 in by 1.5
                                     #   inches (not the standard deal).
hoppusfoot               (4/pi) ft^3 # Volume calculation suggested in 1736
hoppusboardfoot      1|12 hoppusfoot #   forestry manual by Edward Hoppus, for
hoppuston              50 hoppusfoot #   estimating the usable volume of a log.
                                     #   It results from computing the volume
                                     #   of a cylindrical log of length, L, and
                                     #   girth (circumference), G, by V=L(G/4)^2.
                                     #   The hoppus ton is apparently still in
                                     #   use for shipments from Southeast Asia.

# In Britain, the deal is apparently any piece of wood over 6 feet long, over
# 7 wide and 2.5 inches thick.  The OED doesn't give a standard size.  A piece
# of wood less than 7 inches wide is called a "batten".  This unit is now used
# exclusively for fir and pine.

deal              12 ft 11 in 2.5 in # The standard North American deal [OED]
wholedeal        12 ft 11 in 1.25 in # If it's half as thick as the standard
                                     #   deal it's called a "whole deal"!
splitdeal         12 ft 11 in 5|8 in # And half again as thick is a split deal.


# Used for shellac mixing rate

poundcut            pound / gallon
lbcut               poundcut

#
# Gas and Liquid flow units
#

FLUID_FLOW              VOLUME / TIME

# Some obvious volumetric gas flow units (cu is short for cubic)

cumec                   m^3/s
cusec                   ft^3/s

# Conventional abbreviations for fluid flow units

gph                     gal/hr
gpm                     gal/min
mgd                     megagal/day
brgph                   brgallon/hr
brgpm                   brgallon/min
brmgd                   mega brgallon/day
usgph                   usgallon/hr
usgpm                   usgallon/min
usmgd                   mega usgallon/day
cfs                     ft^3/s
cfh                     ft^3/hour
cfm                     ft^3/min
lpm                     liter/min
lfm                     ft/min     # Used to report air flow produced by fans.
                                   # Multiply by cross sectional area to get a
                                   # flow in cfm.

pru                     mmHg / (ml/min)  # peripheral resistance unit, used in
                                         # medicine to assess blood flow in
                                         # the capillaries.

# Miner's inch:  This is an old historic unit used in the Western  United
# States.  It is generally defined as the rate of flow through a one square
# inch hole at a specified depth such as 4 inches.  In the late 19th century,
# volume of water was sometimes measured in the "24 hour inch".  Values for the
# miner's inch were fixed by state statues.  (This information is from a web
# site operated by the Nevada Division of Water Planning:  The Water Words
# Dictionary at http://water.nv.gov/WaterPlanDictionary.aspx, specifically
# http://water.nv.gov/programs/planning/dictionary/wwords-M.pdf.  All
# but minersinchNV are s.v.  Miner's Inch [Western United States])

minersinchAZ            1.5 ft^3/min
minersinchCA            1.5 ft^3/min
minersinchMT            1.5 ft^3/min
minersinchNV            1.5 ft^3/min
minersinchOR            1.5 ft^3/min
minersinchID            1.2 ft^3/min
minersinchKS            1.2 ft^3/min
minersinchNE            1.2 ft^3/min
minersinchNM            1.2 ft^3/min
minersinchND            1.2 ft^3/min
minersinchSD            1.2 ft^3/min
minersinchUT            1.2 ft^3/min
minersinchCO            1 ft^3/sec / 38.4  # 38.4 miner's inches = 1 ft^3/sec
minersinchBC            1.68 ft^3/min      # British Columbia

# Oceanographic flow

sverdrup                1e6 m^3 / sec   # Used to express flow of ocean
                                        # currents.  Named after Norwegian
                                        # oceanographer H. Sverdrup.

# In vacuum science and some other applications, gas flow is measured
# as the product of volumetric flow and pressure.  This is useful
# because it makes it easy to compare with the flow at standard
# pressure (one atmosphere).  It also directly relates to the number
# of gas molecules per unit time, and hence to the mass flow if the
# molecular mass is known.

GAS_FLOW                PRESSURE FLUID_FLOW

sccm                    atm cc/min     # 's' is for "standard" to indicate
sccs                    atm cc/sec     # flow at standard pressure
scfh                    atm ft^3/hour  #
scfm                    atm ft^3/min
slpm                    atm liter/min
slph                    atm liter/hour
lusec                   liter micron Hg / s  # Used in vacuum science

# US Standard Atmosphere (1976)
# Atmospheric temperature and pressure vs. geometric height above sea level
# This definition covers only the troposphere (the lowest atmospheric
# layer, up to 11 km), and assumes the layer is polytropic.
# A polytropic process is one for which PV^k = const, where P is the
# pressure, V is the volume, and k is the polytropic exponent.  The
# polytropic index is n = 1 / (k - 1).  As noted in the Wikipedia article
# https://en.wikipedia.org/wiki/Polytropic_process, some authors reverse
# the definitions of "exponent" and "index."  The functions below assume
# the following parameters:

# temperature lapse rate, -dT/dz, in troposphere

lapserate       6.5 K/km        # US Std Atm (1976)

# air molecular weight, including constituent mol wt, given
# in Table 3, p. 3; CH4 (16.04303) and N2O (44.0128) from
# Table 15, p. 33. Values for molecular weights are slightly
# different from current values, so the original numerical
# values are retained.

air_1976        78.084   %    28.0134 \
              + 20.9476  %    31.9988 \
              + 9340     ppm  39.948 \
              +  314     ppm  44.00995 \
              +   18.18  ppm  20.183 \
              +    5.24  ppm   4.0026 \
              +    1.5   ppm  16.04303 \
              +    1.14  ppm  83.80 \
              +    0.5   ppm   2.01594 \
              +    0.27  ppm  44.0128 \
              +    0.087 ppm 131.30

# from US Standard Atmosphere, 1962, Table I.2.7, p. 9

air_1962        78.084     %  28.0134 \
              + 20.9476    %  31.9988 \
              + 9340     ppm  39.948 \
              +  314     ppm  44.00995 \
              +  18.18   ppm  20.183 \
              +   5.24   ppm   4.0026 \
              +   2      ppm  16.04303 \
              +   1.14   ppm  83.80 \
              +   0.5    ppm   2.01594 \
              +   0.5    ppm  44.0128 \
              +   0.087  ppm 131.30

# Average molecular weight of air
#
# Concentration of greenhouse gases CO2, CH4, and N20 are from
# https://gml.noaa.gov/ccgg/trends/global.html (accessed 2023-04-10);
# others are from NASA Earth Fact Sheet
# https://nssdc.gsfc.nasa.gov/planetary/factsheet/earthfact.html (accessed 2023-04-10)
# Numbers do not add up to exactly 100% due to roundoff and uncertainty.  Water
# is highly variable, typically makes up about 1%

air_2023        78.08% nitrogen 2 \
              + 20.95% oxygen 2 \
              + 9340 ppm argon \
              +  419 ppm (carbon + oxygen 2) \
              +   18.18 ppm neon \
              +    5.24 ppm helium \
              +    1.92 ppm (carbon + 4 hydrogen) \
              +    1.14 ppm krypton \
              +    0.55 ppm hydrogen 2 \
              +    0.34 ppm (nitrogen 2 + oxygen)

# from NASA Earth Fact Sheet (accessed 28 August 2015)
# http://nssdc.gsfc.nasa.gov/planetary/factsheet/earthfact.html

air_2015        78.08% nitrogen 2 \
              + 20.95% oxygen 2 \
              + 9340 ppm argon \
              +  400 ppm (carbon + oxygen 2) \
              +   18.18 ppm neon \
              +    5.24 ppm helium \
              +    1.7  ppm (carbon + 4 hydrogen) \
              +    1.14 ppm krypton \
              +    0.55 ppm hydrogen 2

air             air_2023

# universal gas constant
R_1976          8.31432e3 N m/(kmol K)

# polytropic index n
polyndx_1976    air_1976 (kg/kmol) gravity/(R_1976 lapserate) - 1

# If desired, redefine using current values for air mol wt and R

polyndx         polyndx_1976
# polyndx       air (kg/kmol) gravity/(R lapserate) - 1

# for comparison with various references

polyexpnt       (polyndx + 1) / polyndx

# The model assumes the following reference values:
# sea-level temperature and pressure

stdatmT0        288.15 K
stdatmP0        atm

# "effective radius" for relation of geometric to geopotential height,
# at a latitude at which g = 9.80665 m/s (approximately 45.543 deg); no
# relation to actual radius

earthradUSAtm   6356766 m

# Temperature vs. geopotential height h
# Assumes 15 degC at sea level
# Based on approx 45 deg latitude
# Lower limits of domain and upper limits of range are those of the
# tables in US Standard Atmosphere (NASA 1976)

stdatmTH(h) units=[m;K] domain=[-5000,11e3] range=[217,321] \
    stdatmT0+(-lapserate h) ; (stdatmT0+(-stdatmTH))/lapserate

# Temperature vs. geometric height z; based on approx 45 deg latitude
stdatmT(z) units=[m;K] domain=[-5000,11e3] range=[217,321] \
    stdatmTH(geop_ht(z)) ; ~geop_ht(~stdatmTH(stdatmT))

# Pressure vs. geopotential height h
# Assumes 15 degC and 101325 Pa at sea level
# Based on approx 45 deg latitude
# Lower limits of domain and upper limits of range are those of the
# tables in US Standard Atmosphere (NASA 1976)

stdatmPH(h) units=[m;Pa] domain=[-5000,11e3] range=[22877,177764] \
    atm (1 - (lapserate/stdatmT0) h)^(polyndx + 1) ; \
    (stdatmT0/lapserate) (1+(-(stdatmPH/stdatmP0)^(1/(polyndx + 1))))

# Pressure vs. geometric height z; based on approx 45 deg latitude
stdatmP(z) units=[m;Pa] domain=[-5000,11e3] range=[22877,177764] \
   stdatmPH(geop_ht(z)); ~geop_ht(~stdatmPH(stdatmP))

# Geopotential height from geometric height
# Based on approx 45 deg latitude
# Lower limits of domain and range are somewhat arbitrary; they
# correspond to the limits in the US Std Atm tables

geop_ht(z) units=[m;m] domain=[-5000,) range=[-5004,) \
    (earthradUSAtm z) / (earthradUSAtm + z) ; \
    (earthradUSAtm geop_ht) / (earthradUSAtm + (-geop_ht))

# The standard value for the sea-level acceleration due to gravity is
# 9.80665 m/s^2, but the actual value varies with latitude (Harrison 1949)
# R_eff = 2 g_phi / denom
# g_phi = 978.0356e-2 (1+0.0052885 sin(lat)^2+(-0.0000059) sin(2 lat)^2)
#   or
# g_phi = 980.6160e-2 (1+(-0.0026373) cos(2 lat)+0.0000059 cos(2 lat)^2)
# denom = 3.085462e-6+2.27e-9 cos(2 lat)+(-2e-12) cos(4 lat) (minutes?)
# There is no inverse function; the standard value applies at a latitude
# of about 45.543 deg

g_phi(lat) units=[deg;m/s2] domain=[0,90] noerror  \
    980.6160e-2 (1+(-0.0026373) cos(2 lat)+0.0000059 cos(2 lat)^2) m/s2

# effective Earth radius for relation of geometric height to
# geopotential height, as function of latitude (Harrison 1949)

earthradius_eff(lat) units=[deg;m] domain=[0,90] noerror \
    m 2 9.780356 (1+0.0052885 sin(lat)^2+(-0.0000059) sin(2 lat)^2) / \
    (3.085462e-6 + 2.27e-9 cos(2 lat) + (-2e-12) cos(4 lat))

# References
# Harrison, L.P. 1949.  Relation Between Geopotential and Geometric
#   Height.  In Smithsonian Meteorological Tables. List, Robert J., ed.
#   6th ed., 4th reprint, 1968.  Washington, DC: Smithsonian Institution.
# NASA.  US National Aeronautics and Space Administration. 1976.
#   US Standard Atmosphere 1976.  Washington, DC: US Government Printing Office.

# Gauge pressure functions
#
# Gauge pressure is measured relative to atmospheric pressure.  In the English
# system, where pressure is often given in pounds per square inch, gauge
# pressure is often indicated by 'psig' to distinguish it from absolute
# pressure, often indicated by 'psia'.  At the standard atmospheric pressure
# of 14.696 psia, a gauge pressure of 0 psig is an absolute pressure of 14.696
# psia; an automobile tire inflated to 31 psig has an absolute pressure of
# 45.696 psia.
#
# With gaugepressure(), the units must be specified (e.g., gaugepressure(1.5
# bar)); with psig(), the units are taken as psi, so the example above of tire
# pressure could be given as psig(31).
#
# If the normal elevation is significantly different from sea level, change
# Patm appropriately, and adjust the lower domain limit on the gaugepressure
# definition.

Patm    atm

gaugepressure(x) units=[Pa;Pa] domain=[-101325,) range=[0,) \
                x + Patm ; gaugepressure+(-Patm)

psig(x) units=[1;Pa] domain=[-14.6959487755135,) range=[0,) \
    gaugepressure(x psi) ; ~gaugepressure(psig) / psi


# Pressure for underwater diving

seawater             0.1 bar / meter
msw                  meter seawater
fsw                  foot seawater

#
# Wire Gauge
#
# This area is a nightmare with huge charts of wire gauge diameters
# that usually have no clear origin.  There are at least 5 competing wire gauge
# systems to add to the confusion.  The use of wire gauge is related to the
# manufacturing method: a metal rod is heated and drawn through a hole.  The
# size change can't be too big.  To get smaller wires, the process is repeated
# with a series of smaller holes.  Generally larger gauges mean smaller wires.
# The gauges often have values such as "00" and "000" which are larger sizes
# than simply "0" gauge.  In the tables that appear below, these gauges must be
# specified as negative numbers (e.g. "00" is -1, "000" is -2, etc).
# Alternatively, you can use the following units:
#

g00                      (-1)
g000                     (-2)
g0000                    (-3)
g00000                   (-4)
g000000                  (-5)
g0000000                 (-6)

# American Wire Gauge (AWG) or Brown & Sharpe Gauge appears to be the most
# important gauge. ASTM B-258 specifies that this gauge is based on geometric
# interpolation between gauge 0000, which is 0.46 inches exactly, and gauge 36
# which is 0.005 inches exactly.  Therefore, the diameter in inches of a wire
# is given by the formula 1|200 92^((36-g)/39).  Note that 92^(1/39) is close
# to 2^(1/6), so diameter is approximately halved for every 6 gauges.  For the
# repeated zero values, use negative numbers in the formula.  The same document
# also specifies rounding rules which seem to be ignored by makers of tables.
# Gauges up to 44 are to be specified with up to 4 significant figures, but no
# closer than 0.0001 inch.  Gauges from 44 to 56 are to be rounded to the
# nearest 0.00001 inch.
#
# In addition to being used to measure wire thickness, this gauge is used to
# measure the thickness of sheets of aluminum, copper, and most metals other
# than steel, iron and zinc.

wiregauge(g) units=[1;m] range=(0,) \
             1|200 92^((36+(-g))/39) in; 36+(-39)ln(200 wiregauge/in)/ln(92)
awg()        wiregauge

# Next we have the SWG, the Imperial or British Standard Wire Gauge.  This one
# is piecewise linear.  It was used for aluminum sheets but also shows up for
# wire used in jewelry.  

brwiregauge[in]  \
       -6 0.5    \
       -5 0.464  \
       -3 0.4    \
       -2 0.372  \
        3 0.252  \
        6 0.192  \
       10 0.128  \
       14 0.08   \
       19 0.04   \
       23 0.024  \
       26 0.018  \
       28 0.0148 \
       30 0.0124 \
       39 0.0052 \
       49 0.0012 \
       50 0.001

swg()        brwiregauge  

# The following is from the Appendix to ASTM B 258
#
#    For example, in U.S. gage, the standard for sheet metal is based on the
#    weight of the metal, not on the thickness. 16-gage is listed as
#    approximately .0625 inch thick and 40 ounces per square foot (the original
#    standard was based on wrought iron at .2778 pounds per cubic inch; steel
#    has almost entirely superseded wrought iron for sheet use, at .2833 pounds
#    per cubic inch). Smaller numbers refer to greater thickness. There is no
#    formula for converting gage to thickness or weight.
#
# It's rather unclear from the passage above whether the plate gauge values are
# therefore wrong if steel is being used.  Reference [15] states that steel is
# in fact measured using this gauge (under the name Manufacturers' Standard
# Gauge) with a density of 501.84 lb/ft3 = 0.2904 lb/in3 used for steel.
# But this doesn't seem to be the correct density of steel (.2833 lb/in3 is
# closer).
#
# This gauge was established in 1893 for purposes of taxation.

# Old plate gauge for iron

plategauge[(oz/ft^2)/(480*lb/ft^3)] \
      -5 300   \
       1 180   \
      14  50   \
      16  40   \
      17  36   \
      20  24   \
      26  12   \
      31   7   \
      36   4.5 \
      38   4

# Manufacturers Standard Gage

stdgauge[(oz/ft^2)/(501.84*lb/ft^3)] \
      -5 300   \
       1 180   \
      14  50   \
      16  40   \
      17  36   \
      20  24   \
      26  12   \
      31   7   \
      36   4.5 \
      38   4

# A special gauge is used for zinc sheet metal.  Notice that larger gauges
# indicate thicker sheets.

zincgauge[in]    \
        1 0.002  \
       10 0.02   \
       15 0.04   \
       19 0.06   \
       23 0.1    \
       24 0.125  \
       27 0.5    \
       28 1

#
# Imperial drill bit sizes are reported in inches or in a numerical or
# letter gauge.
#

drillgauge[in] \
       1  0.2280 \
       2  0.2210 \
       3  0.2130 \
       4  0.2090 \
       5  0.2055 \
       6  0.2040 \
       7  0.2010 \
       8  0.1990 \
       9  0.1960 \
      10  0.1935 \
      11  0.1910 \
      12  0.1890 \
      13  0.1850 \
      14  0.1820 \
      15  0.1800 \
      16  0.1770 \
      17  0.1730 \
      18  0.1695 \
      19  0.1660 \
      20  0.1610 \
      22  0.1570 \
      23  0.1540 \
      24  0.1520 \
      25  0.1495 \
      26  0.1470 \
      27  0.1440 \
      28  0.1405 \
      29  0.1360 \
      30  0.1285 \
      31  0.1200 \
      32  0.1160 \
      33  0.1130 \
      34  0.1110 \
      35  0.1100 \
      36  0.1065 \
      38  0.1015 \
      39  0.0995 \
      40  0.0980 \
      41  0.0960 \
      42  0.0935 \
      43  0.0890 \
      44  0.0860 \
      45  0.0820 \
      46  0.0810 \
      48  0.0760 \
      51  0.0670 \
      52  0.0635 \
      53  0.0595 \
      54  0.0550 \
      55  0.0520 \
      56  0.0465 \
      57  0.0430 \
      65  0.0350 \
      66  0.0330 \
      68  0.0310 \
      69  0.0292 \
      70  0.0280 \
      71  0.0260 \
      73  0.0240 \
      74  0.0225 \
      75  0.0210 \
      76  0.0200 \
      78  0.0160 \
      79  0.0145 \
      80  0.0135 \
      88  0.0095 \
      104 0.0031 

drillA    0.234 in
drillB    0.238 in
drillC    0.242 in
drillD    0.246 in
drillE    0.250 in
drillF    0.257 in
drillG    0.261 in
drillH    0.266 in
drillI    0.272 in
drillJ    0.277 in
drillK    0.281 in
drillL    0.290 in
drillM    0.295 in
drillN    0.302 in
drillO    0.316 in
drillP    0.323 in
drillQ    0.332 in
drillR    0.339 in
drillS    0.348 in
drillT    0.358 in
drillU    0.368 in
drillV    0.377 in
drillW    0.386 in
drillX    0.397 in
drillY    0.404 in
drillZ    0.413 in

#
# Screw sizes
#
# In the USA, screw diameters for both wood screws and machine screws
# are reported using a gauge number.  Metric machine screws are
# reported as Mxx where xx is the diameter in mm.
#

screwgauge(g) units=[1;m] range=[0,) \
              (.06 + .013 g) in ; (screwgauge/in + (-.06)) / .013

#
# Abrasive grit size
#
# Standards governing abrasive grit sizes are complicated, specifying
# fractions of particles that are passed or retained by different mesh
# sizes.  As a result, it is not possible to make precise comparisons
# of different grit standards.  The tables below allow the
# determination of rough equivlants by using median particle size.
#
# Standards in the USA are determined by the Unified Abrasives
# Manufacturers' Association (UAMA), which resulted from the merger of
# several previous organizations.  One of the old organizations was
# CAMI (Coated Abrasives Manufacturers' Institute).
#
# UAMA has a web page with plots showing abrasive particle ranges for
# various different grits and comparisons between standards.
#
# https://uama.org/abrasives-101/
#
# Abrasives are grouped into "bonded" abrasives for use with grinding
# wheels and "coated" abrasives for sandpapers and abrasive films.
# The industry uses different grit standards for these two
# categories.
#
# Another division is between "macrogrits", grits below 240 and
# "microgrits", which are above 240.  Standards differ, as do methods
# for determining particle size.  In the USA, ANSI B74.12 is the
# standard governing macrogrits.  ANSI B74.10 covers bonded microgrit
# abrasives, and ANSI B74.18 covers coated microgrit abrasives.  It
# appears that the coated standard is identical to the bonded standard
# for grits up through 600 but then diverges significantly.
#
# European grit sizes are determined by the Federation of European
# Producers of Abrasives.  http://www.fepa-abrasives.org
#
# They give two standards, the "F" grit for bonded abrasives and the
# "P" grit for coated abrasives.  This data is taken directly from
# their web page.

# FEPA P grit for coated abrasives is commonly seen on sandpaper in
# the USA where the paper will be marked P600, for example.  FEPA P
# grits are said to be more tightly constrained than comparable ANSI
# grits so that the particles are more uniform in size and hence give
# a better finish.

grit_P[micron] \
        12 1815 \
        16 1324 \
        20 1000 \
        24 764 \
        30 642 \
        36 538 \
        40 425 \
        50 336 \
        60 269 \
        80 201 \
        100 162 \
        120 125 \
        150 100 \
        180 82 \
        220 68 \
        240 58.5 \
        280 52.2 \
        320 46.2 \
        360 40.5 \
        400 35 \
        500 30.2 \
        600 25.8 \
        800 21.8 \
        1000 18.3 \
        1200 15.3 \
        1500 12.6 \
        2000 10.3 \
        2500 8.4

# The F grit is the European standard for bonded abrasives such as
# grinding wheels

grit_F[micron] \
        4 4890 \
        5 4125 \
        6 3460 \
        7 2900 \
        8 2460 \
        10 2085 \
        12 1765 \
        14 1470 \
        16 1230 \
        20 1040 \
        22 885 \
        24 745 \
        30 625 \
        36 525 \
        40 438 \
        46 370 \
        54 310 \
        60 260 \
        70 218 \
        80 185 \
        90 154 \
        100 129 \
        120 109 \
        150 82 \
        180 69 \
        220 58 \
        230 53 \
        240 44.5 \
        280 36.5 \
        320 29.2 \
        360 22.8 \
        400 17.3 \
        500 12.8 \
        600 9.3 \
        800 6.5 \
        1000 4.5 \
        1200 3 \
        1500 2.0 \
        2000 1.2

# According to the UAMA web page, the ANSI bonded and ANSI coated standards
# are identical to FEPA F in the macrogrit range (under 240 grit), so these
# values are taken from the FEPA F table.  The values for 240 and above are
# from the UAMA web site and represent the average of the "d50" range
# endpoints listed there.

ansibonded[micron] \
    4 4890 \
    5 4125 \
    6 3460 \
    7 2900 \
    8 2460 \
    10 2085 \
    12 1765 \
    14 1470 \
    16 1230 \
    20 1040 \
    22 885 \
    24 745 \
    30 625 \
    36 525 \
    40 438 \
    46 370 \
    54 310 \
    60 260 \
    70 218 \
    80 185 \
    90 154 \
    100 129 \
    120 109 \
    150 82 \
    180 69 \
    220 58 \
    240 50 \
    280 39.5 \
    320 29.5 \
    360 23 \
    400 18.25 \
    500 13.9 \
    600 10.55 \
    800 7.65 \
    1000 5.8 \
    1200 3.8

grit_ansibonded() ansibonded

# Like the bonded grit, the coated macrogrits below 240 are taken from the
# FEPA F table.  Data above this is from the UAMA site.  Note that the coated
# and bonded standards are evidently the same from 240 up to 600 grit, but
# starting at 800 grit, the coated standard diverges.  The data from UAMA show
# that 800 grit coated has an average size slightly larger than the average
# size of 600 grit coated/bonded.  However, the 800 grit has a significantly
# smaller particle size variation.
#
# Because of this non-monotonicity from 600 grit to 800 grit this definition
# produces a warning about the lack of a unique inverse.

ansicoated[micron] noerror \
    4 4890 \
    5 4125 \
    6 3460 \
    7 2900 \
    8 2460 \
    10 2085 \
    12 1765 \
    14 1470 \
    16 1230 \
    20 1040 \
    22 885 \
    24 745 \
    30 625 \
    36 525 \
    40 438 \
    46 370 \
    54 310 \
    60 260 \
    70 218 \
    80 185 \
    90 154 \
    100 129 \
    120 109 \
    150 82 \
    180 69 \
    220 58 \
    240 50 \
    280 39.5 \
    320 29.5 \
    360 23 \
    400 18.25 \
    500 13.9 \
    600 10.55 \
    800 11.5 \
    1000 9.5 \
    2000 7.2 \
    2500 5.5 \
    3000 4 \
    4000 3 \
    6000 2 \
    8000 1.2

grit_ansicoated()  ansicoated


#
# Is this correct?  This is the JIS Japanese standard used on waterstones
#
jisgrit[micron] \
     150 75 \
     180 63 \
     220 53 \
     280 48 \
     320 40 \
     360 35 \
     400 30 \
     600 20 \
     700 17 \
     800 14 \
     1000 11.5 \
     1200 9.5 \
     1500 8 \
     2000 6.7 \
     2500 5.5 \
     3000 4 \
     4000 3 \
     6000 2 \
     8000 1.2

# The "Finishing Scale" marked with an A (e.g. A75).  This information
# is from the web page of the sand paper manufacturer Klingspor
# https://www.klingspor.com/ctemplate1.aspx?page=default/html/gritGradingSystems_en-US.html
#
# I have no information about what this scale is used for.

grit_A[micron]\
     16 15.3 \
     25 21.8 \
     30 23.6 \
     35 25.75 \
     45 35 \
     60 46.2 \
     65 53.5 \
     75 58.5 \
     90 65 \
     110 78 \
     130 93 \
     160 127 \
     200 156
#
# Grits for DMT brand diamond sharpening stones from
# https://www.dmtsharp.com/resources/dmt-catalog-product-information.html
# "DMT Diamond Grits" PDF download

dmtxxcoarse  120 micron    # 120 mesh
dmtsilver    dmtxxcoarse
dmtxx        dmtxxcoarse
dmtxcoarse   60 micron     # 220 mesh
dmtx         dmtxcoarse
dmtblack     dmtxcoarse
dmtcoarse    45 micron     # 325 mesh
dmtc         dmtcoarse
dmtblue      dmtcoarse
dmtfine      25 micron     # 600 mesh
dmtred       dmtfine
dmtf         dmtfine
dmtefine     9 micron      # 1200 mesh
dmte         dmtefine
dmtgreen     dmtefine
dmtceramic   7 micron      # 2200 mesh
dmtcer       dmtceramic
dmtwhite     dmtceramic
dmteefine    3 micron      # 8000 mesh
dmttan       dmteefine
dmtee        dmteefine

#
# The following values come from a page in the Norton Stones catalog,
# available at their web page, http://www.nortonstones.com.
#

hardtranslucentarkansas  6 micron     # Natural novaculite (silicon quartz)
softarkansas             22 micron    #   stones

extrafineindia           22 micron    # India stones are Norton's manufactured
fineindia                35 micron    #   aluminum oxide product
mediumindia              53.5 micron
coarseindia              97 micron

finecrystolon            45 micron    # Crystolon stones are Norton's
mediumcrystalon          78 micron    #   manufactured silicon carbide product
coarsecrystalon          127 micron

# The following are not from the Norton catalog
hardblackarkansas        6 micron
hardwhitearkansas        11 micron
washita                  35 micron

#
# Mesh systems for measuring particle sizes by sifting through a wire
# mesh or sieve
#

# The Tyler system and US Sieve system are based on four steps for
# each factor of 2 change in the size, so each size is 2^1|4 different
# from the adjacent sizes.  Unfortunately, the mesh numbers are
# arbitrary, so the sizes cannot be expressed with a functional form.
# Various references round the values differently.  The mesh numbers
# are supposed to correspond to the number of holes per inch, but this
# correspondence is only approximate because it doesn't include the
# wire size of the mesh.

# The Tyler Mesh system was apparently introduced by the WS Tyler
# company, but it appears that they no longer use it.  They follow the
# ASTM E11 standard.

meshtyler[micron] \
          2.5 8000 \
          3   6727 \
          3.5 5657 \
          4   4757 \
          5   4000 \
          6   3364 \
          7   2828 \
          8   2378 \
          9   2000 \
         10   1682 \
         12   1414 \
         14   1189 \
         16   1000 \
         20    841 \
         24    707 \
         28    595 \
         32    500 \
         35    420 \
         42    354 \
         48    297 \
         60    250 \
         65    210 \
         80    177 \
        100    149 \
        115    125 \
        150    105 \
        170     88 \
        200     74 \
        250     63 \
        270     53 \
        325     44 \
        400     37 

# US Sieve size, ASTM E11
#
# The WS Tyler company prints the list from ASTM E11 in
# A Calculator for ASTM E11 Standard Sieve Designations
# https://blog.wstyler.com/particle-analysis/astm-e11-standard-designations

sieve[micron] \
          3.5   5600 \
          4     4750 \
          5     4000 \
          6     3350 \
          7     2800 \
          8     2360 \
         10     2000 \
         12     1700 \
         14     1400 \
         16     1180 \
         18     1000 \
         20      850 \
         25      710 \
         30      600 \
         35      500 \
         40      425 \
         45      355 \
         50      300 \
         60      250 \
         70      212 \
         80      180 \
        100      150 \
        120      125 \
        140      106 \
        170       90 \
        200       75 \
        230       63 \
        270       53 \
        325       45 \
        400       38 \
        450       32 \
        500       25 \
        625       20   # These last two values are not in the standard series
                       # but were included in the ASTM standard because they
meshUS()  sieve        # were in common usage.                               

# British Mesh size, BS 410: 1986
# This system appears to correspond to the Tyler and US system, but
# with different mesh numbers.
#
# http://www.panadyne.com/technical/panadyne_international_sieve_chart.pdf
# 

meshbritish[micron] \
          3    5657 \
          3.5  4757 \
          4    4000 \
          5    3364 \
          6    2828 \
          7    2378 \
          8    2000 \
         10    1682 \
         12    1414 \
         14    1189 \
         16    1000 \
         18     841 \
         22     707 \
         25     595 \
         30     500 \
         36     420 \
         44     354 \
         52     297 \
         60     250 \
         72     210 \
         85     177 \
        100     149 \
        120     125 \
        150     105 \
        170      88 \
        200      74 \
        240      63 \
        300      53 \
        350      44 \
        400      37  

# French system, AFNOR NFX11-501: 1970
# The system appears to be based on size doubling every 3 mesh
# numbers, though the values have been aggressively rounded.
# It's not clear if the unrounded values would be considered
# incorrect, so this is given as a table rather than a function.
# Functional form:
#    meshtamis(mesh) units=[1;m] 5000 2^(1|3 (mesh-38)) micron
#
# http://www.panadyne.com/technical/panadyne_international_sieve_chart.pdf

meshtamis[micron] \
        17   40 \
        18   50 \
        19   63 \
        20   80 \
        21  100 \
        22  125 \
        23  160 \
        24  200 \
        25  250 \
        26  315 \
        27  400 \
        28  500 \
        29  630 \
        30  800 \
        31 1000 \
        32 1250 \
        33 1600 \
        34 2000 \
        35 2500 \
        36 3150 \
        37 4000 \
        38 5000 

#
# Ring size. All ring sizes are given as the circumference of the ring.
#

# USA ring sizes.  Several slightly different definitions seem to be in
# circulation.  According to [15], the interior diameter of size n ring in
# inches is 0.32 n + 0.458 for n ranging from 3 to 13.5 by steps of 0.5.  The
# size 2 ring is inconsistently 0.538in and no 2.5 size is listed.
#
# However, other sources list 0.455 + 0.0326 n and 0.4525 + 0.0324 n as the
# diameter and list no special case for size 2.  (Or alternatively they are
# 1.43 + .102 n and 1.4216+.1018 n for measuring circumference in inches.)  One
# reference claimed that the original system was that each size was 1|10 inch
# circumference, but that source doesn't have an explanation for the modern
# system which is somewhat different.

ringsize(n) units=[1;in] domain=[2,) range=[1.6252,) \
            (1.4216+.1018 n) in ; (ringsize/in + (-1.4216))/.1018

# Old practice in the UK measured rings using the "Wheatsheaf gauge" with sizes
# specified alphabetically and based on the ring inside diameter in steps of
# 1|64 inch.  This system was replaced in 1987 by British Standard 6820 which
# specifies sizes based on circumference.  Each size is 1.25 mm different from
# the preceding size.  The baseline is size C which is 40 mm circumference.
# The new sizes are close to the old ones.  Sometimes it's necessary to go
# beyond size Z to Z+1, Z+2, etc.

sizeAring               37.50 mm
sizeBring               38.75 mm
sizeCring               40.00 mm
sizeDring               41.25 mm
sizeEring               42.50 mm
sizeFring               43.75 mm
sizeGring               45.00 mm
sizeHring               46.25 mm
sizeIring               47.50 mm
sizeJring               48.75 mm
sizeKring               50.00 mm
sizeLring               51.25 mm
sizeMring               52.50 mm
sizeNring               53.75 mm
sizeOring               55.00 mm
sizePring               56.25 mm
sizeQring               57.50 mm
sizeRring               58.75 mm
sizeSring               60.00 mm
sizeTring               61.25 mm
sizeUring               62.50 mm
sizeVring               63.75 mm
sizeWring               65.00 mm
sizeXring               66.25 mm
sizeYring               67.50 mm
sizeZring               68.75 mm

# Japanese sizes start with size 1 at a 13mm inside diameter and each size is
# 1|3 mm larger in diameter than the previous one.  They are multiplied by pi
# to give circumference.

jpringsize(n)  units=[1;mm] domain=[1,) range=[0.040840704,) \
               (38|3 + n/3) pi mm ; 3 jpringsize/ pi mm + (-38)

# The European ring sizes are the length of the circumference in mm minus 40.

euringsize(n)  units=[1;mm] (n+40) mm ; euringsize/mm + (-40)

#
# Abbreviations
#

mph                     mile/hr
brmpg                   mile/brgallon
usmpg                   mile/usgallon
mpg                     mile/gal
kph                     km/hr
fL                      footlambert
fpm                     ft/min
fps                     ft/s
rpm                     rev/min
rps                     rev/sec
mi                      mile
smi                     mile
nmi                     nauticalmile
mbh                     1e3 btu/hour
mcm                     1e3 circularmil
ipy                     inch/year    # used for corrosion rates
ccf                     100 ft^3     # used for selling water [18]
Mcf                     1000 ft^3    # not million cubic feet [18]
kp                      kilopond
kpm                     kp meter
Wh                      W hour
hph                     hp hour
plf                     lb / foot    # pounds per linear foot

#
# Compatibility units with Unix version
#

pa                      Pa
ev                      eV
hg                      Hg
oe                      Oe
mh                      mH
rd                      rod
pf                      pF
gr                      grain
nt                      N
hz                      Hz
hd                      hogshead
dry                     drygallon/gallon
nmile                   nauticalmile
beV                     GeV
bev                     beV
coul                    C

#
# Radioactivity units
#
event !dimensionless
becquerel    event           /s           # Activity of radioactive source
Bq                      becquerel    #
curie                   3.7e10 Bq    # Defined in 1910 as the radioactivity
Ci                      curie        # emitted by the amount of radon that is
                                     # in equilibrium with 1 gram of radium.
rutherford              1e6 Bq       #

RADIATION_DOSE          gray
gray                    J/kg         # Absorbed dose of radiation
Gy                      gray         #
rad                     1e-2 Gy      # From Radiation Absorbed Dose
rep                     8.38 mGy     # Roentgen Equivalent Physical, the amount
                                     #   of radiation which , absorbed in the
                                     #   body, would liberate the same amount
                                     #   of energy as 1 roentgen of X rays
                                     #   would, or 97 ergs.

sievert                 J/kg         # Dose equivalent:  dosage that has the
Sv                      sievert      #   same effect on human tissues as 200
rem                     1e-2 Sv      #   keV X-rays.  Different types of
                                     #   radiation are weighted by the
                                     #   Relative Biological Effectiveness
                                     #   (RBE).
                                     #
                                     #      Radiation type       RBE
                                     #       X-ray, gamma ray     1
                                     #       beta rays, > 1 MeV   1
                                     #       beta rays, < 1 MeV  1.08
                                     #       neutrons, < 1 MeV   4-5
                                     #       neutrons, 1-10 MeV   10
                                     #       protons, 1 MeV      8.5
                                     #       protons, .1 MeV      10
                                     #       alpha, 5 MeV         15
                                     #       alpha, 1 MeV         20
                                     #
                                     #   The energies are the kinetic energy
                                     #   of the particles.  Slower particles
                                     #   interact more, so they are more
                                     #   effective ionizers, and hence have
                                     #   higher RBE values.
                                     #
                                     # rem stands for Roentgen Equivalent
                                     # Mammal
banana_dose           0.1e-6 sievert # Informal measure of the dose due to 
                                     #   eating one average sized banana
roentgen              2.58e-4 C / kg # Ionizing radiation that produces
                                     #   1 statcoulomb of charge in 1 cc of
                                     #   dry air at stp.
rontgen                 roentgen     # Sometimes it appears spelled this way
sievertunit             8.38 rontgen # Unit of gamma ray dose delivered in one
                                     #   hour at a distance of 1 cm from a
                                     #   point source of 1 mg of radium
                                     #   enclosed in platinum .5 mm thick.

eman                    1e-7 Ci/m^3  # radioactive concentration
mache                   3.7e-7 Ci/m^3

#
# Atomic weights.  The atomic weight of an element is the ratio of the mass of
# a mole of the element to 1|12 of a mole of Carbon 12.  For each element, we
# list the atomic weights of all of the isotopes.  The Standard Atomic Weights
# apply to the elements in the isotopic composition that occurs naturally on
# Earth.  These are computed values based on the isotopic distribution, and
# may vary for specific samples.  Elements which do not occur naturally do
# not have Standard Atomic Weights.  For these elements, if data on the most
# stable isotope is available, is given.  Otherwise, the user must specify the
# desired isotope.  

!include elements.units

# Density of the elements
#
# Note some elements occur in multiple forms (allotropes) with different
# densities, and they are accordingly listed multiple times.  

# Density of gas phase elements at STP

hydrogendensity            0.08988 g/l    
heliumdensity              0.1786 g/l     
neondensity                0.9002 g/l     
nitrogendensity            1.2506 g/l     
oxygendensity              1.429 g/l      
fluorinedensity            1.696 g/l      
argondensity               1.784 g/l      
chlorinedensity            3.2 g/l        
kryptondensity             3.749 g/l      
xenondensity               5.894 g/l      
radondensity               9.73 g/l       

# Density of liquid phase elements near room temperature

brominedensity             3.1028 g/cm^3  
mercurydensity            13.534 g/cm^3  

# Density of solid elements near room temperature

lithiumdensity             0.534 g/cm^3  
potassiumdensity           0.862 g/cm^3  
sodiumdensity              0.968 g/cm^3  
rubidiumdensity            1.532 g/cm^3  
calciumdensity             1.55 g/cm^3   
magnesiumdensity           1.738 g/cm^3  
phosphorus_white_density   1.823 g/cm^3  
berylliumdensity           1.85 g/cm^3   
sulfur_gamma_density       1.92 g/cm^3   
cesiumdensity              1.93 g/cm^3
carbon_amorphous_density   1.95 g/cm^3   # average value
sulfur_betadensity         1.96 g/cm^3   
sulfur_alpha_density       2.07 g/cm^3   
carbon_graphite_density    2.267 g/cm^3  
phosphorus_red_density     2.27 g/cm^3   # average value
silicondensity             2.3290 g/cm^3 
phosphorus_violet_density  2.36 g/cm^3   
borondensity               2.37 g/cm^3   
strontiumdensity           2.64 g/cm^3   
phosphorus_black_density   2.69 g/cm^3   
aluminumdensity            2.7 g/cm^3    
bariumdensity              3.51 g/cm^3   
carbon_diamond_density     3.515 g/cm^3  
scandiumdensity            3.985 g/cm^3  
selenium_vitreous_density  4.28 g/cm^3   
selenium_alpha_density     4.39 g/cm^3   
titaniumdensity            4.406 g/cm^3  
yttriumdensity             4.472 g/cm^3  
selenium_gray_density      4.81 g/cm^3   
iodinedensity              4.933 g/cm^3  
europiumdensity            5.264 g/cm^3  
germaniumdensity           5.323 g/cm^3  
radiumdensity              5.5 g/cm^3    
arsenicdensity             5.727 g/cm^3  
tin_alpha_density          5.769 g/cm^3  
galliumdensity             5.91 g/cm^3   
vanadiumdensity            6.11 g/cm^3   
lanthanumdensity           6.162 g/cm^3  
telluriumdensity           6.24 g/cm^3   
zirconiumdensity           6.52 g/cm^3   
antimonydensity            6.697 g/cm^3  
ceriumdensity              6.77 g/cm^3   
praseodymiumdensity        6.77 g/cm^3   
ytterbiumdensity           6.9 g/cm^3    
neodymiumdensity           7.01 g/cm^3   
zincdensity                7.14 g/cm^3   
chromiumdensity            7.19 g/cm^3   
manganesedensity           7.21 g/cm^3   
promethiumdensity          7.26 g/cm^3   
tin_beta_density           7.265 g/cm^3  
indiumdensity              7.31 g/cm^3   
samariumdensity            7.52 g/cm^3   
irondensity                7.874 g/cm^3  
gadoliniumdensity          7.9 g/cm^3    
terbiumdensity             8.23 g/cm^3   
dysprosiumdensity          8.54 g/cm^3   
niobiumdensity             8.57 g/cm^3   
cadmiumdensity             8.65 g/cm^3   
holmiumdensity             8.79 g/cm^3   
cobaltdensity              8.9 g/cm^3    
nickeldensity              8.908 g/cm^3  
erbiumdensity              9.066 g/cm^3  
polonium_alpha_density     9.196 g/cm^3  
thuliumdensity             9.32 g/cm^3   
polonium_beta_density      9.398 g/cm^3  
bismuthdensity             9.78 g/cm^3   
lutetiumdensity            9.841 g/cm^3  
actiniumdensity           10 g/cm^3      
molybdenumdensity         10.28 g/cm^3   
silverdensity             10.49 g/cm^3   
technetiumdensity         11 g/cm^3      
leaddensity               11.34 g/cm^3   
thoriumdensity            11.7 g/cm^3    
thalliumdensity           11.85 g/cm^3   
americiumdensity          12 g/cm^3      
palladiumdensity          12.023 g/cm^3  
rhodiumdensity            12.41 g/cm^3   
rutheniumdensity          12.45 g/cm^3   
berkelium_beta_density    13.25 g/cm^3   
hafniumdensity            13.31 g/cm^3   
curiumdensity             13.51 g/cm^3   
berkelium_alphadensity    14.78 g/cm^3   
californiumdensity        15.1 g/cm^3    
protactiniumdensity       15.37 g/cm^3   
tantalumdensity           16.69 g/cm^3   
uraniumdensity            19.1 g/cm^3    
tungstendensity           19.3 g/cm^3    
golddensity               19.30 g/cm^3   
plutoniumdensity          19.816 g/cm^3  
neptuniumdensity          20.45 g/cm^3 # alpha form, only one at room temp
rheniumdensity            21.02 g/cm^3   
platinumdensity           21.45 g/cm^3   
iridiumdensity            22.56 g/cm^3   
osmiumdensity             22.59 g/cm^3

# A few alternate names

tin_gray tin_alpha_density
tin_white tin_beta_density
graphitedensity carbon_graphite_density
diamonddensity carbon_diamond_density

# Predicted density of elements that have not been made in sufficient
# quantities for measurement.  

franciumdensity            2.48 g/cm^3 # liquid, predicted melting point 8 degC
astatinedensity            6.35 g/cm^3    
einsteiniumdensity         8.84 g/cm^3    
fermiumdensity             9.7 g/cm^3     
nobeliumdensity            9.9 g/cm^3     
mendeleviumdensity        10.3 g/cm^3    
lawrenciumdensity         16 g/cm^3      
rutherfordiumdensity      23.2 g/cm^3
roentgeniumdensity        28.7 g/cm^3    
dubniumdensity            29.3 g/cm^3    
darmstadtiumdensity       34.8 g/cm^3    
seaborgiumdensity         35 g/cm^3      
bohriumdensity            37.1 g/cm^3    
meitneriumdensity         37.4 g/cm^3    
hassiumdensity            41 g/cm^3      

#
# population units
#

people                  1
person                  people
death                   people
capita                  people
percapita               per capita

# TGM dozen based unit system listed on the "dozenal" forum
# http://www.dozenalsociety.org.uk/apps/tgm.htm.  These units are
# proposed as an allegedly more rational alternative to the SI system.

Tim                     12^-4 hour         # Time 
Grafut                  gravity Tim^2      # Length based on gravity
Surf                    Grafut^2           # area
Volm                    Grafut^3           # volume
Vlos                    Grafut/Tim         # speed
Denz                    Maz/Volm           # density
Mag                     Maz gravity        # force
Maz                     Volm kg / oldliter # mass based on water

# Abbreviations

# Tm                      Tim              # Conflicts with Tm = Terameter
Gf                      Grafut
Sf                      Surf
Vm                      Volm
Vl                      Vlos
Mz                      Maz
Dz                      Denz

# Dozen based unit prefixes

Zena-                   12
Duna-                   12^2
Trina-                  12^3
Quedra-                 12^4
Quena-                  12^5
Hesa-                   12^6
Seva-                   12^7
Aka-                    12^8
Neena-                  12^9
Dexa-                   12^10
Lefa-                   12^11
Zennila-                12^12

Zeni-                   12^-1
Duni-                   12^-2
Trini-                  12^-3
Quedri-                 12^-4
Queni-                  12^-5
Hesi-                   12^-6
Sevi-                   12^-7
Aki-                    12^-8
Neeni-                  12^-9
Dexi-                   12^-10
Lefi-                   12^-11
Zennili-                12^-12

#
# Traditional Japanese units (shakkanhou)
#
# The traditional system of weights and measures is called shakkanhou from the
# shaku and the ken.  Japan accepted SI units in 1891 and legalized conversions
# to the traditional system.  In 1909 the inch-pound system was also legalized,
# so Japan had three legally approved systems.  A change to the metric system
# started in 1921 but there was a lot of resistance.  The Measurement Law of
# October 1999 prohibits sales in anything but SI units.  However, the old
# units still live on in construction and as the basis for paper sizes of books
# and tools used for handicrafts.
#
# Note that units below use the Hepburn romanization system.  Some other
# systems would render "mou", "jou", and "chou" as "mo", "jo" and "cho".
#
#
# http://hiramatu-hifuka.com/onyak/onyindx.html

# Japanese Proportions.  These are still in everyday use.  They also
# get used as units to represent the proportion of the standard unit.

wari_proportion      1|10
wari                 wari_proportion
bu_proportion        1|100    # The character bu can also be read fun or bun
                              # but usually "bu" is used for units.
rin_proportion       1|1000
mou_proportion       1|10000


# Japanese Length Measures
#
# The length system is called kanejaku or
# square and originated in China.  It was
# adopted as Japan's official measure in 701
# by the Taiho Code.  This system is still in
# common use in architecture and clothing.

shaku              1|3.3 m
mou                1|10000 shaku
rin                1|1000 shaku
bu_distance        1|100 shaku
sun                1|10 shaku
jou_distance       10 shaku
jou                jou_distance

kanejakusun        sun      # Alias to emphasize architectural name
kanejaku           shaku
kanejakujou        jou

# http://en.wikipedia.org/wiki/Taiwanese_units_of_measurement
taichi             shaku   # http://zh.wikipedia.org/wiki/台尺
taicun             sun     # http://zh.wikipedia.org/wiki/台制
!utf8
台尺               taichi  # via Hanyu Pinyin romanizations
台寸               taicun
!endutf8

# In context of clothing, shaku is different from architecture

kujirajaku         10|8 shaku
kujirajakusun      1|10 kujirajaku
kujirajakubu       1|100 kujirajaku
kujirajakujou      10 kujirajaku
tan_distance       3 kujirajakujou

ken                6 shaku  # Also sometimes 6.3, 6.5, or 6.6
                            # http://www.homarewood.co.jp/syakusun.htm

# mostly unused
chou_distance      60 ken
chou               chou_distance
ri                 36 chou

# Japanese Area Measures

# Tsubo is still used for land size, though the others are more
# recognized by their homonyms in the other measurements.

gou_area             1|10 tsubo
tsubo                36 shaku^2    # Size of two tatami = ken^2 ??
se                   30 tsubo
tan_area             10 se
chou_area            10 tan_area

# http://en.wikipedia.org/wiki/Taiwanese_units_of_measurement
ping                 tsubo     # http://zh.wikipedia.org/wiki/坪
jia                  2934 ping # http://zh.wikipedia.org/wiki/甲_(单位)
fen                  1|10 jia  # http://zh.wikipedia.org/wiki/分
fen_area             1|10 jia  # Protection against future collisions
!utf8
坪                   ping      # via Hanyu Pinyin romanizations
甲                   jia
分                   fen
分地                 fen_area  # Protection against future collisions
!endutf8

# Japanese architecture is based on a "standard" size of tatami mat.
# Room sizes today are given in number of tatami, and this number
# determines the spacing between colums and hence sizes of sliding
# doors and paper screens.  However, every region has its own slightly
# different tatami size.  Edoma, used in and around Tokyo and
# Hokkaido, is becoming a nationwide standard.  Kyouma is used around
# Kyoto, Osaka and Kyuushu, and Chuukyouma is used around Nagoya.
# Note that the tatami all have the aspect ratio 2:1 so that the mats
# can tile the room with some of them turned 90 degrees.
#
# http://www.moon2.net/tatami/infotatami/structure.html

edoma                (5.8*2.9) shaku^2
kyouma               (6.3*3.15) shaku^2
chuukyouma           (6*3) shaku^2
jou_area             edoma
tatami               jou_area

# Japanese Volume Measures

# The "shou" is still used for such things as alcohol and seasonings.
# Large quantities of paint are still purchased in terms of "to".

shaku_volume         1|10 gou_volume
gou_volume           1|10 shou
gou                  gou_volume
shou                 (4.9*4.9*2.7) sun^3   # The character shou which is
                                           # the same as masu refers to a
                                           # rectangular wooden cup used to
                                           # measure liquids and cereal.
                                           # Sake is sometimes served in a masu
                                           # Note that it happens to be
                                           # EXACTLY 7^4/11^3 liters.
to                   10 shou
koku                 10 to  # No longer used; historically a measure of rice

# Japanese Weight Measures
#
# https://web.archive.org/web/20040927115452/http://wyoming.hp.infoseek.co.jp/zatugaku/zamoney.html
# https://en.wikipedia.org/wiki/Japanese_units_of_measurement

# Not really used anymore.

rin_weight           1|10 bu_weight
bu_weight            1|10 monme
fun                  1|10 monme
monme                momme
kin                  160 monme
kan                  1000 monme
kwan                 kan         # This was the old pronunciation of the unit.
                                 # The old spelling persisted a few centuries
                                 # longer and was not changed until around
                                 # 1950.

# http://en.wikipedia.org/wiki/Taiwanese_units_of_measurement
# says: "Volume measure in Taiwan is largely metric".
taijin               kin      # http://zh.wikipedia.org/wiki/台斤
tailiang             10 monme # http://zh.wikipedia.org/wiki/台斤
taiqian              monme    # http://zh.wikipedia.org/wiki/台制
!utf8
台斤                 taijin # via Hanyu Pinyin romanizations
台兩                 tailiang
台錢                 taiqian
!endutf8

#
# Australian unit
#

australiasquare         (10 ft)^2   # Used for house area


#
# A few German units as currently in use.
#

zentner                 50 kg
doppelzentner           2 zentner
pfund                   500 g

# The klafter, which was used in central Europe, was derived from the span of
# outstretched arms.
#
# https://en.wikipedia.org/wiki/Obsolete_Austrian_units_of_measurement
# https://www.llv.li/files/abi/klafter-m2-en.pdf

austriaklafter          1.89648384 m    # Exact definition, 23 July 1871 
austriafoot             1|6 austriaklafter
prussiaklafter          1.88 m
prussiafoot             1|6 prussiaklafter
bavariaklafter          1.751155 m
bavariafoot             1|6 bavariaklafter
hesseklafter            2.5 m
hessefoot               1|6 hesseklafter
switzerlandklafter      metricklafter
switzerlandfoot         1|6 switzerlandklafter
swissklafter            switzerlandklafter
swissfoot               1|6 swissklafter
metricklafter           1.8 m

austriayoke             8 austriaklafter * 200 austriaklafter

liechtensteinsquareklafter 3.596652 m^2 # Used until 2017 to measure land area 
liechtensteinklafter  sqrt(liechtensteinsquareklafter)

# The klafter was also used to measure volume of wood, generally being a stack
# of wood one klafter wide, one klafter long, with logs 3 feet (half a klafter)
# in length

prussiawoodklafter      0.5 prussiaklafter^3
austriawoodklafter      0.5 austriaklafter^3
festmeter               m^3             # modern measure of wood, solid cube
raummeter               0.7 festmeter   # Air space between the logs, stacked
schuettraummeter        0.65 raummeter  # A cubic meter volume of split and cut
                                        #   firewood in a loose, unordered
                                        #   pile, not stacked.  This is called
                                        #   "tipped".
!utf8
schüttraummeter         schuettraummeter
!endutf8


#
# Swedish (Sweden) pre-metric units of 1739.
# The metric system was adopted in 1878.
# https://sv.wikipedia.org/wiki/Verkm%C3%A5tt
#

verklinje               2.0618125 mm
verktum                 12 verklinje
kvarter                 6 verktum
fot                     2 kvarter
aln                     2 fot
famn                    3 aln

#
# Some traditional Russian measures
#
# If you would like to help expand this section and understand
# cyrillic transliteration, let me know.  These measures are meant to
# reflect common usage, e.g. in translated literature.  
#

dessiatine              2400 sazhen^2    # Land measure
dessjatine              dessiatine

funt                    409.51718 grams  # similar to pound
zolotnik                1|96 funt        # used for precious metal measure
pood                    40 funt          # common in agricultural measure

arshin                  (2 + 1|3) feet
sazhen                  3 arshin         # analogous to fathom
verst                   500 sazhen       # of similar use to mile
versta                  verst
borderverst             1000 sazhen
russianmile             7 verst




#
# Old French distance measures, from French Weights and Measures
# Before the Revolution by Zupko
#

frenchfoot              144|443.296 m     # pied de roi, the standard of Paris.
pied                    frenchfoot        #   Half of the hashimicubit,
frenchfeet              frenchfoot        #   instituted by Charlemagne.
frenchinch              1|12 frenchfoot   #   This exact definition comes from
frenchthumb             frenchinch        #   a law passed on 10 Dec 1799 which
pouce                   frenchthumb       #   fixed the meter at
                                          #   3 frenchfeet + 11.296 lignes.
frenchline              1|12 frenchinch   # This is supposed to be the size
ligne                   frenchline        #   of the average barleycorn
frenchpoint             1|12 frenchline
toise                   6 frenchfeet
arpent                  180^2 pied^2      # The arpent is 100 square perches,
                                          # but the perche seems to vary a lot
                                          # and can be 18 feet, 20 feet, or 22
                                          # feet.  This measure was described
                                          # as being in common use in Canada in
                                          # 1934 (Websters 2nd).  The value
                                          # given here is the Paris standard
                                          # arpent.
frenchgrain             1|18827.15 kg     # Weight of a wheat grain, hence
                                          # smaller than the British grain.
frenchpound             9216 frenchgrain

#
# Before the Imperial Weights and Measures Act of 1824, various different
# weights and measures were in use in different places.
#

# Scots linear measure

scotsinch        1.00540054 UKinch
scotslink        1|100 scotschain
scotsfoot        12 scotsinch
scotsfeet        scotsfoot
scotsell         37 scotsinch
scotsfall        6 scotsell
scotschain       4 scotsfall
scotsfurlong     10 scotschain
scotsmile        8 scotsfurlong

# Scots area measure

scotsrood        40 scotsfall^2
scotsacre        4 scotsrood

# Irish linear measure

irishinch       UKinch
irishpalm       3 irishinch
irishspan       3 irishpalm
irishfoot       12 irishinch
irishfeet       irishfoot
irishcubit      18 irishinch
irishyard       3 irishfeet
irishpace       5 irishfeet
irishfathom     6 irishfeet
irishpole       7 irishyard      # Only these values
irishperch      irishpole        # are different from
irishchain      4 irishperch     # the British Imperial
irishlink       1|100 irishchain # or English values for
irishfurlong    10 irishchain    # these lengths.
irishmile       8 irishfurlong   #

#  Irish area measure

irishrood       40 irishpole^2
irishacre       4 irishrood

# English wine capacity measures (Winchester measures)

winepint       1|2 winequart
winequart      1|4 winegallon
winegallon     231 UKinch^3   # Sometimes called the Winchester Wine Gallon,
                              # it was legalized in 1707 by Queen Anne, and
                              # given the definition of 231 cubic inches.  It
                              # had been in use for a while as 8 pounds of wine
                              # using a merchant's pound, but the definition of
                              # the merchant's pound had become uncertain.  A
                              # pound of 15 tower ounces (6750 grains) had been
                              # common, but then a pound of 15 troy ounces
                              # (7200 grains) gained popularity.  Because of
                              # the switch in the value of the merchants pound,
                              # the size of the wine gallon was uncertain in
                              # the market, hence the official act in 1707.
                              # The act allowed that a six inch tall cylinder
                              # with a 7 inch diameter was a lawful wine
                              # gallon.  (This comes out to 230.9 in^3.)
                              # Note also that in Britain a legal conversion
                              # was established to the 1824 Imperial gallon
                              # then taken as 277.274 in^3 so that the wine
                              # gallon was 0.8331 imperial gallons.  This is
                              # 231.1 cubic inches (using the international
                              # inch).
winerundlet    18 winegallon
winebarrel     31.5 winegallon
winetierce     42 winegallon
winehogshead   2 winebarrel
winepuncheon   2 winetierce
winebutt       2 winehogshead
winepipe       winebutt
winetun        2 winebutt

# English beer and ale measures used 1803-1824 and used for beer before 1688

beerpint       1|2 beerquart
beerquart      1|4 beergallon
beergallon     282 UKinch^3
beerbarrel     36 beergallon
beerhogshead   1.5 beerbarrel

# English ale measures used from 1688-1803 for both ale and beer

alepint        1|2 alequart
alequart       1|4 alegallon
alegallon      beergallon
alebarrel      34 alegallon
alehogshead    1.5 alebarrel

# Scots capacity measure

scotsgill      1|4 mutchkin
mutchkin       1|2 choppin
choppin        1|2 scotspint
scotspint      1|2 scotsquart
scotsquart     1|4 scotsgallon
scotsgallon    827.232 UKinch^3
scotsbarrel    8 scotsgallon
jug            scotspint

# Scots dry capacity measure

scotswheatlippy   137.333 UKinch^3    # Also used for peas, beans, rye, salt
scotswheatlippies scotswheatlippy
scotswheatpeck    4 scotswheatlippy
scotswheatfirlot  4 scotswheatpeck
scotswheatboll    4 scotswheatfirlot
scotswheatchalder 16 scotswheatboll

scotsoatlippy     200.345 UKinch^3    # Also used for barley and malt
scotsoatlippies   scotsoatlippy
scotsoatpeck      4 scotsoatlippy
scotsoatfirlot    4 scotsoatpeck
scotsoatboll      4 scotsoatfirlot
scotsoatchalder   16 scotsoatboll

# Scots Tron weight

trondrop       1|16 tronounce
tronounce      1|20 tronpound
tronpound      9520 grain
tronstone      16 tronpound

# Irish liquid capacity measure

irishnoggin    1|4 irishpint
irishpint      1|2 irishquart
irishquart     1|2 irishpottle
irishpottle    1|2 irishgallon
irishgallon    217.6 UKinch^3
irishrundlet   18 irishgallon
irishbarrel    31.5 irishgallon
irishtierce    42 irishgallon
irishhogshead  2 irishbarrel
irishpuncheon  2 irishtierce
irishpipe      2 irishhogshead
irishtun       2 irishpipe

# Irish dry capacity measure

irishpeck      2 irishgallon
irishbushel    4 irishpeck
irishstrike    2 irishbushel
irishdrybarrel 2 irishstrike
irishquarter   2 irishbarrel

# English Tower weights, abolished in 1528

towerpound       5400 grain
towerounce       1|12 towerpound
towerpennyweight 1|20 towerounce
towergrain       1|32 towerpennyweight

# English Mercantile weights, used since the late 12th century

mercpound      6750 grain
mercounce      1|15 mercpound
mercpennyweight 1|20 mercounce

# English weights for lead

leadstone     12.5 lb
fotmal        70 lb
leadwey       14 leadstone
fothers       12 leadwey

# English Hay measure

newhaytruss 60 lb             # New and old here seem to refer to "new"
newhayload  36 newhaytruss    # hay and "old" hay rather than a new unit
oldhaytruss 56 lb             # and an old unit.
oldhayload  36 oldhaytruss

# English wool measure

woolclove   7 lb
woolstone   2 woolclove
wooltod     2 woolstone
woolwey     13 woolstone
woolsack    2 woolwey
woolsarpler 2 woolsack
woollast    6 woolsarpler

#
# Ancient history units:  There tends to be uncertainty in the definitions
#                         of the units in this section
# These units are from [11]

# Roman measure.  The Romans had a well defined distance measure, but their
# measures of weight were poor.  They adopted local weights in different
# regions without distinguishing among them so that there are half a dozen
# different Roman "standard" weight systems.

romanfoot    296 mm          # There is some uncertainty in this definition
romanfeet    romanfoot       # from which all the other units are derived.
pes          romanfoot       # This value appears in numerous sources. In "The
pedes        romanfoot       # Roman Land Surveyors", Dilke gives 295.7 mm.
romaninch    1|12 romanfoot  # The subdivisions of the Roman foot have the
romandigit   1|16 romanfoot  #   same names as the subdivisions of the pound,
romanpalm    1|4 romanfoot   #   but we can't have the names for different
romancubit   18 romaninch    #   units.
romanpace    5 romanfeet     # Roman double pace (basic military unit)
passus       romanpace
romanperch   10 romanfeet
stade        125 romanpaces
stadia       stade
stadium      stade
romanmile    8 stadia        # 1000 paces
romanleague  1.5 romanmile
schoenus     4 romanmile

# Other values for the Roman foot (from Dilke)

earlyromanfoot    29.73 cm
pesdrusianus      33.3 cm    # or 33.35 cm, used in Gaul & Germany in 1st c BC
lateromanfoot     29.42 cm

# Roman areas

actuslength  120 romanfeet     # length of a Roman furrow
actus        120*4 romanfeet^2 # area of the furrow
squareactus  120^2 romanfeet^2 # actus quadratus
acnua        squareactus
iugerum      2 squareactus
iugera       iugerum
jugerum      iugerum
jugera       iugerum
heredium     2 iugera          # heritable plot
heredia      heredium
centuria     100 heredia
centurium    centuria

# Roman volumes

sextarius       35.4 in^3      # Basic unit of Roman volume.  As always,
sextarii        sextarius      # there is uncertainty.  Six large Roman
                               # measures survive with volumes ranging from
                               # 34.4 in^3 to 39.55 in^3.  Three of them
                               # cluster around the size given here.
                               #
                               # But the values for this unit vary wildly
                               # in other sources.  One reference  gives 0.547
                               # liters, but then says the amphora is a
                               # cubic Roman foot.  This gives a value for the
                               # sextarius of 0.540 liters.  And the
                               # encyclopedia Britannica lists 0.53 liters for
                               # this unit.  Both [7] and [11], which were
                               # written by scholars of weights and measures,
                               # give the value of 35.4 cubic inches.
cochlearia      1|48 sextarius
cyathi          1|12 sextarius
acetabula       1|8 sextarius
quartaria       1|4 sextarius
quartarius      quartaria
heminae         1|2 sextarius
hemina          heminae
cheonix         1.5 sextarii

# Dry volume measures (usually)

semodius        8 sextarius
semodii         semodius
modius          16 sextarius
modii           modius

# Liquid volume measures (usually)

congius         12 heminae
congii          congius
amphora         8 congii
amphorae        amphora      # Also a dry volume measure
culleus         20 amphorae
quadrantal      amphora

# Roman weights

libra           5052 grain   # The Roman pound varied significantly
librae          libra        # from 4210 grains to 5232 grains.  Most of
romanpound      libra        # the standards were obtained from the weight
uncia           1|12 libra   # of particular coins.  The one given here is
unciae          uncia        # based on the Gold Aureus of Augustus which
romanounce      uncia        # was in use from BC 27 to AD 296.
deunx           11 uncia
dextans         10 uncia
dodrans         9 uncia
bes             8 uncia
seprunx         7 uncia
semis           6 uncia
quincunx        5 uncia
triens          4 uncia
quadrans        3 uncia
sextans         2 uncia
sescuncia       1.5 uncia
semuncia        1|2 uncia
siscilius       1|4 uncia
sextula         1|6 uncia
semisextula     1|12 uncia
scriptulum      1|24 uncia
scrupula        scriptulum
romanobol       1|2 scrupula

romanaspound    4210 grain    # Old pound based on bronze coinage, the
                              # earliest money of Rome BC 338 to BC 268.

# Egyptian length measure

egyptianroyalcubit      20.63 in    # plus or minus .2 in
egyptianpalm            1|7 egyptianroyalcubit
egyptiandigit           1|4 egyptianpalm
egyptianshortcubit      6 egyptianpalm

doubleremen             29.16 in  # Length of the diagonal of a square with
remendigit       1|40 doubleremen # side length of 1 royal egyptian cubit.
                                  # This is divided into 40 digits which are
                                  # not the same size as the digits based on
                                  # the royal cubit.

# Greek length measures

greekfoot               12.45 in      # Listed as being derived from the
greekfeet               greekfoot     # Egyptian Royal cubit in [11].  It is
greekcubit              1.5 greekfoot # said to be 3|5 of a 20.75 in cubit.
pous                    greekfoot
podes                   greekfoot
orguia                  6 greekfoot
greekfathom             orguia
stadion                 100 orguia
akaina                  10 greekfeet
plethron                10 akaina
greekfinger             1|16 greekfoot
homericcubit            20 greekfingers  # Elbow to end of knuckles.
shortgreekcubit         18 greekfingers  # Elbow to start of fingers.

ionicfoot               296 mm
doricfoot               326 mm

olympiccubit            25 remendigit    # These olympic measures were not as
olympicfoot             2|3 olympiccubit # common as the other greek measures.
olympicfinger           1|16 olympicfoot # They were used in agriculture.
olympicfeet             olympicfoot
olympicdakylos          olympicfinger
olympicpalm             1|4 olympicfoot
olympicpalestra         olympicpalm
olympicspithame         3|4 foot
olympicspan             olympicspithame
olympicbema             2.5 olympicfeet
olympicpace             olympicbema
olympicorguia           6 olympicfeet
olympicfathom           olympicorguia
olympiccord             60 olympicfeet
olympicamma             olympiccord
olympicplethron         100 olympicfeet
olympicstadion          600 olympicfeet

# Greek capacity measure

greekkotyle             270 ml           # This approximate value is obtained
xestes                  2 greekkotyle    # from two earthenware vessels that
khous                   12 greekkotyle   # were reconstructed from fragments.
metretes                12 khous         # The kotyle is a day's corn ration
choinix                 4 greekkotyle    # for one man.
hekteos                 8 choinix
medimnos                6 hekteos

# Greek weight.  Two weight standards were used, an Aegina standard based
# on the Beqa shekel and an Athens (attic) standard.

aeginastater            192 grain        # Varies up to 199 grain
aeginadrachmae          1|2 aeginastater
aeginaobol              1|6 aeginadrachmae
aeginamina              50 aeginastaters
aeginatalent            60 aeginamina    # Supposedly the mass of a cubic foot
                                         # of water (whichever foot was in use)

atticstater             135 grain        # Varies 134-138 grain
atticdrachmae           1|2 atticstater
atticobol               1|6 atticdrachmae
atticmina               50 atticstaters
attictalent             60 atticmina     # Supposedly the mass of a cubic foot
                                         # of water (whichever foot was in use)

# "Northern" cubit and foot.  This was used by the pre-Aryan civilization in
# the Indus valley.  It was used in Mesopotamia, Egypt, North Africa, China,
# central and Western Europe until modern times when it was displaced by
# the metric system.

northerncubit           26.6 in           # plus/minus .2 in
northernfoot            1|2 northerncubit

sumeriancubit           495 mm
kus                     sumeriancubit
sumerianfoot            2|3 sumeriancubit

assyriancubit           21.6 in
assyrianfoot            1|2 assyriancubit
assyrianpalm            1|3 assyrianfoot
assyriansusi            1|20 assyrianpalm
susi                    assyriansusi
persianroyalcubit       7 assyrianpalm


# Arabic measures.  The arabic standards were meticulously kept.  Glass weights
# accurate to .2 grains were made during AD 714-900.

hashimicubit            25.56 in          # Standard of linear measure used
                                          # in Persian dominions of the Arabic
                                          # empire 7-8th cent.  Is equal to two
                                          # French feet.

blackcubit              21.28 in
arabicfeet              1|2 blackcubit
arabicfoot              arabicfeet
arabicinch              1|12 arabicfoot
arabicmile              4000 blackcubit

silverdirhem            45 grain  # The weights were derived from these two
tradedirhem             48 grain  # units with two identically named systems
                                  # used for silver and used for trade purposes

silverkirat             1|16 silverdirhem
silverwukiyeh           10 silverdirhem
silverrotl              12 silverwukiyeh
arabicsilverpound       silverrotl

tradekirat              1|16 tradedirhem
tradewukiyeh            10 tradedirhem
traderotl               12 tradewukiyeh
arabictradepound        traderotl

# Miscellaneous ancient units

parasang                3.5 mile # Persian unit of length usually thought
                                 # to be between 3 and 3.5 miles
biblicalcubit           21.8 in
hebrewcubit             17.58 in
li                      10|27.8 mile  # Chinese unit of length
                                      #   100 li is considered a day's march
liang                   11|3 oz       # Chinese weight unit


# Medieval time units.  According to the OED, these appear in Du Cange
# by Papias.

timepoint               1|5 hour  # also given as 1|4
timeminute              1|10 hour
timeostent              1|60 hour
timeounce               1|8 timeostent
timeatom                1|47 timeounce

# Given in [15], these subdivisions of the grain were supposedly used
# by jewelers.  The mite may have been used but the blanc could not
# have been accurately measured.

mite                    1|20 grain
droit                   1|24 mite
periot                  1|20 droit
blanc                   1|24 periot

#
# Localization
#

!var UNITS_ENGLISH US
hundredweight           ushundredweight
ton                     uston
scruple                 apscruple
fluidounce              usfluidounce
gallon                  usgallon
bushel                  usbushel
quarter                 quarterweight
cup                     uscup
tablespoon              ustablespoon
teaspoon                usteaspoon
dollar                  US$
cent                    $ 0.01
penny                   cent
minim                   minimvolume
pony                    ponyvolume
grand                   usgrand
firkin                  usfirkin
hogshead                ushogshead
cable                   uscable
!endvar

!var UNITS_ENGLISH GB
hundredweight           brhundredweight
ton                     brton
scruple                 brscruple
fluidounce              brfluidounce
gallon                  brgallon
bushel                  brbushel
quarter                 brquarter
chaldron                brchaldron
cup                     brcup
teacup                  brteacup
tablespoon              brtablespoon
teaspoon                brteaspoon
dollar                  US$
cent                    $ 0.01
penny                   brpenny
minim                   minimnote
pony                    brpony
grand                   brgrand
firkin                  brfirkin
hogshead                brhogshead
cable                   brcable
!endvar

!varnot UNITS_ENGLISH GB US
!message Unknown value for environment variable UNITS_ENGLISH.  Should be GB or US.
!endvar


!utf8
⅛-                      1|8
¼-                      1|4
⅜-                      3|8
½-                      1|2
⅝-                      5|8
¾-                      3|4
⅞-                      7|8
⅙-                      1|6
⅓-                      1|3
⅔-                      2|3
⅚-                      5|6
⅕-                      1|5
⅖-                      2|5
⅗-                      3|5
⅘-                      4|5
# U+2150-               1|7  For some reason these characters are getting
# U+2151-               1|9  flagged as invalid UTF8.
# U+2152-               1|10
#⅐-               1|7   # fails under MacOS
#⅑-               1|9   # fails under MacOS
#⅒-               1|10  # fails under MacOS
ℯ                       exp(1)      # U+212F, base of natural log
µ-                      micro       # micro sign U+00B5
μ-                      micro       # small mu U+03BC
ångström                angstrom
Å                       angstrom    # angstrom symbol U+212B
Å                       angstrom    # A with ring U+00C5
röntgen                 roentgen
°C                      degC
°F                      degF
°K                      K           # °K is incorrect notation
°R                      degR
°                       degree
℃                       degC
℉                       degF
K                       K          # Kelvin symbol, U+212A
ℓ                       liter      # unofficial abbreviation used in some places
Ω                       ohm       # Ohm symbol U+2126
Ω                       ohm       # Greek capital omega U+03A9
℧                       mho
G₀                      G0
H₀                      H0              
Z₀                      Z0
a₀                      a0
n₀                      n0
ε₀                      epsilon0
μ₀                      mu0
Φ₀                      Phi0
R∞                      Rinfinity
R_∞                     Rinfinity
λ_C                     lambda_C
μ_B                     mu_B
ν_133Cs                 nu_133Cs  
ʒ                        dram     # U+0292
℈                       scruple
℥                       ounce
℔                       lb
ℎ                       h
ℏ                       hbar
τ                       tau    
π                       pi      # Greek letter pi
𝜋                       pi      # mathematical italic small pi
α                       alpha  
σ                       sigma  
‰                       1|1000
‱                       1|10000
′                       '        # U+2032
″                       "        # U+2033

#
# Unicode currency symbols
#

¢                       cent
£                       britainpound
¥                       japanyen
€                       euro
₩                       southkoreawon
₪                       israelnewshekel
₤                       lira
# ₺                       turkeylira  # fails under MacOS
₨                       rupee           # unofficial legacy rupee sign
# ₹                       indiarupee      # official rupee sign # MacOS fail
#؋                       afghanafghani    # fails under MacOS
฿                       thailandbaht
₡                       costaricacolon
₣                       francefranc
₦                       nigerianaira
₧                       spainpeseta
₫                       vietnamdong
₭                       laokip 
₮                       mongoliatugrik
₯                       greecedrachma
₱                       philippinepeso
# ₲                       paraguayguarani # fails under MacOS
#₴                       ukrainehryvnia   # fails under MacOS
#₵                       ghanacedi        # fails under MacOS
#₸                       kazakhstantenge  # fails under MacOS
#₼                       azerbaijanmanat # fails under MacOS
#₽                       russiaruble     # fails under MacOS
#₾                       georgialari     # fails under MacOS
﷼                       iranrial
﹩                      $
￠                      ¢
￡                      £
￥                      ¥
￦                      ₩

#
# Square Unicode symbols starting at U+3371
#

㍱                      hPa
㍲                      da
㍳                      au
㍴                      bar
# ㍵                          oV???
㍶                      pc
#㍷                      dm      invalid on Mac
#㍸                      dm^2    invalid on Mac
#㍹                      dm^3    invalid on Mac
㎀                      pA
㎁                      nA
㎂                      µA
㎃                      mA
㎄                      kA
㎅                      kB
㎆                      MB
㎇                      GB
㎈                      cal
㎉                      kcal
㎊                      pF
㎋                      nF
㎌                      µF
㎍                      µg
㎎                      mg
㎏                      kg
㎐                      Hz
㎑                      kHz
㎒                      MHz
㎓                      GHz
㎔                      THz
㎕                      µL
㎖                      mL
㎗                      dL
㎘                      kL
㎙                      fm
㎚                      nm
㎛                      µm
㎜                      mm
㎝                      cm
㎞                      km
㎟                      mm^2
㎠                      cm^2
㎡                      m^2
㎢                      km^2
㎣                      mm^3
㎤                      cm^3
㎥                      m^3
㎦                      km^3
㎧                      m/s
㎨                      m/s^2
㎩                      Pa
㎪                      kPa
㎫                      MPa
㎬                      GPa
㎭                      rad
㎮                      rad/s
㎯                      rad/s^2
㎰                      ps
㎱                      ns
㎲                      µs
㎳                      ms
㎴                      pV
㎵                      nV
㎶                      µV
㎷                      mV
㎸                      kV
㎹                      MV
㎺                      pW
㎻                      nW
㎼                      µW
㎽                      mW
㎾                      kW
㎿                      MW
㏀                      kΩ
㏁                      MΩ
㏃                      Bq
㏄                      cc
㏅                      cd
㏆                      C/kg
㏈()                    dB
㏉                      Gy
㏊                      ha
# ㏋  HP??
㏌                      in
# ㏍                      KK??
# ㏎                      KM???
㏏                      kt
㏐                      lm
# ㏑                      ln
# ㏒                      log
㏓                      lx
㏔                      mb
㏕                      mil
㏖                      mol
㏗()                    pH
㏙                      ppm
#   ㏚     PR???
㏛                      sr
㏜                      Sv
㏝                      Wb
#㏞                      V/m     Invalid on Mac
#㏟                      A/m     Invalid on Mac
#㏿                      gal     Invalid on Mac

!endutf8

############################################################################
#
# Unit list aliases
#
# These provide a shorthand for conversions to unit lists.
#
############################################################################

!unitlist uswt lb;oz
!unitlist hms hr;min;sec
!unitlist time year;day;hr;min;sec
!unitlist dms deg;arcmin;arcsec
!unitlist ftin ft;in;1|8 in
!unitlist inchfine in;1|8 in;1|16 in;1|32 in;1|64 in
!unitlist usvol cup;3|4 cup;2|3 cup;1|2 cup;1|3 cup;1|4 cup;\
                tbsp;tsp;1|2 tsp;1|4 tsp;1|8 tsp

############################################################################
#
# The following units were in the Unix units database but do not appear in
# this file:
#
#      wey        used for cheese, salt and other goods.  Measured mass or
#      waymass    volume depending on what was measured and where the measuring
#                 took place.  A wey of cheese ranged from 200 to 324 pounds.
#
#      sack       No precise definition
#
#      spindle    The length depends on the type of yarn
#
#      block      Defined variously on different computer systems
#
#      erlang     A unit of telephone traffic defined variously.
#                 Omitted because there are no other units for this
#                 dimension.  Is this true?  What about CCS = 1/36 erlang?
#                 Erlang is supposed to be dimensionless.  One erlang means
#                 a single channel occupied for one hour.
#
############################################################################
#
# The following have been suggested or considered and deemed out of scope.
# They will not be added to GNU units.  
#
# Conversions between different calendar systems used in different countries or
# different historical periods are out of scope for units and will not be added.
#
# Wind chill and heat index cannot be handled because they are bivarite,
# with dependence on both the temperature and wind speed or humidity.  
#
# Plain english text output like "one hectare is equivalent to one hundred
# million square centimeters" is out of scope.  
#
