prelude-gsl.c

     
   1  //! @file prelude-gsl.c
   2  //! @author J. Marcel van der Veer
   3  
   4  //! @section Copyright
   5  //!
   6  //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
   7  //! Copyright 2001-2024 J. Marcel van der Veer [algol68g@xs4all.nl].
   8  
   9  //! @section License
  10  //!
  11  //! This program is free software; you can redistribute it and/or modify it 
  12  //! under the terms of the GNU General Public License as published by the 
  13  //! Free Software Foundation; either version 3 of the License, or 
  14  //! (at your option) any later version.
  15  //!
  16  //! This program is distributed in the hope that it will be useful, but 
  17  //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  18  //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
  19  //! more details. You should have received a copy of the GNU General Public 
  20  //! License along with this program. If not, see [http://www.gnu.org/licenses/].
  21  
  22  //! @section Synopsis
  23  //!
  24  //! Standard prelude definitions from GSL.
  25  
  26  #include "a68g.h"
  27  #include "a68g-prelude.h"
  28  #include "a68g-prelude-gsl.h"
  29  
  30  #if defined (HAVE_GSL)
  31  
  32  void stand_gsl_sf (void)
  33  {
  34    a68_idf (A68_EXT, "airyai", A68_MCACHE (proc_real_real), genie_airy_ai_real);
  35    a68_idf (A68_EXT, "airyaiscaled", A68_MCACHE (proc_real_real), genie_airy_ai_scaled_real);
  36    a68_idf (A68_EXT, "airybi", A68_MCACHE (proc_real_real), genie_airy_bi_real);
  37    a68_idf (A68_EXT, "airybiscaled", A68_MCACHE (proc_real_real), genie_airy_bi_scaled_real);
  38    a68_idf (A68_EXT, "besselin0", A68_MCACHE (proc_real_real), genie_bessel_in0_real);
  39    a68_idf (A68_EXT, "besselin1", A68_MCACHE (proc_real_real), genie_bessel_in1_real);
  40    a68_idf (A68_EXT, "besselin0scaled", A68_MCACHE (proc_real_real), genie_bessel_in0_scaled_real);
  41    a68_idf (A68_EXT, "besselin1scaled", A68_MCACHE (proc_real_real), genie_bessel_in1_scaled_real);
  42    a68_idf (A68_EXT, "besseljn0", A68_MCACHE (proc_real_real), genie_bessel_jn0_real);
  43    a68_idf (A68_EXT, "besseljn1", A68_MCACHE (proc_real_real), genie_bessel_jn1_real);
  44    a68_idf (A68_EXT, "besselkn0", A68_MCACHE (proc_real_real), genie_bessel_kn0_real);
  45    a68_idf (A68_EXT, "besselkn1", A68_MCACHE (proc_real_real), genie_bessel_kn1_real);
  46    a68_idf (A68_EXT, "besselkn0scaled", A68_MCACHE (proc_real_real), genie_bessel_kn0_scaled_real);
  47    a68_idf (A68_EXT, "besselkn1scaled", A68_MCACHE (proc_real_real), genie_bessel_kn1_scaled_real);
  48    a68_idf (A68_EXT, "besselyn0", A68_MCACHE (proc_real_real), genie_bessel_yn0_real);
  49    a68_idf (A68_EXT, "besselyn1", A68_MCACHE (proc_real_real), genie_bessel_yn1_real);
  50    a68_idf (A68_EXT, "expinte1", A68_MCACHE (proc_real_real), genie_expint_e1_real);
  51    a68_idf (A68_EXT, "expintei", A68_MCACHE (proc_real_real), genie_expint_ei_real);
  52    a68_idf (A68_EXT, "dawson", A68_MCACHE (proc_real_real), genie_dawson_real);
  53    a68_idf (A68_EXT, "exprel", A68_MCACHE (proc_real_real), genie_exprel_real);
  54    a68_idf (A68_EXT, "betaincgsl", A68_MCACHE (proc_real_real_real_real), genie_beta_inc_real);
  55    a68_idf (A68_EXT, "poch", A68_MCACHE (proc_real_real_real), genie_poch_real);
  56    a68_idf (A68_EXT, "digamma", A68_MCACHE (proc_real_real), genie_digamma_real);
  57    a68_idf (A68_EXT, "airyaiderivative", A68_MCACHE (proc_real_real), genie_airy_ai_deriv_real);
  58    a68_idf (A68_EXT, "airyaideriv", A68_MCACHE (proc_real_real), genie_airy_ai_deriv_real);
  59    a68_idf (A68_EXT, "airyaiderivscaled", A68_MCACHE (proc_real_real), genie_airy_ai_deriv_scaled_real);
  60    a68_idf (A68_EXT, "airybiderivative", A68_MCACHE (proc_real_real), genie_airy_bi_deriv_real);
  61    a68_idf (A68_EXT, "airybideriv", A68_MCACHE (proc_real_real), genie_airy_bi_deriv_real);
  62    a68_idf (A68_EXT, "airybiderivscaled", A68_MCACHE (proc_real_real), genie_airy_bi_deriv_scaled_real);
  63    a68_idf (A68_EXT, "airyzeroaideriv", A68_MCACHE (proc_int_real), genie_airy_zero_ai_deriv_real);
  64    a68_idf (A68_EXT, "airyzeroai", A68_MCACHE (proc_int_real), genie_airy_zero_ai_real);
  65    a68_idf (A68_EXT, "airyzerobideriv", A68_MCACHE (proc_int_real), genie_airy_zero_bi_deriv_real);
  66    a68_idf (A68_EXT, "airyzerobi", A68_MCACHE (proc_int_real), genie_airy_zero_bi_real);
  67    a68_idf (A68_EXT, "anglerestrictpos", A68_MCACHE (proc_real_real), genie_angle_restrict_pos_real);
  68    a68_idf (A68_EXT, "anglerestrictsymm", A68_MCACHE (proc_real_real), genie_angle_restrict_symm_real);
  69    a68_idf (A68_EXT, "atanint", A68_MCACHE (proc_real_real), genie_atanint_real);
  70    a68_idf (A68_EXT, "besselil0scaled", A68_MCACHE (proc_real_real), genie_bessel_il0_scaled_real);
  71    a68_idf (A68_EXT, "besselil1scaled", A68_MCACHE (proc_real_real), genie_bessel_il1_scaled_real);
  72    a68_idf (A68_EXT, "besselil2scaled", A68_MCACHE (proc_real_real), genie_bessel_il2_scaled_real);
  73    a68_idf (A68_EXT, "besselilscaled", A68_MCACHE (proc_int_real_real), genie_bessel_il_scaled_real);
  74    a68_idf (A68_EXT, "besselilscaled", A68_MCACHE (proc_real_real), genie_bessel_il_scaled_real);
  75    a68_idf (A68_EXT, "besselin", A68_MCACHE (proc_int_real_real), genie_bessel_in_real);
  76    a68_idf (A68_EXT, "besselinscaled", A68_MCACHE (proc_int_real_real), genie_bessel_in_scaled_real);
  77    a68_idf (A68_EXT, "besselinscaled", A68_MCACHE (proc_real_real), genie_bessel_in_scaled_real);
  78    a68_idf (A68_EXT, "besselinu", A68_MCACHE (proc_real_real_real), genie_bessel_inu_real);
  79    a68_idf (A68_EXT, "besselinuscaled", A68_MCACHE (proc_real_real_real), genie_bessel_inu_scaled_real);
  80    a68_idf (A68_EXT, "besseljl0", A68_MCACHE (proc_real_real), genie_bessel_jl0_real);
  81    a68_idf (A68_EXT, "besseljl1", A68_MCACHE (proc_real_real), genie_bessel_jl1_real);
  82    a68_idf (A68_EXT, "besseljl2", A68_MCACHE (proc_real_real), genie_bessel_jl2_real);
  83    a68_idf (A68_EXT, "besseljl", A68_MCACHE (proc_int_real_real), genie_bessel_jl_real);
  84    a68_idf (A68_EXT, "besseljn", A68_MCACHE (proc_int_real_real), genie_bessel_jn_real);
  85    a68_idf (A68_EXT, "besselkl0scaled", A68_MCACHE (proc_real_real), genie_bessel_kl0_scaled_real);
  86    a68_idf (A68_EXT, "besselkl1scaled", A68_MCACHE (proc_real_real), genie_bessel_kl1_scaled_real);
  87    a68_idf (A68_EXT, "besselkl2scaled", A68_MCACHE (proc_real_real), genie_bessel_kl2_scaled_real);
  88    a68_idf (A68_EXT, "besselklscaled", A68_MCACHE (proc_int_real_real), genie_bessel_kl_scaled_real);
  89    a68_idf (A68_EXT, "besselklscaled", A68_MCACHE (proc_real_real), genie_bessel_kl_scaled_real);
  90    a68_idf (A68_EXT, "besselkn", A68_MCACHE (proc_int_real_real), genie_bessel_kn_real);
  91    a68_idf (A68_EXT, "besselknscaled", A68_MCACHE (proc_int_real_real), genie_bessel_kn_scaled_real);
  92    a68_idf (A68_EXT, "besselkn_scaled", A68_MCACHE (proc_real_real), genie_bessel_kn_scaled_real);
  93    a68_idf (A68_EXT, "besselknu", A68_MCACHE (proc_real_real_real), genie_bessel_knu_real);
  94    a68_idf (A68_EXT, "besselknuscaled", A68_MCACHE (proc_real_real), genie_bessel_knu_scaled_real);
  95    a68_idf (A68_EXT, "besselknuscaled", A68_MCACHE (proc_real_real_real), genie_bessel_knu_scaled_real);
  96    a68_idf (A68_EXT, "bessellnknu", A68_MCACHE (proc_real_real), genie_bessel_ln_knu_real);
  97    a68_idf (A68_EXT, "bessellnknu", A68_MCACHE (proc_real_real_real), genie_bessel_ln_knu_real);
  98    a68_idf (A68_EXT, "besselyl0", A68_MCACHE (proc_real_real), genie_bessel_yl0_real);
  99    a68_idf (A68_EXT, "besselyl1", A68_MCACHE (proc_real_real), genie_bessel_yl1_real);
 100    a68_idf (A68_EXT, "besselyl2", A68_MCACHE (proc_real_real), genie_bessel_yl2_real);
 101    a68_idf (A68_EXT, "besselyl", A68_MCACHE (proc_int_real_real), genie_bessel_yl_real);
 102    a68_idf (A68_EXT, "besselyn", A68_MCACHE (proc_int_real_real), genie_bessel_yn_real);
 103    a68_idf (A68_EXT, "besselynu", A68_MCACHE (proc_real_real_real), genie_bessel_ynu_real);
 104    a68_idf (A68_EXT, "besselzeroj0", A68_MCACHE (proc_int_real), genie_bessel_zero_jnu0_real);
 105    a68_idf (A68_EXT, "besselzeroj1", A68_MCACHE (proc_int_real), genie_bessel_zero_jnu1_real);
 106    a68_idf (A68_EXT, "besselzerojnu", A68_MCACHE (proc_int_real_real), genie_bessel_zero_jnu_real);
 107    a68_idf (A68_EXT, "chi", A68_MCACHE (proc_real_real), genie_chi_real);
 108    a68_idf (A68_EXT, "ci", A68_MCACHE (proc_real_real), genie_ci_real);
 109    a68_idf (A68_EXT, "clausen", A68_MCACHE (proc_real_real), genie_clausen_real);
 110    a68_idf (A68_EXT, "conicalp0", A68_MCACHE (proc_real_real_real), genie_conicalp_0_real);
 111    a68_idf (A68_EXT, "conicalp1", A68_MCACHE (proc_real_real_real), genie_conicalp_1_real);
 112    a68_idf (A68_EXT, "conicalpcylreg", A68_MCACHE (proc_int_real_real_real), genie_conicalp_cyl_reg_real);
 113    a68_idf (A68_EXT, "conicalphalf", A68_MCACHE (proc_real_real_real), genie_conicalp_half_real);
 114    a68_idf (A68_EXT, "conicalpmhalf", A68_MCACHE (proc_real_real_real), genie_conicalp_mhalf_real);
 115    a68_idf (A68_EXT, "conicalpsphreg", A68_MCACHE (proc_int_real_real_real), genie_conicalp_sph_reg_real);
 116    a68_idf (A68_EXT, "debye1", A68_MCACHE (proc_real_real), genie_debye_1_real);
 117    a68_idf (A68_EXT, "debye2", A68_MCACHE (proc_real_real), genie_debye_2_real);
 118    a68_idf (A68_EXT, "debye3", A68_MCACHE (proc_real_real), genie_debye_3_real);
 119    a68_idf (A68_EXT, "debye4", A68_MCACHE (proc_real_real), genie_debye_4_real);
 120    a68_idf (A68_EXT, "debye5", A68_MCACHE (proc_real_real), genie_debye_5_real);
 121    a68_idf (A68_EXT, "debye6", A68_MCACHE (proc_real_real), genie_debye_6_real);
 122    a68_idf (A68_EXT, "dilog", A68_MCACHE (proc_real_real), genie_dilog_real);
 123    a68_idf (A68_EXT, "doublefact", A68_MCACHE (proc_int_real), genie_doublefact_real);
 124    a68_idf (A68_EXT, "ellintd", A68_MCACHE (proc_real_real_real), genie_ellint_d_real);
 125    a68_idf (A68_EXT, "ellintecomp", A68_MCACHE (proc_real_real), genie_ellint_e_comp_real);
 126    a68_idf (A68_EXT, "ellinte", A68_MCACHE (proc_real_real_real), genie_ellint_e_real);
 127    a68_idf (A68_EXT, "ellintf", A68_MCACHE (proc_real_real_real), genie_ellint_f_real);
 128    a68_idf (A68_EXT, "ellintkcomp", A68_MCACHE (proc_real_real), genie_ellint_k_comp_real);
 129    a68_idf (A68_EXT, "ellintpcomp", A68_MCACHE (proc_real_real_real), genie_ellint_p_comp_real);
 130    a68_idf (A68_EXT, "ellintp", A68_MCACHE (proc_real_real_real_real), genie_ellint_p_real);
 131    a68_idf (A68_EXT, "ellintrc", A68_MCACHE (proc_real_real_real), genie_ellint_rc_real);
 132    a68_idf (A68_EXT, "ellintrd", A68_MCACHE (proc_real_real_real_real), genie_ellint_rd_real);
 133    a68_idf (A68_EXT, "ellintrf", A68_MCACHE (proc_real_real_real_real), genie_ellint_rf_real);
 134    a68_idf (A68_EXT, "ellintrj", A68_MCACHE (proc_real_real_real_real_real), genie_ellint_rj_real);
 135    a68_idf (A68_EXT, "etaint", A68_MCACHE (proc_int_real), genie_etaint_real);
 136    a68_idf (A68_EXT, "eta", A68_MCACHE (proc_real_real), genie_eta_real);
 137    a68_idf (A68_EXT, "expint3", A68_MCACHE (proc_real_real), genie_expint_3_real);
 138    a68_idf (A68_EXT, "expinte2", A68_MCACHE (proc_real_real), genie_expint_e2_real);
 139    a68_idf (A68_EXT, "expinten", A68_MCACHE (proc_int_real_real), genie_expint_en_real);
 140    a68_idf (A68_EXT, "expm1", A68_MCACHE (proc_real_real), genie_expm1_real);
 141    a68_idf (A68_EXT, "exprel2", A68_MCACHE (proc_real_real), genie_exprel_2_real);
 142    a68_idf (A68_EXT, "expreln", A68_MCACHE (proc_int_real_real), genie_exprel_n_real);
 143    a68_idf (A68_EXT, "fermidirac0", A68_MCACHE (proc_real_real), genie_fermi_dirac_0_real);
 144    a68_idf (A68_EXT, "fermidirac1", A68_MCACHE (proc_real_real), genie_fermi_dirac_1_real);
 145    a68_idf (A68_EXT, "fermidirac2", A68_MCACHE (proc_real_real), genie_fermi_dirac_2_real);
 146    a68_idf (A68_EXT, "fermidirac3half", A68_MCACHE (proc_real_real), genie_fermi_dirac_3half_real);
 147    a68_idf (A68_EXT, "fermidirachalf", A68_MCACHE (proc_real_real), genie_fermi_dirac_half_real);
 148    a68_idf (A68_EXT, "fermidiracinc0", A68_MCACHE (proc_real_real_real), genie_fermi_dirac_inc_0_real);
 149    a68_idf (A68_EXT, "fermidiracint", A68_MCACHE (proc_int_real_real), genie_fermi_dirac_int_real);
 150    a68_idf (A68_EXT, "fermidiracm1", A68_MCACHE (proc_real_real), genie_fermi_dirac_m1_real);
 151    a68_idf (A68_EXT, "fermidiracmhalf", A68_MCACHE (proc_real_real), genie_fermi_dirac_mhalf_real);
 152    a68_idf (A68_EXT, "gammaincgsl", A68_MCACHE (proc_real_real_real), genie_gamma_inc_real);
 153    a68_idf (A68_EXT, "gammaincp", A68_MCACHE (proc_real_real_real), genie_gamma_inc_p_real);
 154    a68_idf (A68_EXT, "gammaincq", A68_MCACHE (proc_real_real_real), genie_gamma_inc_q_real);
 155    a68_idf (A68_EXT, "gammainv", A68_MCACHE (proc_real_real), genie_gammainv_real);
 156    a68_idf (A68_EXT, "gammastar", A68_MCACHE (proc_real_real), genie_gammastar_real);
 157    a68_idf (A68_EXT, "gegenpoly1real", A68_MCACHE (proc_real_real_real), genie_gegenpoly_1_real);
 158    a68_idf (A68_EXT, "gegenpoly2real", A68_MCACHE (proc_real_real_real), genie_gegenpoly_2_real);
 159    a68_idf (A68_EXT, "gegenpoly3real", A68_MCACHE (proc_real_real_real), genie_gegenpoly_3_real);
 160    a68_idf (A68_EXT, "gegenpolynreal", A68_MCACHE (proc_real_real_real), genie_gegenpoly_n_real);
 161    a68_idf (A68_EXT, "hermitefunc", A68_MCACHE (proc_int_real_real), genie_hermite_func_real);
 162    a68_idf (A68_EXT, "hypot", A68_MCACHE (proc_real_real_real), genie_hypot_real);
 163    a68_idf (A68_EXT, "hzeta", A68_MCACHE (proc_real_real_real), genie_hzeta_real);
 164    a68_idf (A68_EXT, "laguerre1real", A68_MCACHE (proc_real_real_real), genie_laguerre_1_real);
 165    a68_idf (A68_EXT, "laguerre2real", A68_MCACHE (proc_real_real_real), genie_laguerre_2_real);
 166    a68_idf (A68_EXT, "laguerre3real", A68_MCACHE (proc_real_real_real), genie_laguerre_3_real);
 167    a68_idf (A68_EXT, "laguerrenreal", A68_MCACHE (proc_real_real_real), genie_laguerre_n_real);
 168    a68_idf (A68_EXT, "lambertw0", A68_MCACHE (proc_real_real), genie_lambert_w0_real);
 169    a68_idf (A68_EXT, "lambertwm1", A68_MCACHE (proc_real_real), genie_lambert_wm1_real);
 170    a68_idf (A68_EXT, "legendreh3d0", A68_MCACHE (proc_real_real_real), genie_legendre_h3d_0_real);
 171    a68_idf (A68_EXT, "legendreh3d1", A68_MCACHE (proc_real_real_real), genie_legendre_h3d_1_real);
 172    a68_idf (A68_EXT, "legendreh3d", A68_MCACHE (proc_int_real_real_real), genie_legendre_H3d_real);
 173    a68_idf (A68_EXT, "legendrep1", A68_MCACHE (proc_real_real), genie_legendre_p1_real);
 174    a68_idf (A68_EXT, "legendrep2", A68_MCACHE (proc_real_real), genie_legendre_p2_real);
 175    a68_idf (A68_EXT, "legendrep3", A68_MCACHE (proc_real_real), genie_legendre_p3_real);
 176    a68_idf (A68_EXT, "legendrepl", A68_MCACHE (proc_int_real_real), genie_legendre_pl_real);
 177    a68_idf (A68_EXT, "legendreq0", A68_MCACHE (proc_real_real), genie_legendre_q0_real);
 178    a68_idf (A68_EXT, "legendreq1", A68_MCACHE (proc_real_real), genie_legendre_q1_real);
 179    a68_idf (A68_EXT, "legendreql", A68_MCACHE (proc_int_real_real), genie_legendre_ql_real);
 180    a68_idf (A68_EXT, "lncosh", A68_MCACHE (proc_real_real), genie_lncosh_real);
 181    a68_idf (A68_EXT, "lndoublefact", A68_MCACHE (proc_int_real), genie_lndoublefact_real);
 182    a68_idf (A68_EXT, "lnpoch", A68_MCACHE (proc_real_real_real), genie_lnpoch_real);
 183    a68_idf (A68_EXT, "lnsinh", A68_MCACHE (proc_real_real), genie_lnsinh_real);
 184    a68_idf (A68_EXT, "ln1plusxmx", A68_MCACHE (proc_real_real), genie_log_1plusx_mx_real);
 185    a68_idf (A68_EXT, "ln1plusx", A68_MCACHE (proc_real_real), genie_log_1plusx_real);
 186    a68_idf (A68_EXT, "lnabs", A68_MCACHE (proc_real_real), genie_log_abs_real);
 187    a68_idf (A68_EXT, "pochrel", A68_MCACHE (proc_real_real_real), genie_pochrel_real);
 188    a68_idf (A68_EXT, "psi1int", A68_MCACHE (proc_int_real), genie_psi_1_int_real);
 189    a68_idf (A68_EXT, "psi1piy", A68_MCACHE (proc_real_real), genie_psi_1piy_real);
 190    a68_idf (A68_EXT, "psi1", A68_MCACHE (proc_real_real), genie_psi_1_real);
 191    a68_idf (A68_EXT, "psiint", A68_MCACHE (proc_int_real), genie_psi_int_real);
 192    a68_idf (A68_EXT, "psin", A68_MCACHE (proc_int_real_real), genie_psi_n_real);
 193    a68_idf (A68_EXT, "psi", A68_MCACHE (proc_real_real), genie_psi_real);
 194    a68_idf (A68_EXT, "shi", A68_MCACHE (proc_real_real), genie_shi_real);
 195    a68_idf (A68_EXT, "sinc", A68_MCACHE (proc_real_real), genie_sinc_real);
 196    a68_idf (A68_EXT, "si", A68_MCACHE (proc_real_real), genie_si_real);
 197    a68_idf (A68_EXT, "synchrotron1", A68_MCACHE (proc_real_real), genie_synchrotron_1_real);
 198    a68_idf (A68_EXT, "synchrotron2", A68_MCACHE (proc_real_real), genie_synchrotron_2_real);
 199    a68_idf (A68_EXT, "taylorcoeff", A68_MCACHE (proc_int_real_real), genie_taylorcoeff_real);
 200    a68_idf (A68_EXT, "transport2", A68_MCACHE (proc_real_real), genie_transport_2_real);
 201    a68_idf (A68_EXT, "transport3", A68_MCACHE (proc_real_real), genie_transport_3_real);
 202    a68_idf (A68_EXT, "transport4", A68_MCACHE (proc_real_real), genie_transport_4_real);
 203    a68_idf (A68_EXT, "transport5", A68_MCACHE (proc_real_real), genie_transport_5_real);
 204    a68_idf (A68_EXT, "zetaint", A68_MCACHE (proc_int_real), genie_zeta_int_real);
 205    a68_idf (A68_EXT, "zetam1int", A68_MCACHE (proc_int_real), genie_zetam1_int_real);
 206    a68_idf (A68_EXT, "zetam1", A68_MCACHE (proc_real_real), genie_zetam1_real);
 207    a68_idf (A68_EXT, "zeta", A68_MCACHE (proc_real_real), genie_zeta_real);
 208  }
 209  
 210  void stand_gsl_linear_algebra (void)
 211  {
 212  // Vector and matrix pretty print.
 213    MOID_T *m = a68_proc (M_VOID, M_ROW_REAL, M_INT, NO_MOID);
 214    a68_idf (A68_EXT, "printvector", m, genie_print_vector);
 215    m = a68_proc (M_VOID, M_ROW_ROW_REAL, M_INT, NO_MOID);
 216    a68_idf (A68_EXT, "printmatrix", m, genie_print_matrix);
 217  // Vector and matrix monadic.
 218    m = a68_proc (M_ROW_REAL, M_ROW_REAL, NO_MOID);
 219    a68_op (A68_EXT, "+", m, genie_idle);
 220    a68_op (A68_EXT, "-", m, genie_vector_minus);
 221    m = a68_proc (M_ROW_ROW_REAL, M_ROW_REAL, NO_MOID);
 222    a68_op (A68_EXT, "CV", m, genie_vector_col);
 223    a68_op (A68_EXT, "RV", m, genie_vector_row);
 224    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 225    a68_op (A68_EXT, "+", m, genie_idle);
 226    a68_op (A68_EXT, "-", m, genie_matrix_minus);
 227    a68_op (A68_EXT, "T", m, genie_matrix_transpose);
 228    a68_op (A68_EXT, "INV", m, genie_matrix_inv);
 229    a68_op (A68_EXT, "PINV", m, genie_matrix_pinv);
 230    a68_op (A68_EXT, "MEAN", m, genie_matrix_column_mean);
 231    m = a68_proc (M_REAL, M_ROW_ROW_REAL, NO_MOID);
 232    a68_op (A68_EXT, "DET", m, genie_matrix_det);
 233    a68_op (A68_EXT, "TRACE", m, genie_matrix_trace);
 234    m = a68_proc (M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 235    a68_op (A68_EXT, "+", m, genie_idle);
 236    a68_op (A68_EXT, "-", m, genie_vector_complex_minus);
 237    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 238    a68_op (A68_EXT, "+", m, genie_idle);
 239    a68_op (A68_EXT, "-", m, genie_matrix_complex_minus);
 240    a68_op (A68_EXT, "T", m, genie_matrix_complex_transpose);
 241    a68_op (A68_EXT, "INV", m, genie_matrix_complex_inv);
 242    m = a68_proc (M_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 243    a68_op (A68_EXT, "DET", m, genie_matrix_complex_det);
 244    a68_op (A68_EXT, "TRACE", m, genie_matrix_complex_trace);
 245  // Vector and matrix dyadic.
 246    m = a68_proc (M_BOOL, M_ROW_REAL, M_ROW_REAL, NO_MOID);
 247    a68_op (A68_EXT, "=", m, genie_vector_eq);
 248    a68_op (A68_EXT, "/=", m, genie_vector_ne);
 249    m = a68_proc (M_ROW_REAL, M_ROW_REAL, M_ROW_REAL, NO_MOID);
 250    a68_op (A68_EXT, "+", m, genie_vector_add);
 251    a68_op (A68_EXT, "-", m, genie_vector_sub);
 252    m = a68_proc (M_REF_ROW_REAL, M_REF_ROW_REAL, M_ROW_REAL, NO_MOID);
 253    a68_op (A68_EXT, "+:=", m, genie_vector_plusab);
 254    a68_op (A68_EXT, "PLUSAB", m, genie_vector_plusab);
 255    a68_op (A68_EXT, "-:=", m, genie_vector_minusab);
 256    a68_op (A68_EXT, "MINUSAB", m, genie_vector_minusab);
 257    m = a68_proc (M_BOOL, M_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 258    a68_op (A68_EXT, "=", m, genie_matrix_eq);
 259    a68_op (A68_EXT, "/-", m, genie_matrix_ne);
 260    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 261    a68_op (A68_EXT, "+", m, genie_matrix_add);
 262    a68_op (A68_EXT, "-", m, genie_matrix_sub);
 263    a68_op (A68_EXT, "BEFORE", m, genie_matrix_hcat);
 264    a68_op (A68_EXT, "ABOVE", m, genie_matrix_vcat);
 265    a68_prio ("BEFORE", 3);
 266    a68_prio ("ABOVE", 3);
 267    m = a68_proc (M_REF_ROW_ROW_REAL, M_REF_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 268    a68_op (A68_EXT, "+:=", m, genie_matrix_plusab);
 269    a68_op (A68_EXT, "PLUSAB", m, genie_matrix_plusab);
 270    a68_op (A68_EXT, "-:=", m, genie_matrix_minusab);
 271    a68_op (A68_EXT, "MINUSAB", m, genie_matrix_minusab);
 272    m = a68_proc (M_BOOL, M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 273    a68_op (A68_EXT, "=", m, genie_vector_complex_eq);
 274    a68_op (A68_EXT, "/=", m, genie_vector_complex_ne);
 275    m = a68_proc (M_ROW_COMPLEX, M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 276    a68_op (A68_EXT, "+", m, genie_vector_complex_add);
 277    a68_op (A68_EXT, "-", m, genie_vector_complex_sub);
 278    m = a68_proc (M_REF_ROW_COMPLEX, M_REF_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 279    a68_op (A68_EXT, "+:=", m, genie_vector_complex_plusab);
 280    a68_op (A68_EXT, "PLUSAB", m, genie_vector_complex_plusab);
 281    a68_op (A68_EXT, "-:=", m, genie_vector_complex_minusab);
 282    a68_op (A68_EXT, "MINUSAB", m, genie_vector_complex_minusab);
 283    m = a68_proc (M_BOOL, M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 284    a68_op (A68_EXT, "=", m, genie_matrix_complex_eq);
 285    a68_op (A68_EXT, "/=", m, genie_matrix_complex_ne);
 286    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 287    a68_op (A68_EXT, "+", m, genie_matrix_complex_add);
 288    a68_op (A68_EXT, "-", m, genie_matrix_complex_sub);
 289    m = a68_proc (M_REF_ROW_ROW_COMPLEX, M_REF_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 290    a68_op (A68_EXT, "+:=", m, genie_matrix_complex_plusab);
 291    a68_op (A68_EXT, "PLUSAB", m, genie_matrix_complex_plusab);
 292    a68_op (A68_EXT, "-:=", m, genie_matrix_complex_minusab);
 293    a68_op (A68_EXT, "MINUSAB", m, genie_matrix_complex_minusab);
 294  // Vector and matrix scaling.
 295    m = a68_proc (M_ROW_REAL, M_REAL, M_ROW_REAL, NO_MOID);
 296    a68_op (A68_EXT, "*", m, genie_real_scale_vector);
 297    m = a68_proc (M_ROW_REAL, M_ROW_REAL, M_REAL, NO_MOID);
 298    a68_op (A68_EXT, "*", m, genie_vector_scale_real);
 299    a68_op (A68_EXT, "/", m, genie_vector_div_real);
 300    m = a68_proc (M_ROW_ROW_REAL, M_REAL, M_ROW_ROW_REAL, NO_MOID);
 301    a68_op (A68_EXT, "*", m, genie_real_scale_matrix);
 302    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REAL, NO_MOID);
 303    a68_op (A68_EXT, "*", m, genie_matrix_scale_real);
 304    a68_op (A68_EXT, "/", m, genie_matrix_div_real);
 305    m = a68_proc (M_ROW_COMPLEX, M_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 306    a68_op (A68_EXT, "*", m, genie_complex_scale_vector_complex);
 307    m = a68_proc (M_ROW_COMPLEX, M_ROW_COMPLEX, M_COMPLEX, NO_MOID);
 308    a68_op (A68_EXT, "*", m, genie_vector_complex_scale_complex);
 309    a68_op (A68_EXT, "/", m, genie_vector_complex_div_complex);
 310    m = a68_proc (M_ROW_ROW_COMPLEX, M_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 311    a68_op (A68_EXT, "*", m, genie_complex_scale_matrix_complex);
 312    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_COMPLEX, NO_MOID);
 313    a68_op (A68_EXT, "*", m, genie_matrix_complex_scale_complex);
 314    a68_op (A68_EXT, "/", m, genie_matrix_complex_div_complex);
 315    m = a68_proc (M_REF_ROW_REAL, M_REF_ROW_REAL, M_REAL, NO_MOID);
 316    a68_op (A68_EXT, "*:=", m, genie_vector_scale_real_ab);
 317    a68_op (A68_EXT, "/:=", m, genie_vector_div_real_ab);
 318    m = a68_proc (M_REF_ROW_ROW_REAL, M_REF_ROW_ROW_REAL, M_REAL, NO_MOID);
 319    a68_op (A68_EXT, "*:=", m, genie_matrix_scale_real_ab);
 320    a68_op (A68_EXT, "/:=", m, genie_matrix_div_real_ab);
 321    m = a68_proc (M_REF_ROW_COMPLEX, M_REF_ROW_COMPLEX, M_COMPLEX, NO_MOID);
 322    a68_op (A68_EXT, "*:=", m, genie_vector_complex_scale_complex_ab);
 323    a68_op (A68_EXT, "/:=", m, genie_vector_complex_div_complex_ab);
 324    m = a68_proc (M_REF_ROW_ROW_COMPLEX, M_REF_ROW_ROW_COMPLEX, M_COMPLEX, NO_MOID);
 325    a68_op (A68_EXT, "*:=", m, genie_matrix_complex_scale_complex_ab);
 326    a68_op (A68_EXT, "/:=", m, genie_matrix_complex_div_complex_ab);
 327    m = a68_proc (M_ROW_REAL, M_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 328    a68_op (A68_EXT, "*", m, genie_vector_times_matrix);
 329    m = a68_proc (M_ROW_COMPLEX, M_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 330    a68_op (A68_EXT, "*", m, genie_vector_complex_times_matrix);
 331  // Matrix times vector or matrix.
 332    m = a68_proc (M_ROW_REAL, M_ROW_ROW_REAL, M_ROW_REAL, NO_MOID);
 333    a68_op (A68_EXT, "*", m, genie_matrix_times_vector);
 334    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 335    a68_op (A68_EXT, "*", m, genie_matrix_times_matrix);
 336    m = a68_proc (M_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 337    a68_op (A68_EXT, "*", m, genie_matrix_complex_times_vector);
 338    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 339    a68_op (A68_EXT, "*", m, genie_matrix_complex_times_matrix);
 340  // Vector and matrix miscellaneous.
 341    m = a68_proc (M_ROW_REAL, M_ROW_REAL, NO_MOID);
 342    a68_idf (A68_EXT, "vectorecho", m, genie_vector_echo);
 343    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 344    a68_idf (A68_EXT, "matrixecho", m, genie_matrix_echo);
 345    m = a68_proc (M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 346    a68_idf (A68_EXT, "complvectorecho", m, genie_vector_complex_echo);
 347    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, NO_MOID);
 348    a68_idf (A68_EXT, "complmatrixecho", m, genie_matrix_complex_echo);
 349    m = a68_proc (M_REAL, M_ROW_REAL, M_ROW_REAL, NO_MOID);
 350    a68_op (A68_EXT, "*", m, genie_vector_dot);
 351    m = a68_proc (M_COMPLEX, M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 352    a68_op (A68_EXT, "*", m, genie_vector_complex_dot);
 353    m = a68_proc (M_REAL, M_ROW_REAL, NO_MOID);
 354    a68_op (A68_EXT, "NORM", m, genie_vector_norm);
 355    m = a68_proc (M_REAL, M_ROW_ROW_REAL, NO_MOID);
 356    a68_op (A68_EXT, "NORM", m, genie_matrix_norm);
 357    m = a68_proc (M_REAL, M_ROW_COMPLEX, NO_MOID);
 358    a68_op (A68_EXT, "NORM", m, genie_vector_complex_norm);
 359    m = a68_proc (M_ROW_ROW_REAL, M_ROW_REAL, M_ROW_REAL, NO_MOID);
 360    a68_op (A68_EXT, "DYAD", m, genie_vector_dyad);
 361    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 362    a68_op (A68_EXT, "DYAD", m, genie_vector_complex_dyad);
 363    a68_prio ("DYAD", 3);
 364  // Principle Component Analysis.
 365    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REF_ROW_REAL, NO_MOID);
 366    a68_idf (A68_EXT, "pcacv", m, genie_matrix_pca_cv);
 367    a68_idf (A68_EXT, "pcasvd", m, genie_matrix_pca_svd);
 368  // Total Least Square regression.
 369    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REF_ROW_REAL, NO_MOID);
 370    a68_idf (A68_EXT, "ols", m, genie_matrix_ols);
 371    a68_idf (A68_EXT, "tls", m, genie_matrix_tls);
 372  // Partial Least Squares regression.
 373    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REF_ROW_REAL, M_INT, M_REAL, NO_MOID);
 374    a68_idf (A68_EXT, "pcr", m, genie_matrix_pcr);
 375    a68_idf (A68_EXT, "pls1", m, genie_matrix_pls1);
 376    a68_idf (A68_EXT, "pls2", m, genie_matrix_pls2);
 377  // Routine left columns, a GSL alternative to trimming columns.
 378    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_INT, NO_MOID);
 379    a68_idf (A68_EXT, "leftcolumns", m, genie_left_columns);
 380  // Moore-Penrose pseudo inverse.
 381    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REAL, NO_MOID);
 382    a68_idf (A68_EXT, "pseudoinv", m, genie_matrix_pinv_lim);
 383  // LU decomposition.
 384    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REF_ROW_INT, M_REF_INT, NO_MOID);
 385    a68_idf (A68_EXT, "ludecomp", m, genie_matrix_lu);
 386    m = a68_proc (M_REAL, M_ROW_ROW_REAL, M_INT, NO_MOID);
 387    a68_idf (A68_EXT, "ludet", m, genie_matrix_lu_det);
 388    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_ROW_INT, NO_MOID);
 389    a68_idf (A68_EXT, "luinv", m, genie_matrix_lu_inv);
 390    m = a68_proc (M_ROW_REAL, M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_ROW_INT, M_ROW_REAL, NO_MOID);
 391    a68_idf (A68_EXT, "lusolve", m, genie_matrix_lu_solve);
 392    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_REF_ROW_INT, M_REF_INT, NO_MOID);
 393    a68_idf (A68_EXT, "complexludecomp", m, genie_matrix_complex_lu);
 394    m = a68_proc (M_COMPLEX, M_ROW_ROW_COMPLEX, M_INT, NO_MOID);
 395    a68_idf (A68_EXT, "complexludet", m, genie_matrix_complex_lu_det);
 396    m = a68_proc (M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_ROW_INT, NO_MOID);
 397    a68_idf (A68_EXT, "complexluinv", m, genie_matrix_complex_lu_inv);
 398    m = a68_proc (M_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_ROW_ROW_COMPLEX, M_ROW_INT, M_ROW_COMPLEX, NO_MOID);
 399    a68_idf (A68_EXT, "complexlusolve", m, genie_matrix_complex_lu_solve);
 400  // SVD decomposition.
 401    m = a68_proc (M_VOID, M_ROW_ROW_REAL, M_REF_ROW_ROW_REAL, M_REF_ROW_REAL, M_REF_ROW_ROW_REAL, NO_MOID);
 402    a68_idf (A68_EXT, "svddecomp", m, genie_matrix_svd);
 403    m = a68_proc (M_ROW_REAL, M_ROW_ROW_REAL, M_ROW_REAL, M_ROW_ROW_REAL, M_ROW_REAL, NO_MOID);
 404    a68_idf (A68_EXT, "svdsolve", m, genie_matrix_svd_solve);
 405  // QR decomposition.
 406    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, M_REF_ROW_REAL, NO_MOID);
 407    a68_idf (A68_EXT, "qrdecomp", m, genie_matrix_qr);
 408    m = a68_proc (M_ROW_REAL, M_ROW_ROW_REAL, M_ROW_REAL, M_ROW_REAL, NO_MOID);
 409    a68_idf (A68_EXT, "qrsolve", m, genie_matrix_qr_solve);
 410    a68_idf (A68_EXT, "qrlssolve", m, genie_matrix_qr_ls_solve);
 411  // Cholesky decomposition.
 412    m = a68_proc (M_ROW_ROW_REAL, M_ROW_ROW_REAL, NO_MOID);
 413    a68_idf (A68_EXT, "choleskydecomp", m, genie_matrix_ch);
 414    m = a68_proc (M_ROW_REAL, M_ROW_ROW_REAL, M_ROW_REAL, NO_MOID);
 415    a68_idf (A68_EXT, "choleskysolve", m, genie_matrix_ch_solve);
 416  }
 417  
 418  void stand_gsl_constants (void)
 419  {
 420  // Constants ex GSL.
 421    a68_idf (A68_EXT, "cgsspeedoflight", M_REAL, genie_cgs_speed_of_light);
 422    a68_idf (A68_EXT, "cgsgravitationalconstant", M_REAL, genie_cgs_gravitational_constant);
 423    a68_idf (A68_EXT, "cgsplanckconstant", M_REAL, genie_cgs_planck_constant_h);
 424    a68_idf (A68_EXT, "cgsplanckconstantbar", M_REAL, genie_cgs_planck_constant_hbar);
 425    a68_idf (A68_EXT, "cgsastronomicalunit", M_REAL, genie_cgs_astronomical_unit);
 426    a68_idf (A68_EXT, "cgslightyear", M_REAL, genie_cgs_light_year);
 427    a68_idf (A68_EXT, "cgsparsec", M_REAL, genie_cgs_parsec);
 428    a68_idf (A68_EXT, "cgsgravaccel", M_REAL, genie_cgs_grav_accel);
 429    a68_idf (A68_EXT, "cgselectronvolt", M_REAL, genie_cgs_electron_volt);
 430    a68_idf (A68_EXT, "cgsmasselectron", M_REAL, genie_cgs_mass_electron);
 431    a68_idf (A68_EXT, "cgsmassmuon", M_REAL, genie_cgs_mass_muon);
 432    a68_idf (A68_EXT, "cgsmassproton", M_REAL, genie_cgs_mass_proton);
 433    a68_idf (A68_EXT, "cgsmassneutron", M_REAL, genie_cgs_mass_neutron);
 434    a68_idf (A68_EXT, "cgsrydberg", M_REAL, genie_cgs_rydberg);
 435    a68_idf (A68_EXT, "cgsboltzmann", M_REAL, genie_cgs_boltzmann);
 436    a68_idf (A68_EXT, "cgsbohrmagneton", M_REAL, genie_cgs_bohr_magneton);
 437    a68_idf (A68_EXT, "cgsnuclearmagneton", M_REAL, genie_cgs_nuclear_magneton);
 438    a68_idf (A68_EXT, "cgselectronmagneticmoment", M_REAL, genie_cgs_electron_magnetic_moment);
 439    a68_idf (A68_EXT, "cgsprotonmagneticmoment", M_REAL, genie_cgs_proton_magnetic_moment);
 440    a68_idf (A68_EXT, "cgsmolargas", M_REAL, genie_cgs_molar_gas);
 441    a68_idf (A68_EXT, "cgsstandardgasvolume", M_REAL, genie_cgs_standard_gas_volume);
 442    a68_idf (A68_EXT, "cgsminute", M_REAL, genie_cgs_minute);
 443    a68_idf (A68_EXT, "cgshour", M_REAL, genie_cgs_hour);
 444    a68_idf (A68_EXT, "cgsday", M_REAL, genie_cgs_day);
 445    a68_idf (A68_EXT, "cgsweek", M_REAL, genie_cgs_week);
 446    a68_idf (A68_EXT, "cgsinch", M_REAL, genie_cgs_inch);
 447    a68_idf (A68_EXT, "cgsfoot", M_REAL, genie_cgs_foot);
 448    a68_idf (A68_EXT, "cgsyard", M_REAL, genie_cgs_yard);
 449    a68_idf (A68_EXT, "cgsmile", M_REAL, genie_cgs_mile);
 450    a68_idf (A68_EXT, "cgsnauticalmile", M_REAL, genie_cgs_nautical_mile);
 451    a68_idf (A68_EXT, "cgsfathom", M_REAL, genie_cgs_fathom);
 452    a68_idf (A68_EXT, "cgsmil", M_REAL, genie_cgs_mil);
 453    a68_idf (A68_EXT, "cgspoint", M_REAL, genie_cgs_point);
 454    a68_idf (A68_EXT, "cgstexpoint", M_REAL, genie_cgs_texpoint);
 455    a68_idf (A68_EXT, "cgsmicron", M_REAL, genie_cgs_micron);
 456    a68_idf (A68_EXT, "cgsangstrom", M_REAL, genie_cgs_angstrom);
 457    a68_idf (A68_EXT, "cgshectare", M_REAL, genie_cgs_hectare);
 458    a68_idf (A68_EXT, "cgsacre", M_REAL, genie_cgs_acre);
 459    a68_idf (A68_EXT, "cgsbarn", M_REAL, genie_cgs_barn);
 460    a68_idf (A68_EXT, "cgsliter", M_REAL, genie_cgs_liter);
 461    a68_idf (A68_EXT, "cgsusgallon", M_REAL, genie_cgs_us_gallon);
 462    a68_idf (A68_EXT, "cgsquart", M_REAL, genie_cgs_quart);
 463    a68_idf (A68_EXT, "cgspint", M_REAL, genie_cgs_pint);
 464    a68_idf (A68_EXT, "cgscup", M_REAL, genie_cgs_cup);
 465    a68_idf (A68_EXT, "cgsfluidounce", M_REAL, genie_cgs_fluid_ounce);
 466    a68_idf (A68_EXT, "cgstablespoon", M_REAL, genie_cgs_tablespoon);
 467    a68_idf (A68_EXT, "cgsteaspoon", M_REAL, genie_cgs_teaspoon);
 468    a68_idf (A68_EXT, "cgscanadiangallon", M_REAL, genie_cgs_canadian_gallon);
 469    a68_idf (A68_EXT, "cgsukgallon", M_REAL, genie_cgs_uk_gallon);
 470    a68_idf (A68_EXT, "cgsmilesperhour", M_REAL, genie_cgs_miles_per_hour);
 471    a68_idf (A68_EXT, "cgskilometersperhour", M_REAL, genie_cgs_kilometers_per_hour);
 472    a68_idf (A68_EXT, "cgsknot", M_REAL, genie_cgs_knot);
 473    a68_idf (A68_EXT, "cgspoundmass", M_REAL, genie_cgs_pound_mass);
 474    a68_idf (A68_EXT, "cgsouncemass", M_REAL, genie_cgs_ounce_mass);
 475    a68_idf (A68_EXT, "cgston", M_REAL, genie_cgs_ton);
 476    a68_idf (A68_EXT, "cgsmetricton", M_REAL, genie_cgs_metric_ton);
 477    a68_idf (A68_EXT, "cgsukton", M_REAL, genie_cgs_uk_ton);
 478    a68_idf (A68_EXT, "cgstroyounce", M_REAL, genie_cgs_troy_ounce);
 479    a68_idf (A68_EXT, "cgscarat", M_REAL, genie_cgs_carat);
 480    a68_idf (A68_EXT, "cgsunifiedatomicmass", M_REAL, genie_cgs_unified_atomic_mass);
 481    a68_idf (A68_EXT, "cgsgramforce", M_REAL, genie_cgs_gram_force);
 482    a68_idf (A68_EXT, "cgspoundforce", M_REAL, genie_cgs_pound_force);
 483    a68_idf (A68_EXT, "cgskilopoundforce", M_REAL, genie_cgs_kilopound_force);
 484    a68_idf (A68_EXT, "cgspoundal", M_REAL, genie_cgs_poundal);
 485    a68_idf (A68_EXT, "cgscalorie", M_REAL, genie_cgs_calorie);
 486    a68_idf (A68_EXT, "cgsbtu", M_REAL, genie_cgs_btu);
 487    a68_idf (A68_EXT, "cgstherm", M_REAL, genie_cgs_therm);
 488    a68_idf (A68_EXT, "cgshorsepower", M_REAL, genie_cgs_horsepower);
 489    a68_idf (A68_EXT, "cgsbar", M_REAL, genie_cgs_bar);
 490    a68_idf (A68_EXT, "cgsstdatmosphere", M_REAL, genie_cgs_std_atmosphere);
 491    a68_idf (A68_EXT, "cgstorr", M_REAL, genie_cgs_torr);
 492    a68_idf (A68_EXT, "cgsmeterofmercury", M_REAL, genie_cgs_meter_of_mercury);
 493    a68_idf (A68_EXT, "cgsinchofmercury", M_REAL, genie_cgs_inch_of_mercury);
 494    a68_idf (A68_EXT, "cgsinchofwater", M_REAL, genie_cgs_inch_of_water);
 495    a68_idf (A68_EXT, "cgspsi", M_REAL, genie_cgs_psi);
 496    a68_idf (A68_EXT, "cgspoise", M_REAL, genie_cgs_poise);
 497    a68_idf (A68_EXT, "cgsstokes", M_REAL, genie_cgs_stokes);
 498    a68_idf (A68_EXT, "cgsfaraday", M_REAL, genie_cgs_faraday);
 499    a68_idf (A68_EXT, "cgselectroncharge", M_REAL, genie_cgs_electron_charge);
 500    a68_idf (A68_EXT, "cgsgauss", M_REAL, genie_cgs_gauss);
 501    a68_idf (A68_EXT, "cgsstilb", M_REAL, genie_cgs_stilb);
 502    a68_idf (A68_EXT, "cgslumen", M_REAL, genie_cgs_lumen);
 503    a68_idf (A68_EXT, "cgslux", M_REAL, genie_cgs_lux);
 504    a68_idf (A68_EXT, "cgsphot", M_REAL, genie_cgs_phot);
 505    a68_idf (A68_EXT, "cgsfootcandle", M_REAL, genie_cgs_footcandle);
 506    a68_idf (A68_EXT, "cgslambert", M_REAL, genie_cgs_lambert);
 507    a68_idf (A68_EXT, "cgsfootlambert", M_REAL, genie_cgs_footlambert);
 508    a68_idf (A68_EXT, "cgscurie", M_REAL, genie_cgs_curie);
 509    a68_idf (A68_EXT, "cgsroentgen", M_REAL, genie_cgs_roentgen);
 510    a68_idf (A68_EXT, "cgsrad", M_REAL, genie_cgs_rad);
 511    a68_idf (A68_EXT, "cgssolarmass", M_REAL, genie_cgs_solar_mass);
 512    a68_idf (A68_EXT, "cgsbohrradius", M_REAL, genie_cgs_bohr_radius);
 513    a68_idf (A68_EXT, "cgsnewton", M_REAL, genie_cgs_newton);
 514    a68_idf (A68_EXT, "cgsdyne", M_REAL, genie_cgs_dyne);
 515    a68_idf (A68_EXT, "cgsjoule", M_REAL, genie_cgs_joule);
 516    a68_idf (A68_EXT, "cgserg", M_REAL, genie_cgs_erg);
 517    a68_idf (A68_EXT, "mksaspeedoflight", M_REAL, genie_mks_speed_of_light);
 518    a68_idf (A68_EXT, "mksagravitationalconstant", M_REAL, genie_mks_gravitational_constant);
 519    a68_idf (A68_EXT, "mksaplanckconstant", M_REAL, genie_mks_planck_constant_h);
 520    a68_idf (A68_EXT, "mksaplanckconstantbar", M_REAL, genie_mks_planck_constant_hbar);
 521    a68_idf (A68_EXT, "mksavacuumpermeability", M_REAL, genie_mks_vacuum_permeability);
 522    a68_idf (A68_EXT, "mksaastronomicalunit", M_REAL, genie_mks_astronomical_unit);
 523    a68_idf (A68_EXT, "mksalightyear", M_REAL, genie_mks_light_year);
 524    a68_idf (A68_EXT, "mksaparsec", M_REAL, genie_mks_parsec);
 525    a68_idf (A68_EXT, "mksagravaccel", M_REAL, genie_mks_grav_accel);
 526    a68_idf (A68_EXT, "mksaelectronvolt", M_REAL, genie_mks_electron_volt);
 527    a68_idf (A68_EXT, "mksamasselectron", M_REAL, genie_mks_mass_electron);
 528    a68_idf (A68_EXT, "mksamassmuon", M_REAL, genie_mks_mass_muon);
 529    a68_idf (A68_EXT, "mksamassproton", M_REAL, genie_mks_mass_proton);
 530    a68_idf (A68_EXT, "mksamassneutron", M_REAL, genie_mks_mass_neutron);
 531    a68_idf (A68_EXT, "mksarydberg", M_REAL, genie_mks_rydberg);
 532    a68_idf (A68_EXT, "mksaboltzmann", M_REAL, genie_mks_boltzmann);
 533    a68_idf (A68_EXT, "mksabohrmagneton", M_REAL, genie_mks_bohr_magneton);
 534    a68_idf (A68_EXT, "mksanuclearmagneton", M_REAL, genie_mks_nuclear_magneton);
 535    a68_idf (A68_EXT, "mksaelectronmagneticmoment", M_REAL, genie_mks_electron_magnetic_moment);
 536    a68_idf (A68_EXT, "mksaprotonmagneticmoment", M_REAL, genie_mks_proton_magnetic_moment);
 537    a68_idf (A68_EXT, "mksamolargas", M_REAL, genie_mks_molar_gas);
 538    a68_idf (A68_EXT, "mksastandardgasvolume", M_REAL, genie_mks_standard_gas_volume);
 539    a68_idf (A68_EXT, "mksaminute", M_REAL, genie_mks_minute);
 540    a68_idf (A68_EXT, "mksahour", M_REAL, genie_mks_hour);
 541    a68_idf (A68_EXT, "mksaday", M_REAL, genie_mks_day);
 542    a68_idf (A68_EXT, "mksaweek", M_REAL, genie_mks_week);
 543    a68_idf (A68_EXT, "mksainch", M_REAL, genie_mks_inch);
 544    a68_idf (A68_EXT, "mksafoot", M_REAL, genie_mks_foot);
 545    a68_idf (A68_EXT, "mksayard", M_REAL, genie_mks_yard);
 546    a68_idf (A68_EXT, "mksamile", M_REAL, genie_mks_mile);
 547    a68_idf (A68_EXT, "mksanauticalmile", M_REAL, genie_mks_nautical_mile);
 548    a68_idf (A68_EXT, "mksafathom", M_REAL, genie_mks_fathom);
 549    a68_idf (A68_EXT, "mksamil", M_REAL, genie_mks_mil);
 550    a68_idf (A68_EXT, "mksapoint", M_REAL, genie_mks_point);
 551    a68_idf (A68_EXT, "mksatexpoint", M_REAL, genie_mks_texpoint);
 552    a68_idf (A68_EXT, "mksamicron", M_REAL, genie_mks_micron);
 553    a68_idf (A68_EXT, "mksaangstrom", M_REAL, genie_mks_angstrom);
 554    a68_idf (A68_EXT, "mksahectare", M_REAL, genie_mks_hectare);
 555    a68_idf (A68_EXT, "mksaacre", M_REAL, genie_mks_acre);
 556    a68_idf (A68_EXT, "mksabarn", M_REAL, genie_mks_barn);
 557    a68_idf (A68_EXT, "mksaliter", M_REAL, genie_mks_liter);
 558    a68_idf (A68_EXT, "mksausgallon", M_REAL, genie_mks_us_gallon);
 559    a68_idf (A68_EXT, "mksaquart", M_REAL, genie_mks_quart);
 560    a68_idf (A68_EXT, "mksapint", M_REAL, genie_mks_pint);
 561    a68_idf (A68_EXT, "mksacup", M_REAL, genie_mks_cup);
 562    a68_idf (A68_EXT, "mksafluidounce", M_REAL, genie_mks_fluid_ounce);
 563    a68_idf (A68_EXT, "mksatablespoon", M_REAL, genie_mks_tablespoon);
 564    a68_idf (A68_EXT, "mksateaspoon", M_REAL, genie_mks_teaspoon);
 565    a68_idf (A68_EXT, "mksacanadiangallon", M_REAL, genie_mks_canadian_gallon);
 566    a68_idf (A68_EXT, "mksaukgallon", M_REAL, genie_mks_uk_gallon);
 567    a68_idf (A68_EXT, "mksamilesperhour", M_REAL, genie_mks_miles_per_hour);
 568    a68_idf (A68_EXT, "mksakilometersperhour", M_REAL, genie_mks_kilometers_per_hour);
 569    a68_idf (A68_EXT, "mksaknot", M_REAL, genie_mks_knot);
 570    a68_idf (A68_EXT, "mksapoundmass", M_REAL, genie_mks_pound_mass);
 571    a68_idf (A68_EXT, "mksaouncemass", M_REAL, genie_mks_ounce_mass);
 572    a68_idf (A68_EXT, "mksaton", M_REAL, genie_mks_ton);
 573    a68_idf (A68_EXT, "mksametricton", M_REAL, genie_mks_metric_ton);
 574    a68_idf (A68_EXT, "mksaukton", M_REAL, genie_mks_uk_ton);
 575    a68_idf (A68_EXT, "mksatroyounce", M_REAL, genie_mks_troy_ounce);
 576    a68_idf (A68_EXT, "mksacarat", M_REAL, genie_mks_carat);
 577    a68_idf (A68_EXT, "mksaunifiedatomicmass", M_REAL, genie_mks_unified_atomic_mass);
 578    a68_idf (A68_EXT, "mksagramforce", M_REAL, genie_mks_gram_force);
 579    a68_idf (A68_EXT, "mksapoundforce", M_REAL, genie_mks_pound_force);
 580    a68_idf (A68_EXT, "mksakilopoundforce", M_REAL, genie_mks_kilopound_force);
 581    a68_idf (A68_EXT, "mksapoundal", M_REAL, genie_mks_poundal);
 582    a68_idf (A68_EXT, "mksacalorie", M_REAL, genie_mks_calorie);
 583    a68_idf (A68_EXT, "mksabtu", M_REAL, genie_mks_btu);
 584    a68_idf (A68_EXT, "mksatherm", M_REAL, genie_mks_therm);
 585    a68_idf (A68_EXT, "mksahorsepower", M_REAL, genie_mks_horsepower);
 586    a68_idf (A68_EXT, "mksabar", M_REAL, genie_mks_bar);
 587    a68_idf (A68_EXT, "mksastdatmosphere", M_REAL, genie_mks_std_atmosphere);
 588    a68_idf (A68_EXT, "mksatorr", M_REAL, genie_mks_torr);
 589    a68_idf (A68_EXT, "mksameterofmercury", M_REAL, genie_mks_meter_of_mercury);
 590    a68_idf (A68_EXT, "mksainchofmercury", M_REAL, genie_mks_inch_of_mercury);
 591    a68_idf (A68_EXT, "mksainchofwater", M_REAL, genie_mks_inch_of_water);
 592    a68_idf (A68_EXT, "mksapsi", M_REAL, genie_mks_psi);
 593    a68_idf (A68_EXT, "mksapoise", M_REAL, genie_mks_poise);
 594    a68_idf (A68_EXT, "mksastokes", M_REAL, genie_mks_stokes);
 595    a68_idf (A68_EXT, "mksafaraday", M_REAL, genie_mks_faraday);
 596    a68_idf (A68_EXT, "mksaelectroncharge", M_REAL, genie_mks_electron_charge);
 597    a68_idf (A68_EXT, "mksagauss", M_REAL, genie_mks_gauss);
 598    a68_idf (A68_EXT, "mksastilb", M_REAL, genie_mks_stilb);
 599    a68_idf (A68_EXT, "mksalumen", M_REAL, genie_mks_lumen);
 600    a68_idf (A68_EXT, "mksalux", M_REAL, genie_mks_lux);
 601    a68_idf (A68_EXT, "mksaphot", M_REAL, genie_mks_phot);
 602    a68_idf (A68_EXT, "mksafootcandle", M_REAL, genie_mks_footcandle);
 603    a68_idf (A68_EXT, "mksalambert", M_REAL, genie_mks_lambert);
 604    a68_idf (A68_EXT, "mksafootlambert", M_REAL, genie_mks_footlambert);
 605    a68_idf (A68_EXT, "mksacurie", M_REAL, genie_mks_curie);
 606    a68_idf (A68_EXT, "mksaroentgen", M_REAL, genie_mks_roentgen);
 607    a68_idf (A68_EXT, "mksarad", M_REAL, genie_mks_rad);
 608    a68_idf (A68_EXT, "mksasolarmass", M_REAL, genie_mks_solar_mass);
 609    a68_idf (A68_EXT, "mksabohrradius", M_REAL, genie_mks_bohr_radius);
 610    a68_idf (A68_EXT, "mksavacuumpermittivity", M_REAL, genie_mks_vacuum_permittivity);
 611    a68_idf (A68_EXT, "mksanewton", M_REAL, genie_mks_newton);
 612    a68_idf (A68_EXT, "mksadyne", M_REAL, genie_mks_dyne);
 613    a68_idf (A68_EXT, "mksajoule", M_REAL, genie_mks_joule);
 614    a68_idf (A68_EXT, "mksaerg", M_REAL, genie_mks_erg);
 615    a68_idf (A68_EXT, "numfinestructure", M_REAL, genie_num_fine_structure);
 616    a68_idf (A68_EXT, "numavogadro", M_REAL, genie_num_avogadro);
 617    a68_idf (A68_EXT, "numyotta", M_REAL, genie_num_yotta);
 618    a68_idf (A68_EXT, "numzetta", M_REAL, genie_num_zetta);
 619    a68_idf (A68_EXT, "numexa", M_REAL, genie_num_exa);
 620    a68_idf (A68_EXT, "numpeta", M_REAL, genie_num_peta);
 621    a68_idf (A68_EXT, "numtera", M_REAL, genie_num_tera);
 622    a68_idf (A68_EXT, "numgiga", M_REAL, genie_num_giga);
 623    a68_idf (A68_EXT, "nummega", M_REAL, genie_num_mega);
 624    a68_idf (A68_EXT, "numkilo", M_REAL, genie_num_kilo);
 625    a68_idf (A68_EXT, "nummilli", M_REAL, genie_num_milli);
 626    a68_idf (A68_EXT, "nummicro", M_REAL, genie_num_micro);
 627    a68_idf (A68_EXT, "numnano", M_REAL, genie_num_nano);
 628    a68_idf (A68_EXT, "numpico", M_REAL, genie_num_pico);
 629    a68_idf (A68_EXT, "numfemto", M_REAL, genie_num_femto);
 630    a68_idf (A68_EXT, "numatto", M_REAL, genie_num_atto);
 631    a68_idf (A68_EXT, "numzepto", M_REAL, genie_num_zepto);
 632    a68_idf (A68_EXT, "numyocto", M_REAL, genie_num_yocto);
 633  }
 634  
 635  void stand_gsl_fft_laplace (void)
 636  {
 637  // FFT.
 638    MOID_T *m = a68_proc (M_ROW_INT, M_INT, NO_MOID);
 639    a68_idf (A68_EXT, "primefactors", m, genie_prime_factors);
 640    m = a68_proc (M_ROW_COMPLEX, M_ROW_COMPLEX, NO_MOID);
 641    a68_idf (A68_EXT, "fftcomplexforward", m, genie_fft_complex_forward);
 642    a68_idf (A68_EXT, "fftcomplexbackward", m, genie_fft_complex_backward);
 643    a68_idf (A68_EXT, "fftcomplexinverse", m, genie_fft_complex_inverse);
 644    m = a68_proc (M_ROW_COMPLEX, M_ROW_REAL, NO_MOID);
 645    a68_idf (A68_EXT, "fftforward", m, genie_fft_forward);
 646    m = a68_proc (M_ROW_REAL, M_ROW_COMPLEX, NO_MOID);
 647    a68_idf (A68_EXT, "fftbackward", m, genie_fft_backward);
 648    a68_idf (A68_EXT, "fftinverse", m, genie_fft_inverse);
 649  // Laplace.
 650    m = a68_proc (M_REAL, A68_MCACHE (proc_real_real), M_REAL, M_REF_REAL, NO_MOID);
 651    a68_idf (A68_EXT, "laplace", m, genie_laplace);
 652  }
 653  
 654  void stand_gsl (void)
 655  {
 656    stand_gsl_sf ();
 657    stand_gsl_linear_algebra ();
 658    stand_gsl_constants ();
 659    stand_gsl_fft_laplace ();
 660  }
 661  
 662  #endif