M4RIE 0.20111004
Loading...
Searching...
No Matches
trsm.inl
1
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));
11
12 if (L->nrows <= cutoff || B->ncols <= cutoff) {
13 matrix_trsm_lower_left_newton_john(L,B);
14 return;
15 }
16
32 rci_t c = L->nrows/2;
33 c = MAX((c - c%m4ri_radix),m4ri_radix);
34
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);
40
41 _matrix_trsm_lower_left(L00, B0, cutoff);
42 matrix_addmul(B1, L10, B0);
43 _matrix_trsm_lower_left(L11, B1, cutoff);
44
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);
50}
51
52
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));
55
56 if (U->nrows <= cutoff || B->ncols <= cutoff) {
57 matrix_trsm_upper_left_newton_john(U,B);
58 return;
59 }
76 rci_t c = U->nrows/2;
77 c = MAX((c - c%m4ri_radix),m4ri_radix);
78
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);
84
85 _matrix_trsm_upper_left(U11, B1, cutoff);
86 matrix_addmul(B0, U01, B1);
87 _matrix_trsm_upper_left(U00, B0, cutoff);
88
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);
94}
95
96