libflame  revision_anchor
Functions
FLA_Sylv_unb_external.c File Reference

(r)

Functions

FLA_Error FLA_Sylv_unb_external (FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
 
FLA_Error FLA_Sylv_nn_unb_ext (FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
 
FLA_Error FLA_Sylv_nh_unb_ext (FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
 
FLA_Error FLA_Sylv_hn_unb_ext (FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
 
FLA_Error FLA_Sylv_hh_unb_ext (FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
 

Function Documentation

◆ FLA_Sylv_hh_unb_ext()

FLA_Error FLA_Sylv_hh_unb_ext ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  C,
FLA_Obj  scale 
)

References FLA_Sylv_unb_external().

Referenced by FLA_Sylv_hh().

163 {
164  return FLA_Sylv_unb_external( FLA_CONJ_TRANSPOSE, FLA_CONJ_TRANSPOSE, isgn, A, B, C, scale );
165 }
FLA_Error FLA_Sylv_unb_external(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
Definition: FLA_Sylv_unb_external.c:13

◆ FLA_Sylv_hn_unb_ext()

FLA_Error FLA_Sylv_hn_unb_ext ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  C,
FLA_Obj  scale 
)

References FLA_Sylv_unb_external().

Referenced by FLA_Sylv_hn().

158 {
159  return FLA_Sylv_unb_external( FLA_CONJ_TRANSPOSE, FLA_NO_TRANSPOSE, isgn, A, B, C, scale );
160 }
FLA_Error FLA_Sylv_unb_external(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
Definition: FLA_Sylv_unb_external.c:13

◆ FLA_Sylv_nh_unb_ext()

FLA_Error FLA_Sylv_nh_unb_ext ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  C,
FLA_Obj  scale 
)

References FLA_Sylv_unb_external().

Referenced by FLA_Sylv_nh().

153 {
154  return FLA_Sylv_unb_external( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE, isgn, A, B, C, scale );
155 }
FLA_Error FLA_Sylv_unb_external(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
Definition: FLA_Sylv_unb_external.c:13

◆ FLA_Sylv_nn_unb_ext()

FLA_Error FLA_Sylv_nn_unb_ext ( FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  C,
FLA_Obj  scale 
)

References FLA_Sylv_unb_external().

Referenced by FLA_Sylv_nn().

148 {
149  return FLA_Sylv_unb_external( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, isgn, A, B, C, scale );
150 }
FLA_Error FLA_Sylv_unb_external(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
Definition: FLA_Sylv_unb_external.c:13

◆ FLA_Sylv_unb_external()

FLA_Error FLA_Sylv_unb_external ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  isgn,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  C,
FLA_Obj  scale 
)

References F77_ctrsyl(), F77_dtrsyl(), F77_strsyl(), F77_ztrsyl(), FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_length(), FLA_Obj_width(), FLA_ONE, FLA_Param_map_flame_to_netlib_trans(), FLA_Set(), and FLA_Sylv_check().

Referenced by FLA_Sylv_blk_external(), FLA_Sylv_hh_unb_ext(), FLA_Sylv_hn_unb_ext(), FLA_Sylv_nh_unb_ext(), and FLA_Sylv_nn_unb_ext().

14 {
15  int info = 0;
16 #ifdef FLA_ENABLE_EXTERNAL_LAPACK_INTERFACES
17  FLA_Datatype datatype;
18  int cs_A;
19  int cs_B;
20  int m_C, n_C, cs_C;
21  char blas_transa;
22  char blas_transb;
23 
24  if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
25  FLA_Sylv_check( transa, transb, isgn, A, B, C, scale );
26 
27  if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS;
28  if ( FLA_Obj_has_zero_dim( B ) ) return FLA_SUCCESS;
29  if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
30 
31  datatype = FLA_Obj_datatype( A );
32 
33  m_C = FLA_Obj_length( C );
34  n_C = FLA_Obj_width( C );
35  cs_C = FLA_Obj_col_stride( C );
36 
37  cs_A = FLA_Obj_col_stride( A );
38 
39  cs_B = FLA_Obj_col_stride( B );
40 
41  FLA_Param_map_flame_to_netlib_trans( transa, &blas_transa );
42  FLA_Param_map_flame_to_netlib_trans( transb, &blas_transb );
43 
44 
45  switch( datatype ){
46 
47  case FLA_FLOAT:
48  {
49  int *buff_isgn = ( int * ) FLA_INT_PTR( isgn );
50  float *buff_A = ( float * ) FLA_FLOAT_PTR( A );
51  float *buff_B = ( float * ) FLA_FLOAT_PTR( B );
52  float *buff_C = ( float * ) FLA_FLOAT_PTR( C );
53  float *buff_scale = ( float * ) FLA_FLOAT_PTR( scale );
54 
55  F77_strsyl( &blas_transa,
56  &blas_transb,
57  buff_isgn,
58  &m_C,
59  &n_C,
60  buff_A, &cs_A,
61  buff_B, &cs_B,
62  buff_C, &cs_C,
63  buff_scale,
64  &info );
65 
66  break;
67  }
68 
69  case FLA_DOUBLE:
70  {
71  int *buff_isgn = ( int * ) FLA_INT_PTR( isgn );
72  double *buff_A = ( double * ) FLA_DOUBLE_PTR( A );
73  double *buff_B = ( double * ) FLA_DOUBLE_PTR( B );
74  double *buff_C = ( double * ) FLA_DOUBLE_PTR( C );
75  double *buff_scale = ( double * ) FLA_DOUBLE_PTR( scale );
76 
77  F77_dtrsyl( &blas_transa,
78  &blas_transb,
79  buff_isgn,
80  &m_C,
81  &n_C,
82  buff_A, &cs_A,
83  buff_B, &cs_B,
84  buff_C, &cs_C,
85  buff_scale,
86  &info );
87 
88  break;
89  }
90 
91  case FLA_COMPLEX:
92  {
93  int *buff_isgn = ( int * ) FLA_INT_PTR( isgn );
94  scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A );
95  scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B );
96  scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C );
97  float *buff_scale = ( float * ) FLA_COMPLEX_PTR( scale );
98 
99  F77_ctrsyl( &blas_transa,
100  &blas_transb,
101  buff_isgn,
102  &m_C,
103  &n_C,
104  buff_A, &cs_A,
105  buff_B, &cs_B,
106  buff_C, &cs_C,
107  buff_scale,
108  &info );
109 
110  break;
111  }
112 
113  case FLA_DOUBLE_COMPLEX:
114  {
115  int *buff_isgn = ( int * ) FLA_INT_PTR( isgn );
116  dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
117  dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
118  dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
119  double *buff_scale = ( double * ) FLA_DOUBLE_COMPLEX_PTR( scale );
120 
121  F77_ztrsyl( &blas_transa,
122  &blas_transb,
123  buff_isgn,
124  &m_C,
125  &n_C,
126  buff_A, &cs_A,
127  buff_B, &cs_B,
128  buff_C, &cs_C,
129  buff_scale,
130  &info );
131 
132  break;
133  }
134 
135  }
136 
137  // We don't provide a comprehensive strategy for handing scaling to avoid
138  // overflow, so we just force the scale argument to 1.0.
139  FLA_Set( FLA_ONE, scale );
140 #else
141  FLA_Check_error_code( FLA_EXTERNAL_LAPACK_NOT_IMPLEMENTED );
142 #endif
143 
144  return info;
145 }
int F77_ztrsyl(char *transa, char *transb, int *isgn, int *m, int *n, dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *c, int *ldc, double *scale, int *info)
FLA_Error FLA_Sylv_check(FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale)
Definition: FLA_Sylv_check.c:13
void FLA_Param_map_flame_to_netlib_trans(FLA_Trans trans, void *blas_trans)
Definition: FLA_Param.c:15
int F77_ctrsyl(char *transa, char *transb, int *isgn, int *m, int *n, scomplex *a, int *lda, scomplex *b, int *ldb, scomplex *c, int *ldc, float *scale, int *info)
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
FLA_Bool FLA_Obj_has_zero_dim(FLA_Obj A)
Definition: FLA_Query.c:400
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13
Definition: blis_type_defs.h:132
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
int FLA_Datatype
Definition: FLA_type_defs.h:49
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
int F77_strsyl(char *transa, char *transb, int *isgn, int *m, int *n, float *a, int *lda, float *b, int *ldb, float *c, int *ldc, float *scale, int *info)
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137
int F77_dtrsyl(char *transa, char *transb, int *isgn, int *m, int *n, double *a, int *lda, double *b, int *ldb, double *c, int *ldc, double *scale, int *info)