libflame  revision_anchor
Functions
FLA_Trinv_ln.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_Trinv_ln_blk_var1 (FLA_Obj A, fla_trinv_t *cntl)
 
FLA_Error FLA_Trinv_ln_blk_var2 (FLA_Obj A, fla_trinv_t *cntl)
 
FLA_Error FLA_Trinv_ln_blk_var3 (FLA_Obj A, fla_trinv_t *cntl)
 
FLA_Error FLA_Trinv_ln_blk_var4 (FLA_Obj A, fla_trinv_t *cntl)
 
FLA_Error FLA_Trinv_ln_unb_var1 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_unb_var2 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_unb_var3 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_unb_var4 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_opt_var1 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_ops_var1 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opd_var1 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opc_var1 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opz_var1 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opt_var2 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_ops_var2 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opd_var2 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opc_var2 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opz_var2 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opt_var3 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_ops_var3 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opd_var3 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opc_var3 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opz_var3 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opt_var4 (FLA_Obj A)
 
FLA_Error FLA_Trinv_ln_ops_var4 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opd_var4 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opc_var4 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Trinv_ln_opz_var4 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 

Function Documentation

◆ FLA_Trinv_ln_blk_var1()

FLA_Error FLA_Trinv_ln_blk_var1 ( FLA_Obj  A,
fla_trinv_t cntl 
)
16 {
17  FLA_Obj ATL, ATR, A00, A01, A02,
18  ABL, ABR, A10, A11, A12,
19  A20, A21, A22;
20 
21  dim_t b;
22 
23  FLA_Part_2x2( A, &ATL, &ATR,
24  &ABL, &ABR, 0, 0, FLA_TL );
25 
26  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
27 
28  b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
29 
30  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02,
31  /* ************* */ /* ******************** */
32  &A10, /**/ &A11, &A12,
33  ABL, /**/ ABR, &A20, /**/ &A21, &A22,
34  b, b, FLA_BR );
35 
36  /*------------------------------------------------------------*/
37 
38  // A10 = A10 * A00;
39  FLA_Trmm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
40  FLA_ONE, A00, A10,
41  FLA_Cntl_sub_trmm( cntl ) );
42 
43  // A10 = -tril( A11 ) \ A10;
44  FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
45  FLA_MINUS_ONE, A11, A10,
46  FLA_Cntl_sub_trsm1( cntl ) );
47 
48  // A11 = inv( A11 );
49  FLA_Trinv_internal( FLA_LOWER_TRIANGULAR, FLA_NONUNIT_DIAG, A11,
50  FLA_Cntl_sub_trinv( cntl ) );
51 
52  /*------------------------------------------------------------*/
53 
54  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
55  A10, A11, /**/ A12,
56  /* ************** */ /* ****************** */
57  &ABL, /**/ &ABR, A20, A21, /**/ A22,
58  FLA_TL );
59 
60  }
61 
62  return FLA_SUCCESS;
63 }
FLA_Error FLA_Trinv_internal(FLA_Uplo uplo, FLA_Diag diag, FLA_Obj A, fla_trinv_t *cntl)
Definition: FLA_Trinv_internal.c:16
FLA_Error FLA_Trmm_internal(FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
Definition: FLA_Trmm_internal.c:16
FLA_Error FLA_Trsm_internal(FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
Definition: FLA_Trsm_internal.c:16
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Error FLA_Cont_with_3x3_to_2x2(FLA_Obj *ATL, FLA_Obj *ATR, FLA_Obj A00, FLA_Obj A01, FLA_Obj A02, FLA_Obj A10, FLA_Obj A11, FLA_Obj A12, FLA_Obj *ABL, FLA_Obj *ABR, FLA_Obj A20, FLA_Obj A21, FLA_Obj A22, FLA_Quadrant quadrant)
Definition: FLA_View.c:304
FLA_Error FLA_Part_2x2(FLA_Obj A, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition: FLA_View.c:17
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Repart_2x2_to_3x3(FLA_Obj ATL, FLA_Obj ATR, FLA_Obj *A00, FLA_Obj *A01, FLA_Obj *A02, FLA_Obj *A10, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj ABL, FLA_Obj ABR, FLA_Obj *A20, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition: FLA_View.c:142
dim_t FLA_Determine_blocksize(FLA_Obj A_unproc, FLA_Quadrant to_dir, fla_blocksize_t *cntl_blocksizes)
Definition: FLA_Blocksize.c:234
unsigned long dim_t
Definition: FLA_type_defs.h:71
Definition: FLA_type_defs.h:159

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Trinv_internal(), FLA_Trmm_internal(), and FLA_Trsm_internal().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_blk_var2()

FLA_Error FLA_Trinv_ln_blk_var2 ( FLA_Obj  A,
fla_trinv_t cntl 
)
16 {
17  FLA_Obj ATL, ATR, A00, A01, A02,
18  ABL, ABR, A10, A11, A12,
19  A20, A21, A22;
20 
21  dim_t b;
22 
23  FLA_Part_2x2( A, &ATL, &ATR,
24  &ABL, &ABR, 0, 0, FLA_TL );
25 
26  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
27 
28  b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
29 
30  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02,
31  /* ************* */ /* ******************** */
32  &A10, /**/ &A11, &A12,
33  ABL, /**/ ABR, &A20, /**/ &A21, &A22,
34  b, b, FLA_BR );
35 
36  /*------------------------------------------------------------*/
37 
38  // A21 = tril( A22 ) \ A21;
39  FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
40  FLA_ONE, A22, A21,
41  FLA_Cntl_sub_trsm1( cntl ) );
42 
43  // A21 = -A21 / tril( A11 );
44  FLA_Trsm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
45  FLA_MINUS_ONE, A11, A21,
46  FLA_Cntl_sub_trsm2( cntl ) );
47 
48  // A11 = inv( A11 );
49  FLA_Trinv_internal( FLA_LOWER_TRIANGULAR, FLA_NONUNIT_DIAG, A11,
50  FLA_Cntl_sub_trinv( cntl ) );
51 
52  /*------------------------------------------------------------*/
53 
54  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
55  A10, A11, /**/ A12,
56  /* ************** */ /* ****************** */
57  &ABL, /**/ &ABR, A20, A21, /**/ A22,
58  FLA_TL );
59 
60  }
61 
62  return FLA_SUCCESS;
63 }

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Trinv_internal(), and FLA_Trsm_internal().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_blk_var3()

