/*
legendre.c
Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
(C) Copyright 2001-2006 by Yoshiki Tsunesada
Ruby/GSL is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY.
*/
#include "rb_gsl_sf.h"
EXTERN VALUE cgsl_vector;
static VALUE rb_gsl_sf_legendre_P1(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval1(gsl_sf_legendre_P1, x);
}
static VALUE rb_gsl_sf_legendre_P1_e(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval_e(gsl_sf_legendre_P1_e, x);
}
static VALUE rb_gsl_sf_legendre_P2(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval1(gsl_sf_legendre_P2, x);
}
static VALUE rb_gsl_sf_legendre_P2_e(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval_e(gsl_sf_legendre_P2_e, x);
}
static VALUE rb_gsl_sf_legendre_P3(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval1(gsl_sf_legendre_P3, x);
}
static VALUE rb_gsl_sf_legendre_P3_e(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval_e(gsl_sf_legendre_P3_e, x);
}
static VALUE rb_gsl_sf_legendre_Pl(VALUE obj, VALUE l, VALUE x)
{
return rb_gsl_sf_eval_int_double(gsl_sf_legendre_Pl, l, x);
}
static VALUE rb_gsl_sf_legendre_Pl_e(VALUE obj, VALUE l, VALUE x)
{
return rb_gsl_sf_eval_e_int_double(gsl_sf_legendre_Pl_e, l, x);
}
static VALUE rb_gsl_sf_legendre_Pl_array(VALUE obj, VALUE lmax, VALUE x)
{
gsl_vector *v = NULL;
CHECK_FIXNUM(lmax);
Need_Float(x);
v = gsl_vector_alloc(FIX2INT(lmax) + 1);
gsl_sf_legendre_Pl_array(FIX2INT(lmax), NUM2DBL(x), v->data);
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, v);
}
static VALUE rb_gsl_sf_legendre_Q0(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval1(gsl_sf_legendre_Q0, x);
}
static VALUE rb_gsl_sf_legendre_Q0_e(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval_e(gsl_sf_legendre_Q0_e, x);
}
static VALUE rb_gsl_sf_legendre_Q1(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval1(gsl_sf_legendre_Q1, x);
}
static VALUE rb_gsl_sf_legendre_Q1_e(VALUE obj, VALUE x)
{
return rb_gsl_sf_eval_e(gsl_sf_legendre_Q1_e, x);
}
static VALUE rb_gsl_sf_legendre_Ql(VALUE obj, VALUE l, VALUE x)
{
return rb_gsl_sf_eval_int_double(gsl_sf_legendre_Ql, l, x);
}
static VALUE rb_gsl_sf_legendre_Ql_e(VALUE obj, VALUE l, VALUE x)
{
return rb_gsl_sf_eval_e_int_double(gsl_sf_legendre_Ql_e, l, x);
}
static VALUE rb_gsl_sf_legendre_Plm(VALUE obj, VALUE l, VALUE m, VALUE x)
{
return rb_gsl_sf_eval_int_int_double(gsl_sf_legendre_Plm, l, m, x);
}
static VALUE rb_gsl_sf_legendre_Plm_e(VALUE obj, VALUE l, VALUE m, VALUE x)
{
gsl_sf_result *rslt = NULL;
VALUE v;
int status;
CHECK_FIXNUM(l);
CHECK_FIXNUM(m);
Need_Float(x);
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
status = gsl_sf_legendre_Plm_e(FIX2INT(l), FIX2INT(m), NUM2DBL(x), rslt);
return rb_ary_new3(2, v, INT2FIX(status));
}
static VALUE rb_gsl_sf_legendre_Plm_array(VALUE obj, VALUE lmax, VALUE m, VALUE x)
{
gsl_vector *v = NULL;
int size;
int ll, mm;
CHECK_FIXNUM(lmax); CHECK_FIXNUM(m);
Need_Float(x);
ll = FIX2INT(lmax);
mm = FIX2INT(m);
size = gsl_sf_legendre_array_size(ll, mm);
v = gsl_vector_alloc(size);
gsl_sf_legendre_Plm_array(ll, mm, NUM2DBL(x), v->data);
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, v);
}
static VALUE rb_gsl_sf_legendre_sphPlm(VALUE obj, VALUE l, VALUE m, VALUE x)
{
return rb_gsl_sf_eval_int_int_double(gsl_sf_legendre_sphPlm, l, m, x);
}
static VALUE rb_gsl_sf_legendre_sphPlm_e(VALUE obj, VALUE l, VALUE m, VALUE x)
{
gsl_sf_result *rslt = NULL;
VALUE v;
int status;
CHECK_FIXNUM(l); CHECK_FIXNUM(m);
Need_Float(x);
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
status = gsl_sf_legendre_sphPlm_e(FIX2INT(l), FIX2INT(m), NUM2DBL(x), rslt);
return rb_ary_new3(2, v, INT2FIX(status));
}
static VALUE rb_gsl_sf_legendre_sphPlm_array(VALUE obj, VALUE lmax, VALUE m, VALUE x)
{
gsl_vector *v = NULL;
int size;
int ll, mm;
CHECK_FIXNUM(lmax); CHECK_FIXNUM(m);
Need_Float(x);
ll = FIX2INT(lmax);
mm = FIX2INT(m);
size = gsl_sf_legendre_array_size(ll, mm);
v = gsl_vector_alloc(size);
gsl_sf_legendre_sphPlm_array(ll, mm, NUM2DBL(x), v->data);
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, v);
}
static VALUE rb_gsl_sf_legendre_array_size(VALUE obj, VALUE lmax, VALUE m)
{
CHECK_FIXNUM(lmax); CHECK_FIXNUM(m);
return INT2FIX(gsl_sf_legendre_array_size(FIX2INT(lmax), FIX2INT(m)));
}
static VALUE rb_gsl_sf_conicalP_half(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_double_double(gsl_sf_conicalP_half, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_half_e(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_e_double2(gsl_sf_conicalP_half_e, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_mhalf(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_double_double(gsl_sf_conicalP_mhalf, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_mhalf_e(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_e_double2(gsl_sf_conicalP_mhalf_e, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_0(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_double_double(gsl_sf_conicalP_0, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_0_e(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_e_double2(gsl_sf_conicalP_0_e, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_1(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_double_double(gsl_sf_conicalP_1, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_1_e(VALUE obj, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_e_double2(gsl_sf_conicalP_1_e, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_sph_reg(VALUE obj, VALUE l, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_int_double_double(gsl_sf_conicalP_sph_reg, l, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_sph_reg_e(VALUE obj, VALUE l, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_e_int_double2(gsl_sf_conicalP_sph_reg_e, l, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_cyl_reg(VALUE obj, VALUE m, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_int_double_double(gsl_sf_conicalP_cyl_reg, m, lambda, x);
}
static VALUE rb_gsl_sf_conicalP_cyl_reg_e(VALUE obj, VALUE m, VALUE lambda, VALUE x)
{
return rb_gsl_sf_eval_e_int_double2(gsl_sf_conicalP_cyl_reg_e, m, lambda, x);
}
static VALUE rb_gsl_sf_legendre_H3d_0(VALUE obj, VALUE lambda, VALUE eta)
{
Need_Float(lambda); Need_Float(eta);
return rb_float_new(gsl_sf_legendre_H3d_0(NUM2DBL(lambda), NUM2DBL(eta)));
}
static VALUE rb_gsl_sf_legendre_H3d_0_e(VALUE obj, VALUE lambda, VALUE eta)
{
return rb_gsl_sf_eval_e_double2(gsl_sf_legendre_H3d_0_e, lambda, eta);
}
static VALUE rb_gsl_sf_legendre_H3d_1(VALUE obj, VALUE lambda, VALUE eta)
{
Need_Float(lambda); Need_Float(eta);
return rb_float_new(gsl_sf_legendre_H3d_1(NUM2DBL(lambda), NUM2DBL(eta)));
}
static VALUE rb_gsl_sf_legendre_H3d_1_e(VALUE obj, VALUE lambda, VALUE eta)
{
return rb_gsl_sf_eval_e_double2(gsl_sf_legendre_H3d_1_e, lambda, eta);
}
static VALUE rb_gsl_sf_legendre_H3d(VALUE obj, VALUE l, VALUE lambda, VALUE eta)
{
return rb_float_new(gsl_sf_legendre_H3d(FIX2INT(l), NUM2DBL(lambda), NUM2DBL(eta)));
}
static VALUE rb_gsl_sf_legendre_H3d_e(VALUE obj,VALUE l, VALUE lambda, VALUE eta)
{
gsl_sf_result *rslt = NULL;
VALUE v;
int status;
CHECK_FIXNUM(l);
Need_Float(lambda);
Need_Float(eta);
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
status = gsl_sf_legendre_H3d_e(FIX2INT(l), NUM2DBL(lambda), NUM2DBL(eta), rslt);
return v;
}
static VALUE rb_gsl_sf_legendre_H3d_array(VALUE obj, VALUE lmax, VALUE lambda, VALUE eta)
{
gsl_vector *v = NULL;
CHECK_FIXNUM(lmax);
Need_Float(lambda);
Need_Float(eta);
v = gsl_vector_alloc(FIX2INT(lmax) + 1);
gsl_sf_legendre_H3d_array(FIX2INT(lmax), NUM2DBL(lambda), NUM2DBL(eta), v->data);
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, v);
}
void Init_gsl_sf_legendre(VALUE module)
{
VALUE mgsl_sf_leg;
rb_define_module_function(module, "legendre_P1", rb_gsl_sf_legendre_P1, 1);
rb_define_module_function(module, "legendre_P1_e", rb_gsl_sf_legendre_P1_e, 1);
rb_define_module_function(module, "legendre_P2", rb_gsl_sf_legendre_P2, 1);
rb_define_module_function(module, "legendre_P2_e", rb_gsl_sf_legendre_P2_e, 1);
rb_define_module_function(module, "legendre_P3", rb_gsl_sf_legendre_P3, 1);
rb_define_module_function(module, "legendre_P3_e", rb_gsl_sf_legendre_P3_e, 1);
rb_define_module_function(module, "legendre_Pl", rb_gsl_sf_legendre_Pl, 2);
rb_define_module_function(module, "legendre_Pl_e", rb_gsl_sf_legendre_Pl_e, 2);
rb_define_module_function(module, "legendre_Pl_array", rb_gsl_sf_legendre_Pl_array, 2);
rb_define_module_function(module, "legendre_Q0", rb_gsl_sf_legendre_Q0, 1);
rb_define_module_function(module, "legendre_Q0_e", rb_gsl_sf_legendre_Q0_e, 1);
rb_define_module_function(module, "legendre_Q1", rb_gsl_sf_legendre_Q1, 1);
rb_define_module_function(module, "legendre_Q1_e", rb_gsl_sf_legendre_Q1_e, 1);
rb_define_module_function(module, "legendre_Ql", rb_gsl_sf_legendre_Ql, 2);
rb_define_module_function(module, "legendre_Ql_e", rb_gsl_sf_legendre_Ql_e, 2);
rb_define_module_function(module, "legendre_Plm", rb_gsl_sf_legendre_Plm, 3);
rb_define_module_function(module, "legendre_Plm_e", rb_gsl_sf_legendre_Plm_e, 3);
rb_define_module_function(module, "legendre_Plm_array", rb_gsl_sf_legendre_Plm_array, 3);
rb_define_module_function(module, "legendre_sphPlm", rb_gsl_sf_legendre_sphPlm, 3);
rb_define_module_function(module, "legendre_sphPlm_e", rb_gsl_sf_legendre_sphPlm_e, 3);
rb_define_module_function(module, "legendre_sphPlm_array", rb_gsl_sf_legendre_sphPlm_array, 3);
rb_define_module_function(module, "legendre_array_size", rb_gsl_sf_legendre_array_size, 2);
rb_define_module_function(module, "conicalP_half", rb_gsl_sf_conicalP_half, 2);
rb_define_module_function(module, "conicalP_half_e", rb_gsl_sf_conicalP_half_e, 2);
rb_define_module_function(module, "conicalP_mhalf", rb_gsl_sf_conicalP_mhalf, 2);
rb_define_module_function(module, "conicalP_mhalf_e", rb_gsl_sf_conicalP_mhalf_e, 2);
rb_define_module_function(module, "conicalP_0", rb_gsl_sf_conicalP_0, 2);
rb_define_module_function(module, "conicalP_0_e", rb_gsl_sf_conicalP_0_e, 2);
rb_define_module_function(module, "conicalP_1", rb_gsl_sf_conicalP_1, 2);
rb_define_module_function(module, "conicalP_1_e", rb_gsl_sf_conicalP_1_e, 2);
rb_define_module_function(module, "conicalP_sph_reg", rb_gsl_sf_conicalP_sph_reg, 3);
rb_define_module_function(module, "conicalP_sph_reg_e", rb_gsl_sf_conicalP_sph_reg_e, 3);
rb_define_module_function(module, "conicalP_cyl_reg", rb_gsl_sf_conicalP_cyl_reg, 3);
rb_define_module_function(module, "conicalP_cyl_reg_e", rb_gsl_sf_conicalP_cyl_reg_e, 3);
rb_define_module_function(module, "legendre_H3d_0", rb_gsl_sf_legendre_H3d_0, 2);
rb_define_module_function(module, "legendre_H3d_0_e", rb_gsl_sf_legendre_H3d_0_e, 2);
rb_define_module_function(module, "legendre_H3d_1", rb_gsl_sf_legendre_H3d_1, 2);
rb_define_module_function(module, "legendre_H3d_1_e", rb_gsl_sf_legendre_H3d_1_e, 2);
rb_define_module_function(module, "legendre_H3d", rb_gsl_sf_legendre_H3d, 3);
rb_define_module_function(module, "legendre_H3d_e", rb_gsl_sf_legendre_H3d_e, 3);
rb_define_module_function(module, "legendre_H3d_array", rb_gsl_sf_legendre_H3d_array, 3);
/*****/
mgsl_sf_leg = rb_define_module_under(module, "Legendre");
rb_define_module_function(mgsl_sf_leg, "P1", rb_gsl_sf_legendre_P1, 1);
rb_define_module_function(mgsl_sf_leg, "P1_e", rb_gsl_sf_legendre_P1_e, 1);
rb_define_module_function(mgsl_sf_leg, "P2", rb_gsl_sf_legendre_P2, 1);
rb_define_module_function(mgsl_sf_leg, "P2_e", rb_gsl_sf_legendre_P2_e, 1);
rb_define_module_function(mgsl_sf_leg, "P3", rb_gsl_sf_legendre_P3, 1);
rb_define_module_function(mgsl_sf_leg, "P3_e", rb_gsl_sf_legendre_P3_e, 1);
rb_define_module_function(mgsl_sf_leg, "Pl", rb_gsl_sf_legendre_Pl, 2);
rb_define_module_function(mgsl_sf_leg, "Pl_e", rb_gsl_sf_legendre_Pl_e, 2);
rb_define_module_function(mgsl_sf_leg, "Pl_array", rb_gsl_sf_legendre_Pl_array, 2);
rb_define_module_function(mgsl_sf_leg, "Q0", rb_gsl_sf_legendre_Q0, 1);
rb_define_module_function(mgsl_sf_leg, "Q0_e", rb_gsl_sf_legendre_Q0_e, 1);
rb_define_module_function(mgsl_sf_leg, "Q1", rb_gsl_sf_legendre_Q1, 1);
rb_define_module_function(mgsl_sf_leg, "Q1_e", rb_gsl_sf_legendre_Q1_e, 1);
rb_define_module_function(mgsl_sf_leg, "Plm", rb_gsl_sf_legendre_Plm, 3);
rb_define_module_function(mgsl_sf_leg, "Plm_e", rb_gsl_sf_legendre_Plm_e, 3);
rb_define_module_function(mgsl_sf_leg, "Plm_array", rb_gsl_sf_legendre_Plm_array, 3);
rb_define_module_function(mgsl_sf_leg, "sphPlm", rb_gsl_sf_legendre_sphPlm, 3);
rb_define_module_function(mgsl_sf_leg, "sphPlm_e", rb_gsl_sf_legendre_sphPlm_e, 3);
rb_define_module_function(mgsl_sf_leg, "sphPlm_array", rb_gsl_sf_legendre_sphPlm_array, 3);
rb_define_module_function(mgsl_sf_leg, "array_size", rb_gsl_sf_legendre_array_size, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_half", rb_gsl_sf_conicalP_half, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_half_e", rb_gsl_sf_conicalP_half_e, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_mhalf", rb_gsl_sf_conicalP_mhalf, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_mhalf_e", rb_gsl_sf_conicalP_mhalf_e, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_0", rb_gsl_sf_conicalP_0, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_0_e", rb_gsl_sf_conicalP_0_e, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_1", rb_gsl_sf_conicalP_1, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_1_e", rb_gsl_sf_conicalP_1_e, 2);
rb_define_module_function(mgsl_sf_leg, "conicalP_sph_reg", rb_gsl_sf_conicalP_sph_reg, 3);
rb_define_module_function(mgsl_sf_leg, "conicalP_sph_reg_e", rb_gsl_sf_conicalP_sph_reg_e, 3);
rb_define_module_function(mgsl_sf_leg, "conicalP_cyl_reg", rb_gsl_sf_conicalP_cyl_reg, 3);
rb_define_module_function(mgsl_sf_leg, "conicalP_cyl_reg_e", rb_gsl_sf_conicalP_cyl_reg_e, 3);
rb_define_module_function(mgsl_sf_leg, "H3d_0", rb_gsl_sf_legendre_H3d_0, 2);
rb_define_module_function(mgsl_sf_leg, "H3d_0_e", rb_gsl_sf_legendre_H3d_0_e, 2);
rb_define_module_function(mgsl_sf_leg, "H3d_1", rb_gsl_sf_legendre_H3d_1, 2);
rb_define_module_function(mgsl_sf_leg, "H3d_1_e", rb_gsl_sf_legendre_H3d_1_e, 2);
rb_define_module_function(mgsl_sf_leg, "H3d", rb_gsl_sf_legendre_H3d, 3);
rb_define_module_function(mgsl_sf_leg, "H3d_e", rb_gsl_sf_legendre_H3d_e, 3);
rb_define_module_function(mgsl_sf_leg, "H3d_array", rb_gsl_sf_legendre_H3d_array, 3);
}
syntax highlighted by Code2HTML, v. 0.9.1