libflame revision_anchor
Functions
FLA_Tevd_external.c File Reference

(r)

Functions

FLA_Error FLA_Tevd_external (FLA_Evd_type jobz, FLA_Obj d, FLA_Obj e, FLA_Obj A)
 

Function Documentation

◆ FLA_Tevd_external()

FLA_Error FLA_Tevd_external ( FLA_Evd_type  jobz,
FLA_Obj  d,
FLA_Obj  e,
FLA_Obj  A 
)
14{
15 int info = 0;
16#ifdef FLA_ENABLE_EXTERNAL_LAPACK_INTERFACES
17 FLA_Datatype datatype;
19 int n_A, cs_A;
20 int inc_d, inc_e;
21 int lwork;
23 char blas_jobz;
24
25 //if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
26 // FLA_Hevd_check( jobz, uplo, A, e );
27
28 if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS;
29
30 datatype = FLA_Obj_datatype( A );
32
35
36 if ( FLA_Obj_vector_inc( d ) != 1 )
37 {
38 FLA_Obj_create( dt_real, n_A, 1, 0, 0, &d_use );
39 FLA_Copy( d, d_use );
40 }
41 else { d_use = d; }
42
43 if ( FLA_Obj_vector_inc( e ) != 1 )
44 {
45 FLA_Obj_create( dt_real, n_A-1, 1, 0, 0, &e_use );
46 FLA_Copy( e, e_use );
47 }
48 else { e_use = e; }
49
52
53 // Allocate thw work array up front.
54 lwork = max( 1.0, 2.0 * n_A - 2 );
55 FLA_Obj_create( dt_real, lwork, 1, 0, 0, &work );
56
58
59 switch( datatype ) {
60
61 case FLA_FLOAT:
62 {
63 float* buff_A = ( float * ) FLA_FLOAT_PTR( A );
64 float* buff_d = ( float * ) FLA_FLOAT_PTR( d_use );
65 float* buff_e = ( float * ) FLA_FLOAT_PTR( e_use );
66 float* buff_work = ( float * ) FLA_FLOAT_PTR( work );
67
69 &n_A,
70 buff_d,
71 buff_e,
72 buff_A, &cs_A,
74 &info );
75
76 break;
77 }
78
79 case FLA_DOUBLE:
80 {
81 double* buff_A = ( double * ) FLA_DOUBLE_PTR( A );
82 double* buff_d = ( double * ) FLA_DOUBLE_PTR( d_use );
83 double* buff_e = ( double * ) FLA_DOUBLE_PTR( e_use );
84 double* buff_work = ( double * ) FLA_DOUBLE_PTR( work );
85
87 &n_A,
88 buff_d,
89 buff_e,
90 buff_A, &cs_A,
92 &info );
93
94 break;
95 }
96
97 case FLA_COMPLEX:
98 {
100 float* buff_d = ( float * ) FLA_FLOAT_PTR( d_use );
101 float* buff_e = ( float * ) FLA_FLOAT_PTR( e_use );
102 float* buff_work = ( float * ) FLA_FLOAT_PTR( work );
103
105 &n_A,
106 buff_d,
107 buff_e,
108 buff_A, &cs_A,
109 buff_work,
110 &info );
111
112 break;
113 }
114
116 {
118 double* buff_d = ( double* ) FLA_DOUBLE_PTR( d_use );
119 double* buff_e = ( double* ) FLA_DOUBLE_PTR( e_use );
120 double* buff_work = ( double* ) FLA_DOUBLE_PTR( work );
121
123 &n_A,
124 buff_d,
125 buff_e,
126 buff_A, &cs_A,
127 buff_work,
128 &info );
129
130 break;
131 }
132
133 }
134
135 if ( FLA_Obj_vector_inc( d ) != 1 )
136 {
137 FLA_Copy( d_use, d );
139 }
140 if ( FLA_Obj_vector_inc( e ) != 1 )
141 {
142 FLA_Copy( e_use, e );
144 }
145
146 FLA_Obj_free( &work );
147
148#else
150#endif
151
152 return info;
153}
FLA_Error FLA_Copy(FLA_Obj A, FLA_Obj B)
Definition FLA_Copy.c:15
int F77_ssteqr(char *jobz, int *n, float *d, float *e, float *z, int *ldz, float *work, int *info)
int F77_csteqr(char *jobz, int *n, float *d, float *e, scomplex *z, int *ldz, float *work, int *info)
int F77_dsteqr(char *jobz, int *n, double *d, double *e, double *z, int *ldz, double *work, int *info)
int F77_zsteqr(char *jobz, int *n, double *d, double *e, dcomplex *z, int *ldz, double *work, int *info)
void FLA_Param_map_flame_to_netlib_evd_type(FLA_Evd_type evd_type, void *lapack_evd_type)
Definition FLA_Param.c:151
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_Bool FLA_Obj_has_zero_dim(FLA_Obj A)
Definition FLA_Query.c:400
FLA_Datatype FLA_Obj_datatype_proj_to_real(FLA_Obj A)
Definition FLA_Query.c:23
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition FLA_Query.c:174
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition FLA_Obj.c:588
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition FLA_Query.c:145
dim_t FLA_Obj_vector_dim(FLA_Obj obj)
Definition FLA_Query.c:137
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition FLA_Query.c:13
int FLA_Datatype
Definition FLA_type_defs.h:49
int i
Definition bl1_axmyv2.c:145
Definition FLA_type_defs.h:159
Definition blis_type_defs.h:138
Definition blis_type_defs.h:133

References F77_csteqr(), F77_dsteqr(), F77_ssteqr(), F77_zsteqr(), FLA_Copy(), FLA_Obj_col_stride(), FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_datatype_proj_to_real(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), FLA_Param_map_flame_to_netlib_evd_type(), and i.