FLA_Error FLA_Trinv_ln_blk_var3 ( FLA_Obj  A,
fla_trinv_t cntl 
)
14 {
15  FLA_Obj ATL, ATR, A00, A01, A02,
16  ABL, ABR, A10, A11, A12,
17  A20, A21, A22;
18 
19  dim_t b;
20 
21  FLA_Part_2x2( A, &ATL, &ATR,
22  &ABL, &ABR, 0, 0, FLA_TL );
23 
24  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
25 
26  b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
27 
28  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02,
29  /* ************* */ /* ******************** */
30  &A10, /**/ &A11, &A12,
31  ABL, /**/ ABR, &A20, /**/ &A21, &A22,
32  b, b, FLA_BR );
33 
34  /*------------------------------------------------------------*/
35 
36  // A21 = -A21 / tril( A11 );
37  FLA_Trsm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
38  FLA_MINUS_ONE, A11, A21,
39  FLA_Cntl_sub_trsm1( cntl ) );
40 
41  // A20 = A21 * A10 + A20;
42  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
43  FLA_ONE, A21, A10, FLA_ONE, A20,
44  FLA_Cntl_sub_gemm( cntl ) );
45 
46  // A10 = tril( A11 ) \ A10;
47  FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
48  FLA_ONE, A11, A10,
49  FLA_Cntl_sub_trsm2( cntl ) );
50 
51  // A11 = inv( A11 );
52  FLA_Trinv_internal( FLA_LOWER_TRIANGULAR, FLA_NONUNIT_DIAG, A11,
53  FLA_Cntl_sub_trinv( cntl ) );
54 
55  /*------------------------------------------------------------*/
56 
57  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
58  A10, A11, /**/ A12,
59  /* ************** */ /* ****************** */
60  &ABL, /**/ &ABR, A20, A21, /**/ A22,
61  FLA_TL );
62 
63  }
64 
65  return FLA_SUCCESS;
66 }
FLA_Error FLA_Gemm_internal(FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
Definition: FLA_Gemm_internal.c:16

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Trinv_internal(), and FLA_Trsm_internal().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_blk_var4()

FLA_Error FLA_Trinv_ln_blk_var4 ( FLA_Obj  A,
fla_trinv_t cntl 
)
16 {
17  FLA_Obj ATL, ATR, A00, A01, A02,
18  ABL, ABR, A10, A11, A12,
19  A20, A21, A22;
20 
21  dim_t b;
22 
23  FLA_Part_2x2( A, &ATL, &ATR,
24  &ABL, &ABR, 0, 0, FLA_TL );
25 
26  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
27 
28  b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
29 
30  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02,
31  /* ************* */ /* ******************** */
32  &A10, /**/ &A11, &A12,
33  ABL, /**/ ABR, &A20, /**/ &A21, &A22,
34  b, b, FLA_BR );
35 
36  /*------------------------------------------------------------*/
37 
38  // A21 = -tril( A22 ) \ A21;
39  FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
40  FLA_MINUS_ONE, A22, A21,
41  FLA_Cntl_sub_trsm1( cntl ) );
42 
43  // A20 = -A21 * A10 + A20;
44  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
45  FLA_MINUS_ONE, A21, A10, FLA_ONE, A20,
46  FLA_Cntl_sub_gemm( cntl ) );
47 
48  // A10 = A10 * A00;
49  FLA_Trmm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG,
50  FLA_ONE, A00, A10,
51  FLA_Cntl_sub_trmm( cntl ) );
52 
53  // A11 = inv( A11 );
54  FLA_Trinv_internal( FLA_LOWER_TRIANGULAR, FLA_NONUNIT_DIAG, A11,
55  FLA_Cntl_sub_trinv( cntl ) );
56 
57  /*------------------------------------------------------------*/
58 
59  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
60  A10, A11, /**/ A12,
61  /* ************** */ /* ****************** */
62  &ABL, /**/ &ABR, A20, A21, /**/ A22,
63  FLA_TL );
64 
65  }
66 
67  return FLA_SUCCESS;
68 }

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Trinv_internal(), FLA_Trmm_internal(), and FLA_Trsm_internal().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_opc_var1()

FLA_Error FLA_Trinv_ln_opc_var1 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)
168 {
169  scomplex alpha11_m1;
170  int i;
171 
172  for ( i = 0; i < mn_A; ++i )
173  {
174  scomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
175  scomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
176  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
177 
178  int mn_behind = i;
179 
180  /*------------------------------------------------------------*/
181 
182  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
186  mn_behind,
187  A00, rs_A, cs_A,
188  a10t, cs_A );
189 
190  // FLA_Scal_external( FLA_MINUS_ONE, a10t );
191  // FLA_Inv_scal_external( alpha11, a10t );
192  bl1_cneg2( alpha11, &alpha11_m1 );
194  mn_behind,
195  &alpha11_m1,
196  a10t, cs_A );
197 
198  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
200  alpha11 );
201 
202  /*------------------------------------------------------------*/
203 
204  }
205 
206  return FLA_SUCCESS;
207 }
int i
Definition: bl1_axmyv2.c:145
void bl1_cinvscalv(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx)
Definition: bl1_invscalv.c:52
void bl1_ctrmv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, scomplex *a, int a_rs, int a_cs, scomplex *x, int incx)
Definition: bl1_trmv.c:99
void bl1_cinverts(conj1_t conj, scomplex *alpha)
Definition: bl1_inverts.c:27
@ BLIS1_LOWER_TRIANGULAR
Definition: blis_type_defs.h:62
@ BLIS1_NONUNIT_DIAG
Definition: blis_type_defs.h:74
@ BLIS1_TRANSPOSE
Definition: blis_type_defs.h:55
@ BLIS1_NO_CONJUGATE
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:133

