libflame  revision_anchor
Functions
FLA_Chol_l.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_Chol_l_blk_var1 (FLA_Obj A, fla_chol_t *cntl)
 
FLA_Error FLA_Chol_l_blk_var2 (FLA_Obj A, fla_chol_t *cntl)
 
FLA_Error FLA_Chol_l_blk_var3 (FLA_Obj A, fla_chol_t *cntl)
 
FLA_Error FLA_Chol_l_unb_var1 (FLA_Obj A)
 
FLA_Error FLA_Chol_l_unb_var2 (FLA_Obj A)
 
FLA_Error FLA_Chol_l_unb_var3 (FLA_Obj A)
 
FLA_Error FLA_Chol_l_opt_var1 (FLA_Obj A)
 
FLA_Error FLA_Chol_l_ops_var1 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opd_var1 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opc_var1 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opz_var1 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opt_var2 (FLA_Obj A)
 
FLA_Error FLA_Chol_l_ops_var2 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opd_var2 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opc_var2 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opz_var2 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opt_var3 (FLA_Obj A)
 
FLA_Error FLA_Chol_l_ops_var3 (int mn_A, float *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opd_var3 (int mn_A, double *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opc_var3 (int mn_A, scomplex *A, int rs_A, int cs_A)
 
FLA_Error FLA_Chol_l_opz_var3 (int mn_A, dcomplex *A, int rs_A, int cs_A)
 

Function Documentation

◆ FLA_Chol_l_blk_var1()

FLA_Error FLA_Chol_l_blk_var1 ( FLA_Obj  A,
fla_chol_t cntl 
)

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

Referenced by FLA_Chol_l().

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  int r_val = FLA_SUCCESS;
24 
25  FLA_Part_2x2( A, &ATL, &ATR,
26  &ABL, &ABR, 0, 0, FLA_TL );
27 
28  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
29 
30  b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
31 
32  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02,
33  /* ************* */ /* ******************** */
34  &A10, /**/ &A11, &A12,
35  ABL, /**/ ABR, &A20, /**/ &A21, &A22,
36  b, b, FLA_BR );
37 
38  /*------------------------------------------------------------*/
39 
40  // A10 = A10 * inv( tril( A00 )' )
41  FLA_Trsm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR,
42  FLA_CONJ_TRANSPOSE, FLA_NONUNIT_DIAG,
43  FLA_ONE, A00, A10,
44  FLA_Cntl_sub_trsm( cntl ) );
45 
46  // A11 = A11 - A10 * A10'
47  FLA_Herk_internal( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE,
48  FLA_MINUS_ONE, A10, FLA_ONE, A11,
49  FLA_Cntl_sub_herk( cntl ) );
50 
51  // A11 = chol( A11 )
52  r_val = FLA_Chol_internal( FLA_LOWER_TRIANGULAR, A11,
53  FLA_Cntl_sub_chol( cntl ) );
54 
55  if ( r_val != FLA_SUCCESS )
56  return ( FLA_Obj_length( A00 ) + r_val );
57 
58  /*------------------------------------------------------------*/
59 
60  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
61  A10, A11, /**/ A12,
62  /* ************** */ /* ****************** */
63  &ABL, /**/ &ABR, A20, A21, /**/ A22,
64  FLA_TL );
65  }
66 
67  return r_val;
68 }
unsigned long dim_t
Definition: FLA_type_defs.h:71
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
dim_t FLA_Determine_blocksize(FLA_Obj A_unproc, FLA_Quadrant to_dir, fla_blocksize_t *cntl_blocksizes)
Definition: FLA_Blocksize.c:234
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
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
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: FLA_type_defs.h:158
FLA_Error FLA_Herk_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
Definition: FLA_Herk_internal.c:16
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_Chol_internal(FLA_Uplo uplo, FLA_Obj A, fla_chol_t *cntl)
Definition: FLA_Chol_internal.c:16
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
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_Chol_l_blk_var2()

FLA_Error FLA_Chol_l_blk_var2 ( FLA_Obj  A,
fla_chol_t cntl 
)

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

Referenced by FLA_Chol_l().

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  int r_val = FLA_SUCCESS;
24 
25  FLA_Part_2x2( A, &ATL, &ATR,
26  &ABL, &ABR, 0, 0, FLA_TL );
27 
28  while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) ){
29 
30  b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
31 
32  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02,
33  /* ************* */ /* ******************** */
34  &A10, /**/ &A11, &A12,
35  ABL, /**/ ABR, &A20, /**/ &A21, &A22,
36  b, b, FLA_BR );
37 
38  /*------------------------------------------------------------*/
39 
40  // A11 = A11 - A10 * A10'
41  FLA_Herk_internal( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE,
42  FLA_MINUS_ONE, A10, FLA_ONE, A11,
43  FLA_Cntl_sub_herk( cntl ) );
44 
45  // A21 = A21 - A20 * A10'
46  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
47  FLA_MINUS_ONE, A20, A10, FLA_ONE, A21,
48  FLA_Cntl_sub_gemm( cntl ) );
49 
50  // A11 = chol( A11 )
51  r_val = FLA_Chol_internal( FLA_LOWER_TRIANGULAR, A11,
52  FLA_Cntl_sub_chol( cntl ) );
53 
54  if ( r_val != FLA_SUCCESS )
55  return ( FLA_Obj_length( A00 ) + r_val );
56 
57  // A21 = A21 * inv( tril( A11 )' )
58  FLA_Trsm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR,
59  FLA_CONJ_TRANSPOSE, FLA_NONUNIT_DIAG,
60  FLA_ONE, A11, A21,
61  FLA_Cntl_sub_trsm( cntl ) );
62 
63  /*------------------------------------------------------------*/
64 
65  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
66  A10, A11, /**/ A12,
67  /* ************** */ /* ****************** */
68  &ABL, /**/ &ABR, A20, A21, /**/ A22,
69  FLA_TL );
70  }
71 
72  return r_val;
73 }
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
unsigned long dim_t
Definition: FLA_type_defs.h:71
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
dim_t FLA_Determine_blocksize(FLA_Obj A_unproc, FLA_Quadrant to_dir, fla_blocksize_t *cntl_blocksizes)
Definition: FLA_Blocksize.c:234
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
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
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: FLA_type_defs.h:158
FLA_Error FLA_Herk_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
Definition: FLA_Herk_internal.c:16
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_Chol_internal(FLA_Uplo uplo, FLA_Obj A, fla_chol_t *cntl)
Definition: FLA_Chol_internal.c:16
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
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_Chol_l_blk_var3()

