Пример #1
0
CAMLprim value c_arraybandmatrix_copy(value va, value vb, value vsizes)
{
    CAMLparam3(va, vb, vsizes);

    struct caml_ba_array *ba = ARRAY2_DATA(va);
    intnat am = ba->dim[0];

    int a_smu  = Long_val(Field(vsizes, 0));
    int b_smu  = Long_val(Field(vsizes, 1));
    int copymu = Long_val(Field(vsizes, 2));
    int copyml = Long_val(Field(vsizes, 3));

#if SUNDIALS_ML_SAFE == 1
    intnat an = ba->dim[1];
    struct caml_ba_array *bb = ARRAY2_DATA(vb);

    intnat bm = bb->dim[0];
    intnat bn = bb->dim[1];

    if (an < copymu + copyml + 1)
	caml_invalid_argument("ArrayBandMatrix.blit: source matrix too small.");
    if (bn < copymu + copyml + 1)
	caml_invalid_argument("ArrayBandMatrix.blit: destination matrix too small.");
    if ((am != bm) || (bm != bn))
	caml_invalid_argument("ArrayBandMatrix.blit: matrix sizes differ.");
#endif

    bandCopy(ARRAY2_ACOLS(va), ARRAY2_ACOLS(vb), am, a_smu, b_smu,
	     copymu, copyml);
    CAMLreturn (Val_unit);
}
Пример #2
0
void BandCopy(DlsMat A, DlsMat B, long int copymu, long int copyml)
{
  bandCopy(A->cols, B->cols, A->M, A->s_mu, B->s_mu, copymu, copyml);
}