References bl1_cinverts(), bl1_cinvscalv(), bl1_ctrmv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, and i.

Referenced by FLA_Trinv_ln_opt_var1().

◆ FLA_Trinv_ln_opc_var2()

FLA_Error FLA_Trinv_ln_opc_var2 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)
168 {
169  scomplex alpha11_m1;
170  int i;
171 
172  for ( i = 0; i < mn_A; ++i )
173  {
174  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
175  scomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
176  scomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
177 
178  int mn_ahead = mn_A - i - 1;
179 
180  /*------------------------------------------------------------*/
181 
182  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
186  mn_ahead,
187  A22, rs_A, cs_A,
188  a21, rs_A );
189 
190  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
191  // FLA_Inv_scal_external( alpha11, a21 );
192  bl1_cneg2( alpha11, &alpha11_m1 );
194  mn_ahead,
195  &alpha11_m1,
196  a21, rs_A );
197 
198  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
200  alpha11 );
201 
202  /*------------------------------------------------------------*/
203 
204  }
205 
206  return FLA_SUCCESS;
207 }
void bl1_ctrsv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, scomplex *a, int a_rs, int a_cs, scomplex *x, int incx)
Definition: bl1_trsv.c:99
@ BLIS1_NO_TRANSPOSE
Definition: blis_type_defs.h:54

References bl1_cinverts(), bl1_cinvscalv(), bl1_ctrsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, and i.

Referenced by FLA_Trinv_ln_opt_var2().

◆ FLA_Trinv_ln_opc_var3()

FLA_Error FLA_Trinv_ln_opc_var3 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)
188 {
189  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
190  scomplex alpha11_m1;
191  int i;
192 
193  for ( i = 0; i < mn_A; ++i )
194  {
195  scomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
196  scomplex* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
197  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
198  scomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
199 
200  int mn_ahead = mn_A - i - 1;
201  int mn_behind = i;
202 
203  /*------------------------------------------------------------*/
204 
205  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
206  // FLA_Inv_scal_external( alpha11, a21 );
207  bl1_cneg2( alpha11, &alpha11_m1 );
209  mn_ahead,
210  &alpha11_m1,
211  a21, rs_A );
212 
213  // FLA_Ger_external( FLA_ONE, a21, a10t, A20 );
216  mn_ahead,
217  mn_behind,
218  buff_1,
219  a21, rs_A,
220  a10t, cs_A,
221  A20, rs_A, cs_A );
222 
223  // FLA_Inv_scal_external( alpha11, a10t );
225  mn_behind,
226  alpha11,
227  a10t, cs_A );
228 
229  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
231  alpha11 );
232 
233  /*------------------------------------------------------------*/
234 
235  }
236 
237  return FLA_SUCCESS;
238 }
void bl1_cger(conj1_t conjx, conj1_t conjy, int m, int n, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *a, int a_rs, int a_cs)
Definition: bl1_ger.c:111

References bl1_cger(), bl1_cinverts(), bl1_cinvscalv(), BLIS1_NO_CONJUGATE, FLA_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var3().

◆ FLA_Trinv_ln_opc_var4()

FLA_Error FLA_Trinv_ln_opc_var4 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)
206 {
207  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
208  int i;
209 
210  for ( i = 0; i < mn_A; ++i )
211  {
212  scomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
213  scomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
214  scomplex* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
215  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
216  scomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
217  scomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
218 
219  int mn_ahead = mn_A - i - 1;
220  int mn_behind = i;
221 
222  /*------------------------------------------------------------*/
223 
224  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
225  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
227  mn_ahead,
228  buff_m1,
229  a21, rs_A );
233  mn_ahead,
234  A22, rs_A, cs_A,
235  a21, rs_A );
236 
237  // FLA_Ger_external( FLA_MINUS_ONE, a21, a10t, A20 );
240  mn_ahead,
241  mn_behind,
242  buff_m1,
243  a21, rs_A,
244  a10t, cs_A,
245  A20, rs_A, cs_A );
246 
247  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
251  mn_behind,
252  A00, rs_A, cs_A,
253  a10t, cs_A );
254 
255  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
257  alpha11 );
258 
259  /*------------------------------------------------------------*/
260 
261  }
262 
263  return FLA_SUCCESS;
264 }
void bl1_cscalv(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx)
Definition: bl1_scalv.c:46

References bl1_cger(), bl1_cinverts(), bl1_cscalv(), bl1_ctrmv(), bl1_ctrsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, FLA_MINUS_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var4().

◆ FLA_Trinv_ln_opd_var1()

FLA_Error FLA_Trinv_ln_opd_var1 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)
123 {
124  double alpha11_m1;
125  int i;
126 
127  for ( i = 0; i < mn_A; ++i )
128  {
129  double* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
130  double* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
131  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
132 
133  int mn_behind = i;
134 
135  /*------------------------------------------------------------*/
136 
137  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
141  mn_behind,
142  A00, rs_A, cs_A,
143  a10t, cs_A );
144 
145  // FLA_Scal_external( FLA_MINUS_ONE, a10t );
146  // FLA_Inv_scal_external( alpha11, a10t );
147  bl1_dneg2( alpha11, &alpha11_m1 );
149  mn_behind,
150  &alpha11_m1,
151  a10t, cs_A );
152 
153  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
155  alpha11 );
156 
157  /*------------------------------------------------------------*/
158 
159  }
160 
161  return FLA_SUCCESS;
162 }
void bl1_dinvscalv(conj1_t conj, int n, double *alpha, double *x, int incx)
Definition: bl1_invscalv.c:26
void bl1_dtrmv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, double *a, int a_rs, int a_cs, double *x, int incx)
Definition: bl1_trmv.c:56
void bl1_dinverts(conj1_t conj, double *alpha)
Definition: bl1_inverts.c:20

