single-gsl.c

     
   1  //! @file single-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-2023 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  //! REAL routines using GSL.
  25  
  26  #include "a68g.h"
  27  #include "a68g-genie.h"
  28  #include "a68g-prelude.h"
  29  #include "a68g-prelude-gsl.h"
  30  #include "a68g-double.h"
  31  #include "a68g-numbers.h"
  32  
  33  #if defined (HAVE_GSL)
  34  
  35  //! @brief Convert VECTOR to [] REAL.
  36  
  37  #define PROC_RR_R(p, g, f)\
  38  void g (NODE_T *p) {\
  39    A68 (f_entry) = p;\
  40    A68_REAL *x;\
  41    int status;\
  42    POP_OPERAND_ADDRESS (p, x, A68_REAL);\
  43    (void) gsl_set_error_handler_off ();\
  44    status = f (& (VALUE (x)));\
  45    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
  46  }
  47  
  48  #define PROC_R_R(p, g, f)\
  49  void g (NODE_T *p) {\
  50    A68 (f_entry) = p;\
  51    A68_REAL *x;\
  52    gsl_sf_result y;\
  53    int status;\
  54    POP_OPERAND_ADDRESS (p, x, A68_REAL);\
  55    (void) gsl_set_error_handler_off ();\
  56    status = f (VALUE (x), &y);\
  57    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
  58    VALUE (x) = VAL (&y);\
  59  }
  60  
  61  #define PROC_R_R_DBL(p, g, f)\
  62  void g (NODE_T *p) {\
  63    A68 (f_entry) = p;\
  64    A68_REAL *x;\
  65    gsl_sf_result y;\
  66    int status;\
  67    POP_OPERAND_ADDRESS (p, x, A68_REAL);\
  68    (void) gsl_set_error_handler_off ();\
  69    status = f (VALUE (x), GSL_PREC_DOUBLE, &y);\
  70    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
  71    VALUE (x) = VAL (&y);\
  72  }
  73  
  74  #define PROC_I_R(p, g, f)\
  75  void g (NODE_T *p) {\
  76    A68 (f_entry) = p;\
  77    A68_INT s;\
  78    gsl_sf_result y;\
  79    int status;\
  80    POP_OBJECT (p, &s, A68_INT);\
  81    (void) gsl_set_error_handler_off ();\
  82    status = f (VALUE (&s), &y);\
  83    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
  84    PUSH_VALUE (p, VAL (&y), A68_REAL);\
  85  }
  86  
  87  #define PROC_R_R_R(p, g, f)\
  88  void g (NODE_T *p) {\
  89    A68 (f_entry) = p;\
  90    A68_REAL *x, *y;\
  91    gsl_sf_result r;\
  92    int status;\
  93    POP_OPERAND_ADDRESSES (p, x, y, A68_REAL);\
  94    (void) gsl_set_error_handler_off ();\
  95    status = f (VALUE (x), VALUE (y),  &r);\
  96    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
  97    VALUE (x) = VAL (&r);\
  98  }
  99  
 100  #define PROC_I_R_R(p, g, f)\
 101  void g (NODE_T *p) {\
 102    A68 (f_entry) = p;\
 103    A68_INT s;\
 104    A68_REAL x;\
 105    gsl_sf_result r;\
 106    int status;\
 107    POP_OBJECT (p, &x, A68_REAL);\
 108    POP_OBJECT (p, &s, A68_INT);\
 109    (void) gsl_set_error_handler_off ();\
 110    status = f (VALUE (&s), VALUE (&x), &r);\
 111    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 112    PUSH_VALUE (p, VAL (&r), A68_REAL);\
 113  }
 114  
 115  #define PROC_I_R_R_REVERSED(p, g, f)\
 116  void g (NODE_T *p) {\
 117    A68 (f_entry) = p;\
 118    A68_INT s;\
 119    A68_REAL x;\
 120    gsl_sf_result r;\
 121    int status;\
 122    POP_OBJECT (p, &x, A68_REAL);\
 123    POP_OBJECT (p, &s, A68_INT);\
 124    (void) gsl_set_error_handler_off ();\
 125    status = f (VALUE (&x), VALUE (&s), &r);\
 126    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 127    PUSH_VALUE (p, VAL (&r), A68_REAL);\
 128  }
 129  
 130  #define PROC_R_R_R_DBL(p, g, f)\
 131  void g (NODE_T *p) {\
 132    A68 (f_entry) = p;\
 133    A68_REAL *x, *y;\
 134    gsl_sf_result r;\
 135    int status;\
 136    POP_OPERAND_ADDRESSES (p, x, y, A68_REAL);\
 137    (void) gsl_set_error_handler_off ();\
 138    status = f (VALUE (x), VALUE (y), GSL_PREC_DOUBLE, &r);\
 139    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 140    VALUE (x) = VAL (&r);\
 141  }
 142  
 143  #define PROC_R_R_R_R(p, g, f)\
 144  void g (NODE_T *p) {\
 145    A68 (f_entry) = p;\
 146    A68_REAL *x, *y, *z;\
 147    gsl_sf_result r;\
 148    int status;\
 149    POP_ADDRESS (p, z, A68_REAL);\
 150    POP_OPERAND_ADDRESSES (p, x, y, A68_REAL);\
 151    (void) gsl_set_error_handler_off ();\
 152    status = f (VALUE (x), VALUE (y), VALUE (z),  &r);\
 153    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 154    VALUE (x) = VAL (&r);\
 155  }
 156  
 157  #define PROC_I_R_R_R(p, g, f)\
 158  void g (NODE_T *p) {\
 159    A68 (f_entry) = p;\
 160    A68_INT s;\
 161    A68_REAL x, y;\
 162    gsl_sf_result r;\
 163    int status;\
 164    POP_OBJECT (p, &y, A68_REAL);\
 165    POP_OBJECT (p, &x, A68_REAL);\
 166    POP_OBJECT (p, &s, A68_INT);\
 167    (void) gsl_set_error_handler_off ();\
 168    status = f (VALUE (&s), VALUE (&x), VALUE (&y), &r);\
 169    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 170    PUSH_VALUE (p, VAL (&r), A68_REAL);\
 171  }
 172  
 173  #define PROC_R_R_R_R_DBL(p, g, f)\
 174  void g (NODE_T *p) {\
 175    A68 (f_entry) = p;\
 176    A68_REAL *x, *y, *z;\
 177    gsl_sf_result r;\
 178    int status;\
 179    POP_ADDRESS (p, z, A68_REAL);\
 180    POP_OPERAND_ADDRESSES (p, x, y, A68_REAL);\
 181    (void) gsl_set_error_handler_off ();\
 182    status = f (VALUE (x), VALUE (y), VALUE (z), GSL_PREC_DOUBLE, &r);\
 183    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 184    VALUE (x) = VAL (&r);\
 185  }
 186  
 187  #define PROC_R_R_R_R_R_DBL(p, g, f)\
 188  void g (NODE_T *p) {\
 189    A68 (f_entry) = p;\
 190    A68_REAL *x, *y, *z, *rho;\
 191    gsl_sf_result r;\
 192    int status;\
 193    POP_ADDRESS (p, rho, A68_REAL);\
 194    POP_ADDRESS (p, z, A68_REAL);\
 195    POP_OPERAND_ADDRESSES (p, x, y, A68_REAL);\
 196    (void) gsl_set_error_handler_off ();\
 197    status = f (VALUE (x), VALUE (y), VALUE (z), VALUE (rho), GSL_PREC_DOUBLE, &r);\
 198    MATH_RTE (p, status != 0, M_REAL, (char *) gsl_strerror (status));\
 199    VALUE (x) = VAL (&r);\
 200  }
 201  
 202  //! @brief PROC airy ai = (REAL x) REAL
 203  
 204  PROC_R_R_DBL (p, genie_airy_ai_real, gsl_sf_airy_Ai_e);
 205  
 206  //! @brief PROC airy bi = (REAL x) REAL
 207  
 208  PROC_R_R_DBL (p, genie_airy_bi_real, gsl_sf_airy_Bi_e);
 209  
 210  //! @brief PROC airy ai scaled = (REAL x) REAL
 211  
 212  PROC_R_R_DBL (p, genie_airy_ai_scaled_real, gsl_sf_airy_Ai_scaled_e);
 213  
 214  //! @brief PROC airy bi scaled = (REAL x) REAL
 215  
 216  PROC_R_R_DBL (p, genie_airy_bi_scaled_real, gsl_sf_airy_Bi_scaled_e);
 217  
 218  //! @brief PROC airy ai deriv = (REAL x) REAL
 219  
 220  PROC_R_R_DBL (p, genie_airy_ai_deriv_real, gsl_sf_airy_Ai_deriv_e);
 221  
 222  //! @brief PROC airy bi deriv = (REAL x) REAL
 223  
 224  PROC_R_R_DBL (p, genie_airy_bi_deriv_real, gsl_sf_airy_Bi_deriv_e);
 225  
 226  //! @brief PROC airy ai deriv scaled = (REAL x) REAL
 227  
 228  PROC_R_R_DBL (p, genie_airy_ai_deriv_scaled_real, gsl_sf_airy_Ai_deriv_scaled_e);
 229  
 230  //! @brief PROC airy bi deriv scaled = (REAL x) REAL
 231  
 232  PROC_R_R_DBL (p, genie_airy_bi_deriv_scaled_real, gsl_sf_airy_Bi_deriv_scaled_e);
 233  
 234  //! @brief PROC airy zero ai = (INT s) REAL
 235  
 236  PROC_I_R (p, genie_airy_zero_ai_real, gsl_sf_airy_zero_Ai_e);
 237  
 238  //! @brief PROC airy zero bi = (INT s) REAL
 239  
 240  PROC_I_R (p, genie_airy_zero_bi_real, gsl_sf_airy_zero_Bi_e);
 241  
 242  //! @brief PROC airy zero ai deriv = (INT s) REAL
 243  
 244  PROC_I_R (p, genie_airy_zero_ai_deriv_real, gsl_sf_airy_zero_Ai_deriv_e);
 245  
 246  //! @brief PROC airy zero bi deriv = (INT s) REAL
 247  
 248  PROC_I_R (p, genie_airy_zero_bi_deriv_real, gsl_sf_airy_zero_Bi_deriv_e);
 249  
 250  //! @brief PROC clausen = (REAL x) REAL
 251  
 252  PROC_R_R (p, genie_clausen_real, gsl_sf_clausen_e);
 253  
 254  //! @brief PROC bessel jn0 = (REAL x) REAL
 255  
 256  PROC_R_R (p, genie_bessel_jn0_real, gsl_sf_bessel_J0_e);
 257  
 258  //! @brief PROC bessel jn1 = (REAL x) REAL
 259  
 260  PROC_R_R (p, genie_bessel_jn1_real, gsl_sf_bessel_J1_e);
 261  
 262  //! @brief PROC bessel jn = (INT n, REAL x) REAL
 263  
 264  PROC_I_R_R (p, genie_bessel_jn_real, gsl_sf_bessel_Jn_e);
 265  
 266  //! @brief PROC bessel yn0 = (REAL x) REAL
 267  
 268  PROC_R_R (p, genie_bessel_yn0_real, gsl_sf_bessel_Y0_e);
 269  
 270  //! @brief PROC bessel yn1 = (REAL x) REAL
 271  
 272  PROC_R_R (p, genie_bessel_yn1_real, gsl_sf_bessel_Y1_e);
 273  
 274  //! @brief PROC bessel yn = (INT n, REAL x) REAL
 275  
 276  PROC_I_R_R (p, genie_bessel_yn_real, gsl_sf_bessel_Yn_e);
 277  
 278  //! @brief PROC bessel in0 = (REAL x) REAL
 279  
 280  PROC_R_R (p, genie_bessel_in0_real, gsl_sf_bessel_I0_e);
 281  
 282  //! @brief PROC bessel in1 = (REAL x) REAL
 283  
 284  PROC_R_R (p, genie_bessel_in1_real, gsl_sf_bessel_I1_e);
 285  
 286  //! @brief PROC bessel in = (INT n, REAL x) REAL
 287  
 288  PROC_I_R_R (p, genie_bessel_in_real, gsl_sf_bessel_In_e);
 289  
 290  //! @brief PROC bessel in0 scaled = (REAL x) REAL
 291  
 292  PROC_R_R (p, genie_bessel_in0_scaled_real, gsl_sf_bessel_I0_scaled_e);
 293  
 294  //! @brief PROC bessel in1 scaled = (REAL x) REAL
 295  
 296  PROC_R_R (p, genie_bessel_in1_scaled_real, gsl_sf_bessel_I1_scaled_e);
 297  
 298  //! @brief PROC bessel in scaled = (INT n, REAL x) REAL
 299  
 300  PROC_I_R_R (p, genie_bessel_in_scaled_real, gsl_sf_bessel_In_scaled_e);
 301  
 302  //! @brief PROC bessel kn0 = (REAL x) REAL
 303  
 304  PROC_R_R (p, genie_bessel_kn0_real, gsl_sf_bessel_K0_e);
 305  
 306  //! @brief PROC bessel kn1 = (REAL x) REAL
 307  
 308  PROC_R_R (p, genie_bessel_kn1_real, gsl_sf_bessel_K1_e);
 309  
 310  //! @brief PROC bessel kn = (INT n, REAL x) REAL 
 311  
 312  PROC_I_R_R (p, genie_bessel_kn_real, gsl_sf_bessel_Kn_e);
 313  
 314  //! @brief PROC bessel kn0 scaled = (REAL x) REAL
 315  
 316  PROC_R_R (p, genie_bessel_kn0_scaled_real, gsl_sf_bessel_K0_scaled_e);
 317  
 318  //! @brief PROC bessel kn1 scaled = (REAL x) REAL
 319  
 320  PROC_R_R (p, genie_bessel_kn1_scaled_real, gsl_sf_bessel_K1_scaled_e);
 321  
 322  //! @brief PROC bessel kn scaled = (INT n, REAL x) REAL
 323  
 324  PROC_I_R_R (p, genie_bessel_kn_scaled_real, gsl_sf_bessel_Kn_scaled_e);
 325  
 326  //! @brief PROC bessel jl0 = (REAL x) REAL
 327  
 328  PROC_R_R (p, genie_bessel_jl0_real, gsl_sf_bessel_j0_e);
 329  
 330  //! @brief PROC bessel jl1 = (REAL x) REAL
 331  
 332  PROC_R_R (p, genie_bessel_jl1_real, gsl_sf_bessel_j1_e);
 333  
 334  //! @brief PROC bessel jl2 = (REAL x) REAL
 335  
 336  PROC_R_R (p, genie_bessel_jl2_real, gsl_sf_bessel_j2_e);
 337  
 338  //! @brief PROC bessel jl = (INT l, REAL x) REAL
 339  
 340  PROC_I_R_R (p, genie_bessel_jl_real, gsl_sf_bessel_jl_e);
 341  
 342  //! @brief PROC bessel yl0 = (REAL x) REAL
 343  
 344  PROC_R_R (p, genie_bessel_yl0_real, gsl_sf_bessel_y0_e);
 345  
 346  //! @brief PROC bessel yl1 = (REAL x) REAL
 347  
 348  PROC_R_R (p, genie_bessel_yl1_real, gsl_sf_bessel_y1_e);
 349  
 350  //! @brief PROC bessel yl2 = (REAL x) REAL
 351  
 352  PROC_R_R (p, genie_bessel_yl2_real, gsl_sf_bessel_y2_e);
 353  
 354  //! @brief PROC bessel yl = (INT l, REAL x) REAL
 355  
 356  PROC_I_R_R (p, genie_bessel_yl_real, gsl_sf_bessel_yl_e);
 357  
 358  //! @brief PROC bessel il0 scaled = (REAL x) REAL
 359  
 360  PROC_R_R (p, genie_bessel_il0_scaled_real, gsl_sf_bessel_i0_scaled_e);
 361  
 362  //! @brief PROC bessel il1 scaled = (REAL x) REAL
 363  
 364  PROC_R_R (p, genie_bessel_il1_scaled_real, gsl_sf_bessel_i1_scaled_e);
 365  
 366  //! @brief PROC bessel il2 scaled = (REAL x) REAL
 367  
 368  PROC_R_R (p, genie_bessel_il2_scaled_real, gsl_sf_bessel_i2_scaled_e);
 369  
 370  //! @brief PROC bessel il scaled = (INT l, REAL x) REAL
 371  
 372  PROC_I_R_R (p, genie_bessel_il_scaled_real, gsl_sf_bessel_il_scaled_e);
 373  
 374  //! @brief PROC bessel kl0 scaled = (REAL x) REAL
 375  
 376  PROC_R_R (p, genie_bessel_kl0_scaled_real, gsl_sf_bessel_k0_scaled_e);
 377  
 378  //! @brief PROC bessel kl1 scaled = (REAL x) REAL
 379  
 380  PROC_R_R (p, genie_bessel_kl1_scaled_real, gsl_sf_bessel_k1_scaled_e);
 381  
 382  //! @brief PROC bessel kl2 scaled = (REAL x) REAL
 383  
 384  PROC_R_R (p, genie_bessel_kl2_scaled_real, gsl_sf_bessel_k2_scaled_e);
 385  
 386  //! @brief PROC bessel kl scaled = (INT l, REAL x) REAL
 387  
 388  PROC_I_R_R (p, genie_bessel_kl_scaled_real, gsl_sf_bessel_kl_scaled_e);
 389  
 390  //! @brief PROC bessel jnu = (REAL nu, REAL x) REAL
 391  
 392  PROC_R_R_R (p, genie_bessel_jnu_real, gsl_sf_bessel_Jnu_e);
 393  
 394  //! @brief PROC bessel ynu = (REAL nu, x) REAL
 395  
 396  PROC_R_R_R (p, genie_bessel_ynu_real, gsl_sf_bessel_Ynu_e);
 397  
 398  //! @brief PROC bessel inu = (REAL nu, x) REAL
 399  
 400  PROC_R_R_R (p, genie_bessel_inu_real, gsl_sf_bessel_Inu_e);
 401  
 402  //! @brief PROC bessel inu scaled = (REAL nu, x) REAL
 403  
 404  PROC_R_R_R (p, genie_bessel_inu_scaled_real, gsl_sf_bessel_Inu_scaled_e);
 405  
 406  //! @brief PROC bessel knu = (REAL nu, x) REAL
 407  
 408  PROC_R_R_R (p, genie_bessel_knu_real, gsl_sf_bessel_Knu_e);
 409  
 410  //! @brief PROC bessel ln knu = (REAL nu, x) REAL
 411  
 412  PROC_R_R_R (p, genie_bessel_ln_knu_real, gsl_sf_bessel_lnKnu_e);
 413  
 414  //! @brief PROC bessel knu scaled = (REAL nu, x) REAL
 415  
 416  PROC_R_R_R (p, genie_bessel_knu_scaled_real, gsl_sf_bessel_Knu_scaled_e);
 417  
 418  //! @brief PROC bessel zero jnu0 = (INT s) REAL
 419  
 420  PROC_I_R (p, genie_bessel_zero_jnu0_real, gsl_sf_bessel_zero_J0_e);
 421  
 422  //! @brief PROC bessel zero jnu1 = (INT s) REAL
 423  
 424  PROC_I_R (p, genie_bessel_zero_jnu1_real, gsl_sf_bessel_zero_J1_e);
 425  
 426  //! @brief PROC bessel zero jnu = (INT s, REAL nu) REAL
 427  
 428  PROC_I_R_R_REVERSED (p, genie_bessel_zero_jnu_real, gsl_sf_bessel_zero_Jnu_e);
 429  
 430  //! @brief PROC dawson = (REAL x) REAL
 431  
 432  PROC_R_R (p, genie_dawson_real, gsl_sf_dawson_e);
 433  
 434  //! @brief PROC debye 1 = (REAL x) REAL
 435  
 436  PROC_R_R (p, genie_debye_1_real, gsl_sf_debye_1_e);
 437  
 438  //! @brief PROC debye 2 = (REAL x) REAL
 439  
 440  PROC_R_R (p, genie_debye_2_real, gsl_sf_debye_2_e);
 441  
 442  //! @brief PROC debye 3 = (REAL x) REAL
 443  
 444  PROC_R_R (p, genie_debye_3_real, gsl_sf_debye_3_e);
 445  
 446  //! @brief PROC debye 4 = (REAL x) REAL
 447  
 448  PROC_R_R (p, genie_debye_4_real, gsl_sf_debye_4_e);
 449  
 450  //! @brief PROC debye 5 = (REAL x) REAL
 451  
 452  PROC_R_R (p, genie_debye_5_real, gsl_sf_debye_5_e);
 453  
 454  //! @brief PROC debye 6 = (REAL x) REAL
 455  
 456  PROC_R_R (p, genie_debye_6_real, gsl_sf_debye_6_e);
 457  
 458  //! @brief PROC dilog = (REAL x) REAL
 459  
 460  PROC_R_R (p, genie_dilog_real, gsl_sf_dilog_e);
 461  
 462  //! @brief PROC ellint k comp = (REAL k) REAL
 463  
 464  PROC_R_R_DBL (p, genie_ellint_k_comp_real, gsl_sf_ellint_Kcomp_e);
 465  
 466  //! @brief PROC ellint e comp = (REAL k) REAL
 467  
 468  PROC_R_R_DBL (p, genie_ellint_e_comp_real, gsl_sf_ellint_Ecomp_e);
 469  
 470  //! @brief PROC ellint p comp = (REAL k, n) REAL
 471  
 472  PROC_R_R_R_DBL (p, genie_ellint_p_comp_real, gsl_sf_ellint_Pcomp_e);
 473  
 474  //! @brief PROC ellint d = (REAL phi, k) REAL
 475  
 476  PROC_R_R_R_DBL (p, genie_ellint_d_real, gsl_sf_ellint_D_e);
 477  
 478  //! @brief PROC ellint e = (REAL phi, k) REAL
 479  
 480  PROC_R_R_R_DBL (p, genie_ellint_e_real, gsl_sf_ellint_E_e);
 481  
 482  //! @brief PROC ellint f = (REAL phi, k) REAL
 483  
 484  PROC_R_R_R_DBL (p, genie_ellint_f_real, gsl_sf_ellint_F_e);
 485  
 486  //! @brief PROC ellint p = (REAL phi, k, n) REAL
 487  
 488  PROC_R_R_R_R_DBL (p, genie_ellint_p_real, gsl_sf_ellint_P_e);
 489  
 490  //! @brief PROC ellint rc = (REAL x, y) REAL
 491  
 492  PROC_R_R_R_DBL (p, genie_ellint_rc_real, gsl_sf_ellint_RC_e);
 493  
 494  //! @brief PROC ellint rf = (REAL x, y, z) REAL
 495  
 496  PROC_R_R_R_R_DBL (p, genie_ellint_rf_real, gsl_sf_ellint_RF_e);
 497  
 498  //! @brief PROC ellint rd = (REAL x, y, z) REAL
 499  
 500  PROC_R_R_R_R_DBL (p, genie_ellint_rd_real, gsl_sf_ellint_RD_e);
 501  
 502  //! @brief PROC ellint rj = (REAL x, y, z, p) REAL
 503  
 504  PROC_R_R_R_R_R_DBL (p, genie_ellint_rj_real, gsl_sf_ellint_RJ_e);
 505  
 506  //! @brief PROC expint e1 = (REAL x) REAL
 507  
 508  PROC_R_R (p, genie_expint_e1_real, gsl_sf_expint_E1_e);
 509  
 510  //! @brief PROC expint e2 = (REAL x) REAL
 511  
 512  PROC_R_R (p, genie_expint_e2_real, gsl_sf_expint_E2_e);
 513  
 514  //! @brief PROC expint en = (INT n, REAL x) REAL
 515  
 516  PROC_I_R_R (p, genie_expint_en_real, gsl_sf_expint_En_e);
 517  
 518  //! @brief PROC expint ei = (REAL x) REAL
 519  
 520  PROC_R_R (p, genie_expint_ei_real, gsl_sf_expint_Ei_e);
 521  
 522  //! @brief PROC shi = (REAL x) REAL
 523  
 524  PROC_R_R (p, genie_shi_real, gsl_sf_Shi_e);
 525  
 526  //! @brief PROC chi = (REAL x) REAL
 527  
 528  PROC_R_R (p, genie_chi_real, gsl_sf_Chi_e);
 529  
 530  //! @brief PROC expint 3 = (REAL x) REAL
 531  
 532  PROC_R_R (p, genie_expint_3_real, gsl_sf_expint_3_e);
 533  
 534  //! @brief PROC si = (REAL x) REAL
 535  
 536  PROC_R_R (p, genie_si_real, gsl_sf_Si_e);
 537  
 538  //! @brief PROC ci = (REAL x) REAL
 539  
 540  PROC_R_R (p, genie_ci_real, gsl_sf_Ci_e);
 541  
 542  //! @brief PROC atanint = (REAL x) REAL
 543  
 544  PROC_R_R (p, genie_atanint_real, gsl_sf_atanint_e);
 545  
 546  //! @brief PROC fermi dirac m1 = (REAL x) REAL
 547  
 548  PROC_R_R (p, genie_fermi_dirac_m1_real, gsl_sf_fermi_dirac_m1_e);
 549  
 550  //! @brief PROC fermi dirac 0 = (REAL x) REAL
 551  
 552  PROC_R_R (p, genie_fermi_dirac_0_real, gsl_sf_fermi_dirac_0_e);
 553  
 554  //! @brief PROC fermi dirac 1 = (REAL x) REAL
 555  
 556  PROC_R_R (p, genie_fermi_dirac_1_real, gsl_sf_fermi_dirac_1_e);
 557  
 558  //! @brief PROC fermi dirac 2 = (REAL x) REAL
 559  
 560  PROC_R_R (p, genie_fermi_dirac_2_real, gsl_sf_fermi_dirac_2_e);
 561  
 562  //! @brief PROC fermi dirac int = (INT n, REAL x) REAL
 563  
 564  PROC_I_R_R (p, genie_fermi_dirac_int_real, gsl_sf_fermi_dirac_int_e);
 565  
 566  //! @brief PROC fermi dirac m half = (REAL x) REAL
 567  
 568  PROC_R_R (p, genie_fermi_dirac_mhalf_real, gsl_sf_fermi_dirac_mhalf_e);
 569  
 570  //! @brief PROC fermi dirac half = (REAL x) REAL
 571  
 572  PROC_R_R (p, genie_fermi_dirac_half_real, gsl_sf_fermi_dirac_half_e);
 573  
 574  //! @brief PROC fermi dirac 3 half = (REAL x) REAL
 575  
 576  PROC_R_R (p, genie_fermi_dirac_3half_real, gsl_sf_fermi_dirac_3half_e);
 577  
 578  //! @brief PROC fermi dirac inc0 = (REAL x, b) REAL
 579  
 580  PROC_R_R_R (p, genie_fermi_dirac_inc_0_real, gsl_sf_fermi_dirac_inc_0_e);
 581  
 582  //! @brief PROC digamma = (REAL x) REAL
 583  
 584  PROC_R_R (p, genie_digamma_real, gsl_sf_psi_e);
 585  
 586  //! @brief PROC gamma star = (REAL x) REAL
 587  
 588  PROC_R_R (p, genie_gammastar_real, gsl_sf_gammastar_e);
 589  
 590  //! @brief PROC gamma inv = (REAL x) REAL
 591  
 592  PROC_R_R (p, genie_gammainv_real, gsl_sf_gammainv_e);
 593  
 594  //! @brief PROC double fact = (INT n) REAL
 595  
 596  PROC_I_R (p, genie_doublefact_real, gsl_sf_doublefact_e);
 597  
 598  //! @brief PROC ln double fact = (INT n) REAL
 599  
 600  PROC_I_R (p, genie_lndoublefact_real, gsl_sf_lndoublefact_e);
 601  
 602  //! @brief PROC taylor coeff = (INT n, REAL x) REAL
 603  
 604  PROC_I_R_R (p, genie_taylorcoeff_real, gsl_sf_taylorcoeff_e);
 605  
 606  //! @brief PROC poch = (REAL a, x) REAL
 607  
 608  PROC_R_R_R (p, genie_poch_real, gsl_sf_poch_e);
 609  
 610  //! @brief PROC lnpoch = (REAL a, x) REAL
 611  
 612  PROC_R_R_R (p, genie_lnpoch_real, gsl_sf_lnpoch_e);
 613  
 614  //! @brief PROC pochrel = (REAL a, x) REAL
 615  
 616  PROC_R_R_R (p, genie_pochrel_real, gsl_sf_pochrel_e);
 617  
 618  //! @brief PROC beta inc = (REAL a, b, x) REAL
 619  
 620  PROC_R_R_R_R (p, genie_beta_inc_real, gsl_sf_beta_inc_e);
 621  
 622  //! @brief PROC gamma inc = (REAL a, x) REAL
 623  
 624  PROC_R_R_R (p, genie_gamma_inc_real, gsl_sf_gamma_inc_e);
 625  
 626  //! @brief PROC gamma inc q = (REAL a, x) REAL
 627  
 628  PROC_R_R_R (p, genie_gamma_inc_q_real, gsl_sf_gamma_inc_Q_e);
 629  
 630  //! @brief PROC gamma inc p = (REAL a, x) REAL
 631  
 632  PROC_R_R_R (p, genie_gamma_inc_p_real, gsl_sf_gamma_inc_P_e);
 633  
 634  //! @brief PROC gegenpoly 1 = (REAL lambda, x) REAL
 635  
 636  PROC_R_R_R (p, genie_gegenpoly_1_real, gsl_sf_gegenpoly_1_e);
 637  
 638  //! @brief PROC gegenpoly 2 = (REAL lambda, x) REAL
 639  
 640  PROC_R_R_R (p, genie_gegenpoly_2_real, gsl_sf_gegenpoly_2_e);
 641  
 642  //! @brief PROC gegenpoly 3 = (REAL lambda, x) REAL
 643  
 644  PROC_R_R_R (p, genie_gegenpoly_3_real, gsl_sf_gegenpoly_3_e);
 645  
 646  //! @brief PROC gegenpoly n = (INT n, REAL lambda, x) REAL
 647  
 648  PROC_I_R_R_R (p, genie_gegenpoly_n_real, gsl_sf_gegenpoly_n_e);
 649  
 650  //! @brief PROC laguerre 1 = (REAL a, x) REAL
 651  
 652  PROC_R_R_R (p, genie_laguerre_1_real, gsl_sf_laguerre_1_e);
 653  
 654  //! @brief PROC laguerre 2 = (REAL a, x) REAL
 655  
 656  PROC_R_R_R (p, genie_laguerre_2_real, gsl_sf_laguerre_2_e);
 657  
 658  //! @brief PROC laguerre 3 = (REAL a, x) REAL
 659  
 660  PROC_R_R_R (p, genie_laguerre_3_real, gsl_sf_laguerre_3_e);
 661  
 662  //! @brief PROC laguerre n = (INT n, REAL a, x) REAL
 663  
 664  PROC_I_R_R_R (p, genie_laguerre_n_real, gsl_sf_laguerre_n_e);
 665  
 666  //! @brief PROC lambert w0 = (REAL x) REAL
 667  
 668  PROC_R_R (p, genie_lambert_w0_real, gsl_sf_lambert_W0_e);
 669  
 670  //! @brief PROC lambert wm1 = (REAL x) REAL
 671  
 672  PROC_R_R (p, genie_lambert_wm1_real, gsl_sf_lambert_Wm1_e);
 673  
 674  //! @brief PROC legendre p1 = (REAL x) REAL
 675  
 676  PROC_R_R (p, genie_legendre_p1_real, gsl_sf_legendre_P1_e);
 677  
 678  //! @brief PROC legendre p2 = (REAL x) REAL
 679  
 680  PROC_R_R (p, genie_legendre_p2_real, gsl_sf_legendre_P2_e);
 681  
 682  //! @brief PROC legendre p3 = (REAL x) REAL
 683  
 684  PROC_R_R (p, genie_legendre_p3_real, gsl_sf_legendre_P3_e);
 685  
 686  //! @brief PROC legendre pl = (INT l, REAL x) REAL
 687  
 688  PROC_I_R_R (p, genie_legendre_pl_real, gsl_sf_legendre_Pl_e);
 689  
 690  //! @brief PROC legendre q0 = (REAL x) REAL
 691  
 692  PROC_R_R (p, genie_legendre_q0_real, gsl_sf_legendre_Q0_e);
 693  
 694  //! @brief PROC legendre q1 = (REAL x) REAL
 695  
 696  PROC_R_R (p, genie_legendre_q1_real, gsl_sf_legendre_Q1_e);
 697  
 698  //! @brief PROC legendre ql = (INT l, REAL x) REAL
 699  
 700  PROC_I_R_R (p, genie_legendre_ql_real, gsl_sf_legendre_Ql_e);
 701  
 702  //! @brief PROC conicalp half = (REAL lambda, x) REAL
 703  
 704  PROC_R_R_R (p, genie_conicalp_half_real, gsl_sf_conicalP_half_e);
 705  
 706  //! @brief PROC conicalp mhalf = (REAL lambda, x) REAL
 707  
 708  PROC_R_R_R (p, genie_conicalp_mhalf_real, gsl_sf_conicalP_mhalf_e);
 709  
 710  //! @brief PROC conicalp 0 = (REAL lambda, x) REAL
 711  
 712  PROC_R_R_R (p, genie_conicalp_0_real, gsl_sf_conicalP_0_e);
 713  
 714  //! @brief PROC conicalp 1 = (REAL lambda, x) REAL
 715  
 716  PROC_R_R_R (p, genie_conicalp_1_real, gsl_sf_conicalP_1_e);
 717  
 718  //! @brief PROC conicalp sph reg = (INT n, REAL lambda, x) REAL
 719  
 720  PROC_I_R_R_R (p, genie_conicalp_sph_reg_real, gsl_sf_conicalP_sph_reg_e);
 721  
 722  //! @brief PROC conicalp cyl reg = (INT n, REAL lambda, x) REAL
 723  
 724  PROC_I_R_R_R (p, genie_conicalp_cyl_reg_real, gsl_sf_conicalP_cyl_reg_e);
 725  
 726  //! @brief PROC legendre h3d 0 = (REAL lambda, x) REAL
 727  
 728  PROC_R_R_R (p, genie_legendre_h3d_0_real, gsl_sf_legendre_H3d_0_e);
 729  
 730  //! @brief PROC legendre h3d 1 = (REAL lambda, x) REAL
 731  
 732  PROC_R_R_R (p, genie_legendre_h3d_1_real, gsl_sf_legendre_H3d_1_e);
 733  
 734  //! @brief PROC legendre h3d = (INT l, REAL lambda, x) REAL
 735  
 736  PROC_I_R_R_R (p, genie_legendre_H3d_real, gsl_sf_legendre_H3d_e);
 737  
 738  //! @brief PROC psi int = (INT n) REAL
 739  
 740  PROC_I_R (p, genie_psi_int_real, gsl_sf_psi_int_e);
 741  
 742  //! @brief PROC psi = (INT n) REAL
 743  
 744  PROC_R_R (p, genie_psi_real, gsl_sf_psi_e);
 745  
 746  //! @brief PROC psi 1piy = (INT n) REAL
 747  
 748  PROC_R_R (p, genie_psi_1piy_real, gsl_sf_psi_1piy_e);
 749  
 750  //! @brief PROC psi 1 = (INT n) REAL
 751  
 752  PROC_I_R (p, genie_psi_1_int_real, gsl_sf_psi_1_int_e);
 753  
 754  //! @brief PROC psi 1 = (REAL x) REAL
 755  
 756  PROC_R_R (p, genie_psi_1_real, gsl_sf_psi_1_e);
 757  
 758  //! @brief PROC psi n = (INT n, REAL x) REAL
 759  
 760  PROC_I_R_R (p, genie_psi_n_real, gsl_sf_psi_n_e);
 761  
 762  //! @brief PROC synchrotron 1 = (REAL x) REAL
 763  
 764  PROC_R_R (p, genie_synchrotron_1_real, gsl_sf_synchrotron_1_e);
 765  
 766  //! @brief PROC synchrotron 2 = (REAL x) REAL
 767  
 768  PROC_R_R (p, genie_synchrotron_2_real, gsl_sf_synchrotron_2_e);
 769  
 770  //! @brief PROC transport 2 = (REAL x) REAL
 771  
 772  PROC_R_R (p, genie_transport_2_real, gsl_sf_transport_2_e);
 773  
 774  //! @brief PROC transport 3 = (REAL x) REAL
 775  
 776  PROC_R_R (p, genie_transport_3_real, gsl_sf_transport_3_e);
 777  
 778  //! @brief PROC transport 4 = (REAL x) REAL
 779  
 780  PROC_R_R (p, genie_transport_4_real, gsl_sf_transport_4_e);
 781  
 782  //! @brief PROC transport 5 = (REAL x) REAL
 783  
 784  PROC_R_R (p, genie_transport_5_real, gsl_sf_transport_5_e);
 785  
 786  //! @brief PROC hypot = (REAL x) REAL
 787  
 788  PROC_R_R_R (p, genie_hypot_real, gsl_sf_hypot_e);
 789  
 790  //! @brief PROC sinc = (REAL x) REAL
 791  
 792  PROC_R_R (p, genie_sinc_real, gsl_sf_sinc_e);
 793  
 794  //! @brief PROC lnsinh = (REAL x) REAL
 795  
 796  PROC_R_R (p, genie_lnsinh_real, gsl_sf_lnsinh_e);
 797  
 798  //! @brief PROC lncosh = (REAL x) REAL
 799  
 800  PROC_R_R (p, genie_lncosh_real, gsl_sf_lncosh_e);
 801  
 802  //! @brief PROC angle restrict symm = (REAL theta) REAL
 803  
 804  PROC_RR_R (p, genie_angle_restrict_symm_real, gsl_sf_angle_restrict_symm_e);
 805  
 806  //! @brief PROC angle restrict pos = (REAL theta) REAL
 807  
 808  PROC_RR_R (p, genie_angle_restrict_pos_real, gsl_sf_angle_restrict_pos_e);
 809  
 810  //! @brief PROC zeta int = (INT n) REAL
 811  
 812  PROC_I_R (p, genie_zeta_int_real, gsl_sf_zeta_int_e);
 813  
 814  //! @brief PROC zeta = (REAL s) REAL
 815  
 816  PROC_R_R (p, genie_zeta_real, gsl_sf_zeta_e);
 817  
 818  //! @brief PROC zetam1 int = (INT n) REAL
 819  
 820  PROC_I_R (p, genie_zetam1_int_real, gsl_sf_zetam1_int_e);
 821  
 822  //! @brief PROC zetam1 = (REAL s) REAL
 823  
 824  PROC_R_R (p, genie_zetam1_real, gsl_sf_zetam1_e);
 825  
 826  //! @brief PROC hzeta = (REAL s, q) REAL
 827  
 828  PROC_R_R_R (p, genie_hzeta_real, gsl_sf_hzeta_e);
 829  
 830  //! @brief PROC eta int = (INT n) REAL
 831  
 832  PROC_I_R (p, genie_etaint_real, gsl_sf_eta_int_e);
 833  
 834  //! @brief PROC eta = (REAL s) REAL
 835  
 836  PROC_R_R (p, genie_eta_real, gsl_sf_eta_e);
 837  
 838  //! @brief PROC expm1 = (REAL x) REAL
 839  
 840  PROC_R_R (p, genie_expm1_real, gsl_sf_expm1_e);
 841  
 842  //! @brief PROC exprel = (REAL x) REAL
 843  
 844  PROC_R_R (p, genie_exprel_real, gsl_sf_exprel_e);
 845  
 846  //! @brief PROC exprel2 = (REAL x) REAL
 847  
 848  PROC_R_R (p, genie_exprel_2_real, gsl_sf_exprel_2_e);
 849  
 850  //! @brief PROC exprel n = (INT l, REAL x) REAL
 851  
 852  PROC_I_R_R (p, genie_exprel_n_real, gsl_sf_exprel_n_e);
 853  
 854  //! @brief PROC logabs = (REAL x) REAL
 855  
 856  PROC_R_R (p, genie_log_abs_real, gsl_sf_log_abs_e);
 857  
 858  //! @brief PROC log1plusx = (REAL x) REAL
 859  
 860  PROC_R_R (p, genie_log_1plusx_real, gsl_sf_log_1plusx_e);
 861  
 862  //! @brief PROC log1plusxmx = (REAL x) REAL
 863  
 864  PROC_R_R (p, genie_log_1plusx_mx_real, gsl_sf_log_1plusx_mx_e);
 865  
 866  //! @brief PROC hermite func = (INT n, REAL x) REAL
 867  
 868  PROC_I_R_R (p, genie_hermite_func_real, gsl_sf_hermite_func_e);
 869  
 870  #endif