FLA_Error FLA_Chol_l_blk_var3 ( FLA_Obj  A,
fla_chol_t cntl 
)

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

Referenced by FLA_Chol_l().

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  int r_val = FLA_SUCCESS;
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  // A11 = chol( A11 )
39  r_val = FLA_Chol_internal( FLA_LOWER_TRIANGULAR, A11,
40  FLA_Cntl_sub_chol( cntl ) );
41 
42  if ( r_val != FLA_SUCCESS )
43  return ( FLA_Obj_length( A00 ) + r_val );
44 
45  // A21 = A21 * inv( tril( A11 )' )
46  FLA_Trsm_internal( FLA_RIGHT, FLA_LOWER_TRIANGULAR,
47  FLA_CONJ_TRANSPOSE, FLA_NONUNIT_DIAG,
48  FLA_ONE, A11, A21,
49  FLA_Cntl_sub_trsm( cntl ) );
50 
51  // A22 = A22 - A21 * A21'
52  FLA_Herk_internal( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE,
53  FLA_MINUS_ONE, A21, FLA_ONE, A22,
54  FLA_Cntl_sub_herk( cntl ) );
55 
56  /*------------------------------------------------------------*/
57 
58  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02,
59  A10, A11, /**/ A12,
60  /* ************** */ /* ****************** */
61  &ABL, /**/ &ABR, A20, A21, /**/ A22,
62  FLA_TL );
63  }
64 
65  return r_val;
66 }
unsigned long dim_t
Definition: FLA_type_defs.h:71
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
dim_t FLA_Determine_blocksize(FLA_Obj A_unproc, FLA_Quadrant to_dir, fla_blocksize_t *cntl_blocksizes)
Definition: FLA_Blocksize.c:234
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
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
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: FLA_type_defs.h:158
FLA_Error FLA_Herk_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
Definition: FLA_Herk_internal.c:16
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_Chol_internal(FLA_Uplo uplo, FLA_Obj A, fla_chol_t *cntl)
Definition: FLA_Chol_internal.c:16
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
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_Chol_l_opc_var1()

FLA_Error FLA_Chol_l_opc_var1 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)

References bl1_cdots(), bl1_ctrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_LOWER_TRIANGULAR, BLIS1_NONUNIT_DIAG, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var1().

179 {
180  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
181  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
182  int i;
183  FLA_Error e_val;
184 
185  for ( i = 0; i < mn_A; ++i )
186  {
187  scomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
188  scomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
189  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
190 
191  int mn_behind = i;
192 
193  /*------------------------------------------------------------*/
194 
195  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
199  mn_behind,
200  A00, rs_A, cs_A,
201  a10t, cs_A );
202 
203  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
205  mn_behind,
206  buff_m1,
207  a10t, cs_A,
208  a10t, cs_A,
209  buff_1,
210  alpha11 );
211 
212  // r_val = FLA_Sqrt( alpha11 );
213  // if ( r_val != FLA_SUCCESS )
214  // return ( FLA_Obj_length( A00 ) + 1 );
215  bl1_csqrte( alpha11, &e_val );
216  if ( e_val != FLA_SUCCESS ) return mn_behind;
217 
218  /*------------------------------------------------------------*/
219 
220  }
221 
222  return FLA_SUCCESS;
223 }
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
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
void bl1_cdots(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *beta, scomplex *rho)
Definition: bl1_dots.c:39
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:132
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:62

◆ FLA_Chol_l_opc_var2()

FLA_Error FLA_Chol_l_opc_var2 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)

References bl1_cdots(), bl1_cgemv(), bl1_cinvscalv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var2().