References bl1_dinverts(), bl1_dinvscalv(), bl1_dtrmv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, and i.

Referenced by FLA_Trinv_ln_opt_var1().

◆ FLA_Trinv_ln_opd_var2()

FLA_Error FLA_Trinv_ln_opd_var2 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)
123 {
124  double alpha11_m1;
125  int i;
126 
127  for ( i = 0; i < mn_A; ++i )
128  {
129  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
130  double* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
131  double* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
132 
133  int mn_ahead = mn_A - i - 1;
134 
135  /*------------------------------------------------------------*/
136 
137  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
141  mn_ahead,
142  A22, rs_A, cs_A,
143  a21, rs_A );
144 
145  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
146  // FLA_Inv_scal_external( alpha11, a21 );
147  bl1_dneg2( alpha11, &alpha11_m1 );
149  mn_ahead,
150  &alpha11_m1,
151  a21, rs_A );
152 
153  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
155  alpha11 );
156 
157  /*------------------------------------------------------------*/
158 
159  }
160 
161  return FLA_SUCCESS;
162 }
void bl1_dtrsv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, double *a, int a_rs, int a_cs, double *x, int incx)
Definition: bl1_trsv.c:56

References bl1_dinverts(), bl1_dinvscalv(), bl1_dtrsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, and i.

Referenced by FLA_Trinv_ln_opt_var2().

◆ FLA_Trinv_ln_opd_var3()

FLA_Error FLA_Trinv_ln_opd_var3 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)
132 {
133  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
134  double alpha11_m1;
135  int i;
136 
137  for ( i = 0; i < mn_A; ++i )
138  {
139  double* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
140  double* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
141  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
142  double* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
143 
144  int mn_ahead = mn_A - i - 1;
145  int mn_behind = i;
146 
147  /*------------------------------------------------------------*/
148 
149  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
150  // FLA_Inv_scal_external( alpha11, a21 );
151  bl1_dneg2( alpha11, &alpha11_m1 );
153  mn_ahead,
154  &alpha11_m1,
155  a21, rs_A );
156 
157  // FLA_Ger_external( FLA_ONE, a21, a10t, A20 );
160  mn_ahead,
161  mn_behind,
162  buff_1,
163  a21, rs_A,
164  a10t, cs_A,
165  A20, rs_A, cs_A );
166 
167  // FLA_Inv_scal_external( alpha11, a10t );
169  mn_behind,
170  alpha11,
171  a10t, cs_A );
172 
173  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
175  alpha11 );
176 
177  /*------------------------------------------------------------*/
178 
179  }
180 
181  return FLA_SUCCESS;
182 }
void bl1_dger(conj1_t conjx, conj1_t conjy, int m, int n, double *alpha, double *x, int incx, double *y, int incy, double *a, int a_rs, int a_cs)
Definition: bl1_ger.c:62

References bl1_dger(), bl1_dinverts(), bl1_dinvscalv(), BLIS1_NO_CONJUGATE, FLA_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var3().

◆ FLA_Trinv_ln_opd_var4()

FLA_Error FLA_Trinv_ln_opd_var4 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)
142 {
143  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
144  int i;
145 
146  for ( i = 0; i < mn_A; ++i )
147  {
148  double* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
149  double* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
150  double* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
151  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
152  double* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
153  double* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
154 
155  int mn_ahead = mn_A - i - 1;
156  int mn_behind = i;
157 
158  /*------------------------------------------------------------*/
159 
160  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
161  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
163  mn_ahead,
164  buff_m1,
165  a21, rs_A );
169  mn_ahead,
170  A22, rs_A, cs_A,
171  a21, rs_A );
172 
173  // FLA_Ger_external( FLA_MINUS_ONE, a21, a10t, A20 );
176  mn_ahead,
177  mn_behind,
178  buff_m1,
179  a21, rs_A,
180  a10t, cs_A,
181  A20, rs_A, cs_A );
182 
183  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
187  mn_behind,
188  A00, rs_A, cs_A,
189  a10t, cs_A );
190 
191  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
193  alpha11 );
194 
195  /*------------------------------------------------------------*/
196 
197  }
198 
199  return FLA_SUCCESS;
200 }
void bl1_dscalv(conj1_t conj, int n, double *alpha, double *x, int incx)
Definition: bl1_scalv.c:24

References bl1_dger(), bl1_dinverts(), bl1_dscalv(), bl1_dtrmv(), bl1_dtrsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, FLA_MINUS_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var4().

◆ FLA_Trinv_ln_ops_var1()

FLA_Error FLA_Trinv_ln_ops_var1 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)
78 {
79  float alpha11_m1;
80  int i;
81 
82  for ( i = 0; i < mn_A; ++i )
83  {
84  float* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
85  float* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
86  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
87 
88  int mn_behind = i;
89 
90  /*------------------------------------------------------------*/
91 
92  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
96  mn_behind,
97  A00, rs_A, cs_A,
98  a10t, cs_A );
99 
100  // FLA_Scal_external( FLA_MINUS_ONE, a10t );
101  // FLA_Inv_scal_external( alpha11, a10t );
102  bl1_sneg2( alpha11, &alpha11_m1 );
104  mn_behind,
105  &alpha11_m1,
106  a10t, cs_A );
107 
108  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
110  alpha11 );
111 
112  /*------------------------------------------------------------*/
113 
114  }
115 
116  return FLA_SUCCESS;
117 }
void bl1_sinvscalv(conj1_t conj, int n, float *alpha, float *x, int incx)
Definition: bl1_invscalv.c:13
void bl1_strmv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, float *a, int a_rs, int a_cs, float *x, int incx)
Definition: bl1_trmv.c:13
void bl1_sinverts(conj1_t conj, float *alpha)
Definition: bl1_inverts.c:13

References bl1_sinverts(), bl1_sinvscalv(), bl1_strmv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, and i.

