CAMLprim value c_arraybandmatrix_gbtrs(value va, value vsizes, value vp, value vb) { CAMLparam4(va, vsizes, vp, vb); struct caml_ba_array *ba = ARRAY2_DATA(va); intnat m = ba->dim[0]; long int smu = Long_val(Field(vsizes, 0)); long int ml = Long_val(Field(vsizes, 1)); #if SUNDIALS_ML_SAFE == 1 intnat n = ba->dim[1]; if (n < smu + ml + 1) caml_invalid_argument("ArrayBandMatrix.gbtrf: matrix badly sized."); if (ARRAY1_LEN(vp) < m) caml_invalid_argument("ArrayBandMatrix.gbtrf: p is too small."); if (ARRAY1_LEN(vb) < m) caml_invalid_argument("ArrayBandMatrix.gbtrf: b is too small."); #endif bandGBTRS(ARRAY2_ACOLS(va), m, smu, ml, LONG_ARRAY(vp), REAL_ARRAY(vb)); CAMLreturn (Val_unit); }
void BandGBTRS(DlsMat A, long int *p, realtype *b) { bandGBTRS(A->cols, A->M, A->s_mu, A->ml, p, b); }