199 {
200  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
201  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
202  int i;
203  FLA_Error e_val;
204 
205  for ( i = 0; i < mn_A; ++i )
206  {
207  scomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
208  scomplex* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
209  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
210  scomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
211 
212  int mn_ahead = mn_A - i - 1;
213  int mn_behind = i;
214 
215  /*------------------------------------------------------------*/
216 
217  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
219  mn_behind,
220  buff_m1,
221  a10t, cs_A,
222  a10t, cs_A,
223  buff_1,
224  alpha11 );
225 
226  // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A20, a10t, FLA_ONE, a21 );
229  mn_ahead,
230  mn_behind,
231  buff_m1,
232  A20, rs_A, cs_A,
233  a10t, cs_A,
234  buff_1,
235  a21, rs_A );
236 
237  // r_val = FLA_Sqrt( alpha11 );
238  // if ( r_val != FLA_SUCCESS )
239  // return ( FLA_Obj_length( A00 ) + 1 );
240  bl1_csqrte( alpha11, &e_val );
241  if ( e_val != FLA_SUCCESS ) return mn_behind;
242 
243  // FLA_Inv_scal_external( alpha11, a21 );
245  mn_ahead,
246  alpha11,
247  a21, rs_A );
248 
249  /*------------------------------------------------------------*/
250 
251  }
252 
253  return FLA_SUCCESS;
254 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_cdots(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *beta, scomplex *rho)
Definition: bl1_dots.c:39
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
Definition: blis_type_defs.h:54
Definition: blis_type_defs.h:132
void bl1_cgemv(trans1_t transa, conj1_t conjx, int m, int n, scomplex *alpha, scomplex *a, int a_rs, int a_cs, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
Definition: bl1_gemv.c:125
void bl1_cinvscalv(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx)
Definition: bl1_invscalv.c:52
int i
Definition: bl1_axmyv2.c:145

◆ FLA_Chol_l_opc_var3()

FLA_Error FLA_Chol_l_opc_var3 ( int  mn_A,
scomplex A,
int  rs_A,
int  cs_A 
)

References bl1_cher(), bl1_cinvscalv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, FLA_MINUS_ONE, and i.

Referenced by FLA_Chol_l_opt_var3().

169 {
170  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
171  int i;
172  FLA_Error e_val;
173 
174  for ( i = 0; i < mn_A; ++i )
175  {
176  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
177  scomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
178  scomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
179 
180  int mn_ahead = mn_A - i - 1;
181  int mn_behind = i;
182 
183  /*------------------------------------------------------------*/
184 
185  // r_val = FLA_Sqrt( alpha11 );
186  // if ( r_val != FLA_SUCCESS )
187  // return ( FLA_Obj_length( A00 ) + 1 );
188  bl1_csqrte( alpha11, &e_val );
189  if ( e_val != FLA_SUCCESS ) return mn_behind;
190 
191  // FLA_Inv_scal_external( alpha11, a21 );
193  mn_ahead,
194  alpha11,
195  a21, rs_A );
196 
197  // FLA_Her_external( FLA_LOWER_TRIANGULAR, FLA_MINUS_ONE, a21, A22 );
200  mn_ahead,
201  buff_m1,
202  a21, rs_A,
203  A22, rs_A, cs_A );
204 
205  /*------------------------------------------------------------*/
206 
207  }
208 
209  return FLA_SUCCESS;
210 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
int FLA_Error
Definition: FLA_type_defs.h:47
void bl1_cher(uplo1_t uplo, conj1_t conj, int m, float *alpha, scomplex *x, int incx, scomplex *a, int a_rs, int a_cs)
Definition: bl1_her.c:31
Definition: blis_type_defs.h:132
void bl1_cinvscalv(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx)
Definition: bl1_invscalv.c:52
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:62

◆ FLA_Chol_l_opd_var1()

FLA_Error FLA_Chol_l_opd_var1 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)

References bl1_ddots(), bl1_dtrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_LOWER_TRIANGULAR, BLIS1_NONUNIT_DIAG, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var1().

129 {
130  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
131  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
132  int i;
133  FLA_Error e_val;
134 
135  for ( i = 0; i < mn_A; ++i )
136  {
137  double* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
138  double* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
139  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
140 
141  int mn_behind = i;
142 
143  /*------------------------------------------------------------*/
144 
145  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
149  mn_behind,
150  A00, rs_A, cs_A,
151  a10t, cs_A );
152 
153  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
155  mn_behind,
156  buff_m1,
157  a10t, cs_A,
158  a10t, cs_A,
159  buff_1,
160  alpha11 );
161 
162  // r_val = FLA_Sqrt( alpha11 );
163  // if ( r_val != FLA_SUCCESS )
164  // return ( FLA_Obj_length( A00 ) + 1 );
165  bl1_dsqrte( alpha11, &e_val );
166  if ( e_val != FLA_SUCCESS ) return mn_behind;
167 
168  /*------------------------------------------------------------*/
169 
170  }
171 
172  return FLA_SUCCESS;
173 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
Definition: blis_type_defs.h:56
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
void bl1_ddots(conj1_t conj, int n, double *alpha, double *x, int incx, double *y, int incy, double *beta, double *rho)
Definition: bl1_dots.c:26
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:62

◆ FLA_Chol_l_opd_var2()

FLA_Error FLA_Chol_l_opd_var2 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)

References bl1_ddots(), bl1_dgemv(), bl1_dinvscalv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var2().