Referenced by FLA_Trinv_ln_opt_var1().

◆ FLA_Trinv_ln_ops_var2()

FLA_Error FLA_Trinv_ln_ops_var2 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)
78 {
79  float alpha11_m1;
80  int i;
81 
82  for ( i = 0; i < mn_A; ++i )
83  {
84  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
85  float* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
86  float* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
87 
88  int mn_ahead = mn_A - i - 1;
89 
90  /*------------------------------------------------------------*/
91 
92  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
96  mn_ahead,
97  A22, rs_A, cs_A,
98  a21, rs_A );
99 
100  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
101  // FLA_Inv_scal_external( alpha11, a21 );
102  bl1_sneg2( alpha11, &alpha11_m1 );
104  mn_ahead,
105  &alpha11_m1,
106  a21, rs_A );
107 
108  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
110  alpha11 );
111 
112  /*------------------------------------------------------------*/
113 
114  }
115 
116  return FLA_SUCCESS;
117 }
void bl1_strsv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, float *a, int a_rs, int a_cs, float *x, int incx)
Definition: bl1_trsv.c:13

References bl1_sinverts(), bl1_sinvscalv(), bl1_strsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, and i.

Referenced by FLA_Trinv_ln_opt_var2().

◆ FLA_Trinv_ln_ops_var3()

FLA_Error FLA_Trinv_ln_ops_var3 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)
76 {
77  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
78  float alpha11_m1;
79  int i;
80 
81  for ( i = 0; i < mn_A; ++i )
82  {
83  float* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
84  float* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
85  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
86  float* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
87 
88  int mn_ahead = mn_A - i - 1;
89  int mn_behind = i;
90 
91  /*------------------------------------------------------------*/
92 
93  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
94  // FLA_Inv_scal_external( alpha11, a21 );
95  bl1_sneg2( alpha11, &alpha11_m1 );
97  mn_ahead,
98  &alpha11_m1,
99  a21, rs_A );
100 
101  // FLA_Ger_external( FLA_ONE, a21, a10t, A20 );
104  mn_ahead,
105  mn_behind,
106  buff_1,
107  a21, rs_A,
108  a10t, cs_A,
109  A20, rs_A, cs_A );
110 
111  // FLA_Inv_scal_external( alpha11, a10t );
113  mn_behind,
114  alpha11,
115  a10t, cs_A );
116 
117  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
119  alpha11 );
120 
121  /*------------------------------------------------------------*/
122 
123  }
124 
125  return FLA_SUCCESS;
126 }
void bl1_sger(conj1_t conjx, conj1_t conjy, int m, int n, float *alpha, float *x, int incx, float *y, int incy, float *a, int a_rs, int a_cs)
Definition: bl1_ger.c:13

References bl1_sger(), bl1_sinverts(), bl1_sinvscalv(), BLIS1_NO_CONJUGATE, FLA_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var3().

◆ FLA_Trinv_ln_ops_var4()

FLA_Error FLA_Trinv_ln_ops_var4 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)
78 {
79  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
80  int i;
81 
82  for ( i = 0; i < mn_A; ++i )
83  {
84  float* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
85  float* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
86  float* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
87  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
88  float* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
89  float* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
90 
91  int mn_ahead = mn_A - i - 1;
92  int mn_behind = i;
93 
94  /*------------------------------------------------------------*/
95 
96  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
97  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
99  mn_ahead,
100  buff_m1,
101  a21, rs_A );
105  mn_ahead,
106  A22, rs_A, cs_A,
107  a21, rs_A );
108 
109  // FLA_Ger_external( FLA_MINUS_ONE, a21, a10t, A20 );
112  mn_ahead,
113  mn_behind,
114  buff_m1,
115  a21, rs_A,
116  a10t, cs_A,
117  A20, rs_A, cs_A );
118 
119  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
123  mn_behind,
124  A00, rs_A, cs_A,
125  a10t, cs_A );
126 
127  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
129  alpha11 );
130 
131  /*------------------------------------------------------------*/
132 
133  }
134 
135  return FLA_SUCCESS;
136 }
void bl1_sscalv(conj1_t conj, int n, float *alpha, float *x, int incx)
Definition: bl1_scalv.c:13

References bl1_sger(), bl1_sinverts(), bl1_sscalv(), bl1_strmv(), bl1_strsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, FLA_MINUS_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var4().

◆ FLA_Trinv_ln_opt_var1()

