;;;; -*- mode:emacs-lisp;coding:utf-8 -*-
;;;;****************************************************************************
;;;;FILE:               constantes.el
;;;;LANGUAGE:           emacs lisp
;;;;SYSTEM:             POSIX
;;;;USER-INTERFACE:     NONE
;;;;DESCRIPTION
;;;;
;;;;    Defines constants of physics.
;;;;
;;;;AUTHORS
;;;;    <PJB> Pascal Bourguignon <pjb@informatimago.com>
;;;;MODIFICATIONS
;;;;    2003-12-04 <PJB> Added this header.
;;;;BUGS
;;;;LEGAL
;;;;    GPL
;;;;
;;;;    Copyright Pascal Bourguignon 2003 - 2011
;;;;
;;;;    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
;;;;    2 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., 59 Temple Place, Suite 330,
;;;;    Boston, MA 02111-1307 USA
;;;;****************************************************************************
(require 'cl)
(require 'pjb-cl)
(require 'pjb-strings)


;; http://lx50.fmridc.org/dmt/units_j.dat

(eval-when (compile load eval)
  (defvar *constantes* '()
    "List of constantes definies par def-phys-const.") ;;*constantes*
  )


(defmacro def-phys-const (name value unit &optional doc-string)
  (pushnew name *constantes*)
  (setq doc-string (or doc-string ""))
  `(progn
     (defconst ,name ,value ,doc-string)
     (put  ',name 'physical-constant t)
     (put  ',name 'unit ',unit)
     ,name)
  ) ;;def-phys-const


(defun physical-constant-p (name)
  (get name 'physical-constant)
  ) ;;physical-constant-p


(defun unit (name)
  (if (physical-constant-p name)
      (get name 'unit)
      (error "%s is not a physical constant (to my knowledge)." name))
  ) ;;unit


;; (get 'c 'unit)

(def-phys-const  N       6.022098e23           (^ mol -1)
                 "Avogadro's number") ;;N

(def-phys-const  H_0      1.01325e5            (* kg (^ m -1) (^ s -2))
                 "pression atmosphérique normale") ;;H_0

(def-phys-const  V_0      22.414e-3            (* (^ m 3) (^ mol -1))
                 "volume molaire du gaz parfait (CN)") ;;V_0

(def-phys-const  T_0       273.15              K
                 "zéro de l'échelle Celsius") ;;T_0

(def-phys-const  n_0 (/ N V_0)                 (^ m -3)
                 "Loschmidt's number") ;;n_0



(def-phys-const  R       8.3143                (* J (^ K -1) (^ mol -1))
                 "constante des gaz parfaits") ;;R

(def-phys-const  G       6.672e-11             (* (^ kg -1) (^ m 3) (^ s -2))
                 "constante de la gravitation") ;;G

(def-phys-const  e       1.602189e-19          C
                 "charge élémentaire") ;;e

(def-phys-const  c       299792458.0           (* m (^ s -1))
                 "célérité de la lumière") ;;c

(def-phys-const  k       1.38066e-23           (* J (^ K -1))
                 "Boltzmann's constant") ;;k

(def-phys-const  h       6.626176e-34          (* J s)
                 "Planck's constant") ;;h

(def-phys-const  m_p     1.67265e-27            kg
                 "Mass of proton") ;;m_p

(def-phys-const  m_n     1.67496e-27            kg
                 "Mass of neutron") ;;m_n

(def-phys-const  m_e     9.10953e-31            kg
                 "Mass of electron") ;;m_e

(def-phys-const  mu_0       (* 16e-7 (atan 1))  (* H (^ m -1))
                 "perméabilité du vide") ;;mu_0

(def-phys-const  epsilon_0  (/ 1 (* mu_0 c c))  (* F (^ m -1))
                 "permittivité du vide") ;;epsilon_0

(def-phys-const  g_n        9.80665             (* m (^ s -2))
                 "pesanteur normale") ;;g_n


;;----------------------------------------------------------------------
;; Solar System
;;----------------------------------------------------------------------


;; Sun

(def-phys-const sun-mass      1.989e+30            kg
                "Mass of Sun") ;;sun-mass

(def-phys-const sun-equatorial-radius 695e6        m
                "Equatorial Radius of Sun")

(def-phys-const sun-luminosity   3.827e26  J/s)

(def-phys-const sun-mean-surface-temperature 6274   K)

;; Earth

(def-phys-const earth-mass     5.9736e24           kg
                "Mass of Earth") ;;earth-mass

(def-phys-const earth-volume   108.321e19          (^ m 3)
                "Volume of Earth") ;;earth-volume

(def-phys-const earth-radius-equatorial   6378.1e3        m
                "Equatorial radius of Earth") ;;earth-radius-equatorial

(def-phys-const earth-radius-polar        6356.8e3        m
                "Polar radius of Earth") ;;earth-radius-polar

(def-phys-const earth-radius-mean         6371.0e3        m
                "Volumetric Mean Radius of Earth") ;;earth-radius-mean

(def-phys-const earth-core-radius         3485e3          m
                "Radius of core of Earth") ;;earth-core-radius

(def-phys-const earth-ellipticity          0.00335       1
                "Ellipticity of Earth") ;;earth-ellipticity

(def-phys-const earth-density             5515           (* kg (^ m -3))
                "Ellipticity of Earth") ;;earth-density


(def-phys-const earth-GM             .3986e15         (* (^ m 3) (^ s -2))
                "G × Mass of Earth") ;;earth-GM

(def-phys-const earth-albedo-bond                  0.306           1
                "Bond Albedo of Earth") ;;earth-albedo-bond

(def-phys-const earth-albedo-visual-geometric      0.367           1
                "Visual Geometric Albedo of Earth") ;;earth-albedo-visual-geometric

(def-phys-const earth-visual-magnitude            -3.86            1
                "Visual Magnitude (V(1,0)) of Earth") ;;earth-visual-magnitude


;;; Solar Irradiance          1367.6 W m-2
;;; Black-Body Temperature    254.3 K
;;; Moment of Inertia         0.3308 I MR-2
;;; J2                        1082.63 × 10-6
;;; Topographic Range         20 km



;;;; Orbital Parameters
;;;; Semimajor Axis           149.60 × 106 km
;;;; Sidereal Orbit Period    365.256 day
;;;; Tropical Orbit Period    365.242 day

(def-phys-const earth-perihelion           147.09e9       m
                "Perihelion of Earth") ;;earth-perihelion

(def-phys-const earth-aphelion             152.10e9       m
                "Aphelion of Earth") ;;earth-aphelion


(def-phys-const earth-mass                      5.9736e24  kg)
(def-phys-const earth-volume                    108.321e10  (^ km 3))
(def-phys-const earth-equatorial-radius         6378.1  km)
(def-phys-const earth-polar-radius              6356.8  km)
(def-phys-const earth-volumetric-mean-radius    6371.0  km)
(def-phys-const earth-core-radius               3485  km)
(def-phys-const earth-ellipticity               0.00335  1)
(def-phys-const earth-mean-density              5515 (* kg (^ m -3)))
(def-phys-const earth-surface-gravity           9.78 (* m (^ s -2)))
(def-phys-const earth-escape-velocity           11.186 (* km (^ s -1)))
(def-phys-const earth-gm                        0.3986e6 (* (^ km 3) (^ s -2)))
(def-phys-const earth-bond-albedo               0.306  1)
(def-phys-const earth-visual-geometric-albedo   0.367  1)
(def-phys-const earth-albedo-visual-magnitude   -3.86  1)
(def-phys-const earth-solar-irradiance          1367.6 (* W (^ m -2)))
(def-phys-const earth-black-body-temperature    254.3  K)
(def-phys-const earth-moment-of-inertia         0.3308 (* I (^ MR -2)))
(def-phys-const earth-j2                        1082.63e-6  1)
(def-phys-const earth-topographic-range         20  km)
(def-phys-const earth-semimajor-axis            149.60e6  km)
(def-phys-const earth-sidereal-orbit-period     365.256  day)
(def-phys-const earth-tropical-orbit-period     365.242  day)
(def-phys-const earth-pericenter                147.09e6  km)
(def-phys-const earth-apocenter                 152.10e6  km)
(def-phys-const earth-mean-orbital-velocity     29.78 (* km (^ s -1)))
(def-phys-const earth-maximum-orbital-velocity  30.29 (* km (^ s -1)))
(def-phys-const earth-minimum-orbital-velocity  29.29 (* km (^ s -1)))
(def-phys-const earth-sidereal-rotation-period  23.9345  hours)
(def-phys-const earth-length-of-day             24.0000  hours)
(def-phys-const earth-obliquity-to-orbit        23.45  1)
(def-phys-const earth-orbital-eccentricity      0.01671022  1)
(def-phys-const earth-orbital-inclination       0.00005  °)
(def-phys-const earth-longitude-of-ascending-node  -11.26064  °)
(def-phys-const earth-longitude-of-pericenter   102.94719  °)
(def-phys-const earth-mean-longitude            100.46435  °)
(def-phys-const earth-dipole-field-strength     0.3076 (* gauss (^ Re 3)))
(def-phys-const earth-latitude-of-dipole-north  78.6  N)
(def-phys-const earth-longitude-of-dipole-north  70.1  W)
(def-phys-const earth-dipole-offset-distance    0.0725  Re)
(def-phys-const earth-latitude-of-offset-vector  18.3  N)
(def-phys-const earth-longitude-of-offset-vector  147.8  E)
(def-phys-const Re 6378.1 km "Earth Radii")
(def-phys-const earth-surface-pressure          1014  mbar)
(def-phys-const earth-surface-density           1.217 (* kg (^ m -3)))
(def-phys-const earth-scale-height              8.5  km)
(def-phys-const earth-average-temperature       288  K)
(def-phys-const earth-diurnal-temperature-minimum 283 K)
(def-phys-const earth-diurnal-temperature-maximum 293 K)
(def-phys-const earth-surface-wind-speeds-minimum  0 (* m (^ s -1)))
(def-phys-const earth-surface-wind-speeds-maximum  100 (* m (^ s -1)))
(def-phys-const earth-mean-molecular-weight     28.97 (* g (^ mol -1)))
(def-phys-const earth-nitrogen-n2               0.78084  1)
(def-phys-const earth-oxygen-o2                 0.20946  1)
(def-phys-const earth-water-h2o                 0.01  1)
(def-phys-const earth-argon-ar                  0.00934  1)
(def-phys-const earth-carbon                    0.00035  1)
(def-phys-const earth-neon-ne                   0.00001818  1)
(def-phys-const earth-helium-he                 0.00000524  1)
(def-phys-const earth-ch4                       0.0000017  1)
(def-phys-const earth-krypton-kr                0.00000114  1)
(def-phys-const earth-hydrogen-h2               0.00000055  1)






(def-phys-const moon-mass                       0.07349e24  kg)
(def-phys-const moon-volume                     2.1973e10  (^ km 3))
(def-phys-const moon-radius-equatorial          1738  km)
(def-phys-const moon-polar-radius               1735  km)
(def-phys-const moon-volumetric-mean-radius     1737.5  1)
(def-phys-const moon-ellipticity                0.002  1)
(def-phys-const moon-density                    3340 (* kg (^ m -3)))
(def-phys-const moon-surface-gravity            1.62 (* m (^ s -2)))
(def-phys-const moon-escape-velocity            2.38 (* km (^ s -1)))
(def-phys-const moon-gm                         0.0049e6 (* (^ km 3) (^ s -2)))
(def-phys-const moon-albedo-bind                0.067  1)
(def-phys-const moon-albedo-visual-geometric    0.12  1)
(def-phys-const moon-albedo-visual-magnitude    +0.21  1)
(def-phys-const moon-solar-irradiance           1380 (* W (^ m -2)))
(def-phys-const moon-black-body-temperature     274.5  K)
(def-phys-const moon-moment-of-inertia          0.394 (* I (^ MR -2)))
(def-phys-const moon-topographic-range          16  km)
(def-phys-const moon-semimajor-axis             0.3844e6  km)
(def-phys-const moon-pericenter                 0.3633e6  km)
(def-phys-const moon-apocenter                  0.4055e6  km)
(def-phys-const moon-revolution-period          27.322  day)
(def-phys-const moon-synodic-period             29.53  day)
(def-phys-const moon-mean-orbital-velocity      1.023 (* km (^ s -1)))
(def-phys-const moon-orbital-inclination        5.145  °)
(def-phys-const moon-orbital-excentricity       0.0549  1)
(def-phys-const moon-sidereal-rotation-period   655.728  hours)
(def-phys-const moon-equatorial-inclination     6.68  °)
(def-phys-const moon-recession-rate-from-earth  3.8 (* cm (^ yr -1)))




(def-phys-const mars-aphelion                   249.3e6  km)
(def-phys-const mars-argon-ar                   1.6  %)
(def-phys-const mars-average-temperature        210  K)
(def-phys-const mars-black-body-temperature     216.6  K)
(def-phys-const mars-bond-albedo                0.16  1)
(def-phys-const mars-carbon-dioxide-co2  95.32 %)
(def-phys-const mars-carbon-monoxide-co  0.08 %)
(def-phys-const mars-core-radius                1700  km)
(def-phys-const mars-ellipticity                0.0065  1)
(def-phys-const mars-equatorial-radius          3397  km)
(def-phys-const mars-escape-velocity            5.03 (* km (^ s -1)))
(def-phys-const mars-gm                         0.04283e6 (* (^ km 3) (^ s -2)))
(def-phys-const mars-krypton-kr                 0.3  ppm)
(def-phys-const mars-mass                       0.6419e24  kg)
(def-phys-const mars-mean-density               3933 (* kg (^ m -3)))
(def-phys-const mars-mean-molecular-weight      43.34 (* g (^ mol -1)))
(def-phys-const mars-mean-orbital-velocity      24.13 (* km (^ s -1)))
(def-phys-const mars-moment-of-inertia          0.366 (* I (^ MR -2)))
(def-phys-const mars-neon-ne                    2.5  ppm)
(def-phys-const mars-nitrogen-n2                2.7  %)
(def-phys-const mars-obliquity-to-orbit         25.19  °)
(def-phys-const mars-orbital-eccentricity       0.0934  1)
(def-phys-const mars-orbital-inclination        1.85  °)
(def-phys-const mars-oxygen-o2                  0.13  %)
(def-phys-const mars-perihelion                 206.6e6  km)
(def-phys-const mars-polar-radius               3375  km)
(def-phys-const mars-scale-height               11.1  km)
(def-phys-const mars-semimajor-axis             227.9e6  km)
(def-phys-const mars-sidereal-orbit-period      686.980  day)
(def-phys-const mars-sidereal-rotation-period   24.6229  hours)
(def-phys-const mars-solar-irradiance           595 (* W (^ m -2)))
(def-phys-const mars-surface-density            0.020 (* kg (^ m -3)))
(def-phys-const mars-surface-gravity            3.69 (* m (^ s -2)))
(def-phys-const mars-surface-pressure           6.9 (* mbars to 9 mbars))
(def-phys-const mars-surface-wind-speeds-range-autumn     '(2 4) (* m (^ s -1)))
(def-phys-const mars-surface-wind-speeds-range-dust-storm '(17 30) (* m (^ s -1)))
(def-phys-const mars-surface-wind-speeds-range-summer     '(5  10) (* m (^ s -1)))
(def-phys-const mars-synodic-period             779.94  day)
(def-phys-const mars-topographic-range          36  km)
(def-phys-const mars-tropical-orbit-period      686.930  day)
(def-phys-const mars-visual-geometric-albedo    0.150  1)
(def-phys-const mars-volume                     16.318e10  (^ km 3))
(def-phys-const mars-volumetric-mean-radius     3390  km)
(def-phys-const mars-water-h2o                  210  ppm)
(def-phys-const mars-apparent-magnitude-near-opposition  -2.0  1)
(def-phys-const mars-diurnal-temperatunre-minimum  184 (* K to 242 K))
(def-phys-const mars-heavy-water-hdo            0.85  ppm)
(def-phys-const mars-apparent-diameter-from-earth-maximum  25.7 (* arc second))
(def-phys-const mars-distance-from-earth-maximum  401.3e6  km)
(def-phys-const mars-apparent-diameter-from-earth-minimum  3.5 (* arc second))
(def-phys-const mars-distance-from-earth-minimum  54.5e6  km)
(def-phys-const mars-nitrogen-oxide-no          100  ppm)
(def-phys-const mars-visual-magnitude           -1.52  1)
(def-phys-const mars-xenon-xe                   0.08  ppm)




(defconstant year (* 365 24 60 60)
  "Value of a year in second.") ;;year

(defconstant light-year (* c year)
  "Value of a light-year in meter.") ;;light-year


;; (defun sqrt (x) (expt x 0.5))
(defun square (x) (* x x))

(defun lorentz ( x t_ v )
  "
RETURN: x' ; t' ; dx' ; dt' such as
    gamma =  sqrt( 1 - ( v / c ) ^ 2 )
    x' = ( x + v t ) / gamma
    t' = ( t + x v / c ^ 2 ) /  gamma
    dx' = x / gamma
    dt' = t / gamma
"
  (let ((gamma (/ 1.0 (sqrt (- 1.0 (square (/ v c)))))))
    (values
     gamma
     (/ (- x (* v t_)) gamma)
     (/ (- t_ (/ (* x v) (* c c))) gamma)
     (/ x  gamma)
     (/ t_ gamma)))) ;;lorentz


;;; (setq d (* 4.3  light-year))
;;; (setq v (* 0.90 c))
;;; (setq t_ (/ d v))
;;; (setq gamma (car (lorentz d t_ v)))

;; Luego,  por efecto  de  la compresión  del  tiempo cuando  se viaja  a
;; velocidades cerca de  c, la sonda no tarda tanto  tiempo en llegar, y,
;; por lo contrario, la gente que  se queda en la Tierra debe esparar más
;; tiempo en antes de saber que la sonda a llegado.
;;
;; Cómo se  podra verificar en cualquier  página web sobre  el tema (para
;; decir que ¡esta clase de información  esta a accesible por todo con un
;; par de clics!):
;;
;; Aplicando las transformadas de Lorentz:
;;
;;     gamma = 1 / sqrt( 1 - ( v / c ) ^ 2 )
;;      x' = ( x + v t ) * gamma
;;      t' = ( t + x v / c ^ 2 ) * gamma
;;
;; que dan las coordenadas (x',t')  dentro de un referencial que se mueve
;; a  la  velocidad  v con  respecto  a  un  referencial fijo,  dadas  la
;; coordenadas  (x,t)  dentro  del  referencial fijo,  se  puede  deducir
;; facilmente  la dilatación  y la  contracción de  la longitud  y  de la
;; duración:
;;
;;     l' = l / gamma
;;     d' = d / gamma
;;
;; (o si se es vago, se puede tanbien buscar en el web con un par de clic
;; de más).
;;
;;
;; Así que,  por ejemplo, si  la sonda viaja  a v/c =  0.90 or 90%  de la
;; velocidad de  la luz, a una distancia  de 4.3 años-luz, lo  hara en un
;; tiempo superior a 4.3 años (visto desde el referencial fijo, es decir,
;; desde la Tierra porque va siempre a una velocidad menor que c:
;;
;;       d = 4.3 * año * c
;;       v = 0.9 * c
;;       t = d / v
;;
;;       t = ( 4.3 * año * c )  / ( 0.9 * c )
;;         = (  4.3 / 0.9 ) * año
;;         = 4.777 año
;;
;; Pero, visto de la sonda, la duración del viaje es:
;;
;;       d' = d / gamma
;; con:
;;       gamma = 1 / sqrt( 1 - ( v / c ) ^ 2 )
;;       gamma = 1 / sqrt( 1 - 0.9^2 )
;;       gamma = 2.294
;;
;; asi que:
;;
;;       d' = 4.777 año / 2.294
;;       d' = 2.082 año
;;
;;
;; En  el caso  que la  sonda viaje  a  99% de  la velocidad  de la  luz,
;; obtendremos:
;;
;;       gamma = 1 / sqrt( 1 - 0.99^2 )
;;       gamma = 7.089
;; y:
;;       d' = 4.777 año / 7.089
;;       d' = 0.673 año, o 8 meses,
;;
;; ¡a comparar con los 3 meses que Cristobal Colomb tomó para ir a America!
;;
;; (Esto para decir  que se podria salir a explorar  las estrellas con la
;; tecnologia que tenemos  desde hace 50 años :  los reactores nucleares,
;; salvo que los  que se quedan atras no verian  volver a los astronautas
;; que van más lejos).
;;
;;
;;
;;
;; (En el caso del photon que viaja a la velocidad de la luz, él toca los
;; dos puntos  al mismo  tiempo, de  su punto de  vista. Cuando  quita un
;; electron y cuando llega a un  otro electro, que sea dentro de la misma
;; molecula o al  otro lado de la  galaxia o del universo, para  él es al
;; mismo tiempo.  Las  interacciónes electro-magneticas son efectivamente
;; instantaneas, para los photones).
;;
;;
;;
;; http://scienceworld.wolfram.com/physics/TimeDilation.html
;; http://www.geocities.com/angelto.geo/bhole/lorentz.html
;; y miles de páginas sobre el tema...
;;

;;; (show constantes)


(defun make-value (mant expo)
  (setq expo (remove (character " ")  expo))
  (if (= 0 (length expo))
      (remove (character " ")  mant)
      (concatenate 'string (remove (character " ")  mant) "e" expo)))


(defun make-unit-part (part)
  (cond
    ((string-match "\\([a-z][a-z]*\\)\\([-+]?[0-9][0-9]*\\)*" part)
     (let ((unit (match-string 1 part))
           (expo (match-string 2 part)))
       (if (= 0 (length expo))
           unit
           (format "(^ %s %s)" unit expo))))
    (t part)))



(defun make-unit (unit)
  (if (null unit)
      " 1"
      (let ((parts (remove "" (split-string unit " "))))
        (cond
          ((null parts)         " 1")
          ((= 1 (length parts))
           (concatenate 'string " " (make-unit-part (car parts))))
          (t (format "(* %s)"
               (unsplit-string
                (mapcar (function make-unit-part) parts)))))))
  ) ;;make-unit


(defun astre-to-constantes (astre)
  "Edit a file of data on a planet into a set of def-phys-const declarations."
  (interactive "*sPlanet Name: ")
  (dolist
      (sub (sort
            '(
              ("Dipole Offset (planet centre to dipole centre) distance"
               "dipole-offset-distance" t t)
              ("Longitude of Ascending Node" "longitude-of-ascending-node" t t)
              ("Diurnal Temperature Minimum" "diurnal-temperature-minimum" t t)
              ("Diurnal Temperature Maximum" "diurnal-temperature-maximum" t t)
              ("Visual Magnitude (V.?1,0.?)" "albedo-visual-magnitude" t t)
              ("Longitude of Offset Vector" "longitude-of-offset-vector" t t)
              ("Visual Magnitude (V(1,0))" "visual-magnitude-(v(1,0))" t t)
              ("Longitude of Dipole North" "longitude-of-dipole-north" t t)
              ("Latitude of Offset Vector" "latitude-of-offset-vector" t t)
              ("Recession Rate from Earth" "recession-rate" t t)
              ("Maximum Orbital Velocity" "maximum-orbital-velocity" t t)
              ("Minimum Orbital Velocity" "minimum-orbital-velocity" t t)
              ("Latitude of Dipole North" "latitude-of-dipole-north" t t)
              ("Sidereal Rotation Period" "sidereal-rotation-period" t t)
              ("Visual Geometric Albedo" "visual-geometric-albedo" t t)
              ("Longitude of Perihelion" "longitude-of-pericenter" t t)
              ("Visual Geometric Albedo" "albedo-visual-geometric" t t)
              ("Volumetric Mean Radius" "volumetric-mean-radius" t t)
              ("Black-Body Temperature" "black-body-temperature" t t)
              ("Equatorial Inclination" "equatorial-inclination" t t)
              ("Sidereal Orbit Period" "sidereal-orbit-period" t t)
              ("Tropical Orbit Period" "tropical-orbit-period" t t)
              ("Dipole Field Strength" "dipole-field-strength" t t)
              ("Mean Molecular Weight" "mean-molecular-weight" t t)
              ("Mean Orbital Velocity" "mean-orbital-velocity" t t)
              ("Orbital Eccentricity" "orbital-eccentricity" t t)
              ("Orbital Eccentricity" "orbital-excentricity" t t)
              ("Average Temperature" "average-temperature" t t)
              ("Surface Wind Speeds" "surface-wind-speeds" t t)
              ("Orbital Inclination" "orbital-inclination" t t)
              ("Obliquity to Orbit" "obliquity-to-orbit" t t)
              ("Equatorial Radius" "equatorial-radius" t t)
              ("Equatorial Radius" "radius-equatorial" t t)
              ("Moment of Inertia" "moment-of-inertia" t t)
              ("Topographic Range" "topographic-range" t t)
              ("Revolution Period" "revolution-period" t t)
              ("Surface Pressure" "surface-pressure" t t)
              ("Solar Irradiance" "solar-irradiance" t t)
              ("Surface Density" "surface-density" t t)
              ("Surface Gravity" "surface-gravity" t t)
              ("Escape Velocity" "escape-velocity" t t)
              ("Mean Longitude" "mean-longitude" t t)
              ("Semimajor Axis" "semimajor-axis" t t)
              ("Synodic Period" "synodic-period" t t)
              ("Length of Day" "length-of-day" t t)
              ("Mean Density" "mean-density" t t)
              ("Scale Height" "scale-height" t t)
              ("Polar Radius" "polar-radius" t t)
              ("Mean Density" "density" t t)
              ("Core Radius" "core-radius" t t)
              ("Bond Albedo" "bond-albedo" t t)
              ("Nitrogen N2" "nitrogen-n2" t t)
              ("Hydrogen H2" "hydrogen-h2" t t)
              ("Ellipticity" "ellipticity" t t)
              ("Bond Albedo" "albedo-bind" t t)
              ("Perihelion" "pericenter" t t)
              ("Krypton Kr" "krypton-kr" t t)
              ("Oxygen O2" "oxygen-o2" t t)
              ("Water H2O" "water-h2o" t t)
              ("Helium He" "helium-he" t t)
              ("Aphelion" "apocenter" t t)
              ("Argon Ar" "argon-ar" t t)
              ("Neon Ne" "neon-ne" t t)
              ("Perigee" "pericenter" t t)
              ("Carbon" "carbon" t t)
              ("Volume" "volume" t t)
              ("Apogee" "apocenter" t t)
              ("Mass" "mass" t t)
              ("CH4" "ch4" t t)
              ("J2" "j2" t t)
              ("GM" "gm" t t)
              ("Visual Magnitude" "visual-magnitude" t t)
              ("Maximum Apparent Diameter from Earth" "apparent-diameter-from-earth-maximum" t t)
              ("Minimum Apparent Diameter from Earth" "apparent-diameter-from-earth-minimum" t t)
              ("Maximum Distance from Earth" "distance-from-earth-maximum" t t)
              ("Minimum Distance from Earth" "distance-from-earth-minimum" t t)
              ("Apparent Magnitude near Opposition" "apparent-magnitude-near-opposition" t t)
              ("Diurnal Temperature Range" "diurnal-temperatunre-minimum" t t)
              ("Nitrogen Oside NO" "nitrogen-oxide-no" t t)
              ("Xenon Xe" "xenon-xe" t t)
              ("HDO" "heavy-water-hdo" t t)
              )
            (lambda (a b) (> (length (car a)) (length (car b))))))
    (let ((regexp     (elt sub 0))
          (to-string  (format "(def-phys-const %-30s |"
                        (concatenate 'string astre "-" (elt sub 1))))
          (fixed-case (elt sub 2))
          (literal    (elt sub 3))
          (case-fold-search nil))
      (goto-char (point-min))
      (message "sub = %S" sub)
      (while (re-search-forward regexp nil t)
        (replace-match to-string fixed-case literal))))
  (goto-char (point-min))
  (while (re-search-forward "| *\\([-+]*[0-9][ 0-9]*\\(\\.[0-9][ 0-9]*\\)*\\)\\( × 10\\([-+]*[0-9][0-9]*\\)\\)?\\( .*\\)?$" nil t)
    (let* ((mantissa-str (match-string-no-properties 1))
           (exponent-str (match-string-no-properties 4))
           (unit-str     (match-string-no-properties 5))
           (data         (match-data))
           (clean-mant   (make-value mantissa-str exponent-str))
           (clean-unit (make-unit unit-str))
           )
      (store-match-data data)
      (replace-match (format " %s %s)" clean-mant clean-unit) t t)))
  ) ;;astre-to-constantes





;;; (mapcar
;;;  (lambda (n) (list n (substitute
;;;                       (character "-") (character " ") (downcase n)
;;;                       :test (function char=)) t t))
;;;  (remove-duplicates
;;;    (sort
;;;     '(
;;;       )
;;;     (lambda (a b) (> (length (car a)) (length (car b)))))
;;;    :test (function equalp)))


(provide 'pjb-constants)
;;;; THE END ;;;;
ViewGit