libflame  revision_anchor
Functions
FLA_Lyap_n.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_Lyap_n_unb_var1 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_unb_var2 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_unb_var3 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_unb_var4 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_blk_var1 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
 
FLA_Error FLA_Lyap_n_blk_var2 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
 
FLA_Error FLA_Lyap_n_blk_var3 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
 
FLA_Error FLA_Lyap_n_blk_var4 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
 
FLA_Error FLA_Lyap_n_opt_var1 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_ops_var1 (int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opd_var1 (int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opc_var1 (int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opz_var1 (int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opt_var2 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_ops_var2 (int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opd_var2 (int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opc_var2 (int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opz_var2 (int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opt_var3 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_ops_var3 (int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opd_var3 (int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opc_var3 (int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opz_var3 (int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opt_var4 (FLA_Obj isgn, FLA_Obj A, FLA_Obj C)
 
FLA_Error FLA_Lyap_n_ops_var4 (int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opd_var4 (int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opc_var4 (int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
 
FLA_Error FLA_Lyap_n_opz_var4 (int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
 

Function Documentation

◆ FLA_Lyap_n_blk_var1()

FLA_Error FLA_Lyap_n_blk_var1 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C,
FLA_Obj  scale,
fla_lyap_t cntl 
)

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Hemm_internal(), FLA_Her2k_internal(), FLA_Lyap_internal(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), and FLA_Sylv_internal().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, A01, A02,
16  ABL, ABR, A10, A11, A12,
17  A20, A21, A22;
18  FLA_Obj CTL, CTR, C00, C01, C02,
19  CBL, CBR, C10, C11, C12,
20  C20, C21, C22;
21  dim_t b;
22 
23  FLA_Part_2x2( A, &ATL, &ATR,
24  &ABL, &ABR, 0, 0, FLA_BR );
25 
26  FLA_Part_2x2( C, &CTL, &CTR,
27  &CBL, &CBR, 0, 0, FLA_BR );
28 
29  while ( FLA_Obj_length( CTL ) > 0 ){
30 
31  b = FLA_Determine_blocksize( CTL, FLA_TL, FLA_Cntl_blocksize( cntl ) );
32 
33  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &A01, /**/ &A02,
34  &A10, &A11, /**/ &A12,
35  /* ************* */ /* ******************** */
36  ABL, /**/ ABR, &A20, &A21, /**/ &A22,
37  b, b, FLA_TL );
38 
39  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &C01, /**/ &C02,
40  &C10, &C11, /**/ &C12,
41  /* ************* */ /* ******************** */
42  CBL, /**/ CBR, &C20, &C21, /**/ &C22,
43  b, b, FLA_TL );
44 
45  /*------------------------------------------------------------*/
46 
47  // C12 = isgn * C12 - A12 * C22;
48  // C12 = sylv( A11, A22', C12 );
49  FLA_Hemm_internal( FLA_RIGHT, FLA_UPPER_TRIANGULAR,
50  FLA_MINUS_ONE, C22, A12, isgn, C12,
51  FLA_Cntl_sub_hemm( cntl ) );
52  FLA_Sylv_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
53  FLA_ONE, A11, A22, C12, scale,
54  FLA_Cntl_sub_sylv( cntl ) );
55 
56  // C11 = isgn * C11 - A12 * C12' - C12 * A12';
57  FLA_Her2k_internal( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE,
58  FLA_MINUS_ONE, A12, C12, isgn, C11,
59  FLA_Cntl_sub_her2k( cntl ) );
60 
61  // C11 = lyap_n( A11, C11 );
62  FLA_Lyap_internal( FLA_NO_TRANSPOSE, FLA_ONE, A11, C11, scale,
63  FLA_Cntl_sub_lyap( cntl ) );
64 
65  /*------------------------------------------------------------*/
66 
67  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ A01, A02,
68  /* ************** */ /* ****************** */
69  A10, /**/ A11, A12,
70  &ABL, /**/ &ABR, A20, /**/ A21, A22,
71  FLA_BR );
72 
73  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ C01, C02,
74  /* ************** */ /* ****************** */
75  C10, /**/ C11, C12,
76  &CBL, /**/ &CBR, C20, /**/ C21, C22,
77  FLA_BR );
78  }
79 
80  return FLA_SUCCESS;
81 }
unsigned long dim_t
Definition: FLA_type_defs.h:71
FLA_Error FLA_Sylv_internal(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale, fla_sylv_t *cntl)
Definition: FLA_Sylv_internal.c:16
FLA_Error FLA_Her2k_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
Definition: FLA_Her2k_internal.c:16
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_Hemm_internal(FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
Definition: FLA_Hemm_internal.c:16
FLA_Error FLA_Lyap_internal(FLA_Trans trans, FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
Definition: FLA_Lyap_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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116

◆ FLA_Lyap_n_blk_var2()

FLA_Error FLA_Lyap_n_blk_var2 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C,
FLA_Obj  scale,
fla_lyap_t cntl 
)

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_Hemm_internal(), FLA_Her2k_internal(), FLA_Lyap_internal(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), and FLA_Sylv_internal().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, A01, A02,
16  ABL, ABR, A10, A11, A12,
17  A20, A21, A22;
18  FLA_Obj CTL, CTR, C00, C01, C02,
19  CBL, CBR, C10, C11, C12,
20  C20, C21, C22;
21  dim_t b;
22 
23  FLA_Part_2x2( A, &ATL, &ATR,
24  &ABL, &ABR, 0, 0, FLA_BR );
25 
26  FLA_Part_2x2( C, &CTL, &CTR,
27  &CBL, &CBR, 0, 0, FLA_BR );
28 
29  while ( FLA_Obj_length( CTL ) > 0 ){
30 
31  b = FLA_Determine_blocksize( CTL, FLA_TL, FLA_Cntl_blocksize( cntl ) );
32 
33  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &A01, /**/ &A02,
34  &A10, &A11, /**/ &A12,
35  /* ************* */ /* ******************** */
36  ABL, /**/ ABR, &A20, &A21, /**/ &A22,
37  b, b, FLA_TL );
38 
39  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &C01, /**/ &C02,
40  &C10, &C11, /**/ &C12,
41  /* ************* */ /* ******************** */
42  CBL, /**/ CBR, &C20, &C21, /**/ &C22,
43  b, b, FLA_TL );
44 
45  /*------------------------------------------------------------*/
46 
47  // C12 = sylv( A11, A22', C12 );
48  FLA_Sylv_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
49  FLA_ONE, A11, A22, C12, scale,
50  FLA_Cntl_sub_sylv( cntl ) );
51 
52  // C11 = isgn * C11 - A12 * C12' - C12 * A12';
53  // C11 = lyap_n( A11, C11 );
54  FLA_Her2k_internal( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE,
55  FLA_MINUS_ONE, A12, C12, isgn, C11,
56  FLA_Cntl_sub_her2k( cntl ) );
57  FLA_Lyap_internal( FLA_NO_TRANSPOSE, FLA_ONE, A11, C11, scale,
58  FLA_Cntl_sub_lyap( cntl ) );
59 
60  // C02 = C02 - A01 * C12;
61  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
62  FLA_MINUS_ONE, A01, C12, FLA_ONE, C02,
63  FLA_Cntl_sub_gemm1( cntl ) );
64 
65  // C01 = isgn * C01 - A01 * C11;
66  // C01 = C01 - A02 * C12';
67  FLA_Hemm_internal( FLA_RIGHT, FLA_UPPER_TRIANGULAR,
68  FLA_MINUS_ONE, C11, A01, isgn, C01,
69  FLA_Cntl_sub_hemm( cntl ) );
70  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
71  FLA_MINUS_ONE, A02, C12, FLA_ONE, C01,
72  FLA_Cntl_sub_gemm2( cntl ) );
73 
74  /*------------------------------------------------------------*/
75 
76  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ A01, A02,
77  /* ************** */ /* ****************** */
78  A10, /**/ A11, A12,
79  &ABL, /**/ &ABR, A20, /**/ A21, A22,
80  FLA_BR );
81 
82  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ C01, C02,
83  /* ************** */ /* ****************** */
84  C10, /**/ C11, C12,
85  &CBL, /**/ &CBR, C20, /**/ C21, C22,
86  FLA_BR );
87  }
88 
89  return FLA_SUCCESS;
90 }
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_Error FLA_Sylv_internal(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale, fla_sylv_t *cntl)
Definition: FLA_Sylv_internal.c:16
FLA_Error FLA_Her2k_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
Definition: FLA_Her2k_internal.c:16
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_Hemm_internal(FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
Definition: FLA_Hemm_internal.c:16
FLA_Error FLA_Lyap_internal(FLA_Trans trans, FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
Definition: FLA_Lyap_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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116

◆ FLA_Lyap_n_blk_var3()

FLA_Error FLA_Lyap_n_blk_var3 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C,
FLA_Obj  scale,
fla_lyap_t cntl 
)

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_Hemm_internal(), FLA_Her2k_internal(), FLA_Lyap_internal(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), and FLA_Sylv_internal().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, A01, A02,
16  ABL, ABR, A10, A11, A12,
17  A20, A21, A22;
18  FLA_Obj CTL, CTR, C00, C01, C02,
19  CBL, CBR, C10, C11, C12,
20  C20, C21, C22;
21  dim_t b;
22 
23  FLA_Part_2x2( A, &ATL, &ATR,
24  &ABL, &ABR, 0, 0, FLA_BR );
25 
26  FLA_Part_2x2( C, &CTL, &CTR,
27  &CBL, &CBR, 0, 0, FLA_BR );
28 
29  while ( FLA_Obj_length( CTL ) > 0 ){
30 
31  b = FLA_Determine_blocksize( CTL, FLA_TL, FLA_Cntl_blocksize( cntl ) );
32 
33  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &A01, /**/ &A02,
34  &A10, &A11, /**/ &A12,
35  /* ************* */ /* ******************** */
36  ABL, /**/ ABR, &A20, &A21, /**/ &A22,
37  b, b, FLA_TL );
38 
39  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &C01, /**/ &C02,
40  &C10, &C11, /**/ &C12,
41  /* ************* */ /* ******************** */
42  CBL, /**/ CBR, &C20, &C21, /**/ &C22,
43  b, b, FLA_TL );
44 
45  /*------------------------------------------------------------*/
46 
47  // C11 = isgn * C11 - A12 * C12' - C12 * A12';
48  // C11 = lyap_n( A11, C11 );
49  FLA_Her2k_internal( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE,
50  FLA_MINUS_ONE, A12, C12, isgn, C11,
51  FLA_Cntl_sub_her2k( cntl ) );
52  FLA_Lyap_internal( FLA_NO_TRANSPOSE, FLA_ONE, A11, C11, scale,
53  FLA_Cntl_sub_lyap( cntl ) );
54 
55  // C01 = isgn * C01 - C02 * A12' - A02 * C12';
56  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
57  FLA_MINUS_ONE, C02, A12, isgn, C01,
58  FLA_Cntl_sub_gemm1( cntl ) );
59  FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
60  FLA_MINUS_ONE, A02, C12, FLA_ONE, C01,
61  FLA_Cntl_sub_gemm2( cntl ) );
62 
63  // C01 = C01 - A01 * C11;
64  // C01 = sylv( A00, A11', C01 );
65  FLA_Hemm_internal( FLA_RIGHT, FLA_UPPER_TRIANGULAR,
66  FLA_MINUS_ONE, C11, A01, FLA_ONE, C01,
67  FLA_Cntl_sub_hemm( cntl ) );
68  FLA_Sylv_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
69  FLA_ONE, A00, A11, C01, scale,
70  FLA_Cntl_sub_sylv( cntl ) );
71 
72  /*------------------------------------------------------------*/
73 
74  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ A01, A02,
75  /* ************** */ /* ****************** */
76  A10, /**/ A11, A12,
77  &ABL, /**/ &ABR, A20, /**/ A21, A22,
78  FLA_BR );
79 
80  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ C01, C02,
81  /* ************** */ /* ****************** */
82  C10, /**/ C11, C12,
83  &CBL, /**/ &CBR, C20, /**/ C21, C22,
84  FLA_BR );
85  }
86 
87  return FLA_SUCCESS;
88 }
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_Error FLA_Sylv_internal(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale, fla_sylv_t *cntl)
Definition: FLA_Sylv_internal.c:16
FLA_Error FLA_Her2k_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
Definition: FLA_Her2k_internal.c:16
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_Hemm_internal(FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
Definition: FLA_Hemm_internal.c:16
FLA_Error FLA_Lyap_internal(FLA_Trans trans, FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
Definition: FLA_Lyap_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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116

◆ FLA_Lyap_n_blk_var4()

FLA_Error FLA_Lyap_n_blk_var4 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C,
FLA_Obj  scale,
fla_lyap_t cntl 
)

References FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Hemm_internal(), FLA_Her2k_internal(), FLA_Lyap_internal(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal_internal(), and FLA_Sylv_internal().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, A01, A02,
16  ABL, ABR, A10, A11, A12,
17  A20, A21, A22;
18  FLA_Obj CTL, CTR, C00, C01, C02,
19  CBL, CBR, C10, C11, C12,
20  C20, C21, C22;
21  dim_t b;
22 
23  // C = isgn * C;
24  FLA_Scal_internal( isgn, C,
25  FLA_Cntl_sub_scal( cntl ) );
26 
27  FLA_Part_2x2( A, &ATL, &ATR,
28  &ABL, &ABR, 0, 0, FLA_BR );
29 
30  FLA_Part_2x2( C, &CTL, &CTR,
31  &CBL, &CBR, 0, 0, FLA_BR );
32 
33  while ( FLA_Obj_length( CTL ) > 0 ){
34 
35  b = FLA_Determine_blocksize( CTL, FLA_TL, FLA_Cntl_blocksize( cntl ) );
36 
37  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &A01, /**/ &A02,
38  &A10, &A11, /**/ &A12,
39  /* ************* */ /* ******************** */
40  ABL, /**/ ABR, &A20, &A21, /**/ &A22,
41  b, b, FLA_TL );
42 
43  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &C01, /**/ &C02,
44  &C10, &C11, /**/ &C12,
45  /* ************* */ /* ******************** */
46  CBL, /**/ CBR, &C20, &C21, /**/ &C22,
47  b, b, FLA_TL );
48 
49  /*------------------------------------------------------------*/
50 
51  // C11 = lyap_n( A11, C11 );
52  FLA_Lyap_internal( FLA_NO_TRANSPOSE, FLA_ONE, A11, C11, scale,
53  FLA_Cntl_sub_lyap( cntl ) );
54 
55  // C01 = C01 - A01 * C11;
56  // C01 = sylv( A00, A11', C01 );
57  FLA_Hemm_internal( FLA_RIGHT, FLA_UPPER_TRIANGULAR,
58  FLA_MINUS_ONE, C11, A01, FLA_ONE, C01,
59  FLA_Cntl_sub_hemm( cntl ) );
60  FLA_Sylv_internal( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE,
61  FLA_ONE, A00, A11, C01, scale,
62  FLA_Cntl_sub_sylv( cntl ) );
63 
64  // C00 = C00 - A01 * C01' - C01 * A01';
65  FLA_Her2k_internal( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE,
66  FLA_MINUS_ONE, A01, C01, FLA_ONE, C00,
67  FLA_Cntl_sub_her2k( cntl ) );
68 
69  /*------------------------------------------------------------*/
70 
71  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ A01, A02,
72  /* ************** */ /* ****************** */
73  A10, /**/ A11, A12,
74  &ABL, /**/ &ABR, A20, /**/ A21, A22,
75  FLA_BR );
76 
77  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ C01, C02,
78  /* ************** */ /* ****************** */
79  C10, /**/ C11, C12,
80  &CBL, /**/ &CBR, C20, /**/ C21, C22,
81  FLA_BR );
82  }
83 
84  return FLA_SUCCESS;
85 }
unsigned long dim_t
Definition: FLA_type_defs.h:71
FLA_Error FLA_Sylv_internal(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale, fla_sylv_t *cntl)
Definition: FLA_Sylv_internal.c:16
FLA_Error FLA_Her2k_internal(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
Definition: FLA_Her2k_internal.c:16
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_Hemm_internal(FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
Definition: FLA_Hemm_internal.c:16
FLA_Error FLA_Lyap_internal(FLA_Trans trans, FLA_Obj isgn, FLA_Obj A, FLA_Obj C, FLA_Obj scale, fla_lyap_t *cntl)
Definition: FLA_Lyap_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_Scal_internal(FLA_Obj alpha, FLA_Obj A, fla_scal_t *cntl)
Definition: FLA_Scal_internal.c:16
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116

◆ FLA_Lyap_n_opc_var1()

FLA_Error FLA_Lyap_n_opc_var1 ( int  m_AC,
scomplex buff_sgn,
scomplex buff_A,
int  rs_A,
int  cs_A,
scomplex buff_W,
int  rs_W,
int  cs_W,
scomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_ccopymrt(), bl1_cdot2s(), bl1_chemv(), bl1_cscalm(), bl1_cshiftdiag(), bl1_ctrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var1().

300 {
301  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
302  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
303  int i;
304 
306  m_AC,
307  m_AC,
308  buff_sgn,
309  buff_C, rs_C, cs_C );
310 
311  for ( i = m_AC - 1; i >= 0; --i )
312  {
313  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
314  scomplex* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
315  scomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
316 
317  scomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
318  scomplex* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
319  scomplex* C22 = buff_C + (i+1)*cs_C + (i+1)*rs_C;
320 
321  scomplex* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
322 
323  scomplex omega;
324 
325  int m_ahead = m_AC - i - 1;
326 
327  /*------------------------------------------------------------*/
328 
329  // FLA_Hemvc( FLA_UPPER_TRIANGULAR, FLA_CONJUGATE, FLA_MINUS_ONE, C22, a12t, FLA_ONE, c12t );
332  m_ahead,
333  buff_m1,
334  C22, rs_C, cs_C,
335  a12t, cs_A,
336  buff_1,
337  c12t, cs_C );
338 
339  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
340  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
341  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );
344  m_ahead,
345  m_ahead,
346  A22, rs_A, cs_A,
347  W22, rs_W, cs_W );
348 
350  0,
351  m_ahead,
352  m_ahead,
353  alpha11,
354  W22, rs_W, cs_W );
355 
359  m_ahead,
360  W22, rs_W, cs_W,
361  c12t, cs_C );
362 
363  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
365  m_ahead,
366  buff_m1,
367  a12t, cs_A,
368  c12t, cs_C,
369  buff_1,
370  gamma11 );
371 
372  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
373  // FLA_Mult_add( FLA_ONE, alpha11, omega );
374  // FLA_Inv_scal( omega, gamma11 );
375  bl1_ccopyconj( alpha11, &omega );
376  bl1_cadd3( alpha11, &omega, &omega );
377  bl1_cinvscals( &omega, gamma11 );
378 
379  /*------------------------------------------------------------*/
380  }
381 
382  return FLA_SUCCESS;
383 }
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
Definition: blis_type_defs.h:81
void bl1_chemv(uplo1_t uplo, conj1_t conj, int m, scomplex *alpha, scomplex *a, int a_rs, int a_cs, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
Definition: bl1_hemv.c:35
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
Definition: blis_type_defs.h:132
void bl1_cscalm(conj1_t conj, int m, int n, scomplex *alpha, scomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:169
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_cshiftdiag(conj1_t conj, int offset, int m, int n, scomplex *sigma, scomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:97
void bl1_ccopymrt(uplo1_t uplo, trans1_t trans, int m, int n, scomplex *a, int a_rs, int a_cs, scomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:223
Definition: blis_type_defs.h:63
void bl1_cdot2s(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *beta, scomplex *rho)
Definition: bl1_dot2s.c:39

◆ FLA_Lyap_n_opc_var2()

FLA_Error FLA_Lyap_n_opc_var2 ( int  m_AC,
scomplex buff_sgn,
scomplex buff_A,
int  rs_A,
int  cs_A,
scomplex buff_W,
int  rs_W,
int  cs_W,
scomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_caxpysv(), bl1_ccopymrt(), bl1_cdot2s(), bl1_cgemv(), bl1_cger(), bl1_cscalm(), bl1_cshiftdiag(), bl1_ctrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var2().

346 {
347  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
348  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
349  int i;
350 
352  m_AC,
353  m_AC,
354  buff_sgn,
355  buff_C, rs_C, cs_C );
356 
357  for ( i = m_AC - 1; i >= 0; --i )
358  {
359  scomplex* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
360  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
361  scomplex* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
362  scomplex* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
363  scomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
364 
365  scomplex* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
366  scomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
367  scomplex* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
368  scomplex* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
369 
370  scomplex* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
371 
372  scomplex omega;
373 
374  int m_behind = i;
375  int m_ahead = m_AC - i - 1;
376 
377  /*------------------------------------------------------------*/
378 
379  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
380  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
381  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );;
384  m_ahead,
385  m_ahead,
386  A22, rs_A, cs_A,
387  W22, rs_W, cs_W );
388 
390  0,
391  m_ahead,
392  m_ahead,
393  alpha11,
394  W22, rs_W, cs_W );
395 
399  m_ahead,
400  W22, rs_W, cs_W,
401  c12t, cs_C );
402 
403  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
405  m_ahead,
406  buff_m1,
407  a12t, cs_A,
408  c12t, cs_C,
409  buff_1,
410  gamma11 );
411 
412  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
413  // FLA_Mult_add( FLA_ONE, alpha11, omega );
414  // FLA_Inv_scal( omega, gamma11 );
415  bl1_ccopyconj( alpha11, &omega );
416  bl1_cadd3( alpha11, &omega, &omega );
417  bl1_cinvscals( &omega, gamma11 );
418 
419  // FLA_Ger( FLA_MINUS_ONE, a01, c12t, C02 );
422  m_behind,
423  m_ahead,
424  buff_m1,
425  a01, rs_A,
426  c12t, cs_C,
427  C02, rs_C, cs_C );
428 
429  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 ););
430  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
431  bl1_caxpysv( m_behind,
432  buff_m1,
433  gamma11,
434  a01, rs_A,
435  buff_1,
436  c01, rs_C );
437 
440  m_behind,
441  m_ahead,
442  buff_m1,
443  A02, rs_A, cs_A,
444  c12t, cs_C,
445  buff_1,
446  c01, rs_C );
447 
448  /*------------------------------------------------------------*/
449  }
450 
451  return FLA_SUCCESS;
452 }
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
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
Definition: blis_type_defs.h:132
void bl1_cscalm(conj1_t conj, int m, int n, scomplex *alpha, scomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:169
void bl1_caxpysv(int n, scomplex *alpha0, scomplex *alpha1, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
Definition: bl1_axpysv.c:51
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_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
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_cshiftdiag(conj1_t conj, int offset, int m, int n, scomplex *sigma, scomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:97
void bl1_ccopymrt(uplo1_t uplo, trans1_t trans, int m, int n, scomplex *a, int a_rs, int a_cs, scomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:223
Definition: blis_type_defs.h:63
void bl1_cdot2s(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *beta, scomplex *rho)
Definition: bl1_dot2s.c:39

◆ FLA_Lyap_n_opc_var3()

FLA_Error FLA_Lyap_n_opc_var3 ( int  m_AC,
scomplex buff_sgn,
scomplex buff_A,
int  rs_A,
int  cs_A,
scomplex buff_W,
int  rs_W,
int  cs_W,
scomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_caxpysv(), bl1_ccopymrt(), bl1_cdot2s(), bl1_cgemv(), bl1_cscalm(), bl1_cshiftdiag(), bl1_ctrsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var3().

348 {
349  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
350  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
351  int i;
352 
354  m_AC,
355  m_AC,
356  buff_sgn,
357  buff_C, rs_C, cs_C );
358 
359  for ( i = m_AC - 1; i >= 0; --i )
360  {
361  scomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
362  scomplex* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
363  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
364  scomplex* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
365  scomplex* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
366 
367  scomplex* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
368  scomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
369  scomplex* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
370  scomplex* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
371 
372  scomplex* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
373 
374  scomplex omega;
375 
376  int m_behind = i;
377  int m_ahead = m_AC - i - 1;
378 
379  /*------------------------------------------------------------*/
380 
381  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
383  m_ahead,
384  buff_m1,
385  a12t, cs_A,
386  c12t, cs_C,
387  buff_1,
388  gamma11 );
389 
390  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
391  // FLA_Mult_add( FLA_ONE, alpha11, omega );
392  // FLA_Inv_scal( omega, gamma11 );
393  bl1_ccopyconj( alpha11, &omega );
394  bl1_cadd3( alpha11, &omega, &omega );
395  bl1_cinvscals( &omega, gamma11 );
396 
397  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
398  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, C02, a12t, FLA_ONE, c01 );
399  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
400  bl1_caxpysv( m_behind,
401  buff_m1,
402  gamma11,
403  a01, rs_A,
404  buff_1,
405  c01, rs_C );
406 
409  m_behind,
410  m_ahead,
411  buff_m1,
412  C02, rs_C, cs_C,
413  a12t, cs_A,
414  buff_1,
415  c01, rs_C );
416 
419  m_behind,
420  m_ahead,
421  buff_m1,
422  A02, rs_A, cs_A,
423  c12t, cs_C,
424  buff_1,
425  c01, rs_C );
426 
427  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
428  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
429  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
432  m_behind,
433  m_behind,
434  A00, rs_A, cs_A,
435  W00, rs_W, cs_W );
436 
438  0,
439  m_behind,
440  m_behind,
441  alpha11,
442  W00, rs_W, cs_W );
443 
447  m_behind,
448  W00, rs_W, cs_W,
449  c01, rs_C );
450 
451  /*------------------------------------------------------------*/
452  }
453 
454  return FLA_SUCCESS;
455 }
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
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: blis_type_defs.h:54
Definition: blis_type_defs.h:132
void bl1_cscalm(conj1_t conj, int m, int n, scomplex *alpha, scomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:169
void bl1_caxpysv(int n, scomplex *alpha0, scomplex *alpha1, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
Definition: bl1_axpysv.c:51
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
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_cshiftdiag(conj1_t conj, int offset, int m, int n, scomplex *sigma, scomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:97
void bl1_ccopymrt(uplo1_t uplo, trans1_t trans, int m, int n, scomplex *a, int a_rs, int a_cs, scomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:223
Definition: blis_type_defs.h:63
void bl1_cdot2s(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *beta, scomplex *rho)
Definition: bl1_dot2s.c:39

◆ FLA_Lyap_n_opc_var4()

FLA_Error FLA_Lyap_n_opc_var4 ( int  m_AC,
scomplex buff_sgn,
scomplex buff_A,
int  rs_A,
int  cs_A,
scomplex buff_W,
int  rs_W,
int  cs_W,
scomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_caxpysv(), bl1_ccopymrt(), bl1_cher2(), bl1_cscalm(), bl1_cshiftdiag(), bl1_ctrsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var4().

296 {
297  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
298  scomplex* buff_m1 = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
299  int i;
300 
302  m_AC,
303  m_AC,
304  buff_sgn,
305  buff_C, rs_C, cs_C );
306 
307  for ( i = m_AC - 1; i >= 0; --i )
308  {
309  scomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
310  scomplex* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
311  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
312 
313  scomplex* C00 = buff_C + (0 )*cs_C + (0 )*rs_C;
314  scomplex* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
315  scomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
316 
317  scomplex* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
318 
319  scomplex omega;
320 
321  int m_behind = i;
322 
323  /*------------------------------------------------------------*/
324 
325  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
326  // FLA_Mult_add( FLA_ONE, alpha11, omega );
327  // FLA_Inv_scal( omega, gamma11 );
328  bl1_ccopyconj( alpha11, &omega );
329  bl1_cadd3( alpha11, &omega, &omega );
330  bl1_cinvscals( &omega, gamma11 );
331 
332  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
333  bl1_caxpysv( m_behind,
334  buff_m1,
335  gamma11,
336  a01, rs_A,
337  buff_1,
338  c01, rs_C );
339 
340  // FLA_Copyrt( BLIS1_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
341  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
342  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
345  m_behind,
346  m_behind,
347  A00, rs_A, cs_A,
348  W00, rs_W, cs_W );
349 
351  0,
352  m_behind,
353  m_behind,
354  alpha11,
355  W00, rs_W, cs_W );
356 
360  m_behind,
361  W00, rs_W, cs_W,
362  c01, rs_C );
363 
364  // FLA_Her2( FLA_UPPER_TRIANGULAR, FLA_MINUS_ONE, a01, c01, C00 );
367  m_behind,
368  buff_m1,
369  a01, rs_A,
370  c01, rs_C,
371  C00, rs_C, cs_C );
372 
373  /*------------------------------------------------------------*/
374  }
375 
376  return FLA_SUCCESS;
377 }
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
Definition: blis_type_defs.h:81
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_cher2(uplo1_t uplo, conj1_t conj, int m, scomplex *alpha, scomplex *x, int incx, scomplex *y, int incy, scomplex *a, int a_rs, int a_cs)
Definition: bl1_her2.c:33
Definition: blis_type_defs.h:54
Definition: blis_type_defs.h:132
void bl1_cscalm(conj1_t conj, int m, int n, scomplex *alpha, scomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:169
void bl1_caxpysv(int n, scomplex *alpha0, scomplex *alpha1, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
Definition: bl1_axpysv.c:51
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_cshiftdiag(conj1_t conj, int offset, int m, int n, scomplex *sigma, scomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:97
void bl1_ccopymrt(uplo1_t uplo, trans1_t trans, int m, int n, scomplex *a, int a_rs, int a_cs, scomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:223
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_opd_var1()

FLA_Error FLA_Lyap_n_opd_var1 ( int  m_AC,
double *  buff_sgn,
double *  buff_A,
int  rs_A,
int  cs_A,
double *  buff_W,
int  rs_W,
int  cs_W,
double *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_dcopymrt(), bl1_ddot2s(), bl1_dhemv(), bl1_dscalm(), bl1_dshiftdiag(), bl1_dtrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var1().

208 {
209  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
210  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
211  int i;
212 
214  m_AC,
215  m_AC,
216  buff_sgn,
217  buff_C, rs_C, cs_C );
218 
219  for ( i = m_AC - 1; i >= 0; --i )
220  {
221  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
222  double* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
223  double* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
224 
225  double* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
226  double* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
227  double* C22 = buff_C + (i+1)*cs_C + (i+1)*rs_C;
228 
229  double* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
230 
231  double omega;
232 
233  int m_ahead = m_AC - i - 1;
234 
235  /*------------------------------------------------------------*/
236 
237  // FLA_Hemvc( FLA_UPPER_TRIANGULAR, FLA_CONJUGATE, FLA_MINUS_ONE, C22, a12t, FLA_ONE, c12t );
240  m_ahead,
241  buff_m1,
242  C22, rs_C, cs_C,
243  a12t, cs_A,
244  buff_1,
245  c12t, cs_C );
246 
247  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
248  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
249  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );
252  m_ahead,
253  m_ahead,
254  A22, rs_A, cs_A,
255  W22, rs_W, cs_W );
256 
258  0,
259  m_ahead,
260  m_ahead,
261  alpha11,
262  W22, rs_W, cs_W );
263 
267  m_ahead,
268  W22, rs_W, cs_W,
269  c12t, cs_C );
270 
271  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
273  m_ahead,
274  buff_m1,
275  a12t, cs_A,
276  c12t, cs_C,
277  buff_1,
278  gamma11 );
279 
280  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
281  // FLA_Mult_add( FLA_ONE, alpha11, omega );
282  // FLA_Inv_scal( omega, gamma11 );
283  bl1_dcopyconj( alpha11, &omega );
284  bl1_dadd3( alpha11, &omega, &omega );
285  bl1_dinvscals( &omega, gamma11 );
286 
287  /*------------------------------------------------------------*/
288  }
289 
290  return FLA_SUCCESS;
291 }
void bl1_dhemv(uplo1_t uplo, conj1_t conj, int m, double *alpha, double *a, int a_rs, int a_cs, double *x, int incx, double *beta, double *y, int incy)
Definition: bl1_hemv.c:24
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_ddot2s(conj1_t conj, int n, double *alpha, double *x, int incx, double *y, int incy, double *beta, double *rho)
Definition: bl1_dot2s.c:26
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_dcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, double *a, int a_rs, int a_cs, double *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:118
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
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_dshiftdiag(conj1_t conj, int offset, int m, int n, double *sigma, double *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:34
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_dscalm(conj1_t conj, int m, int n, double *alpha, double *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:65
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_opd_var2()

FLA_Error FLA_Lyap_n_opd_var2 ( int  m_AC,
double *  buff_sgn,
double *  buff_A,
int  rs_A,
int  cs_A,
double *  buff_W,
int  rs_W,
int  cs_W,
double *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_daxpysv(), bl1_dcopymrt(), bl1_ddot2s(), bl1_dgemv(), bl1_dger(), bl1_dscalm(), bl1_dshiftdiag(), bl1_dtrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var2().

231 {
232  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
233  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
234  int i;
235 
237  m_AC,
238  m_AC,
239  buff_sgn,
240  buff_C, rs_C, cs_C );
241 
242  for ( i = m_AC - 1; i >= 0; --i )
243  {
244  double* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
245  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
246  double* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
247  double* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
248  double* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
249 
250  double* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
251  double* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
252  double* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
253  double* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
254 
255  double* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
256 
257  double omega;
258 
259  int m_behind = i;
260  int m_ahead = m_AC - i - 1;
261 
262  /*------------------------------------------------------------*/
263 
264  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
265  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
266  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );;
269  m_ahead,
270  m_ahead,
271  A22, rs_A, cs_A,
272  W22, rs_W, cs_W );
273 
275  0,
276  m_ahead,
277  m_ahead,
278  alpha11,
279  W22, rs_W, cs_W );
280 
284  m_ahead,
285  W22, rs_W, cs_W,
286  c12t, cs_C );
287 
288  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
290  m_ahead,
291  buff_m1,
292  a12t, cs_A,
293  c12t, cs_C,
294  buff_1,
295  gamma11 );
296 
297  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
298  // FLA_Mult_add( FLA_ONE, alpha11, omega );
299  // FLA_Inv_scal( omega, gamma11 );
300  bl1_dcopyconj( alpha11, &omega );
301  bl1_dadd3( alpha11, &omega, &omega );
302  bl1_dinvscals( &omega, gamma11 );
303 
304  // FLA_Ger( FLA_MINUS_ONE, a01, c12t, C02 );
307  m_behind,
308  m_ahead,
309  buff_m1,
310  a01, rs_A,
311  c12t, cs_C,
312  C02, rs_C, cs_C );
313 
314  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 ););
315  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
316  bl1_daxpysv( m_behind,
317  buff_m1,
318  gamma11,
319  a01, rs_A,
320  buff_1,
321  c01, rs_C );
322 
325  m_behind,
326  m_ahead,
327  buff_m1,
328  A02, rs_A, cs_A,
329  c12t, cs_C,
330  buff_1,
331  c01, rs_C );
332 
333  /*------------------------------------------------------------*/
334  }
335 
336  return FLA_SUCCESS;
337 }
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
void bl1_daxpysv(int n, double *alpha0, double *alpha1, double *x, int incx, double *beta, double *y, int incy)
Definition: bl1_axpysv.c:32
void bl1_ddot2s(conj1_t conj, int n, double *alpha, double *x, int incx, double *y, int incy, double *beta, double *rho)
Definition: bl1_dot2s.c:26
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
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
void bl1_dcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, double *a, int a_rs, int a_cs, double *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:118
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
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_dshiftdiag(conj1_t conj, int offset, int m, int n, double *sigma, double *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:34
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_dscalm(conj1_t conj, int m, int n, double *alpha, double *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:65
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_opd_var3()

FLA_Error FLA_Lyap_n_opd_var3 ( int  m_AC,
double *  buff_sgn,
double *  buff_A,
int  rs_A,
int  cs_A,
double *  buff_W,
int  rs_W,
int  cs_W,
double *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_daxpysv(), bl1_dcopymrt(), bl1_ddot2s(), bl1_dgemv(), bl1_dscalm(), bl1_dshiftdiag(), bl1_dtrsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var3().

232 {
233  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
234  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
235  int i;
236 
238  m_AC,
239  m_AC,
240  buff_sgn,
241  buff_C, rs_C, cs_C );
242 
243  for ( i = m_AC - 1; i >= 0; --i )
244  {
245  double* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
246  double* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
247  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
248  double* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
249  double* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
250 
251  double* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
252  double* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
253  double* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
254  double* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
255 
256  double* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
257 
258  double omega;
259 
260  int m_behind = i;
261  int m_ahead = m_AC - i - 1;
262 
263  /*------------------------------------------------------------*/
264 
265  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
267  m_ahead,
268  buff_m1,
269  a12t, cs_A,
270  c12t, cs_C,
271  buff_1,
272  gamma11 );
273 
274  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
275  // FLA_Mult_add( FLA_ONE, alpha11, omega );
276  // FLA_Inv_scal( omega, gamma11 );
277  bl1_dcopyconj( alpha11, &omega );
278  bl1_dadd3( alpha11, &omega, &omega );
279  bl1_dinvscals( &omega, gamma11 );
280 
281  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
282  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, C02, a12t, FLA_ONE, c01 );
283  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
284  bl1_daxpysv( m_behind,
285  buff_m1,
286  gamma11,
287  a01, rs_A,
288  buff_1,
289  c01, rs_C );
290 
293  m_behind,
294  m_ahead,
295  buff_m1,
296  C02, rs_C, cs_C,
297  a12t, cs_A,
298  buff_1,
299  c01, rs_C );
300 
303  m_behind,
304  m_ahead,
305  buff_m1,
306  A02, rs_A, cs_A,
307  c12t, cs_C,
308  buff_1,
309  c01, rs_C );
310 
311  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
312  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
313  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
316  m_behind,
317  m_behind,
318  A00, rs_A, cs_A,
319  W00, rs_W, cs_W );
320 
322  0,
323  m_behind,
324  m_behind,
325  alpha11,
326  W00, rs_W, cs_W );
327 
331  m_behind,
332  W00, rs_W, cs_W,
333  c01, rs_C );
334 
335  /*------------------------------------------------------------*/
336  }
337 
338  return FLA_SUCCESS;
339 }
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
void bl1_daxpysv(int n, double *alpha0, double *alpha1, double *x, int incx, double *beta, double *y, int incy)
Definition: bl1_axpysv.c:32
void bl1_ddot2s(conj1_t conj, int n, double *alpha, double *x, int incx, double *y, int incy, double *beta, double *rho)
Definition: bl1_dot2s.c:26
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_dcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, double *a, int a_rs, int a_cs, double *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:118
Definition: blis_type_defs.h:54
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_dshiftdiag(conj1_t conj, int offset, int m, int n, double *sigma, double *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:34
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_dscalm(conj1_t conj, int m, int n, double *alpha, double *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:65
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_opd_var4()

FLA_Error FLA_Lyap_n_opd_var4 ( int  m_AC,
double *  buff_sgn,
double *  buff_A,
int  rs_A,
int  cs_A,
double *  buff_W,
int  rs_W,
int  cs_W,
double *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_daxpysv(), bl1_dcopymrt(), bl1_dher2(), bl1_dscalm(), bl1_dshiftdiag(), bl1_dtrsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var4().

206 {
207  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
208  double* buff_m1 = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
209  int i;
210 
212  m_AC,
213  m_AC,
214  buff_sgn,
215  buff_C, rs_C, cs_C );
216 
217  for ( i = m_AC - 1; i >= 0; --i )
218  {
219  double* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
220  double* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
221  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
222 
223  double* C00 = buff_C + (0 )*cs_C + (0 )*rs_C;
224  double* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
225  double* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
226 
227  double* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
228 
229  double omega;
230 
231  int m_behind = i;
232 
233  /*------------------------------------------------------------*/
234 
235  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
236  // FLA_Mult_add( FLA_ONE, alpha11, omega );
237  // FLA_Inv_scal( omega, gamma11 );
238  bl1_dcopyconj( alpha11, &omega );
239  bl1_dadd3( alpha11, &omega, &omega );
240  bl1_dinvscals( &omega, gamma11 );
241 
242  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
243  bl1_daxpysv( m_behind,
244  buff_m1,
245  gamma11,
246  a01, rs_A,
247  buff_1,
248  c01, rs_C );
249 
250  // FLA_Copyrt( BLIS1_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
251  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
252  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
255  m_behind,
256  m_behind,
257  A00, rs_A, cs_A,
258  W00, rs_W, cs_W );
259 
261  0,
262  m_behind,
263  m_behind,
264  alpha11,
265  W00, rs_W, cs_W );
266 
270  m_behind,
271  W00, rs_W, cs_W,
272  c01, rs_C );
273 
274  // FLA_Her2( FLA_UPPER_TRIANGULAR, FLA_MINUS_ONE, a01, c01, C00 );
277  m_behind,
278  buff_m1,
279  a01, rs_A,
280  c01, rs_C,
281  C00, rs_C, cs_C );
282 
283  /*------------------------------------------------------------*/
284  }
285 
286  return FLA_SUCCESS;
287 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_daxpysv(int n, double *alpha0, double *alpha1, double *x, int incx, double *beta, double *y, int incy)
Definition: bl1_axpysv.c:32
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_dcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, double *a, int a_rs, int a_cs, double *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:118
Definition: blis_type_defs.h:54
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_dshiftdiag(conj1_t conj, int offset, int m, int n, double *sigma, double *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:34
void bl1_dher2(uplo1_t uplo, conj1_t conj, int m, double *alpha, double *x, int incx, double *y, int incy, double *a, int a_rs, int a_cs)
Definition: bl1_her2.c:23
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
void bl1_dscalm(conj1_t conj, int m, int n, double *alpha, double *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:65
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_ops_var1()

FLA_Error FLA_Lyap_n_ops_var1 ( int  m_AC,
float *  buff_sgn,
float *  buff_A,
int  rs_A,
int  cs_A,
float *  buff_W,
int  rs_W,
int  cs_W,
float *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_scopymrt(), bl1_sdot2s(), bl1_shemv(), bl1_sscalm(), bl1_sshiftdiag(), bl1_strsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var1().

116 {
117  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
118  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
119  int i;
120 
122  m_AC,
123  m_AC,
124  buff_sgn,
125  buff_C, rs_C, cs_C );
126 
127  for ( i = m_AC - 1; i >= 0; --i )
128  {
129  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
130  float* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
131  float* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
132 
133  float* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
134  float* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
135  float* C22 = buff_C + (i+1)*cs_C + (i+1)*rs_C;
136 
137  float* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
138 
139  float omega;
140 
141  int m_ahead = m_AC - i - 1;
142 
143  /*------------------------------------------------------------*/
144 
145  // FLA_Hemvc( FLA_UPPER_TRIANGULAR, FLA_CONJUGATE, FLA_MINUS_ONE, C22, a12t, FLA_ONE, c12t );
148  m_ahead,
149  buff_m1,
150  C22, rs_C, cs_C,
151  a12t, cs_A,
152  buff_1,
153  c12t, cs_C );
154 
155  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
156  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
157  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );
160  m_ahead,
161  m_ahead,
162  A22, rs_A, cs_A,
163  W22, rs_W, cs_W );
164 
166  0,
167  m_ahead,
168  m_ahead,
169  alpha11,
170  W22, rs_W, cs_W );
171 
175  m_ahead,
176  W22, rs_W, cs_W,
177  c12t, cs_C );
178 
179  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
181  m_ahead,
182  buff_m1,
183  a12t, cs_A,
184  c12t, cs_C,
185  buff_1,
186  gamma11 );
187 
188  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
189  // FLA_Mult_add( FLA_ONE, alpha11, omega );
190  // FLA_Inv_scal( omega, gamma11 );
191  bl1_scopyconj( alpha11, &omega );
192  bl1_sadd3( alpha11, &omega, &omega );
193  bl1_sinvscals( &omega, gamma11 );
194 
195  /*------------------------------------------------------------*/
196  }
197 
198  return FLA_SUCCESS;
199 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_shemv(uplo1_t uplo, conj1_t conj, int m, float *alpha, float *a, int a_rs, int a_cs, float *x, int incx, float *beta, float *y, int incy)
Definition: bl1_hemv.c:13
void bl1_sshiftdiag(conj1_t conj, int offset, int m, int n, float *sigma, float *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:13
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
void bl1_sscalm(conj1_t conj, int m, int n, float *alpha, float *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:13
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
void bl1_scopymrt(uplo1_t uplo, trans1_t trans, int m, int n, float *a, int a_rs, int a_cs, float *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:13
void bl1_sdot2s(conj1_t conj, int n, float *alpha, float *x, int incx, float *y, int incy, float *beta, float *rho)
Definition: bl1_dot2s.c:13
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_ops_var2()

FLA_Error FLA_Lyap_n_ops_var2 ( int  m_AC,
float *  buff_sgn,
float *  buff_A,
int  rs_A,
int  cs_A,
float *  buff_W,
int  rs_W,
int  cs_W,
float *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_saxpysv(), bl1_scopymrt(), bl1_sdot2s(), bl1_sgemv(), bl1_sger(), bl1_sscalm(), bl1_sshiftdiag(), bl1_strsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var2().

116 {
117  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
118  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
119  int i;
120 
122  m_AC,
123  m_AC,
124  buff_sgn,
125  buff_C, rs_C, cs_C );
126 
127  for ( i = m_AC - 1; i >= 0; --i )
128  {
129  float* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
130  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
131  float* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
132  float* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
133  float* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
134 
135  float* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
136  float* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
137  float* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
138  float* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
139 
140  float* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
141 
142  float omega;
143 
144  int m_behind = i;
145  int m_ahead = m_AC - i - 1;
146 
147  /*------------------------------------------------------------*/
148 
149  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
150  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
151  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );;
154  m_ahead,
155  m_ahead,
156  A22, rs_A, cs_A,
157  W22, rs_W, cs_W );
158 
160  0,
161  m_ahead,
162  m_ahead,
163  alpha11,
164  W22, rs_W, cs_W );
165 
169  m_ahead,
170  W22, rs_W, cs_W,
171  c12t, cs_C );
172 
173  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
175  m_ahead,
176  buff_m1,
177  a12t, cs_A,
178  c12t, cs_C,
179  buff_1,
180  gamma11 );
181 
182  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
183  // FLA_Mult_add( FLA_ONE, alpha11, omega );
184  // FLA_Inv_scal( omega, gamma11 );
185  bl1_scopyconj( alpha11, &omega );
186  bl1_sadd3( alpha11, &omega, &omega );
187  bl1_sinvscals( &omega, gamma11 );
188 
189  // FLA_Ger( FLA_MINUS_ONE, a01, c12t, C02 );
192  m_behind,
193  m_ahead,
194  buff_m1,
195  a01, rs_A,
196  c12t, cs_C,
197  C02, rs_C, cs_C );
198 
199  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 ););
200  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
201  bl1_saxpysv( m_behind,
202  buff_m1,
203  gamma11,
204  a01, rs_A,
205  buff_1,
206  c01, rs_C );
207 
210  m_behind,
211  m_ahead,
212  buff_m1,
213  A02, rs_A, cs_A,
214  c12t, cs_C,
215  buff_1,
216  c01, rs_C );
217 
218  /*------------------------------------------------------------*/
219  }
220 
221  return FLA_SUCCESS;
222 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_saxpysv(int n, float *alpha0, float *alpha1, float *x, int incx, float *beta, float *y, int incy)
Definition: bl1_axpysv.c:13
void bl1_sshiftdiag(conj1_t conj, int offset, int m, int n, float *sigma, float *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:13
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
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_sscalm(conj1_t conj, int m, int n, float *alpha, float *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:13
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
void bl1_scopymrt(uplo1_t uplo, trans1_t trans, int m, int n, float *a, int a_rs, int a_cs, float *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:13
void bl1_sdot2s(conj1_t conj, int n, float *alpha, float *x, int incx, float *y, int incy, float *beta, float *rho)
Definition: bl1_dot2s.c:13
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
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_ops_var3()

FLA_Error FLA_Lyap_n_ops_var3 ( int  m_AC,
float *  buff_sgn,
float *  buff_A,
int  rs_A,
int  cs_A,
float *  buff_W,
int  rs_W,
int  cs_W,
float *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_saxpysv(), bl1_scopymrt(), bl1_sdot2s(), bl1_sgemv(), bl1_sscalm(), bl1_sshiftdiag(), bl1_strsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var3().

116 {
117  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
118  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
119  int i;
120 
122  m_AC,
123  m_AC,
124  buff_sgn,
125  buff_C, rs_C, cs_C );
126 
127  for ( i = m_AC - 1; i >= 0; --i )
128  {
129  float* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
130  float* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
131  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
132  float* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
133  float* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
134 
135  float* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
136  float* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
137  float* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
138  float* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
139 
140  float* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
141 
142  float omega;
143 
144  int m_behind = i;
145  int m_ahead = m_AC - i - 1;
146 
147  /*------------------------------------------------------------*/
148 
149  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
151  m_ahead,
152  buff_m1,
153  a12t, cs_A,
154  c12t, cs_C,
155  buff_1,
156  gamma11 );
157 
158  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
159  // FLA_Mult_add( FLA_ONE, alpha11, omega );
160  // FLA_Inv_scal( omega, gamma11 );
161  bl1_scopyconj( alpha11, &omega );
162  bl1_sadd3( alpha11, &omega, &omega );
163  bl1_sinvscals( &omega, gamma11 );
164 
165  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
166  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, C02, a12t, FLA_ONE, c01 );
167  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
168  bl1_saxpysv( m_behind,
169  buff_m1,
170  gamma11,
171  a01, rs_A,
172  buff_1,
173  c01, rs_C );
174 
177  m_behind,
178  m_ahead,
179  buff_m1,
180  C02, rs_C, cs_C,
181  a12t, cs_A,
182  buff_1,
183  c01, rs_C );
184 
187  m_behind,
188  m_ahead,
189  buff_m1,
190  A02, rs_A, cs_A,
191  c12t, cs_C,
192  buff_1,
193  c01, rs_C );
194 
195  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
196  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
197  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
200  m_behind,
201  m_behind,
202  A00, rs_A, cs_A,
203  W00, rs_W, cs_W );
204 
206  0,
207  m_behind,
208  m_behind,
209  alpha11,
210  W00, rs_W, cs_W );
211 
215  m_behind,
216  W00, rs_W, cs_W,
217  c01, rs_C );
218 
219  /*------------------------------------------------------------*/
220  }
221 
222  return FLA_SUCCESS;
223 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_saxpysv(int n, float *alpha0, float *alpha1, float *x, int incx, float *beta, float *y, int incy)
Definition: bl1_axpysv.c:13
void bl1_sshiftdiag(conj1_t conj, int offset, int m, int n, float *sigma, float *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:13
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
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_sscalm(conj1_t conj, int m, int n, float *alpha, float *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:13
Definition: blis_type_defs.h:54
void bl1_scopymrt(uplo1_t uplo, trans1_t trans, int m, int n, float *a, int a_rs, int a_cs, float *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:13
void bl1_sdot2s(conj1_t conj, int n, float *alpha, float *x, int incx, float *y, int incy, float *beta, float *rho)
Definition: bl1_dot2s.c:13
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_ops_var4()

FLA_Error FLA_Lyap_n_ops_var4 ( int  m_AC,
float *  buff_sgn,
float *  buff_A,
int  rs_A,
int  cs_A,
float *  buff_W,
int  rs_W,
int  cs_W,
float *  buff_C,
int  rs_C,
int  cs_C 
)

References bl1_saxpysv(), bl1_scopymrt(), bl1_sher2(), bl1_sscalm(), bl1_sshiftdiag(), bl1_strsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var4().

116 {
117  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
118  float* buff_m1 = FLA_FLOAT_PTR( FLA_MINUS_ONE );
119  int i;
120 
122  m_AC,
123  m_AC,
124  buff_sgn,
125  buff_C, rs_C, cs_C );
126 
127  for ( i = m_AC - 1; i >= 0; --i )
128  {
129  float* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
130  float* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
131  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
132 
133  float* C00 = buff_C + (0 )*cs_C + (0 )*rs_C;
134  float* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
135  float* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
136 
137  float* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
138 
139  float omega;
140 
141  int m_behind = i;
142 
143  /*------------------------------------------------------------*/
144 
145  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
146  // FLA_Mult_add( FLA_ONE, alpha11, omega );
147  // FLA_Inv_scal( omega, gamma11 );
148  bl1_scopyconj( alpha11, &omega );
149  bl1_sadd3( alpha11, &omega, &omega );
150  bl1_sinvscals( &omega, gamma11 );
151 
152  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
153  bl1_saxpysv( m_behind,
154  buff_m1,
155  gamma11,
156  a01, rs_A,
157  buff_1,
158  c01, rs_C );
159 
160  // FLA_Copyrt( BLIS1_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
161  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
162  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
165  m_behind,
166  m_behind,
167  A00, rs_A, cs_A,
168  W00, rs_W, cs_W );
169 
171  0,
172  m_behind,
173  m_behind,
174  alpha11,
175  W00, rs_W, cs_W );
176 
180  m_behind,
181  W00, rs_W, cs_W,
182  c01, rs_C );
183 
184  // FLA_Her2( FLA_UPPER_TRIANGULAR, FLA_MINUS_ONE, a01, c01, C00 );
187  m_behind,
188  buff_m1,
189  a01, rs_A,
190  c01, rs_C,
191  C00, rs_C, cs_C );
192 
193  /*------------------------------------------------------------*/
194  }
195 
196  return FLA_SUCCESS;
197 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_saxpysv(int n, float *alpha0, float *alpha1, float *x, int incx, float *beta, float *y, int incy)
Definition: bl1_axpysv.c:13
void bl1_sshiftdiag(conj1_t conj, int offset, int m, int n, float *sigma, float *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:13
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
void bl1_sscalm(conj1_t conj, int m, int n, float *alpha, float *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:13
Definition: blis_type_defs.h:54
void bl1_scopymrt(uplo1_t uplo, trans1_t trans, int m, int n, float *a, int a_rs, int a_cs, float *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:13
void bl1_sher2(uplo1_t uplo, conj1_t conj, int m, float *alpha, float *x, int incx, float *y, int incy, float *a, int a_rs, int a_cs)
Definition: bl1_her2.c:13
int i
Definition: bl1_axmyv2.c:145
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:63

◆ FLA_Lyap_n_opt_var1()

FLA_Error FLA_Lyap_n_opt_var1 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Lyap_n_opc_var1(), FLA_Lyap_n_opd_var1(), FLA_Lyap_n_ops_var1(), FLA_Lyap_n_opz_var1(), FLA_Obj_col_stride(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Datatype datatype;
16  int m_AC;
17  int rs_A, cs_A;
18  int rs_W, cs_W;
19  int rs_C, cs_C;
20  FLA_Obj W;
21 
22  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
23 
24  datatype = FLA_Obj_datatype( A );
25 
26  m_AC = FLA_Obj_length( A );
27 
28  rs_A = FLA_Obj_row_stride( A );
29  cs_A = FLA_Obj_col_stride( A );
30 
31  rs_W = FLA_Obj_row_stride( W );
32  cs_W = FLA_Obj_col_stride( W );
33 
34  rs_C = FLA_Obj_row_stride( C );
35  cs_C = FLA_Obj_col_stride( C );
36 
37  switch ( datatype )
38  {
39  case FLA_FLOAT:
40  {
41  float* buff_A = FLA_FLOAT_PTR( A );
42  float* buff_W = FLA_FLOAT_PTR( W );
43  float* buff_C = FLA_FLOAT_PTR( C );
44  float* buff_sgn = FLA_FLOAT_PTR( isgn );
45 
46  FLA_Lyap_n_ops_var1( m_AC,
47  buff_sgn,
48  buff_A, rs_A, cs_A,
49  buff_W, rs_W, cs_W,
50  buff_C, rs_C, cs_C );
51 
52  break;
53  }
54 
55  case FLA_DOUBLE:
56  {
57  double* buff_A = FLA_DOUBLE_PTR( A );
58  double* buff_W = FLA_DOUBLE_PTR( W );
59  double* buff_C = FLA_DOUBLE_PTR( C );
60  double* buff_sgn = FLA_DOUBLE_PTR( isgn );
61 
62  FLA_Lyap_n_opd_var1( m_AC,
63  buff_sgn,
64  buff_A, rs_A, cs_A,
65  buff_W, rs_W, cs_W,
66  buff_C, rs_C, cs_C );
67 
68  break;
69  }
70 
71  case FLA_COMPLEX:
72  {
73  scomplex* buff_A = FLA_COMPLEX_PTR( A );
74  scomplex* buff_W = FLA_COMPLEX_PTR( W );
75  scomplex* buff_C = FLA_COMPLEX_PTR( C );
76  scomplex* buff_sgn = FLA_COMPLEX_PTR( isgn );
77 
78  FLA_Lyap_n_opc_var1( m_AC,
79  buff_sgn,
80  buff_A, rs_A, cs_A,
81  buff_W, rs_W, cs_W,
82  buff_C, rs_C, cs_C );
83 
84  break;
85  }
86 
87  case FLA_DOUBLE_COMPLEX:
88  {
89  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
90  dcomplex* buff_W = FLA_DOUBLE_COMPLEX_PTR( W );
91  dcomplex* buff_C = FLA_DOUBLE_COMPLEX_PTR( C );
92  dcomplex* buff_sgn = FLA_DOUBLE_COMPLEX_PTR( isgn );
93 
94  FLA_Lyap_n_opz_var1( m_AC,
95  buff_sgn,
96  buff_A, rs_A, cs_A,
97  buff_W, rs_W, cs_W,
98  buff_C, rs_C, cs_C );
99 
100  break;
101  }
102  }
103 
104  FLA_Obj_free( &W );
105 
106  return FLA_SUCCESS;
107 }
FLA_Error FLA_Lyap_n_opd_var1(int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var1.c:203
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
FLA_Error FLA_Lyap_n_opc_var1(int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var1.c:295
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Error FLA_Lyap_n_ops_var1(int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var1.c:111
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
Definition: blis_type_defs.h:132
FLA_Error FLA_Lyap_n_opz_var1(int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var1.c:387
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_Lyap_n_opt_var2()

FLA_Error FLA_Lyap_n_opt_var2 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Lyap_n_opc_var2(), FLA_Lyap_n_opd_var2(), FLA_Lyap_n_ops_var2(), FLA_Lyap_n_opz_var2(), FLA_Obj_col_stride(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Datatype datatype;
16  int m_AC;
17  int rs_A, cs_A;
18  int rs_W, cs_W;
19  int rs_C, cs_C;
20  FLA_Obj W;
21 
22  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
23 
24  datatype = FLA_Obj_datatype( A );
25 
26  m_AC = FLA_Obj_length( A );
27 
28  rs_A = FLA_Obj_row_stride( A );
29  cs_A = FLA_Obj_col_stride( A );
30 
31  rs_W = FLA_Obj_row_stride( W );
32  cs_W = FLA_Obj_col_stride( W );
33 
34  rs_C = FLA_Obj_row_stride( C );
35  cs_C = FLA_Obj_col_stride( C );
36 
37  switch ( datatype )
38  {
39  case FLA_FLOAT:
40  {
41  float* buff_A = FLA_FLOAT_PTR( A );
42  float* buff_W = FLA_FLOAT_PTR( W );
43  float* buff_C = FLA_FLOAT_PTR( C );
44  float* buff_sgn = FLA_FLOAT_PTR( isgn );
45 
46  FLA_Lyap_n_ops_var2( m_AC,
47  buff_sgn,
48  buff_A, rs_A, cs_A,
49  buff_W, rs_W, cs_W,
50  buff_C, rs_C, cs_C );
51 
52  break;
53  }
54 
55  case FLA_DOUBLE:
56  {
57  double* buff_A = FLA_DOUBLE_PTR( A );
58  double* buff_W = FLA_DOUBLE_PTR( W );
59  double* buff_C = FLA_DOUBLE_PTR( C );
60  double* buff_sgn = FLA_DOUBLE_PTR( isgn );
61 
62  FLA_Lyap_n_opd_var2( m_AC,
63  buff_sgn,
64  buff_A, rs_A, cs_A,
65  buff_W, rs_W, cs_W,
66  buff_C, rs_C, cs_C );
67 
68  break;
69  }
70 
71  case FLA_COMPLEX:
72  {
73  scomplex* buff_A = FLA_COMPLEX_PTR( A );
74  scomplex* buff_W = FLA_COMPLEX_PTR( W );
75  scomplex* buff_C = FLA_COMPLEX_PTR( C );
76  scomplex* buff_sgn = FLA_COMPLEX_PTR( isgn );
77 
78  FLA_Lyap_n_opc_var2( m_AC,
79  buff_sgn,
80  buff_A, rs_A, cs_A,
81  buff_W, rs_W, cs_W,
82  buff_C, rs_C, cs_C );
83 
84  break;
85  }
86 
87  case FLA_DOUBLE_COMPLEX:
88  {
89  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
90  dcomplex* buff_W = FLA_DOUBLE_COMPLEX_PTR( W );
91  dcomplex* buff_C = FLA_DOUBLE_COMPLEX_PTR( C );
92  dcomplex* buff_sgn = FLA_DOUBLE_COMPLEX_PTR( isgn );
93 
94  FLA_Lyap_n_opz_var2( m_AC,
95  buff_sgn,
96  buff_A, rs_A, cs_A,
97  buff_W, rs_W, cs_W,
98  buff_C, rs_C, cs_C );
99 
100  break;
101  }
102  }
103 
104  FLA_Obj_free( &W );
105 
106  return FLA_SUCCESS;
107 }
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Lyap_n_opz_var2(int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var2.c:456
FLA_Error FLA_Lyap_n_ops_var2(int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var2.c:111
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
Definition: blis_type_defs.h:132
int FLA_Datatype
Definition: FLA_type_defs.h:49
FLA_Error FLA_Lyap_n_opd_var2(int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var2.c:226
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
FLA_Error FLA_Lyap_n_opc_var2(int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var2.c:341
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137

◆ FLA_Lyap_n_opt_var3()

FLA_Error FLA_Lyap_n_opt_var3 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Lyap_n_opc_var3(), FLA_Lyap_n_opd_var3(), FLA_Lyap_n_ops_var3(), FLA_Lyap_n_opz_var3(), FLA_Obj_col_stride(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Datatype datatype;
16  int m_AC;
17  int rs_A, cs_A;
18  int rs_W, cs_W;
19  int rs_C, cs_C;
20  FLA_Obj W;
21 
22  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
23 
24  datatype = FLA_Obj_datatype( A );
25 
26  m_AC = FLA_Obj_length( A );
27 
28  rs_A = FLA_Obj_row_stride( A );
29  cs_A = FLA_Obj_col_stride( A );
30 
31  rs_W = FLA_Obj_row_stride( W );
32  cs_W = FLA_Obj_col_stride( W );
33 
34  rs_C = FLA_Obj_row_stride( C );
35  cs_C = FLA_Obj_col_stride( C );
36 
37  switch ( datatype )
38  {
39  case FLA_FLOAT:
40  {
41  float* buff_A = FLA_FLOAT_PTR( A );
42  float* buff_W = FLA_FLOAT_PTR( W );
43  float* buff_C = FLA_FLOAT_PTR( C );
44  float* buff_sgn = FLA_FLOAT_PTR( isgn );
45 
46  FLA_Lyap_n_ops_var3( m_AC,
47  buff_sgn,
48  buff_A, rs_A, cs_A,
49  buff_W, rs_W, cs_W,
50  buff_C, rs_C, cs_C );
51 
52  break;
53  }
54 
55  case FLA_DOUBLE:
56  {
57  double* buff_A = FLA_DOUBLE_PTR( A );
58  double* buff_W = FLA_DOUBLE_PTR( W );
59  double* buff_C = FLA_DOUBLE_PTR( C );
60  double* buff_sgn = FLA_DOUBLE_PTR( isgn );
61 
62  FLA_Lyap_n_opd_var3( m_AC,
63  buff_sgn,
64  buff_A, rs_A, cs_A,
65  buff_W, rs_W, cs_W,
66  buff_C, rs_C, cs_C );
67 
68  break;
69  }
70 
71  case FLA_COMPLEX:
72  {
73  scomplex* buff_A = FLA_COMPLEX_PTR( A );
74  scomplex* buff_W = FLA_COMPLEX_PTR( W );
75  scomplex* buff_C = FLA_COMPLEX_PTR( C );
76  scomplex* buff_sgn = FLA_COMPLEX_PTR( isgn );
77 
78  FLA_Lyap_n_opc_var3( m_AC,
79  buff_sgn,
80  buff_A, rs_A, cs_A,
81  buff_W, rs_W, cs_W,
82  buff_C, rs_C, cs_C );
83 
84  break;
85  }
86 
87  case FLA_DOUBLE_COMPLEX:
88  {
89  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
90  dcomplex* buff_W = FLA_DOUBLE_COMPLEX_PTR( W );
91  dcomplex* buff_C = FLA_DOUBLE_COMPLEX_PTR( C );
92  dcomplex* buff_sgn = FLA_DOUBLE_COMPLEX_PTR( isgn );
93 
94  FLA_Lyap_n_opz_var3( m_AC,
95  buff_sgn,
96  buff_A, rs_A, cs_A,
97  buff_W, rs_W, cs_W,
98  buff_C, rs_C, cs_C );
99 
100  break;
101  }
102  }
103 
104  FLA_Obj_free( &W );
105 
106  return FLA_SUCCESS;
107 }
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
Definition: blis_type_defs.h:132
FLA_Error FLA_Lyap_n_opd_var3(int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var3.c:227
int FLA_Datatype
Definition: FLA_type_defs.h:49
FLA_Error FLA_Lyap_n_opc_var3(int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var3.c:343
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
FLA_Error FLA_Lyap_n_ops_var3(int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var3.c:111
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137
FLA_Error FLA_Lyap_n_opz_var3(int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var3.c:459

◆ FLA_Lyap_n_opt_var4()

FLA_Error FLA_Lyap_n_opt_var4 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Lyap_n_opc_var4(), FLA_Lyap_n_opd_var4(), FLA_Lyap_n_ops_var4(), FLA_Lyap_n_opz_var4(), FLA_Obj_col_stride(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), and FLA_Obj_row_stride().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Datatype datatype;
16  int m_AC;
17  int rs_A, cs_A;
18  int rs_W, cs_W;
19  int rs_C, cs_C;
20  FLA_Obj W;
21 
22  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
23 
24  datatype = FLA_Obj_datatype( A );
25 
26  m_AC = FLA_Obj_length( A );
27 
28  rs_A = FLA_Obj_row_stride( A );
29  cs_A = FLA_Obj_col_stride( A );
30 
31  rs_W = FLA_Obj_row_stride( W );
32  cs_W = FLA_Obj_col_stride( W );
33 
34  rs_C = FLA_Obj_row_stride( C );
35  cs_C = FLA_Obj_col_stride( C );
36 
37  switch ( datatype )
38  {
39  case FLA_FLOAT:
40  {
41  float* buff_A = FLA_FLOAT_PTR( A );
42  float* buff_W = FLA_FLOAT_PTR( W );
43  float* buff_C = FLA_FLOAT_PTR( C );
44  float* buff_sgn = FLA_FLOAT_PTR( isgn );
45 
46  FLA_Lyap_n_ops_var4( m_AC,
47  buff_sgn,
48  buff_A, rs_A, cs_A,
49  buff_W, rs_W, cs_W,
50  buff_C, rs_C, cs_C );
51 
52  break;
53  }
54 
55  case FLA_DOUBLE:
56  {
57  double* buff_A = FLA_DOUBLE_PTR( A );
58  double* buff_W = FLA_DOUBLE_PTR( W );
59  double* buff_C = FLA_DOUBLE_PTR( C );
60  double* buff_sgn = FLA_DOUBLE_PTR( isgn );
61 
62  FLA_Lyap_n_opd_var4( m_AC,
63  buff_sgn,
64  buff_A, rs_A, cs_A,
65  buff_W, rs_W, cs_W,
66  buff_C, rs_C, cs_C );
67 
68  break;
69  }
70 
71  case FLA_COMPLEX:
72  {
73  scomplex* buff_A = FLA_COMPLEX_PTR( A );
74  scomplex* buff_W = FLA_COMPLEX_PTR( W );
75  scomplex* buff_C = FLA_COMPLEX_PTR( C );
76  scomplex* buff_sgn = FLA_COMPLEX_PTR( isgn );
77 
78  FLA_Lyap_n_opc_var4( m_AC,
79  buff_sgn,
80  buff_A, rs_A, cs_A,
81  buff_W, rs_W, cs_W,
82  buff_C, rs_C, cs_C );
83 
84  break;
85  }
86 
87  case FLA_DOUBLE_COMPLEX:
88  {
89  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
90  dcomplex* buff_W = FLA_DOUBLE_COMPLEX_PTR( W );
91  dcomplex* buff_C = FLA_DOUBLE_COMPLEX_PTR( C );
92  dcomplex* buff_sgn = FLA_DOUBLE_COMPLEX_PTR( isgn );
93 
94  FLA_Lyap_n_opz_var4( m_AC,
95  buff_sgn,
96  buff_A, rs_A, cs_A,
97  buff_W, rs_W, cs_W,
98  buff_C, rs_C, cs_C );
99 
100  break;
101  }
102  }
103 
104  FLA_Obj_free( &W );
105 
106  return FLA_SUCCESS;
107 }
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Error FLA_Lyap_n_ops_var4(int m_AC, float *buff_sgn, float *buff_A, int rs_A, int cs_A, float *buff_W, int rs_W, int cs_W, float *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var4.c:111
FLA_Error FLA_Lyap_n_opc_var4(int m_AC, scomplex *buff_sgn, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_W, int rs_W, int cs_W, scomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var4.c:291
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
FLA_Error FLA_Lyap_n_opz_var4(int m_AC, dcomplex *buff_sgn, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_W, int rs_W, int cs_W, dcomplex *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var4.c:381
Definition: FLA_type_defs.h:158
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
Definition: blis_type_defs.h:132
int FLA_Datatype
Definition: FLA_type_defs.h:49
FLA_Error FLA_Lyap_n_opd_var4(int m_AC, double *buff_sgn, double *buff_A, int rs_A, int cs_A, double *buff_W, int rs_W, int cs_W, double *buff_C, int rs_C, int cs_C)
Definition: FLA_Lyap_n_opt_var4.c:201
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_Lyap_n_opz_var1()

FLA_Error FLA_Lyap_n_opz_var1 ( int  m_AC,
dcomplex buff_sgn,
dcomplex buff_A,
int  rs_A,
int  cs_A,
dcomplex buff_W,
int  rs_W,
int  cs_W,
dcomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_zcopymrt(), bl1_zdot2s(), bl1_zhemv(), bl1_zscalm(), bl1_zshiftdiag(), bl1_ztrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var1().

392 {
393  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
394  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
395  int i;
396 
398  m_AC,
399  m_AC,
400  buff_sgn,
401  buff_C, rs_C, cs_C );
402 
403  for ( i = m_AC - 1; i >= 0; --i )
404  {
405  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
406  dcomplex* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
407  dcomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
408 
409  dcomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
410  dcomplex* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
411  dcomplex* C22 = buff_C + (i+1)*cs_C + (i+1)*rs_C;
412 
413  dcomplex* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
414 
415  dcomplex omega;
416 
417  int m_ahead = m_AC - i - 1;
418 
419  /*------------------------------------------------------------*/
420 
421  // FLA_Hemvc( FLA_UPPER_TRIANGULAR, FLA_CONJUGATE, FLA_MINUS_ONE, C22, a12t, FLA_ONE, c12t );
424  m_ahead,
425  buff_m1,
426  C22, rs_C, cs_C,
427  a12t, cs_A,
428  buff_1,
429  c12t, cs_C );
430 
431  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
432  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
433  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );
436  m_ahead,
437  m_ahead,
438  A22, rs_A, cs_A,
439  W22, rs_W, cs_W );
440 
442  0,
443  m_ahead,
444  m_ahead,
445  alpha11,
446  W22, rs_W, cs_W );
447 
451  m_ahead,
452  W22, rs_W, cs_W,
453  c12t, cs_C );
454 
455  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
457  m_ahead,
458  buff_m1,
459  a12t, cs_A,
460  c12t, cs_C,
461  buff_1,
462  gamma11 );
463 
464  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
465  // FLA_Mult_add( FLA_ONE, alpha11, omega );
466  // FLA_Inv_scal( omega, gamma11 );
467  bl1_zcopyconj( alpha11, &omega );
468  bl1_zadd3( alpha11, &omega, &omega );
469  bl1_zinvscals( &omega, gamma11 );
470 
471  /*------------------------------------------------------------*/
472  }
473 
474  return FLA_SUCCESS;
475 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_zdot2s(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *beta, dcomplex *rho)
Definition: bl1_dot2s.c:70
void bl1_zscalm(conj1_t conj, int m, int n, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:273
Definition: blis_type_defs.h:82
void bl1_zshiftdiag(conj1_t conj, int offset, int m, int n, dcomplex *sigma, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:122
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
Definition: blis_type_defs.h:56
Definition: blis_type_defs.h:54
int i
Definition: bl1_axmyv2.c:145
void bl1_zcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, dcomplex *a, int a_rs, int a_cs, dcomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:328
Definition: blis_type_defs.h:74
void bl1_zhemv(uplo1_t uplo, conj1_t conj, int m, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
Definition: bl1_hemv.c:134
Definition: blis_type_defs.h:63
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_Lyap_n_opz_var2()

FLA_Error FLA_Lyap_n_opz_var2 ( int  m_AC,
dcomplex buff_sgn,
dcomplex buff_A,
int  rs_A,
int  cs_A,
dcomplex buff_W,
int  rs_W,
int  cs_W,
dcomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_zaxpysv(), bl1_zcopymrt(), bl1_zdot2s(), bl1_zgemv(), bl1_zger(), bl1_zscalm(), bl1_zshiftdiag(), bl1_ztrsv(), BLIS1_CONJ_NO_TRANSPOSE, BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var2().

461 {
462  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
463  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
464  int i;
465 
467  m_AC,
468  m_AC,
469  buff_sgn,
470  buff_C, rs_C, cs_C );
471 
472  for ( i = m_AC - 1; i >= 0; --i )
473  {
474  dcomplex* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
475  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
476  dcomplex* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
477  dcomplex* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
478  dcomplex* A22 = buff_A + (i+1)*cs_A + (i+1)*rs_A;
479 
480  dcomplex* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
481  dcomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
482  dcomplex* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
483  dcomplex* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
484 
485  dcomplex* W22 = buff_W + (i+1)*cs_W + (i+1)*rs_W;
486 
487  dcomplex omega;
488 
489  int m_behind = i;
490  int m_ahead = m_AC - i - 1;
491 
492  /*------------------------------------------------------------*/
493 
494  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
495  // FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
496  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );;
499  m_ahead,
500  m_ahead,
501  A22, rs_A, cs_A,
502  W22, rs_W, cs_W );
503 
505  0,
506  m_ahead,
507  m_ahead,
508  alpha11,
509  W22, rs_W, cs_W );
510 
514  m_ahead,
515  W22, rs_W, cs_W,
516  c12t, cs_C );
517 
518  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
520  m_ahead,
521  buff_m1,
522  a12t, cs_A,
523  c12t, cs_C,
524  buff_1,
525  gamma11 );
526 
527  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
528  // FLA_Mult_add( FLA_ONE, alpha11, omega );
529  // FLA_Inv_scal( omega, gamma11 );
530  bl1_zcopyconj( alpha11, &omega );
531  bl1_zadd3( alpha11, &omega, &omega );
532  bl1_zinvscals( &omega, gamma11 );
533 
534  // FLA_Ger( FLA_MINUS_ONE, a01, c12t, C02 );
537  m_behind,
538  m_ahead,
539  buff_m1,
540  a01, rs_A,
541  c12t, cs_C,
542  C02, rs_C, cs_C );
543 
544  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 ););
545  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
546  bl1_zaxpysv( m_behind,
547  buff_m1,
548  gamma11,
549  a01, rs_A,
550  buff_1,
551  c01, rs_C );
552 
555  m_behind,
556  m_ahead,
557  buff_m1,
558  A02, rs_A, cs_A,
559  c12t, cs_C,
560  buff_1,
561  c01, rs_C );
562 
563  /*------------------------------------------------------------*/
564  }
565 
566  return FLA_SUCCESS;
567 }
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
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_zdot2s(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *beta, dcomplex *rho)
Definition: bl1_dot2s.c:70
void bl1_zscalm(conj1_t conj, int m, int n, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:273
Definition: blis_type_defs.h:82
void bl1_zshiftdiag(conj1_t conj, int offset, int m, int n, dcomplex *sigma, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:122
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_zaxpysv(int n, dcomplex *alpha0, dcomplex *alpha1, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
Definition: bl1_axpysv.c:71
Definition: blis_type_defs.h:56
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_zcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, dcomplex *a, int a_rs, int a_cs, dcomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:328
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:63
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_Lyap_n_opz_var3()

FLA_Error FLA_Lyap_n_opz_var3 ( int  m_AC,
dcomplex buff_sgn,
dcomplex buff_A,
int  rs_A,
int  cs_A,
dcomplex buff_W,
int  rs_W,
int  cs_W,
dcomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_zaxpysv(), bl1_zcopymrt(), bl1_zdot2s(), bl1_zgemv(), bl1_zscalm(), bl1_zshiftdiag(), bl1_ztrsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var3().

464 {
465  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
466  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
467  int i;
468 
470  m_AC,
471  m_AC,
472  buff_sgn,
473  buff_C, rs_C, cs_C );
474 
475  for ( i = m_AC - 1; i >= 0; --i )
476  {
477  dcomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
478  dcomplex* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
479  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
480  dcomplex* A02 = buff_A + (i+1)*cs_A + (0 )*rs_A;
481  dcomplex* a12t = buff_A + (i+1)*cs_A + (i )*rs_A;
482 
483  dcomplex* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
484  dcomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
485  dcomplex* C02 = buff_C + (i+1)*cs_C + (0 )*rs_C;
486  dcomplex* c12t = buff_C + (i+1)*cs_C + (i )*rs_C;
487 
488  dcomplex* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
489 
490  dcomplex omega;
491 
492  int m_behind = i;
493  int m_ahead = m_AC - i - 1;
494 
495  /*------------------------------------------------------------*/
496 
497  // FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
499  m_ahead,
500  buff_m1,
501  a12t, cs_A,
502  c12t, cs_C,
503  buff_1,
504  gamma11 );
505 
506  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
507  // FLA_Mult_add( FLA_ONE, alpha11, omega );
508  // FLA_Inv_scal( omega, gamma11 );
509  bl1_zcopyconj( alpha11, &omega );
510  bl1_zadd3( alpha11, &omega, &omega );
511  bl1_zinvscals( &omega, gamma11 );
512 
513  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
514  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, C02, a12t, FLA_ONE, c01 );
515  // FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
516  bl1_zaxpysv( m_behind,
517  buff_m1,
518  gamma11,
519  a01, rs_A,
520  buff_1,
521  c01, rs_C );
522 
525  m_behind,
526  m_ahead,
527  buff_m1,
528  C02, rs_C, cs_C,
529  a12t, cs_A,
530  buff_1,
531  c01, rs_C );
532 
535  m_behind,
536  m_ahead,
537  buff_m1,
538  A02, rs_A, cs_A,
539  c12t, cs_C,
540  buff_1,
541  c01, rs_C );
542 
543  // FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
544  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
545  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
548  m_behind,
549  m_behind,
550  A00, rs_A, cs_A,
551  W00, rs_W, cs_W );
552 
554  0,
555  m_behind,
556  m_behind,
557  alpha11,
558  W00, rs_W, cs_W );
559 
563  m_behind,
564  W00, rs_W, cs_W,
565  c01, rs_C );
566 
567  /*------------------------------------------------------------*/
568  }
569 
570  return FLA_SUCCESS;
571 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_zdot2s(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *beta, dcomplex *rho)
Definition: bl1_dot2s.c:70
void bl1_zscalm(conj1_t conj, int m, int n, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:273
Definition: blis_type_defs.h:82
void bl1_zshiftdiag(conj1_t conj, int offset, int m, int n, dcomplex *sigma, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:122
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_zaxpysv(int n, dcomplex *alpha0, dcomplex *alpha1, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
Definition: bl1_axpysv.c:71
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_zcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, dcomplex *a, int a_rs, int a_cs, dcomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:328
Definition: blis_type_defs.h:74
Definition: blis_type_defs.h:63
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_Lyap_n_opz_var4()

FLA_Error FLA_Lyap_n_opz_var4 ( int  m_AC,
dcomplex buff_sgn,
dcomplex buff_A,
int  rs_A,
int  cs_A,
dcomplex buff_W,
int  rs_W,
int  cs_W,
dcomplex buff_C,
int  rs_C,
int  cs_C 
)

References bl1_zaxpysv(), bl1_zcopymrt(), bl1_zher2(), bl1_zscalm(), bl1_zshiftdiag(), bl1_ztrsv(), BLIS1_CONJUGATE, BLIS1_NO_CONJUGATE, BLIS1_NO_TRANSPOSE, BLIS1_NONUNIT_DIAG, BLIS1_UPPER_TRIANGULAR, FLA_MINUS_ONE, FLA_ONE, and i.

Referenced by FLA_Lyap_n_opt_var4().

386 {
387  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
388  dcomplex* buff_m1 = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
389  int i;
390 
392  m_AC,
393  m_AC,
394  buff_sgn,
395  buff_C, rs_C, cs_C );
396 
397  for ( i = m_AC - 1; i >= 0; --i )
398  {
399  dcomplex* A00 = buff_A + (0 )*cs_A + (0 )*rs_A;
400  dcomplex* a01 = buff_A + (i )*cs_A + (0 )*rs_A;
401  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
402 
403  dcomplex* C00 = buff_C + (0 )*cs_C + (0 )*rs_C;
404  dcomplex* c01 = buff_C + (i )*cs_C + (0 )*rs_C;
405  dcomplex* gamma11 = buff_C + (i )*cs_C + (i )*rs_C;
406 
407  dcomplex* W00 = buff_W + (0 )*cs_W + (0 )*rs_W;
408 
409  dcomplex omega;
410 
411  int m_behind = i;
412 
413  /*------------------------------------------------------------*/
414 
415  // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
416  // FLA_Mult_add( FLA_ONE, alpha11, omega );
417  // FLA_Inv_scal( omega, gamma11 );
418  bl1_zcopyconj( alpha11, &omega );
419  bl1_zadd3( alpha11, &omega, &omega );
420  bl1_zinvscals( &omega, gamma11 );
421 
422  // FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
423  bl1_zaxpysv( m_behind,
424  buff_m1,
425  gamma11,
426  a01, rs_A,
427  buff_1,
428  c01, rs_C );
429 
430  // FLA_Copyrt( BLIS1_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
431  // FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
432  // FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
435  m_behind,
436  m_behind,
437  A00, rs_A, cs_A,
438  W00, rs_W, cs_W );
439 
441  0,
442  m_behind,
443  m_behind,
444  alpha11,
445  W00, rs_W, cs_W );
446 
450  m_behind,
451  W00, rs_W, cs_W,
452  c01, rs_C );
453 
454  // FLA_Her2( FLA_UPPER_TRIANGULAR, FLA_MINUS_ONE, a01, c01, C00 );
457  m_behind,
458  buff_m1,
459  a01, rs_A,
460  c01, rs_C,
461  C00, rs_C, cs_C );
462 
463  /*------------------------------------------------------------*/
464  }
465 
466  return FLA_SUCCESS;
467 }
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
Definition: blis_type_defs.h:81
void bl1_zscalm(conj1_t conj, int m, int n, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_scalm.c:273
Definition: blis_type_defs.h:82
void bl1_zshiftdiag(conj1_t conj, int offset, int m, int n, dcomplex *sigma, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_shiftdiag.c:122
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_zaxpysv(int n, dcomplex *alpha0, dcomplex *alpha1, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
Definition: bl1_axpysv.c:71
Definition: blis_type_defs.h:54
int i
Definition: bl1_axmyv2.c:145
void bl1_zcopymrt(uplo1_t uplo, trans1_t trans, int m, int n, dcomplex *a, int a_rs, int a_cs, dcomplex *b, int b_rs, int b_cs)
Definition: bl1_copymrt.c:328
Definition: blis_type_defs.h:74
void bl1_zher2(uplo1_t uplo, conj1_t conj, int m, dcomplex *alpha, dcomplex *x, int incx, dcomplex *y, int incy, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_her2.c:121
Definition: blis_type_defs.h:63
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_Lyap_n_unb_var1()

FLA_Error FLA_Lyap_n_unb_var1 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Cont_with_3x3_to_2x2(), FLA_Copyrt(), FLA_Copyt(), FLA_Dot2cs(), FLA_Hemvc(), FLA_Inv_scal(), FLA_MINUS_ONE, FLA_Mult_add(), FLA_Obj_create(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal(), FLA_Shift_diag(), and FLA_Trsv().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, a01, A02,
16  ABL, ABR, a10t, alpha11, a12t,
17  A20, a21, A22;
18 
19  FLA_Obj CTL, CTR, C00, c01, C02,
20  CBL, CBR, c10t, gamma11, c12t,
21  C20, c21, C22;
22 
23  FLA_Obj WTL, WTR, W00, w01, W02,
24  WBL, WBR, w10t, omega11, w12t,
25  W20, w21, W22;
26 
27  FLA_Obj W, omega;
28 
29  FLA_Scal( isgn, C );
30 
31  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
32  FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &omega );
33 
34  FLA_Part_2x2( A, &ATL, &ATR,
35  &ABL, &ABR, 0, 0, FLA_BR );
36 
37  FLA_Part_2x2( C, &CTL, &CTR,
38  &CBL, &CBR, 0, 0, FLA_BR );
39 
40  FLA_Part_2x2( W, &WTL, &WTR,
41  &WBL, &WBR, 0, 0, FLA_BR );
42 
43  while ( FLA_Obj_length( CTL ) > 0 ){
44 
45  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &a01, /**/ &A02,
46  &a10t, &alpha11, /**/ &a12t,
47  /* ************* */ /* ************************** */
48  ABL, /**/ ABR, &A20, &a21, /**/ &A22,
49  1, 1, FLA_TL );
50 
51  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &c01, /**/ &C02,
52  &c10t, &gamma11, /**/ &c12t,
53  /* ************* */ /* ************************** */
54  CBL, /**/ CBR, &C20, &c21, /**/ &C22,
55  1, 1, FLA_TL );
56 
57  FLA_Repart_2x2_to_3x3( WTL, /**/ WTR, &W00, &w01, /**/ &W02,
58  &w10t, &omega11, /**/ &w12t,
59  /* ************* */ /* ************************** */
60  WBL, /**/ WBR, &W20, &w21, /**/ &W22,
61  1, 1, FLA_TL );
62 
63  /*------------------------------------------------------------*/
64 
65  // c12t = c12t - a12t * C22;
66  // c12t^T = c12t^T - C22^T a12t^T;
67  FLA_Hemvc( FLA_UPPER_TRIANGULAR, FLA_CONJUGATE, FLA_MINUS_ONE, C22, a12t, FLA_ONE, c12t );
68 
69  // c12t = c12t * inv( triu(A22') + alpha11 * I );
70  // c12t^T = inv( triu(conj(A22)) + alpha11 * I ) * c12t^T;
71  FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
72  FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
73  FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );
74 
75  // gamma11 = gamma11 - a12t * c12t' - c12t * a12t';
76  FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
77 
78  // gamma11 = gamma11 / ( alpha11 + alpha11' );
79  FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
80  FLA_Mult_add( FLA_ONE, alpha11, omega );
81  FLA_Inv_scal( omega, gamma11 );
82 
83  /*------------------------------------------------------------*/
84 
85  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ a01, A02,
86  /* ************** */ /* ************************ */
87  a10t, /**/ alpha11, a12t,
88  &ABL, /**/ &ABR, A20, /**/ a21, A22,
89  FLA_BR );
90 
91  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ c01, C02,
92  /* ************** */ /* ************************ */
93  c10t, /**/ gamma11, c12t,
94  &CBL, /**/ &CBR, C20, /**/ c21, C22,
95  FLA_BR );
96 
97  FLA_Cont_with_3x3_to_2x2( &WTL, /**/ &WTR, W00, /**/ w01, W02,
98  /* ************** */ /* ************************ */
99  w10t, /**/ omega11, w12t,
100  &WBL, /**/ &WBR, W20, /**/ w21, W22,
101  FLA_BR );
102  }
103 
104  FLA_Obj_free( &W );
105  FLA_Obj_free( &omega );
106 
107  return FLA_SUCCESS;
108 }
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition: FLA_Obj.c:55
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
FLA_Error FLA_Trsv(FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
Definition: FLA_Trsv.c:15
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_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyt.c:15
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
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Dot2cs(FLA_Conj conj, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj beta, FLA_Obj rho)
Definition: FLA_Dot2cs.c:13
FLA_Error FLA_Scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scal.c:15
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
FLA_Error FLA_Hemvc(FLA_Uplo uplo, FLA_Conj conja, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
Definition: FLA_Hemvc.c:13
FLA_Error FLA_Shift_diag(FLA_Conj conj, FLA_Obj sigma, FLA_Obj A)
Definition: FLA_Shift_diag.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal.c:13
FLA_Error FLA_Mult_add(FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
Definition: FLA_Mult_add.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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Copyrt(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyrt.c:13

◆ FLA_Lyap_n_unb_var2()

FLA_Error FLA_Lyap_n_unb_var2 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Axpys(), FLA_Cont_with_3x3_to_2x2(), FLA_Copyrt(), FLA_Copyt(), FLA_Dot2cs(), FLA_Gemvc(), FLA_Ger(), FLA_Inv_scal(), FLA_MINUS_ONE, FLA_Mult_add(), FLA_Obj_create(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal(), FLA_Shift_diag(), and FLA_Trsv().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, a01, A02,
16  ABL, ABR, a10t, alpha11, a12t,
17  A20, a21, A22;
18 
19  FLA_Obj CTL, CTR, C00, c01, C02,
20  CBL, CBR, c10t, gamma11, c12t,
21  C20, c21, C22;
22 
23  FLA_Obj WTL, WTR, W00, w01, W02,
24  WBL, WBR, w10t, omega11, w12t,
25  W20, w21, W22;
26 
27  FLA_Obj W, omega;
28 
29  FLA_Scal( isgn, C );
30 
31  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
32  FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &omega );
33 
34  FLA_Part_2x2( A, &ATL, &ATR,
35  &ABL, &ABR, 0, 0, FLA_BR );
36 
37  FLA_Part_2x2( C, &CTL, &CTR,
38  &CBL, &CBR, 0, 0, FLA_BR );
39 
40  FLA_Part_2x2( W, &WTL, &WTR,
41  &WBL, &WBR, 0, 0, FLA_BR );
42 
43  while ( FLA_Obj_length( CTL ) > 0 ){
44 
45  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &a01, /**/ &A02,
46  &a10t, &alpha11, /**/ &a12t,
47  /* ************* */ /* ************************** */
48  ABL, /**/ ABR, &A20, &a21, /**/ &A22,
49  1, 1, FLA_TL );
50 
51  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &c01, /**/ &C02,
52  &c10t, &gamma11, /**/ &c12t,
53  /* ************* */ /* ************************** */
54  CBL, /**/ CBR, &C20, &c21, /**/ &C22,
55  1, 1, FLA_TL );
56 
57  FLA_Repart_2x2_to_3x3( WTL, /**/ WTR, &W00, &w01, /**/ &W02,
58  &w10t, &omega11, /**/ &w12t,
59  /* ************* */ /* ************************** */
60  WBL, /**/ WBR, &W20, &w21, /**/ &W22,
61  1, 1, FLA_TL );
62 
63  /*------------------------------------------------------------*/
64 
65  // c12t = c12t * inv( triu(A22') + alpha11 * I );
66  // c12t^T = inv( triu(conj(A22)) + alpha11 * I ) * c12t^T;
67  FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_CONJ_NO_TRANSPOSE, A22, W22 );
68  FLA_Shift_diag( FLA_NO_CONJUGATE, alpha11, W22 );
69  FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W22, c12t );
70 
71  // gamma11 = gamma11 - a12t * c12t' - c12t * a12t';
72  FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
73 
74  // gamma11 = gamma11 / ( alpha11 + alpha11' );
75  FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
76  FLA_Mult_add( FLA_ONE, alpha11, omega );
77  FLA_Inv_scal( omega, gamma11 );
78 
79  // C02 = C02 - a01 * c12t;
80  FLA_Ger( FLA_MINUS_ONE, a01, c12t, C02 );
81 
82  // c01 = c01 - a01 * gamma11;
83  FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
84 
85  // c01 = c01 - A02 * c12t'
86  FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
87 
88  /*------------------------------------------------------------*/
89 
90  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ a01, A02,
91  /* ************** */ /* ************************ */
92  a10t, /**/ alpha11, a12t,
93  &ABL, /**/ &ABR, A20, /**/ a21, A22,
94  FLA_BR );
95 
96  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ c01, C02,
97  /* ************** */ /* ************************ */
98  c10t, /**/ gamma11, c12t,
99  &CBL, /**/ &CBR, C20, /**/ c21, C22,
100  FLA_BR );
101 
102  FLA_Cont_with_3x3_to_2x2( &WTL, /**/ &WTR, W00, /**/ w01, W02,
103  /* ************** */ /* ************************ */
104  w10t, /**/ omega11, w12t,
105  &WBL, /**/ &WBR, W20, /**/ w21, W22,
106  FLA_BR );
107  }
108 
109  FLA_Obj_free( &W );
110  FLA_Obj_free( &omega );
111 
112  return FLA_SUCCESS;
113 }
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition: FLA_Obj.c:55
FLA_Error FLA_Gemvc(FLA_Trans transa, FLA_Conj conjx, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
Definition: FLA_Gemvc.c:13
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
FLA_Error FLA_Trsv(FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
Definition: FLA_Trsv.c:15
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_Axpys(FLA_Obj alpha0, FLA_Obj alpha1, FLA_Obj A, FLA_Obj beta, FLA_Obj B)
Definition: FLA_Axpys.c:13
FLA_Error FLA_Ger(FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj A)
Definition: FLA_Ger.c:13
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyt.c:15
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
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Dot2cs(FLA_Conj conj, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj beta, FLA_Obj rho)
Definition: FLA_Dot2cs.c:13
FLA_Error FLA_Scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scal.c:15
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
FLA_Error FLA_Shift_diag(FLA_Conj conj, FLA_Obj sigma, FLA_Obj A)
Definition: FLA_Shift_diag.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal.c:13
FLA_Error FLA_Mult_add(FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
Definition: FLA_Mult_add.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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Copyrt(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyrt.c:13

◆ FLA_Lyap_n_unb_var3()

FLA_Error FLA_Lyap_n_unb_var3 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Axpys(), FLA_Cont_with_3x3_to_2x2(), FLA_Copyrt(), FLA_Copyt(), FLA_Dot2cs(), FLA_Gemvc(), FLA_Inv_scal(), FLA_MINUS_ONE, FLA_Mult_add(), FLA_Obj_create(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal(), FLA_Shift_diag(), and FLA_Trsv().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, a01, A02,
16  ABL, ABR, a10t, alpha11, a12t,
17  A20, a21, A22;
18 
19  FLA_Obj CTL, CTR, C00, c01, C02,
20  CBL, CBR, c10t, gamma11, c12t,
21  C20, c21, C22;
22 
23  FLA_Obj WTL, WTR, W00, w01, W02,
24  WBL, WBR, w10t, omega11, w12t,
25  W20, w21, W22;
26 
27  FLA_Obj W, omega;
28 
29  FLA_Scal( isgn, C );
30 
31  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
32  FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &omega );
33 
34  FLA_Part_2x2( A, &ATL, &ATR,
35  &ABL, &ABR, 0, 0, FLA_BR );
36 
37  FLA_Part_2x2( C, &CTL, &CTR,
38  &CBL, &CBR, 0, 0, FLA_BR );
39 
40  FLA_Part_2x2( W, &WTL, &WTR,
41  &WBL, &WBR, 0, 0, FLA_BR );
42 
43  while ( FLA_Obj_length( CTL ) > 0 ){
44 
45  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &a01, /**/ &A02,
46  &a10t, &alpha11, /**/ &a12t,
47  /* ************* */ /* ************************** */
48  ABL, /**/ ABR, &A20, &a21, /**/ &A22,
49  1, 1, FLA_TL );
50 
51  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &c01, /**/ &C02,
52  &c10t, &gamma11, /**/ &c12t,
53  /* ************* */ /* ************************** */
54  CBL, /**/ CBR, &C20, &c21, /**/ &C22,
55  1, 1, FLA_TL );
56 
57  FLA_Repart_2x2_to_3x3( WTL, /**/ WTR, &W00, &w01, /**/ &W02,
58  &w10t, &omega11, /**/ &w12t,
59  /* ************* */ /* ************************** */
60  WBL, /**/ WBR, &W20, &w21, /**/ &W22,
61  1, 1, FLA_TL );
62 
63  /*------------------------------------------------------------*/
64 
65  // gamma11 = gamma11 - a12t * c12t' - c12t * a12t';
66  FLA_Dot2cs( FLA_CONJUGATE, FLA_MINUS_ONE, a12t, c12t, FLA_ONE, gamma11 );
67 
68  // gamma11 = gamma11 / ( alpha11 + alpha11' );
69  FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
70  FLA_Mult_add( FLA_ONE, alpha11, omega );
71  FLA_Inv_scal( omega, gamma11 );
72 
73  // c01 = c01 - a01 * gamma11;
74  // c01 = c01 - C02 * a12t' - A02 * c12t'
75  FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
76  FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, C02, a12t, FLA_ONE, c01 );
77  FLA_Gemvc( FLA_NO_TRANSPOSE, FLA_CONJUGATE, FLA_MINUS_ONE, A02, c12t, FLA_ONE, c01 );
78 
79  // c01 = inv( triu(A00) + conj(alpha) * I ) * c01;
80  FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
81  FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
82  FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
83 
84  /*------------------------------------------------------------*/
85 
86  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ a01, A02,
87  /* ************** */ /* ************************ */
88  a10t, /**/ alpha11, a12t,
89  &ABL, /**/ &ABR, A20, /**/ a21, A22,
90  FLA_BR );
91 
92  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ c01, C02,
93  /* ************** */ /* ************************ */
94  c10t, /**/ gamma11, c12t,
95  &CBL, /**/ &CBR, C20, /**/ c21, C22,
96  FLA_BR );
97 
98  FLA_Cont_with_3x3_to_2x2( &WTL, /**/ &WTR, W00, /**/ w01, W02,
99  /* ************** */ /* ************************ */
100  w10t, /**/ omega11, w12t,
101  &WBL, /**/ &WBR, W20, /**/ w21, W22,
102  FLA_BR );
103  }
104 
105  FLA_Obj_free( &W );
106  FLA_Obj_free( &omega );
107 
108  return FLA_SUCCESS;
109 }
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition: FLA_Obj.c:55
FLA_Error FLA_Gemvc(FLA_Trans transa, FLA_Conj conjx, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
Definition: FLA_Gemvc.c:13
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
FLA_Error FLA_Trsv(FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
Definition: FLA_Trsv.c:15
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_Axpys(FLA_Obj alpha0, FLA_Obj alpha1, FLA_Obj A, FLA_Obj beta, FLA_Obj B)
Definition: FLA_Axpys.c:13
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyt.c:15
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
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Dot2cs(FLA_Conj conj, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj beta, FLA_Obj rho)
Definition: FLA_Dot2cs.c:13
FLA_Error FLA_Scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scal.c:15
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
FLA_Error FLA_Shift_diag(FLA_Conj conj, FLA_Obj sigma, FLA_Obj A)
Definition: FLA_Shift_diag.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal.c:13
FLA_Error FLA_Mult_add(FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
Definition: FLA_Mult_add.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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Copyrt(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyrt.c:13

◆ FLA_Lyap_n_unb_var4()

FLA_Error FLA_Lyap_n_unb_var4 ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  C 
)

References FLA_Axpys(), FLA_Cont_with_3x3_to_2x2(), FLA_Copyrt(), FLA_Copyt(), FLA_Her2(), FLA_Inv_scal(), FLA_MINUS_ONE, FLA_Mult_add(), FLA_Obj_create(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), FLA_ONE, FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_Scal(), FLA_Shift_diag(), and FLA_Trsv().

Referenced by FLA_Lyap_n().

14 {
15  FLA_Obj ATL, ATR, A00, a01, A02,
16  ABL, ABR, a10t, alpha11, a12t,
17  A20, a21, A22;
18 
19  FLA_Obj CTL, CTR, C00, c01, C02,
20  CBL, CBR, c10t, gamma11, c12t,
21  C20, c21, C22;
22 
23  FLA_Obj WTL, WTR, W00, w01, W02,
24  WBL, WBR, w10t, omega11, w12t,
25  W20, w21, W22;
26 
27  FLA_Obj W, omega;
28 
29  FLA_Scal( isgn, C );
30 
31  FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &W );
32  FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &omega );
33 
34  FLA_Part_2x2( A, &ATL, &ATR,
35  &ABL, &ABR, 0, 0, FLA_BR );
36 
37  FLA_Part_2x2( C, &CTL, &CTR,
38  &CBL, &CBR, 0, 0, FLA_BR );
39 
40  FLA_Part_2x2( W, &WTL, &WTR,
41  &WBL, &WBR, 0, 0, FLA_BR );
42 
43  while ( FLA_Obj_length( CTL ) > 0 ){
44 
45  FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, &a01, /**/ &A02,
46  &a10t, &alpha11, /**/ &a12t,
47  /* ************* */ /* ************************** */
48  ABL, /**/ ABR, &A20, &a21, /**/ &A22,
49  1, 1, FLA_TL );
50 
51  FLA_Repart_2x2_to_3x3( CTL, /**/ CTR, &C00, &c01, /**/ &C02,
52  &c10t, &gamma11, /**/ &c12t,
53  /* ************* */ /* ************************** */
54  CBL, /**/ CBR, &C20, &c21, /**/ &C22,
55  1, 1, FLA_TL );
56 
57  FLA_Repart_2x2_to_3x3( WTL, /**/ WTR, &W00, &w01, /**/ &W02,
58  &w10t, &omega11, /**/ &w12t,
59  /* ************* */ /* ************************** */
60  WBL, /**/ WBR, &W20, &w21, /**/ &W22,
61  1, 1, FLA_TL );
62 
63  /*------------------------------------------------------------*/
64 
65  // gamma11 = gamma11 / ( alpha11 + alpha11' );
66  FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, alpha11, omega );
67  FLA_Mult_add( FLA_ONE, alpha11, omega );
68  FLA_Inv_scal( omega, gamma11 );
69 
70  // c01 = c01 - a01 * gamma11;
71  FLA_Axpys( FLA_MINUS_ONE, gamma11, a01, FLA_ONE, c01 );
72 
73  // c01 = inv( triu(A00) + conj(alpha) * I ) * c01;
74  FLA_Copyrt( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, A00, W00 );
75  FLA_Shift_diag( FLA_CONJUGATE, alpha11, W00 );
76  FLA_Trsv( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_NONUNIT_DIAG, W00, c01 );
77 
78  // C00 = C00 - a01 * c01' - c01 * a01';
79  FLA_Her2( FLA_UPPER_TRIANGULAR, FLA_MINUS_ONE, a01, c01, C00 );
80 
81  /*------------------------------------------------------------*/
82 
83  FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, /**/ a01, A02,
84  /* ************** */ /* ************************ */
85  a10t, /**/ alpha11, a12t,
86  &ABL, /**/ &ABR, A20, /**/ a21, A22,
87  FLA_BR );
88 
89  FLA_Cont_with_3x3_to_2x2( &CTL, /**/ &CTR, C00, /**/ c01, C02,
90  /* ************** */ /* ************************ */
91  c10t, /**/ gamma11, c12t,
92  &CBL, /**/ &CBR, C20, /**/ c21, C22,
93  FLA_BR );
94 
95  FLA_Cont_with_3x3_to_2x2( &WTL, /**/ &WTR, W00, /**/ w01, W02,
96  /* ************** */ /* ************************ */
97  w10t, /**/ omega11, w12t,
98  &WBL, /**/ &WBR, W20, /**/ w21, W22,
99  FLA_BR );
100  }
101 
102  FLA_Obj_free( &W );
103  FLA_Obj_free( &omega );
104 
105  return FLA_SUCCESS;
106 }
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition: FLA_Obj.c:55
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
FLA_Obj FLA_MINUS_ONE
Definition: FLA_Init.c:22
FLA_Error FLA_Trsv(FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
Definition: FLA_Trsv.c:15
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_Axpys(FLA_Obj alpha0, FLA_Obj alpha1, FLA_Obj A, FLA_Obj beta, FLA_Obj B)
Definition: FLA_Axpys.c:13
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyt.c:15
FLA_Error FLA_Her2(FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj A)
Definition: FLA_Her2.c:13
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
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scal.c:15
FLA_Error FLA_Obj_create_conf_to(FLA_Trans trans, FLA_Obj old, FLA_Obj *obj)
Definition: FLA_Obj.c:286
FLA_Error FLA_Shift_diag(FLA_Conj conj, FLA_Obj sigma, FLA_Obj A)
Definition: FLA_Shift_diag.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal.c:13
FLA_Error FLA_Mult_add(FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
Definition: FLA_Mult_add.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
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Copyrt(FLA_Uplo uplo, FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyrt.c:13