138 {
139  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
140  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
141  int i;
142  FLA_Error e_val;
143 
144  for ( i = 0; i < mn_A; ++i )
145  {
146  double* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
147  double* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
148  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
149  double* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
150 
151  int mn_ahead = mn_A - i - 1;
152  int mn_behind = i;
153 
154  /*------------------------------------------------------------*/
155 
156  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
158  mn_behind,
159  buff_m1,
160  a10t, cs_A,
161  a10t, cs_A,
162  buff_1,
163  alpha11 );
164 
165  // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A20, a10t, FLA_ONE, a21 );
168  mn_ahead,
169  mn_behind,
170  buff_m1,
171  A20, rs_A, cs_A,
172  a10t, cs_A,
173  buff_1,
174  a21, rs_A );
175 
176  // r_val = FLA_Sqrt( alpha11 );
177  // if ( r_val != FLA_SUCCESS )
178  // return ( FLA_Obj_length( A00 ) + 1 );
179  bl1_dsqrte( alpha11, &e_val );
180  if ( e_val != FLA_SUCCESS ) return mn_behind;
181 
182  // FLA_Inv_scal_external( alpha11, a21 );
184  mn_ahead,
185  alpha11,
186  a21, rs_A );
187 
188  /*------------------------------------------------------------*/
189 
190  }
191 
192  return FLA_SUCCESS;
193 }
void bl1_dgemv(trans1_t transa, conj1_t conjx, int m, int n, double *alpha, double *a, int a_rs, int a_cs, double *x, int incx, double *beta, double *y, int incy)
Definition: bl1_gemv.c:69
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
void bl1_dinvscalv(conj1_t conj, int n, double *alpha, double *x, int incx)
Definition: bl1_invscalv.c:26
Definition: blis_type_defs.h:54
void bl1_ddots(conj1_t conj, int n, double *alpha, double *x, int incx, double *y, int incy, double *beta, double *rho)
Definition: bl1_dots.c:26
int i
Definition: bl1_axmyv2.c:145

◆ FLA_Chol_l_opd_var3()

FLA_Error FLA_Chol_l_opd_var3 ( int  mn_A,
double *  A,
int  rs_A,
int  cs_A 
)

References bl1_dinvscalv(), bl1_dsyr(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, FLA_MINUS_ONE, and i.

Referenced by FLA_Chol_l_opt_var3().

123 {
124  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
125  int i;
126  FLA_Error e_val;
127 
128  for ( i = 0; i < mn_A; ++i )
129  {
130  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
131  double* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
132  double* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
133 
134  int mn_ahead = mn_A - i - 1;
135  int mn_behind = i;
136 
137  /*------------------------------------------------------------*/
138 
139  // r_val = FLA_Sqrt( alpha11 );
140  // if ( r_val != FLA_SUCCESS )
141  // return ( FLA_Obj_length( A00 ) + 1 );
142  bl1_dsqrte( alpha11, &e_val );
143  if ( e_val != FLA_SUCCESS ) return mn_behind;
144 
145  // FLA_Inv_scal_external( alpha11, a21 );
147  mn_ahead,
148  alpha11,
149  a21, rs_A );
150 
151  // FLA_Her_external( FLA_LOWER_TRIANGULAR, FLA_MINUS_ONE, a21, A22 );
153  mn_ahead,
154  buff_m1,
155  a21, rs_A,
156  A22, rs_A, cs_A );
157 
158  /*------------------------------------------------------------*/
159 
160  }
161 
162  return FLA_SUCCESS;
163 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
int FLA_Error
Definition: FLA_type_defs.h:47
void bl1_dsyr(uplo1_t uplo, int m, double *alpha, double *x, int incx, double *a, int a_rs, int a_cs)
Definition: bl1_syr.c:57
void bl1_dinvscalv(conj1_t conj, int n, double *alpha, double *x, int incx)
Definition: bl1_invscalv.c:26
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:62

◆ FLA_Chol_l_ops_var1()

FLA_Error FLA_Chol_l_ops_var1 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)

References bl1_sdots(), bl1_strsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_LOWER_TRIANGULAR, BLIS1_NONUNIT_DIAG, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var1().

79 {
80  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
81  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
82  int i;
83  FLA_Error e_val;
84 
85  for ( i = 0; i < mn_A; ++i )
86  {
87  float* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
88  float* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
89  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
90 
91  int mn_behind = i;
92 
93  /*------------------------------------------------------------*/
94 
95  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
99  mn_behind,
100  A00, rs_A, cs_A,
101  a10t, cs_A );
102 
103  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
105  mn_behind,
106  buff_m1,
107  a10t, cs_A,
108  a10t, cs_A,
109  buff_1,
110  alpha11 );
111 
112  // r_val = FLA_Sqrt( alpha11 );
113  // if ( r_val != FLA_SUCCESS )
114  // return ( FLA_Obj_length( A00 ) + 1 );
115  bl1_ssqrte( alpha11, &e_val );
116  if ( e_val != FLA_SUCCESS ) return mn_behind;
117 
118  /*------------------------------------------------------------*/
119 
120  }
121 
122  return FLA_SUCCESS;
123 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
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
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
void bl1_sdots(conj1_t conj, int n, float *alpha, float *x, int incx, float *y, int incy, float *beta, float *rho)
Definition: bl1_dots.c:13
Definition: blis_type_defs.h:56
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:62

◆ FLA_Chol_l_ops_var2()

FLA_Error FLA_Chol_l_ops_var2 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)

References bl1_sdots(), bl1_sgemv(), bl1_sinvscalv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var2().

