Class: Siman::Solver
- Inherits:
-
GSL_Object
- Object
- GSL_Object
- Siman::Solver
- Defined in:
- ext/siman.c
Class Method Summary (collapse)
- + (Object) alloc
-
+ (Object) solve
**** solver ****.
Instance Method Summary (collapse)
-
- (Object) solve
**** solver ****.
Class Method Details
+ (Object) alloc
+ (Object) solve
**** solver ****
|
|
# File 'ext/siman.c'
/***** solver *****/
static VALUE rb_gsl_siman_solver_solve(VALUE obj, VALUE rng,
VALUE vx0p, VALUE vefunc,
VALUE vstep, VALUE vmetric, VALUE vprint,
VALUE vparams)
{
gsl_rng *r = NULL;
siman_solver *ss = NULL;
siman_Efunc *efunc = NULL;
siman_step *step = NULL;
siman_metric *metric = NULL;
siman_print *print = NULL;
gsl_vector *vtmp = NULL;
gsl_siman_params_t *params = NULL, ppp;
int flag = 0;
/* Data_Get_Struct(obj, siman_solver, ss);*/
CHECK_VECTOR(vx0p);
Data_Get_Struct(vx0p, gsl_vector, vtmp);
switch (TYPE(obj)) {
case T_MODULE:
case T_CLASS:
case T_OBJECT:
ss = gsl_siman_solver_alloc(vtmp->size);
flag = 1;
break;
default:
Data_Get_Struct(obj, siman_solver, ss);
}
if (!rb_obj_is_kind_of(rng, cgsl_rng))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Rng expected)",
rb_class2name(CLASS_OF(rng)));
if (!rb_obj_is_kind_of(vefunc, cgsl_siman_Efunc))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Efunc expected)",
rb_class2name(CLASS_OF(vefunc)));
if (!rb_obj_is_kind_of(vstep, cgsl_siman_step))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Step expected)",
rb_class2name(CLASS_OF(vstep)));
if (!rb_obj_is_kind_of(vmetric, cgsl_siman_metric))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Metric expected)",
rb_class2name(CLASS_OF(vmetric)));
Data_Get_Struct(rng, gsl_rng, r);
Data_Get_Struct(vefunc, siman_Efunc, efunc);
Data_Get_Struct(vstep, siman_step, step);
Data_Get_Struct(vmetric, siman_metric, metric);
if (NIL_P(vprint)) {
ss->proc_print = Qnil;
} else {
if (!rb_obj_is_kind_of(vprint, cgsl_siman_print))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Print expected)",
rb_class2name(CLASS_OF(vprint)));
Data_Get_Struct(vprint, siman_print, print);
ss->proc_print = print->proc;
}
if (!rb_obj_is_kind_of(vparams, cgsl_siman_params))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Params expected)",
rb_class2name(CLASS_OF(vparams)));
Data_Get_Struct(vparams, gsl_siman_params_t, params);
ss->proc_efunc = efunc->proc;
ss->proc_step = step->proc;
ss->proc_metric = metric->proc;
gsl_vector_memcpy(ss->vx, vtmp);
ppp = *params;
if (NIL_P(vprint)) {
gsl_siman_solve(r, ss, rb_gsl_siman_Efunc_t,
rb_gsl_siman_step_t,
rb_gsl_siman_metric_t,
NULL,
rb_gsl_siman_copy_t,
rb_gsl_siman_copy_construct_t,
rb_gsl_siman_destroy_t, 0,
*params);
} else {
gsl_siman_solve(r, ss, rb_gsl_siman_Efunc_t,
rb_gsl_siman_step_t,
rb_gsl_siman_metric_t,
rb_gsl_siman_print_t,
rb_gsl_siman_copy_t,
rb_gsl_siman_copy_construct_t,
rb_gsl_siman_destroy_t, 0,
*params);
}
gsl_vector_memcpy(vtmp, ss->vx);
if (flag == 1) gsl_siman_solver_free(ss);
return obj;
}
|
Instance Method Details
- (Object) solve
**** solver ****
|
|
# File 'ext/siman.c'
/***** solver *****/
static VALUE rb_gsl_siman_solver_solve(VALUE obj, VALUE rng,
VALUE vx0p, VALUE vefunc,
VALUE vstep, VALUE vmetric, VALUE vprint,
VALUE vparams)
{
gsl_rng *r = NULL;
siman_solver *ss = NULL;
siman_Efunc *efunc = NULL;
siman_step *step = NULL;
siman_metric *metric = NULL;
siman_print *print = NULL;
gsl_vector *vtmp = NULL;
gsl_siman_params_t *params = NULL, ppp;
int flag = 0;
/* Data_Get_Struct(obj, siman_solver, ss);*/
CHECK_VECTOR(vx0p);
Data_Get_Struct(vx0p, gsl_vector, vtmp);
switch (TYPE(obj)) {
case T_MODULE:
case T_CLASS:
case T_OBJECT:
ss = gsl_siman_solver_alloc(vtmp->size);
flag = 1;
break;
default:
Data_Get_Struct(obj, siman_solver, ss);
}
if (!rb_obj_is_kind_of(rng, cgsl_rng))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Rng expected)",
rb_class2name(CLASS_OF(rng)));
if (!rb_obj_is_kind_of(vefunc, cgsl_siman_Efunc))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Efunc expected)",
rb_class2name(CLASS_OF(vefunc)));
if (!rb_obj_is_kind_of(vstep, cgsl_siman_step))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Step expected)",
rb_class2name(CLASS_OF(vstep)));
if (!rb_obj_is_kind_of(vmetric, cgsl_siman_metric))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Metric expected)",
rb_class2name(CLASS_OF(vmetric)));
Data_Get_Struct(rng, gsl_rng, r);
Data_Get_Struct(vefunc, siman_Efunc, efunc);
Data_Get_Struct(vstep, siman_step, step);
Data_Get_Struct(vmetric, siman_metric, metric);
if (NIL_P(vprint)) {
ss->proc_print = Qnil;
} else {
if (!rb_obj_is_kind_of(vprint, cgsl_siman_print))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Print expected)",
rb_class2name(CLASS_OF(vprint)));
Data_Get_Struct(vprint, siman_print, print);
ss->proc_print = print->proc;
}
if (!rb_obj_is_kind_of(vparams, cgsl_siman_params))
rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Siman::Params expected)",
rb_class2name(CLASS_OF(vparams)));
Data_Get_Struct(vparams, gsl_siman_params_t, params);
ss->proc_efunc = efunc->proc;
ss->proc_step = step->proc;
ss->proc_metric = metric->proc;
gsl_vector_memcpy(ss->vx, vtmp);
ppp = *params;
if (NIL_P(vprint)) {
gsl_siman_solve(r, ss, rb_gsl_siman_Efunc_t,
rb_gsl_siman_step_t,
rb_gsl_siman_metric_t,
NULL,
rb_gsl_siman_copy_t,
rb_gsl_siman_copy_construct_t,
rb_gsl_siman_destroy_t, 0,
*params);
} else {
gsl_siman_solve(r, ss, rb_gsl_siman_Efunc_t,
rb_gsl_siman_step_t,
rb_gsl_siman_metric_t,
rb_gsl_siman_print_t,
rb_gsl_siman_copy_t,
rb_gsl_siman_copy_construct_t,
rb_gsl_siman_destroy_t, 0,
*params);
}
gsl_vector_memcpy(vtmp, ss->vx);
if (flag == 1) gsl_siman_solver_free(ss);
return obj;
}
|