CAMLprim value c_arraydensematrix_ormqr(value va, value vormqr) { CAMLparam2(va, vormqr); struct caml_ba_array *ba = ARRAY2_DATA(va); intnat m = ba->dim[1]; intnat n = ba->dim[0]; realtype *beta = REAL_ARRAY(Field(vormqr, 0)); realtype *vv = REAL_ARRAY(Field(vormqr, 1)); realtype *vw = REAL_ARRAY(Field(vormqr, 2)); realtype *work = REAL_ARRAY(Field(vormqr, 3)); #if SUNDIALS_ML_SAFE == 1 if (m < n) caml_invalid_argument("ArrayDenseMatrix.ormqr: fewer rows than columns."); if (ARRAY1_LEN(Field(vormqr, 0)) < n) caml_invalid_argument("ArrayDenseMatrix.ormqr: beta is too small."); if (ARRAY1_LEN(Field(vormqr, 1)) < n) caml_invalid_argument("ArrayDenseMatrix.ormqr: v is too small."); if (ARRAY1_LEN(Field(vormqr, 2)) < m) caml_invalid_argument("ArrayDenseMatrix.ormqr: w is too small."); if (ARRAY1_LEN(Field(vormqr, 3)) < m) caml_invalid_argument("ArrayDenseMatrix.ormqr: work is too small."); #endif denseORMQR(ARRAY2_ACOLS(va), m, n, beta, vv, vw, work); CAMLreturn (Val_unit); }
int DenseORMQR(DlsMat A, realtype *beta, realtype *vn, realtype *vm, realtype *wrk) { return(denseORMQR(A->cols, A->M, A->N, beta, vn, vm, wrk)); }