77 {
78  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
79  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
80  int i;
81  FLA_Error e_val;
82 
83  for ( i = 0; i < mn_A; ++i )
84  {
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 
90  int mn_ahead = mn_A - i - 1;
91  int mn_behind = i;
92 
93  /*------------------------------------------------------------*/
94 
95  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
97  mn_behind,
98  buff_m1,
99  a10t, cs_A,
100  a10t, cs_A,
101  buff_1,
102  alpha11 );
103 
104  // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A20, a10t, FLA_ONE, a21 );
107  mn_ahead,
108  mn_behind,
109  buff_m1,
110  A20, rs_A, cs_A,
111  a10t, cs_A,
112  buff_1,
113  a21, rs_A );
114 
115  // r_val = FLA_Sqrt( alpha11 );
116  // if ( r_val != FLA_SUCCESS )
117  // return ( FLA_Obj_length( A00 ) + 1 );
118  bl1_ssqrte( alpha11, &e_val );
119  if ( e_val != FLA_SUCCESS ) return mn_behind;
120 
121  // FLA_Inv_scal_external( alpha11, a21 );
123  mn_ahead,
124  alpha11,
125  a21, rs_A );
126 
127  /*------------------------------------------------------------*/
128 
129  }
130 
131  return FLA_SUCCESS;
132 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
void bl1_sinvscalv(conj1_t conj, int n, float *alpha, float *x, int incx)
Definition: bl1_invscalv.c:13
void bl1_sgemv(trans1_t transa, conj1_t conjx, int m, int n, float *alpha, float *a, int a_rs, int a_cs, float *x, int incx, float *beta, float *y, int incy)
Definition: bl1_gemv.c:13
void bl1_sdots(conj1_t conj, int n, float *alpha, float *x, int incx, float *y, int incy, float *beta, float *rho)
Definition: bl1_dots.c:13
Definition: blis_type_defs.h:54
int i
Definition: bl1_axmyv2.c:145

◆ FLA_Chol_l_ops_var3()

FLA_Error FLA_Chol_l_ops_var3 ( int  mn_A,
float *  A,
int  rs_A,
int  cs_A 
)

References bl1_sinvscalv(), bl1_ssyr(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, FLA_MINUS_ONE, and i.

Referenced by FLA_Chol_l_opt_var3().

77 {
78  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
79  int i;
80  FLA_Error e_val;
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  int mn_behind = i;
90 
91  /*------------------------------------------------------------*/
92 
93  // r_val = FLA_Sqrt( alpha11 );
94  // if ( r_val != FLA_SUCCESS )
95  // return ( FLA_Obj_length( A00 ) + 1 );
96  bl1_ssqrte( alpha11, &e_val );
97  if ( e_val != FLA_SUCCESS ) return mn_behind;
98 
99  // FLA_Inv_scal_external( alpha11, a21 );
101  mn_ahead,
102  alpha11,
103  a21, rs_A );
104 
105  // FLA_Her_external( FLA_LOWER_TRIANGULAR, FLA_MINUS_ONE, a21, A22 );
107  mn_ahead,
108  buff_m1,
109  a21, rs_A,
110  A22, rs_A, cs_A );
111 
112  /*------------------------------------------------------------*/
113 
114  }
115 
116  return FLA_SUCCESS;
117 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
int FLA_Error
Definition: FLA_type_defs.h:47
void bl1_sinvscalv(conj1_t conj, int n, float *alpha, float *x, int incx)
Definition: bl1_invscalv.c:13
void bl1_ssyr(uplo1_t uplo, int m, float *alpha, float *x, int incx, float *a, int a_rs, int a_cs)
Definition: bl1_syr.c:13
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:62

◆ FLA_Chol_l_opt_var1()

FLA_Error FLA_Chol_l_opt_var1 ( FLA_Obj  A)