FLA_Error FLA_Trinv_ln_opt_var1 ( FLA_Obj  A)
16 {
17  FLA_Datatype datatype;
18  int mn_A;
19  int rs_A, cs_A;
20 
21  datatype = FLA_Obj_datatype( A );
22 
23  mn_A = FLA_Obj_length( A );
24  rs_A = FLA_Obj_row_stride( A );
25  cs_A = FLA_Obj_col_stride( A );
26 
27 
28  switch ( datatype )
29  {
30  case FLA_FLOAT:
31  {
32  float* buff_A = FLA_FLOAT_PTR( A );
33 
35  buff_A, rs_A, cs_A );
36 
37  break;
38  }
39 
40  case FLA_DOUBLE:
41  {
42  double* buff_A = FLA_DOUBLE_PTR( A );
43 
45  buff_A, rs_A, cs_A );
46 
47  break;
48  }
49 
50  case FLA_COMPLEX:
51  {
52  scomplex* buff_A = FLA_COMPLEX_PTR( A );
53 
55  buff_A, rs_A, cs_A );
56 
57  break;
58  }
59 
60  case FLA_DOUBLE_COMPLEX:
61  {
62  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
63 
65  buff_A, rs_A, cs_A );
66 
67  break;
68  }
69  }
70 
71  return FLA_SUCCESS;
72 }
FLA_Error FLA_Trinv_ln_opd_var1(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var1.c:121
FLA_Error FLA_Trinv_ln_opz_var1(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var1.c:211
FLA_Error FLA_Trinv_ln_opc_var1(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var1.c:166
FLA_Error FLA_Trinv_ln_ops_var1(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var1.c:76
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
Definition: blis_type_defs.h:138

References FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Trinv_ln_opc_var1(), FLA_Trinv_ln_opd_var1(), FLA_Trinv_ln_ops_var1(), and FLA_Trinv_ln_opz_var1().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_opt_var2()

FLA_Error FLA_Trinv_ln_opt_var2 ( FLA_Obj  A)
16 {
17  FLA_Datatype datatype;
18  int mn_A;
19  int rs_A, cs_A;
20 
21  datatype = FLA_Obj_datatype( A );
22 
23  mn_A = FLA_Obj_length( A );
24  rs_A = FLA_Obj_row_stride( A );
25  cs_A = FLA_Obj_col_stride( A );
26 
27 
28  switch ( datatype )
29  {
30  case FLA_FLOAT:
31  {
32  float* buff_A = FLA_FLOAT_PTR( A );
33 
35  buff_A, rs_A, cs_A );
36 
37  break;
38  }
39 
40  case FLA_DOUBLE:
41  {
42  double* buff_A = FLA_DOUBLE_PTR( A );
43 
45  buff_A, rs_A, cs_A );
46 
47  break;
48  }
49 
50  case FLA_COMPLEX:
51  {
52  scomplex* buff_A = FLA_COMPLEX_PTR( A );
53 
55  buff_A, rs_A, cs_A );
56 
57  break;
58  }
59 
60  case FLA_DOUBLE_COMPLEX:
61  {
62  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
63 
65  buff_A, rs_A, cs_A );
66 
67  break;
68  }
69  }
70 
71  return FLA_SUCCESS;
72 }
FLA_Error FLA_Trinv_ln_ops_var2(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var2.c:76
FLA_Error FLA_Trinv_ln_opz_var2(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var2.c:211
FLA_Error FLA_Trinv_ln_opd_var2(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var2.c:121
FLA_Error FLA_Trinv_ln_opc_var2(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var2.c:166

References FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Trinv_ln_opc_var2(), FLA_Trinv_ln_opd_var2(), FLA_Trinv_ln_ops_var2(), and FLA_Trinv_ln_opz_var2().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_opt_var3()

FLA_Error FLA_Trinv_ln_opt_var3 ( FLA_Obj  A)
14 {
15  FLA_Datatype datatype;
16  int mn_A;
17  int rs_A, cs_A;
18 
19  datatype = FLA_Obj_datatype( A );
20 
21  mn_A = FLA_Obj_length( A );
22  rs_A = FLA_Obj_row_stride( A );
23  cs_A = FLA_Obj_col_stride( A );
24 
25 
26  switch ( datatype )
27  {
28  case FLA_FLOAT:
29  {
30  float* buff_A = FLA_FLOAT_PTR( A );
31 
33  buff_A, rs_A, cs_A );
34 
35  break;
36  }
37 
38  case FLA_DOUBLE:
39  {
40  double* buff_A = FLA_DOUBLE_PTR( A );
41 
43  buff_A, rs_A, cs_A );
44 
45  break;
46  }
47 
48  case FLA_COMPLEX:
49  {
50  scomplex* buff_A = FLA_COMPLEX_PTR( A );
51 
53  buff_A, rs_A, cs_A );
54 
55  break;
56  }
57 
58  case FLA_DOUBLE_COMPLEX:
59  {
60  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
61 
63  buff_A, rs_A, cs_A );
64 
65  break;
66  }
67  }
68 
69  return FLA_SUCCESS;
70 }
FLA_Error FLA_Trinv_ln_opd_var3(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var3.c:130
FLA_Error FLA_Trinv_ln_opz_var3(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var3.c:242
FLA_Error FLA_Trinv_ln_opc_var3(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var3.c:186
FLA_Error FLA_Trinv_ln_ops_var3(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var3.c:74

References FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Trinv_ln_opc_var3(), FLA_Trinv_ln_opd_var3(), FLA_Trinv_ln_ops_var3(), and FLA_Trinv_ln_opz_var3().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_opt_var4()

FLA_Error FLA_Trinv_ln_opt_var4 ( FLA_Obj  A)
16 {
17  FLA_Datatype datatype;
18  int mn_A;
19  int rs_A, cs_A;
20 
21  datatype = FLA_Obj_datatype( A );
22 
23  mn_A = FLA_Obj_length( A );
24  rs_A = FLA_Obj_row_stride( A );
25  cs_A = FLA_Obj_col_stride( A );
26 
27 
28  switch ( datatype )
29  {
30  case FLA_FLOAT:
31  {
32  float* buff_A = FLA_FLOAT_PTR( A );
33 
35  buff_A, rs_A, cs_A );
36 
37  break;
38  }
39 
40  case FLA_DOUBLE:
41  {
42  double* buff_A = FLA_DOUBLE_PTR( A );
43 
45  buff_A, rs_A, cs_A );
46 
47  break;
48  }
49 
50  case FLA_COMPLEX:
51  {
52  scomplex* buff_A = FLA_COMPLEX_PTR( A );
53 
55  buff_A, rs_A, cs_A );
56 
57  break;
58  }
59 
60  case FLA_DOUBLE_COMPLEX:
61  {
62  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
63 
65  buff_A, rs_A, cs_A );
66 
67  break;
68  }
69  }
70 
71  return FLA_SUCCESS;
72 }
FLA_Error FLA_Trinv_ln_opc_var4(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var4.c:204
FLA_Error FLA_Trinv_ln_opd_var4(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var4.c:140
FLA_Error FLA_Trinv_ln_opz_var4(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var4.c:268
FLA_Error FLA_Trinv_ln_ops_var4(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Trinv_ln_opt_var4.c:76

References FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Trinv_ln_opc_var4(), FLA_Trinv_ln_opd_var4(), FLA_Trinv_ln_ops_var4(), and FLA_Trinv_ln_opz_var4().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_opz_var1()

FLA_Error FLA_Trinv_ln_opz_var1 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)
213 {
214  dcomplex alpha11_m1;
215  int i;
216 
217  for ( i = 0; i < mn_A; ++i )
218  {
219  dcomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
220  dcomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
221  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
222 
223  int mn_behind = i;
224 
225  /*------------------------------------------------------------*/
226 
227  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
231  mn_behind,
232  A00, rs_A, cs_A,
233  a10t, cs_A );
234 
235  // FLA_Scal_external( FLA_MINUS_ONE, a10t );
236  // FLA_Inv_scal_external( alpha11, a10t );
237  bl1_zneg2( alpha11, &alpha11_m1 );
239  mn_behind,
240  &alpha11_m1,
241  a10t, cs_A );
242 
243  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
245  alpha11 );
246 
247  /*------------------------------------------------------------*/
248 
249  }
250 
251  return FLA_SUCCESS;
252 }
void bl1_zinvscalv(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx)
Definition: bl1_invscalv.c:78
void bl1_ztrmv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, dcomplex *a, int a_rs, int a_cs, dcomplex *x, int incx)
Definition: bl1_trmv.c:177
void bl1_zinverts(conj1_t conj, dcomplex *alpha)
Definition: bl1_inverts.c:44

