9void _matrix_trsm_lower_left(
const matrix_t *L, matrix_t *B,
const rci_t cutoff) {
10 assert((L->finite_field == B->finite_field) && (L->nrows == L->ncols) && (B->nrows == L->ncols));
12 if (L->nrows <= cutoff || B->ncols <= cutoff) {
13 matrix_trsm_lower_left_newton_john(L,B);
33 c = MAX((c - c%m4ri_radix),m4ri_radix);
35 matrix_t *B0 = matrix_init_window(B, 0, 0, c, B->ncols);
36 matrix_t *B1 = matrix_init_window(B, c, 0, B->nrows, B->ncols);
37 const matrix_t *L00 = (
const matrix_t*)matrix_init_window((matrix_t*)L, 0, 0, c, c);
38 const matrix_t *L10 = (
const matrix_t*)matrix_init_window((matrix_t*)L, c, 0, B->nrows, c);
39 const matrix_t *L11 = (
const matrix_t*)matrix_init_window((matrix_t*)L, c, c, B->nrows, B->nrows);
41 _matrix_trsm_lower_left(L00, B0, cutoff);
42 matrix_addmul(B1, L10, B0);
43 _matrix_trsm_lower_left(L11, B1, cutoff);
45 matrix_free_window(B0);
46 matrix_free_window(B1);
47 matrix_free_window((matrix_t*)L00);
48 matrix_free_window((matrix_t*)L10);
49 matrix_free_window((matrix_t*)L11);
53void _matrix_trsm_upper_left(matrix_t
const *U, matrix_t *B,
const rci_t cutoff) {
54 assert((U->finite_field == B->finite_field) && (U->nrows == U->ncols) && (B->nrows == U->ncols));
56 if (U->nrows <= cutoff || B->ncols <= cutoff) {
57 matrix_trsm_upper_left_newton_john(U,B);
77 c = MAX((c - c%m4ri_radix),m4ri_radix);
79 matrix_t *B0 = matrix_init_window(B, 0, 0, c, B->ncols);
80 matrix_t *B1 = matrix_init_window(B, c, 0, B->nrows, B->ncols);
81 const matrix_t *U00 = (
const matrix_t *)matrix_init_window(U, 0, 0, c, c);
82 const matrix_t *U01 = (
const matrix_t *)matrix_init_window(U, 0, c, c, B->nrows);
83 const matrix_t *U11 = (
const matrix_t *)matrix_init_window(U, c, c, B->nrows, B->nrows);
85 _matrix_trsm_upper_left(U11, B1, cutoff);
86 matrix_addmul(B0, U01, B1);
87 _matrix_trsm_upper_left(U00, B0, cutoff);
89 matrix_free_window(B0);
90 matrix_free_window(B1);
91 matrix_free_window((matrix_t*)U00);
92 matrix_free_window((matrix_t*)U01);
93 matrix_free_window((matrix_t*)U11);