References FLA_Chol_l_opc_var1(), FLA_Chol_l_opd_var1(), FLA_Chol_l_ops_var1(), FLA_Chol_l_opz_var1(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Chol_l().

16 {
17  FLA_Error r_val = FLA_SUCCESS;
18  FLA_Datatype datatype;
19  int mn_A;
20  int rs_A, cs_A;
21 
22  datatype = FLA_Obj_datatype( A );
23 
24  mn_A = FLA_Obj_length( A );
25  rs_A = FLA_Obj_row_stride( A );
26  cs_A = FLA_Obj_col_stride( A );
27 
28 
29  switch ( datatype )
30  {
31  case FLA_FLOAT:
32  {
33  float* buff_A = FLA_FLOAT_PTR( A );
34 
35  r_val = FLA_Chol_l_ops_var1( mn_A,
36  buff_A, rs_A, cs_A );
37 
38  break;
39  }
40 
41  case FLA_DOUBLE:
42  {
43  double* buff_A = FLA_DOUBLE_PTR( A );
44 
45  r_val = FLA_Chol_l_opd_var1( mn_A,
46  buff_A, rs_A, cs_A );
47 
48  break;
49  }
50 
51  case FLA_COMPLEX:
52  {
53  scomplex* buff_A = FLA_COMPLEX_PTR( A );
54 
55  r_val = FLA_Chol_l_opc_var1( mn_A,
56  buff_A, rs_A, cs_A );
57 
58  break;
59  }
60 
61  case FLA_DOUBLE_COMPLEX:
62  {
63  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
64 
65  r_val = FLA_Chol_l_opz_var1( mn_A,
66  buff_A, rs_A, cs_A );
67 
68  break;
69  }
70  }
71 
72  return r_val;
73 }
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Chol_l_ops_var1(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var1.c:77
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
FLA_Error FLA_Chol_l_opz_var1(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var1.c:227
Definition: blis_type_defs.h:132
FLA_Error FLA_Chol_l_opd_var1(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var1.c:127
int FLA_Datatype
Definition: FLA_type_defs.h:49
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
FLA_Error FLA_Chol_l_opc_var1(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var1.c:177
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137

◆ FLA_Chol_l_opt_var2()

FLA_Error FLA_Chol_l_opt_var2 ( FLA_Obj  A)

References FLA_Chol_l_opc_var2(), FLA_Chol_l_opd_var2(), FLA_Chol_l_ops_var2(), FLA_Chol_l_opz_var2(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Chol_l().

14 {
15  FLA_Error r_val = FLA_SUCCESS;
16  FLA_Datatype datatype;
17  int mn_A;
18  int rs_A, cs_A;
19 
20  datatype = FLA_Obj_datatype( A );
21 
22  mn_A = FLA_Obj_length( A );
23  rs_A = FLA_Obj_row_stride( A );
24  cs_A = FLA_Obj_col_stride( A );
25 
26 
27  switch ( datatype )
28  {
29  case FLA_FLOAT:
30  {
31  float* buff_A = FLA_FLOAT_PTR( A );
32 
33  r_val = FLA_Chol_l_ops_var2( mn_A,
34  buff_A, rs_A, cs_A );
35 
36  break;
37  }
38 
39  case FLA_DOUBLE:
40  {
41  double* buff_A = FLA_DOUBLE_PTR( A );
42 
43  r_val = FLA_Chol_l_opd_var2( mn_A,
44  buff_A, rs_A, cs_A );
45 
46  break;
47  }
48 
49  case FLA_COMPLEX:
50  {
51  scomplex* buff_A = FLA_COMPLEX_PTR( A );
52 
53  r_val = FLA_Chol_l_opc_var2( mn_A,
54  buff_A, rs_A, cs_A );
55 
56  break;
57  }
58 
59  case FLA_DOUBLE_COMPLEX:
60  {
61  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
62 
63  r_val = FLA_Chol_l_opz_var2( mn_A,
64  buff_A, rs_A, cs_A );
65 
66  break;
67  }
68  }
69 
70  return r_val;
71 }
FLA_Error FLA_Chol_l_opd_var2(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var2.c:136
FLA_Error FLA_Chol_l_opz_var2(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var2.c:258
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Error FLA_Chol_l_opc_var2(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var2.c:197
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
FLA_Error FLA_Chol_l_ops_var2(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var2.c:75
Definition: blis_type_defs.h:132
int FLA_Datatype
Definition: FLA_type_defs.h:49
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137

◆ FLA_Chol_l_opt_var3()

FLA_Error FLA_Chol_l_opt_var3 ( FLA_Obj  A)

References FLA_Chol_l_opc_var3(), FLA_Chol_l_opd_var3(), FLA_Chol_l_ops_var3(), FLA_Chol_l_opz_var3(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Chol_l().

14 {
15  FLA_Error r_val = FLA_SUCCESS;
16  FLA_Datatype datatype;
17  int mn_A;
18  int rs_A, cs_A;
19 
20  datatype = FLA_Obj_datatype( A );
21 
22  mn_A = FLA_Obj_length( A );
23  rs_A = FLA_Obj_row_stride( A );
24  cs_A = FLA_Obj_col_stride( A );
25 
26 
27  switch ( datatype )
28  {
29  case FLA_FLOAT:
30  {
31  float* buff_A = FLA_FLOAT_PTR( A );
32 
33  r_val = FLA_Chol_l_ops_var3( mn_A,
34  buff_A, rs_A, cs_A );
35 
36  break;
37  }
38 
39  case FLA_DOUBLE:
40  {
41  double* buff_A = FLA_DOUBLE_PTR( A );
42 
43  r_val = FLA_Chol_l_opd_var3( mn_A,
44  buff_A, rs_A, cs_A );
45 
46  break;
47  }
48 
49  case FLA_COMPLEX:
50  {
51  scomplex* buff_A = FLA_COMPLEX_PTR( A );
52 
53  r_val = FLA_Chol_l_opc_var3( mn_A,
54  buff_A, rs_A, cs_A );
55 
56  break;
57  }
58 
59  case FLA_DOUBLE_COMPLEX:
60  {
61  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
62 
63  r_val = FLA_Chol_l_opz_var3( mn_A,
64  buff_A, rs_A, cs_A );
65 
66  break;
67  }
68  }
69 
70  return r_val;
71 }
FLA_Error FLA_Chol_l_opz_var3(int mn_A, dcomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var3.c:214
FLA_Error FLA_Chol_l_ops_var3(int mn_A, float *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var3.c:75
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: blis_type_defs.h:132
int FLA_Datatype
Definition: FLA_type_defs.h:49
FLA_Error FLA_Chol_l_opc_var3(int mn_A, scomplex *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var3.c:167
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137
FLA_Error FLA_Chol_l_opd_var3(int mn_A, double *buff_A, int rs_A, int cs_A)
Definition: FLA_Chol_l_opt_var3.c:121

◆ FLA_Chol_l_opz_var1()

FLA_Error FLA_Chol_l_opz_var1 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)

References bl1_zdots(), bl1_ztrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_LOWER_TRIANGULAR, BLIS1_NONUNIT_DIAG, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var1().

229 {
230  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
231  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
232  int i;
233  FLA_Error e_val;
234 
235  for ( i = 0; i < mn_A; ++i )
236  {
237  dcomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
238  dcomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
239  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
240 
241  int mn_behind = i;
242 
243  /*------------------------------------------------------------*/
244 
245  // FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
249  mn_behind,
250  A00, rs_A, cs_A,
251  a10t, cs_A );
252 
253  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
255  mn_behind,
256  buff_m1,
257  a10t, cs_A,
258  a10t, cs_A,
259  buff_1,
260  alpha11 );
261 
262  // r_val = FLA_Sqrt( alpha11 );
263  // if ( r_val != FLA_SUCCESS )
264  // return ( FLA_Obj_length( A00 ) + 1 );
265  bl1_zsqrte( alpha11, &e_val );
266  if ( e_val != FLA_SUCCESS ) return mn_behind;
267 
268  /*------------------------------------------------------------*/
269 
270  }
271 
272  return FLA_SUCCESS;
273 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
Definition: blis_type_defs.h:56
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:62
void bl1_zdots(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *beta, dcomplex *rho)
Definition: bl1_dots.c:56
Definition: blis_type_defs.h:137
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

◆ FLA_Chol_l_opz_var2()

FLA_Error FLA_Chol_l_opz_var2 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)

References bl1_zdots(), bl1_zgemv(), bl1_zinvscalv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Chol_l_opt_var2().

260 {
261  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
262  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
263  int i;
264  FLA_Error e_val;
265 
266  for ( i = 0; i < mn_A; ++i )
267  {
268  dcomplex* a10t = buff_A + (0 )*cs_A + (i )*rs_A;
269  dcomplex* A20 = buff_A + (0 )*cs_A + (i+1)*rs_A;
270  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
271  dcomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
272 
273  int mn_ahead = mn_A - i - 1;
274  int mn_behind = i;
275 
276  /*------------------------------------------------------------*/
277 
278  // FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
280  mn_behind,
281  buff_m1,
282  a10t, cs_A,
283  a10t, cs_A,
284  buff_1,
285  alpha11 );
286 
287  // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A20, a10t, FLA_ONE, a21 );
290  mn_ahead,
291  mn_behind,
292  buff_m1,
293  A20, rs_A, cs_A,
294  a10t, cs_A,
295  buff_1,
296  a21, rs_A );
297 
298  // r_val = FLA_Sqrt( alpha11 );
299  // if ( r_val != FLA_SUCCESS )
300  // return ( FLA_Obj_length( A00 ) + 1 );
301  bl1_zsqrte( alpha11, &e_val );
302  if ( e_val != FLA_SUCCESS ) return mn_behind;
303 
304  // FLA_Inv_scal_external( alpha11, a21 );
306  mn_ahead,
307  alpha11,
308  a21, rs_A );
309 
310  /*------------------------------------------------------------*/
311 
312  }
313 
314  return FLA_SUCCESS;
315 }
void bl1_zinvscalv(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx)
Definition: bl1_invscalv.c:78
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
Definition: blis_type_defs.h:54
void bl1_zgemv(trans1_t transa, conj1_t conjx, int m, int n, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
Definition: bl1_gemv.c:255
int i
Definition: bl1_axmyv2.c:145
void bl1_zdots(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *beta, dcomplex *rho)
Definition: bl1_dots.c:56
Definition: blis_type_defs.h:137

◆ FLA_Chol_l_opz_var3()

FLA_Error FLA_Chol_l_opz_var3 ( int  mn_A,
dcomplex A,
int  rs_A,
int  cs_A 
)

References bl1_zher(), bl1_zinvscalv(), BLIS1_LOWER_TRIANGULAR, BLIS1_NO_CONJUGATE, FLA_MINUS_ONE, and i.

Referenced by FLA_Chol_l_opt_var3().

216 {
217  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
218  int i;
219  FLA_Error e_val;
220 
221  for ( i = 0; i < mn_A; ++i )
222  {
223  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
224  dcomplex* a21 = buff_A + (i )*cs_A + (i+1)*rs_A;
225  dcomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
226 
227  int mn_ahead = mn_A - i - 1;
228  int mn_behind = i;
229 
230  /*------------------------------------------------------------*/
231 
232  // r_val = FLA_Sqrt( alpha11 );
233  // if ( r_val != FLA_SUCCESS )
234  // return ( FLA_Obj_length( A00 ) + 1 );
235  bl1_zsqrte( alpha11, &e_val );
236  if ( e_val != FLA_SUCCESS ) return mn_behind;
237 
238  // FLA_Inv_scal_external( alpha11, a21 );
240  mn_ahead,
241  alpha11,
242  a21, rs_A );
243 
244  // FLA_Her_external( FLA_LOWER_TRIANGULAR, FLA_MINUS_ONE, a21, A22 );
247  mn_ahead,
248  buff_m1,
249  a21, rs_A,
250  A22, rs_A, cs_A );
251 
252  /*------------------------------------------------------------*/
253 
254  }
255 
256  return FLA_SUCCESS;
257 }
void bl1_zher(uplo1_t uplo, conj1_t conj, int m, double *alpha, dcomplex *x, int incx, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_her.c:101
void bl1_zinvscalv(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx)
Definition: bl1_invscalv.c:78
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
int FLA_Error
Definition: FLA_type_defs.h:47
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:62
Definition: blis_type_defs.h:137

◆ FLA_Chol_l_unb_var1()

FLA_Error FLA_Chol_l_unb_var1 ( FLA_Obj  A)

References FLA_Cont_with_3x3_to_2x2(), FLA_Dotcs_external(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Sqrt(), and FLA_Trsv_external().

Referenced by FLA_Chol_l().

16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  int r_val = FLA_SUCCESS;
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  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
29  /* ************* */ /* ************************** */
30  &a10t, /**/ &alpha11, &a12t,
31  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
32  1, 1, FLA_BR );
33 
34  /*------------------------------------------------------------*/
35 
36  // a10t = a10t * inv( tril( A00 )' )
37  // a10t' = inv( conj( tril( A00 ) ) ) * a10t'
38  FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, FLA_NONUNIT_DIAG, A00, a10t );
39 
40  // alpha11 = alpha11 - a10t * a10t'
41  FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
42 
43  // alpha11 = sqrt( alpha11 )
44  r_val = FLA_Sqrt( alpha11 );
45 
46  if ( r_val != FLA_SUCCESS )
47  return ( FLA_Obj_length( A00 ) );
48 
49  /*------------------------------------------------------------*/
50 
51  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
52  a10t, alpha11, /**/ a12t,
53  /* ************** */ /* ************************ */
54  &ABL, /**/ &ABR, A20, a21, /**/ A22,
55  FLA_TL );
56  }
57 
58  return r_val;
59 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
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
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
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: FLA_type_defs.h:158
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_Sqrt(FLA_Obj alpha)
Definition: FLA_Sqrt.c:13
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Dotcs_external(FLA_Conj conj, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj beta, FLA_Obj rho)
Definition: FLA_Dotcs_external.c:13
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

◆ FLA_Chol_l_unb_var2()

FLA_Error FLA_Chol_l_unb_var2 ( FLA_Obj  A)

References FLA_Cont_with_3x3_to_2x2(), FLA_Dotcs_external(), FLA_Gemvc_external(), FLA_Inv_scal_external(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), and FLA_Sqrt().

Referenced by FLA_Chol_l().

16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  int r_val = FLA_SUCCESS;
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  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
29  /* ************* */ /* ************************** */
30  &a10t, /**/ &alpha11, &a12t,
31  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
32  1, 1, FLA_BR );
33 
34  /*------------------------------------------------------------*/
35 
36  // alpha11 = alpha11 - a10t * a10t'
37  FLA_Dotcs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, a10t, FLA_ONE, alpha11 );
38 
39  // a21 = a21 - A20 * a10t'
40  FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A20, a10t, FLA_ONE, a21 );
41 
42  // alpha11 = sqrt( alpha11 )
43  r_val = FLA_Sqrt( alpha11 );
44 
45  if ( r_val != FLA_SUCCESS )
46  return ( FLA_Obj_length( A00 ) );
47 
48  // a21 = a21 / alpha11
49  FLA_Inv_scal_external( alpha11, a21 );
50 
51  /*------------------------------------------------------------*/
52 
53  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
54  a10t, alpha11, /**/ a12t,
55  /* ************** */ /* ************************ */
56  &ABL, /**/ &ABR, A20, a21, /**/ A22,
57  FLA_TL );
58  }
59 
60  return r_val;
61 }
FLA_Error FLA_Inv_scal_external(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal_external.c:13
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
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
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
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: FLA_type_defs.h:158
FLA_Error FLA_Gemvc_external(FLA_Trans transa, FLA_Conj conjx, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
Definition: FLA_Gemvc_external.c:13
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_Sqrt(FLA_Obj alpha)
Definition: FLA_Sqrt.c:13
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Dotcs_external(FLA_Conj conj, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj beta, FLA_Obj rho)
Definition: FLA_Dotcs_external.c:13

◆ FLA_Chol_l_unb_var3()

FLA_Error FLA_Chol_l_unb_var3 ( FLA_Obj  A)

References FLA_Cont_with_3x3_to_2x2(), FLA_Her_external(), FLA_Inv_scal_external(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), and FLA_Sqrt().

Referenced by FLA_Chol_l().

16 {
17  FLA_Obj ATL, ATR, A00, a01, A02,
18  ABL, ABR, a10t, alpha11, a12t,
19  A20, a21, A22;
20 
21  int r_val = FLA_SUCCESS;
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  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
29  /* ************* */ /* ************************** */
30  &a10t, /**/ &alpha11, &a12t,
31  ABL, /**/ ABR, &A20, /**/ &a21, &A22,
32  1, 1, FLA_BR );
33 
34  /*------------------------------------------------------------*/
35 
36  // alpha11 = sqrt( alpha11 )
37  r_val = FLA_Sqrt( alpha11 );
38 
39  if ( r_val != FLA_SUCCESS )
40  return ( FLA_Obj_length( A00 ) );
41 
42  // a21 = a21 / alpha11
43  FLA_Inv_scal_external( alpha11, a21 );
44 
45  // A22 = A22 - a21 * a21'
46  FLA_Her_external( FLA_LOWER_TRIANGULAR, FLA_MINUS_ONE, a21, A22 );
47 
48  /*------------------------------------------------------------*/
49 
50  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
51  a10t, alpha11, /**/ a12t,
52  /* ************** */ /* ************************ */
53  &ABL, /**/ &ABR, A20, a21, /**/ A22,
54  FLA_TL );
55  }
56 
57  return r_val;
58 }
FLA_Error FLA_Her_external(FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj x, FLA_Obj A)
Definition: FLA_Her_external.c:13
FLA_Error FLA_Inv_scal_external(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal_external.c:13
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
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
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
Definition: FLA_type_defs.h:158
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_Sqrt(FLA_Obj alpha)
Definition: FLA_Sqrt.c:13
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116