References bl1_zinverts(), bl1_zinvscalv(), bl1_ztrmv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, and i.

Referenced by FLA_Trinv_ln_opt_var1().

◆ FLA_Trinv_ln_opz_var2()

FLA_Error FLA_Trinv_ln_opz_var2 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)
213 {
214  dcomplex alpha11_m1;
215  int i;
216 
217  for ( i = 0; i < mn_A; ++i )
218  {
219  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
220  dcomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
221  dcomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
222 
223  int mn_ahead = mn_A - i - 1;
224 
225  /*------------------------------------------------------------*/
226 
227  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
231  mn_ahead,
232  A22, rs_A, cs_A,
233  a21, rs_A );
234 
235  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
236  // FLA_Inv_scal_external( alpha11, a21 );
237  bl1_zneg2( alpha11, &alpha11_m1 );
239  mn_ahead,
240  &alpha11_m1,
241  a21, rs_A );
242 
243  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
245  alpha11 );
246 
247  /*------------------------------------------------------------*/
248 
249  }
250 
251  return FLA_SUCCESS;
252 }
void bl1_ztrsv(uplo1_t uplo, trans1_t trans, diag1_t diag, int m, dcomplex *a, int a_rs, int a_cs, dcomplex *x, int incx)
Definition: bl1_trsv.c:177

References bl1_zinverts(), bl1_zinvscalv(), bl1_ztrsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, and i.

Referenced by FLA_Trinv_ln_opt_var2().

◆ FLA_Trinv_ln_opz_var3()

FLA_Error FLA_Trinv_ln_opz_var3 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)
244 {
245  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
246  dcomplex alpha11_m1;
247  int i;
248 
249  for ( i = 0; i < mn_A; ++i )
250  {
251  dcomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
252  dcomplex* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
253  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
254  dcomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
255 
256  int mn_ahead = mn_A - i - 1;
257  int mn_behind = i;
258 
259  /*------------------------------------------------------------*/
260 
261  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
262  // FLA_Inv_scal_external( alpha11, a21 );
263  bl1_zneg2( alpha11, &alpha11_m1 );
265  mn_ahead,
266  &alpha11_m1,
267  a21, rs_A );
268 
269  // FLA_Ger_external( FLA_ONE, a21, a10t, A20 );
272  mn_ahead,
273  mn_behind,
274  buff_1,
275  a21, rs_A,
276  a10t, cs_A,
277  A20, rs_A, cs_A );
278 
279  // FLA_Inv_scal_external( alpha11, a10t );
281  mn_behind,
282  alpha11,
283  a10t, cs_A );
284 
285  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
287  alpha11 );
288 
289  /*------------------------------------------------------------*/
290 
291  }
292 
293  return FLA_SUCCESS;
294 }
void bl1_zger(conj1_t conjx, conj1_t conjy, int m, int n, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_ger.c:194

References bl1_zger(), bl1_zinverts(), bl1_zinvscalv(), BLIS1_NO_CONJUGATE, FLA_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var3().

◆ FLA_Trinv_ln_opz_var4()

FLA_Error FLA_Trinv_ln_opz_var4 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)
270 {
271  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
272  int i;
273 
274  for ( i = 0; i < mn_A; ++i )
275  {
276  dcomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
277  dcomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
278  dcomplex* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
279  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
280  dcomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
281  dcomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
282 
283  int mn_ahead = mn_A - i - 1;
284  int mn_behind = i;
285 
286  /*------------------------------------------------------------*/
287 
288  // FLA_Scal_external( FLA_MINUS_ONE, a21 );
289  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
291  mn_ahead,
292  buff_m1,
293  a21, rs_A );
297  mn_ahead,
298  A22, rs_A, cs_A,
299  a21, rs_A );
300 
301  // FLA_Ger_external( FLA_MINUS_ONE, a21, a10t, A20 );
304  mn_ahead,
305  mn_behind,
306  buff_m1,
307  a21, rs_A,
308  a10t, cs_A,
309  A20, rs_A, cs_A );
310 
311  // FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
315  mn_behind,
316  A00, rs_A, cs_A,
317  a10t, cs_A );
318 
319  // FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
321  alpha11 );
322 
323  /*------------------------------------------------------------*/
324 
325  }
326 
327  return FLA_SUCCESS;
328 }
void bl1_zscalv(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx)
Definition: bl1_scalv.c:72

References bl1_zger(), bl1_zinverts(), bl1_zscalv(), bl1_ztrmv(), bl1_ztrsv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_TRANSPOSE, FLA_MINUS_ONE, and i.

Referenced by FLA_Trinv_ln_opt_var4().

◆ FLA_Trinv_ln_unb_var1()

FLA_Error FLA_Trinv_ln_unb_var1 ( FLA_Obj  A)
16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  FLA_Part_2x2( A, &ATL, &ATR,
22  &ABL, &ABR, 0, 0, FLA_TL );
23 
24  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
25 
26  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
27  /* ************* */ /* ************************** */
28  &a10t, /**/ &alpha11, &a12t,
29  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
30  1, 1, FLA_BR );
31 
32  /*------------------------------------------------------------*/
33 
34  // a10t' = tril( A00' ) * a10t';
35  FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
36 
37  // a10t = -a10t / alpha11;
39  FLA_Inv_scal_external( alpha11, a10t );
40 
41  // alpha11 = 1.0 / alpha11;
42  FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
43 
44  /*------------------------------------------------------------*/
45 
46  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
47  a10t, alpha11, /**/ a12t,
48  /* ************** */ /* ************************ */
49  &ABL, /**/ &ABR, A20, a21, /**/ A22,
50  FLA_TL );
51 
52  }
53 
54  return FLA_SUCCESS;
55 }
FLA_Error FLA_Inv_scal_external(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal_external.c:13
FLA_Error FLA_Scal_external(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scal_external.c:13
FLA_Error FLA_Trmv_external(FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
Definition: FLA_Trmv_external.c:13
FLA_Error FLA_Invert(FLA_Conj conj, FLA_Obj x)
Definition: FLA_Invert.c:13

References FLA_Cont_with_3x3_to_2x2(), FLA_Inv_scal_external(), FLA_Invert(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal_external(), and FLA_Trmv_external().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_unb_var2()

FLA_Error FLA_Trinv_ln_unb_var2 ( FLA_Obj  A)
16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  FLA_Part_2x2( A, &ATL, &ATR,
22  &ABL, &ABR, 0, 0, FLA_TL );
23 
24  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
25 
26  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
27  /* ************* */ /* ************************** */
28  &a10t, /**/ &alpha11, &a12t,
29  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
30  1, 1, FLA_BR );
31 
32  /*------------------------------------------------------------*/
33 
34  // a21 = tril( A22 ) \ a21;
35  FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
36 
37  // a21 = -a21 / alpha11;
39  FLA_Inv_scal_external( alpha11, a21 );
40 
41  // alpha11 = 1.0 / alpha11;
42  FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
43 
44  /*------------------------------------------------------------*/
45 
46  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
47  a10t, alpha11, /**/ a12t,
48  /* ************** */ /* ************************ */
49  &ABL, /**/ &ABR, A20, a21, /**/ A22,
50  FLA_TL );
51 
52  }
53 
54  return FLA_SUCCESS;
55 }
FLA_Error FLA_Trsv_external(FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
Definition: FLA_Trsv_external.c:13

References FLA_Cont_with_3x3_to_2x2(), FLA_Inv_scal_external(), FLA_Invert(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal_external(), and FLA_Trsv_external().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_unb_var3()

FLA_Error FLA_Trinv_ln_unb_var3 ( FLA_Obj  A)
16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  FLA_Part_2x2( A, &ATL, &ATR,
22  &ABL, &ABR, 0, 0, FLA_TL );
23 
24  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
25 
26  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
27  /* ************* */ /* ************************** */
28  &a10t, /**/ &alpha11, &a12t,
29  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
30  1, 1, FLA_BR );
31 
32  /*------------------------------------------------------------*/
33 
34  // a21 = -a21 / alpha11;
36  FLA_Inv_scal_external( alpha11, a21 );
37 
38  // A20 = a21 * a10t + A20;
39  FLA_Ger_external( FLA_ONE, a21, a10t, A20 );
40 
41  // a10t = a10t / alpha11;
42  FLA_Inv_scal_external( alpha11, a10t );
43 
44  // alpha11 = 1.0 / alpha11;
45  FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
46 
47  /*------------------------------------------------------------*/
48 
49  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
50  a10t, alpha11, /**/ a12t,
51  /* ************** */ /* ************************ */
52  &ABL, /**/ &ABR, A20, a21, /**/ A22,
53  FLA_TL );
54 
55  }
56 
57  return FLA_SUCCESS;
58 }
FLA_Error FLA_Ger_external(FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj A)
Definition: FLA_Ger_external.c:13

References FLA_Cont_with_3x3_to_2x2(), FLA_Ger_external(), FLA_Inv_scal_external(), FLA_Invert(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), and FLA_Scal_external().

Referenced by FLA_Trinv_ln().

◆ FLA_Trinv_ln_unb_var4()

FLA_Error FLA_Trinv_ln_unb_var4 ( FLA_Obj  A)
16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  FLA_Part_2x2( A, &ATL, &ATR,
22  &ABL, &ABR, 0, 0, FLA_TL );
23 
24  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
25 
26  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
27  /* ************* */ /* ************************** */
28  &a10t, /**/ &alpha11, &a12t,
29  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
30  1, 1, FLA_BR );
31 
32  /*------------------------------------------------------------*/
33 
34  // a21 = -tril( A22 ) \ a21;
36  FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A22, a21 );
37 
38  // A20 = -a21 * a10t + A20;
39  FLA_Ger_external( FLA_MINUS_ONE, a21, a10t, A20 );
40 
41  // a10t' = tril( A00' ) * a10t';
42  FLA_Trmv_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
43 
44  // alpha11 = 1.0 / alpha11;
45  FLA_Invert( FLA_NO_CONJUGATE, alpha11 );
46 
47  /*------------------------------------------------------------*/
48 
49  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
50  a10t, alpha11, /**/ a12t,
51  /* ************** */ /* ************************ */
52  &ABL, /**/ &ABR, A20, a21, /**/ A22,
53  FLA_TL );
54 
55  }
56 
57  return FLA_SUCCESS;
58 }

References FLA_Cont_with_3x3_to_2x2(), FLA_Ger_external(), FLA_Invert(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal_external(), FLA_Trmv_external(), and FLA_Trsv_external().

Referenced by FLA_Trinv_ln().