libflame revision_anchor
Functions
FLA_util_lapack_prototypes.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_Househ2_UT (FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj tau)
 
FLA_Error FLA_Househ2_UT_l_ops (int m_x2, float *chi_1, float *x2, int inc_x2, float *tau)
 
FLA_Error FLA_Househ2_UT_l_opd (int m_x2, double *chi_1, double *x2, int inc_x2, double *tau)
 
FLA_Error FLA_Househ2_UT_l_opc (int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *tau)
 
FLA_Error FLA_Househ2_UT_l_opz (int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *tau)
 
FLA_Error FLA_Househ2_UT_r_ops (int m_x2, float *chi_1, float *x2, int inc_x2, float *tau)
 
FLA_Error FLA_Househ2_UT_r_opd (int m_x2, double *chi_1, double *x2, int inc_x2, double *tau)
 
FLA_Error FLA_Househ2_UT_r_opc (int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *tau)
 
FLA_Error FLA_Househ2_UT_r_opz (int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *tau)
 
FLA_Error FLA_Househ3UD_UT (FLA_Obj chi_1, FLA_Obj x2, FLA_Obj y2, FLA_Obj tau)
 
FLA_Error FLA_Househ3UD_UT_ops (int m_x2, int m_y2, float *chi_1, float *x2, int inc_x2, float *y2, int inc_y2, float *tau)
 
FLA_Error FLA_Househ3UD_UT_opd (int m_x2, int m_y2, double *chi_1, double *x2, int inc_x2, double *y2, int inc_y2, double *tau)
 
FLA_Error FLA_Househ3UD_UT_opc (int m_x2, int m_y2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *y2, int inc_y2, scomplex *tau)
 
FLA_Error FLA_Househ3UD_UT_opz (int m_x2, int m_y2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *y2, int inc_y2, dcomplex *tau)
 
FLA_Error FLA_Househ2s_UT (FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj alpha, FLA_Obj chi_1_minus_alpha, FLA_Obj tau)
 
FLA_Error FLA_Househ2s_UT_l_ops (int m_x2, float *chi_1, float *x2, int inc_x2, float *alpha, float *chi_1_minus_alpha, float *tau)
 
FLA_Error FLA_Househ2s_UT_l_opd (int m_x2, double *chi_1, double *x2, int inc_x2, double *alpha, double *chi_1_minus_alpha, double *tau)
 
FLA_Error FLA_Househ2s_UT_l_opc (int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *alpha, scomplex *chi_1_minus_alpha, scomplex *tau)
 
FLA_Error FLA_Househ2s_UT_l_opz (int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *alpha, dcomplex *chi_1_minus_alpha, dcomplex *tau)
 
FLA_Error FLA_Househ2s_UT_r_ops (int m_x2, float *chi_1, float *x2, int inc_x2, float *alpha, float *chi_1_minus_alpha, float *tau)
 
FLA_Error FLA_Househ2s_UT_r_opd (int m_x2, double *chi_1, double *x2, int inc_x2, double *alpha, double *chi_1_minus_alpha, double *tau)
 
FLA_Error FLA_Househ2s_UT_r_opc (int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *alpha, scomplex *chi_1_minus_alpha, scomplex *tau)
 
FLA_Error FLA_Househ2s_UT_r_opz (int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *alpha, dcomplex *chi_1_minus_alpha, dcomplex *tau)
 
FLA_Error FLA_Hev_2x2 (FLA_Obj alpha11, FLA_Obj alpha21, FLA_Obj alpha22, FLA_Obj lambda1, FLA_Obj lambda2)
 
FLA_Error FLA_Hev_2x2_ops (float *buff_alpha11, float *buff_alpha21, float *buff_alpha22, float *buff_lambda1, float *buff_lambda2)
 
FLA_Error FLA_Hev_2x2_opd (double *buff_alpha11, double *buff_alpha21, double *buff_alpha22, double *buff_lambda1, double *buff_lambda2)
 
FLA_Error FLA_Hevv_2x2 (FLA_Obj alpha11, FLA_Obj alpha21, FLA_Obj alpha22, FLA_Obj lambda1, FLA_Obj lambda2, FLA_Obj gamma1, FLA_Obj sigma1)
 
FLA_Error FLA_Hevv_2x2_ops (float *alpha11, float *alpha21, float *alpha22, float *lambda1, float *lambda2, float *gamma1, float *sigma1)
 
FLA_Error FLA_Hevv_2x2_opd (double *alpha11, double *alpha21, double *alpha22, double *lambda1, double *lambda2, double *gamma1, double *sigma1)
 
FLA_Error FLA_Hevv_2x2_opc (scomplex *alpha11, scomplex *alpha21, scomplex *alpha22, float *lambda1, float *lambda2, float *gamma1, scomplex *sigma1)
 
FLA_Error FLA_Hevv_2x2_opz (dcomplex *alpha11, dcomplex *alpha21, dcomplex *alpha22, double *lambda1, double *lambda2, double *gamma1, dcomplex *sigma1)
 
FLA_Error FLA_Wilkshift_tridiag (FLA_Obj delta1, FLA_Obj epsilon, FLA_Obj delta2, FLA_Obj kappa)
 
FLA_Error FLA_Wilkshift_tridiag_ops (float delta1, float epsilon, float delta2, float *kappa)
 
FLA_Error FLA_Wilkshift_tridiag_opd (double delta1, double epsilon, double delta2, double *kappa)
 
FLA_Error FLA_Pythag2 (FLA_Obj chi, FLA_Obj psi, FLA_Obj rho)
 
FLA_Error FLA_Pythag2_ops (float *chi, float *psi, float *rho)
 
FLA_Error FLA_Pythag2_opd (double *chi, double *psi, double *rho)
 
FLA_Error FLA_Pythag3 (FLA_Obj chi, FLA_Obj psi, FLA_Obj zeta, FLA_Obj rho)
 
FLA_Error FLA_Pythag3_ops (float *chi, float *psi, float *zeta, float *rho)
 
FLA_Error FLA_Pythag3_opd (double *chi, double *psi, double *zeta, double *rho)
 
FLA_Error FLA_Sort_evd (FLA_Direct direct, FLA_Obj l, FLA_Obj V)
 
FLA_Error FLA_Sort_evd_f_ops (int m_A, float *l, int inc_l, float *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_b_ops (int m_A, float *l, int inc_l, float *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_f_opd (int m_A, double *l, int inc_l, double *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_b_opd (int m_A, double *l, int inc_l, double *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_f_opc (int m_A, float *l, int inc_l, scomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_b_opc (int m_A, float *l, int inc_l, scomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_f_opz (int m_A, double *l, int inc_l, dcomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_evd_b_opz (int m_A, double *l, int inc_l, dcomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_bsvd_ext (FLA_Direct direct, FLA_Obj s, FLA_Bool apply_U, FLA_Obj U, FLA_Bool apply_V, FLA_Obj V, FLA_Bool apply_C, FLA_Obj C)
 
FLA_Error FLA_Sort_bsvd_ext_f_ops (int m_s, float *s, int inc_s, int m_U, float *U, int rs_U, int cs_U, int m_V, float *V, int rs_V, int cs_V, int n_C, float *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_b_ops (int m_s, float *s, int inc_s, int m_U, float *U, int rs_U, int cs_U, int m_V, float *V, int rs_V, int cs_V, int n_C, float *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_f_opd (int m_s, double *s, int inc_s, int m_U, double *U, int rs_U, int cs_U, int m_V, double *V, int rs_V, int cs_V, int n_C, double *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_b_opd (int m_s, double *s, int inc_s, int m_U, double *U, int rs_U, int cs_U, int m_V, double *V, int rs_V, int cs_V, int n_C, double *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_f_opc (int m_s, float *s, int inc_s, int m_U, scomplex *U, int rs_U, int cs_U, int m_V, scomplex *V, int rs_V, int cs_V, int n_C, scomplex *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_b_opc (int m_s, float *s, int inc_s, int m_U, scomplex *U, int rs_U, int cs_U, int m_V, scomplex *V, int rs_V, int cs_V, int n_C, scomplex *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_f_opz (int m_s, double *s, int inc_s, int m_U, dcomplex *U, int rs_U, int cs_U, int m_V, dcomplex *V, int rs_V, int cs_V, int n_C, dcomplex *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_bsvd_ext_b_opz (int m_s, double *s, int inc_s, int m_U, dcomplex *U, int rs_U, int cs_U, int m_V, dcomplex *V, int rs_V, int cs_V, int n_C, dcomplex *C, int rs_C, int cs_C)
 
FLA_Error FLA_Sort_svd (FLA_Direct direct, FLA_Obj s, FLA_Obj U, FLA_Obj V)
 
FLA_Error FLA_Sort_svd_f_ops (int m_U, int n_V, float *s, int inc_s, float *U, int rs_U, int cs_U, float *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_b_ops (int m_U, int n_V, float *s, int inc_s, float *U, int rs_U, int cs_U, float *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_f_opd (int m_U, int n_V, double *s, int inc_s, double *U, int rs_U, int cs_U, double *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_b_opd (int m_U, int n_V, double *s, int inc_s, double *U, int rs_U, int cs_U, double *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_f_opc (int m_U, int n_V, float *s, int inc_s, scomplex *U, int rs_U, int cs_U, scomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_b_opc (int m_U, int n_V, float *s, int inc_s, scomplex *U, int rs_U, int cs_U, scomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_f_opz (int m_U, int n_V, double *s, int inc_s, dcomplex *U, int rs_U, int cs_U, dcomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sort_svd_b_opz (int m_U, int n_V, double *s, int inc_s, dcomplex *U, int rs_U, int cs_U, dcomplex *V, int rs_V, int cs_V)
 
FLA_Error FLA_Sv_2x2 (FLA_Obj alpha11, FLA_Obj alpha12, FLA_Obj alpha22, FLA_Obj sigma1, FLA_Obj sigma2)
 
FLA_Error FLA_Sv_2x2_ops (float *alpha11, float *alpha12, float *alpha22, float *sigma1, float *sigma2)
 
FLA_Error FLA_Sv_2x2_opd (double *alpha11, double *alpha12, double *alpha22, double *sigma1, double *sigma2)
 
FLA_Error FLA_Svv_2x2 (FLA_Obj alpha11, FLA_Obj alpha12, FLA_Obj alpha22, FLA_Obj sigma1, FLA_Obj sigma2, FLA_Obj gammaL, FLA_Obj sigmaL, FLA_Obj gammaR, FLA_Obj sigmaR)
 
FLA_Error FLA_Svv_2x2_ops (float *alpha11, float *alpha12, float *alpha22, float *sigma1, float *sigma2, float *gammaL, float *sigmaL, float *gammaR, float *sigmaR)
 
FLA_Error FLA_Svv_2x2_opd (double *alpha11, double *alpha12, double *alpha22, double *sigma1, double *sigma2, double *gammaL, double *sigmaL, double *gammaR, double *sigmaR)
 
FLA_Error FLA_Mach_params (FLA_Machval machval, FLA_Obj val)
 
float FLA_Mach_params_ops (FLA_Machval machval)
 
double FLA_Mach_params_opd (FLA_Machval machval)
 
FLA_Error FLA_Apply_diag_matrix (FLA_Side side, FLA_Conj conj, FLA_Obj x, FLA_Obj A)
 
FLA_Error FLA_Shift_pivots_to (FLA_Pivot_type ptype, FLA_Obj p)
 
FLA_Error FLA_Form_perm_matrix (FLA_Obj p, FLA_Obj A)
 
FLA_Error FLA_LU_find_zero_on_diagonal (FLA_Obj A)
 
doublereal fla_dlamch (char *cmach, ftnlen cmach_len)
 
real fla_slamch (char *cmach, ftnlen cmach_len)
 
logical fla_lsame (char *ca, char *cb, ftnlen ca_len, ftnlen cb_len)
 
double fla_pow_di (doublereal *a, integer *n)
 
real fla_pow_ri (real *a, integer *n)
 
FLA_Error FLA_Househ2_UT_check (FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj tau)
 
FLA_Error FLA_Househ3UD_UT_check (FLA_Obj chi_1, FLA_Obj x2, FLA_Obj y2, FLA_Obj tau)
 
FLA_Error FLA_Househ2s_UT_check (FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj alpha, FLA_Obj chi_1_minus_alpha, FLA_Obj tau)
 
FLA_Error FLA_Givens2_check (FLA_Obj chi_1, FLA_Obj chi_2, FLA_Obj gamma, FLA_Obj sigma, FLA_Obj chi_1_new)
 
FLA_Error FLA_Apply_GTG_check (FLA_Obj gamma, FLA_Obj sigma, FLA_Obj delta1, FLA_Obj epsilon1, FLA_Obj delta2)
 
FLA_Error FLA_Apply_G_1x2_check (FLA_Obj gamma, FLA_Obj sigma, FLA_Obj beta, FLA_Obj epsilon)
 
FLA_Error FLA_Apply_G_mx2_check (FLA_Obj gamma, FLA_Obj sigma, FLA_Obj a1, FLA_Obj a2)
 
FLA_Error FLA_Apply_G_check (FLA_Side side, FLA_Direct direct, FLA_Obj G, FLA_Obj A)
 
FLA_Error FLA_Wilkshift_tridiag_check (FLA_Obj delta1, FLA_Obj epsilon, FLA_Obj delta2, FLA_Obj kappa)
 
FLA_Error FLA_Wilkshift_bidiag_check (FLA_Obj epsilon1, FLA_Obj delta1, FLA_Obj epsilon2, FLA_Obj delta2, FLA_Obj kappa)
 
FLA_Error FLA_Introduce_bulge_check (FLA_Obj shift, FLA_Obj gamma, FLA_Obj sigma, FLA_Obj delta1, FLA_Obj epsilon1, FLA_Obj delta2, FLA_Obj beta, FLA_Obj epsilon2)
 
FLA_Error FLA_Mach_params_check (FLA_Machval machval, FLA_Obj val)
 
FLA_Error FLA_Sort_evd_check (FLA_Direct direct, FLA_Obj l, FLA_Obj V)
 
FLA_Error FLA_Sort_svd_check (FLA_Direct direct, FLA_Obj s, FLA_Obj U, FLA_Obj V)
 
FLA_Error FLA_Apply_diag_matrix_check (FLA_Side side, FLA_Conj conj, FLA_Obj x, FLA_Obj A)
 
FLA_Error FLA_Shift_pivots_to_check (FLA_Pivot_type ptype, FLA_Obj p)
 
FLA_Error FLA_Form_perm_matrix_check (FLA_Obj p, FLA_Obj A)
 
FLA_Error FLA_LU_find_zero_on_diagonal_check (FLA_Obj A)
 

Function Documentation

◆ FLA_Apply_diag_matrix()

FLA_Error FLA_Apply_diag_matrix ( FLA_Side  side,
FLA_Conj  conj,
FLA_Obj  x,
FLA_Obj  A 
)
14{
16 int m_A, n_A;
17 int rs_A, cs_A;
18 int inc_x;
21
24
27
28 m_A = FLA_Obj_length( A );
29 n_A = FLA_Obj_width( A );
30
33
35
38
39
40 switch ( dt_A )
41 {
42 case FLA_FLOAT:
43 {
44 float* buff_x = ( float* ) FLA_FLOAT_PTR( x );
45 float* buff_A = ( float* ) FLA_FLOAT_PTR( A );
46
49 m_A,
50 n_A,
52 buff_A, rs_A, cs_A );
53
54 break;
55 }
56
57 case FLA_DOUBLE:
58 {
59 double* buff_x = ( double* ) FLA_DOUBLE_PTR( x );
60 double* buff_A = ( double* ) FLA_DOUBLE_PTR( A );
61
64 m_A,
65 n_A,
67 buff_A, rs_A, cs_A );
68
69 break;
70 }
71
72 case FLA_COMPLEX:
73 {
74 if ( dt_x == FLA_FLOAT )
75 {
76 float* buff_x = ( float* ) FLA_FLOAT_PTR( x );
78
81 m_A,
82 n_A,
84 buff_A, rs_A, cs_A );
85 }
86 else if ( dt_x == FLA_COMPLEX )
87 {
90
93 m_A,
94 n_A,
96 buff_A, rs_A, cs_A );
97 }
98
99 break;
100 }
101
103 {
104 if ( dt_x == FLA_DOUBLE )
105 {
106 double* buff_x = ( double* ) FLA_DOUBLE_PTR( x );
108
110 blis_conj,
111 m_A,
112 n_A,
113 buff_x, inc_x,
114 buff_A, rs_A, cs_A );
115 }
116 else if ( dt_x == FLA_DOUBLE_COMPLEX )
117 {
120
122 blis_conj,
123 m_A,
124 n_A,
125 buff_x, inc_x,
126 buff_A, rs_A, cs_A );
127 }
128
129 break;
130 }
131 }
132
133 return FLA_SUCCESS;
134}
FLA_Error FLA_Apply_diag_matrix_check(FLA_Side side, FLA_Conj conj, FLA_Obj x, FLA_Obj A)
Definition FLA_Apply_diag_matrix_check.c:13
void FLA_Param_map_flame_to_blis_side(FLA_Uplo side, side1_t *blis_side)
Definition FLA_Param.c:301
dim_t FLA_Obj_width(FLA_Obj obj)
Definition FLA_Query.c:123
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition FLA_Query.c:167
dim_t FLA_Obj_length(FLA_Obj obj)
Definition FLA_Query.c:116
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition FLA_Query.c:174
unsigned int FLA_Check_error_level(void)
Definition FLA_Check.c:18
void FLA_Param_map_flame_to_blis_conj(FLA_Conj conj, conj1_t *blis_conj)
Definition FLA_Param.c:269
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition FLA_Query.c:145
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
void bl1_sapdiagmv(side1_t side, conj1_t conj, int m, int n, float *x, int incx, float *a, int a_rs, int a_cs)
Definition bl1_apdiagmv.c:13
void bl1_capdiagmv(side1_t side, conj1_t conj, int m, int n, scomplex *x, int incx, scomplex *a, int a_rs, int a_cs)
Definition bl1_apdiagmv.c:178
void bl1_zapdiagmv(side1_t side, conj1_t conj, int m, int n, dcomplex *x, int incx, dcomplex *a, int a_rs, int a_cs)
Definition bl1_apdiagmv.c:288
void bl1_csapdiagmv(side1_t side, conj1_t conj, int m, int n, float *x, int incx, scomplex *a, int a_rs, int a_cs)
Definition bl1_apdiagmv.c:123
void bl1_zdapdiagmv(side1_t side, conj1_t conj, int m, int n, double *x, int incx, dcomplex *a, int a_rs, int a_cs)
Definition bl1_apdiagmv.c:233
void bl1_dapdiagmv(side1_t side, conj1_t conj, int m, int n, double *x, int incx, double *a, int a_rs, int a_cs)
Definition bl1_apdiagmv.c:68
conj1_t
Definition blis_type_defs.h:80
side1_t
Definition blis_type_defs.h:67
Definition blis_type_defs.h:138
Definition blis_type_defs.h:133

References bl1_capdiagmv(), bl1_csapdiagmv(), bl1_dapdiagmv(), bl1_sapdiagmv(), bl1_zapdiagmv(), bl1_zdapdiagmv(), FLA_Apply_diag_matrix_check(), FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_Obj_width(), FLA_Param_map_flame_to_blis_conj(), FLA_Param_map_flame_to_blis_side(), and i.

Referenced by FLA_Hevd_lv_unb_var1(), FLA_Hevd_lv_unb_var2(), FLA_Svd_ext_u_unb_var1(), FLA_Svd_uv_unb_var1(), and FLA_Svd_uv_unb_var2().

◆ FLA_Apply_diag_matrix_check()

FLA_Error FLA_Apply_diag_matrix_check ( FLA_Side  side,
FLA_Conj  conj,
FLA_Obj  x,
FLA_Obj  A 
)
14{
16
19
22
25
28
31
32 if ( side == FLA_LEFT )
33 {
36 }
37 else // if ( side == FLA_RIGHT )
38 {
41 }
42
43 return FLA_SUCCESS;
44}
FLA_Error FLA_Check_object_width_equals(FLA_Obj A, dim_t n)
Definition FLA_Check.c:1049
FLA_Error FLA_Check_identical_object_precision(FLA_Obj A, FLA_Obj B)
Definition FLA_Check.c:298
FLA_Error FLA_Check_object_length_equals(FLA_Obj A, dim_t m)
Definition FLA_Check.c:1039
FLA_Error FLA_Check_valid_leftright_side(FLA_Side side)
Definition FLA_Check.c:1124
FLA_Error FLA_Check_nonconstant_object(FLA_Obj A)
Definition FLA_Check.c:954
FLA_Error FLA_Check_valid_conj(FLA_Conj conj)
Definition FLA_Check.c:112
dim_t FLA_Obj_vector_dim(FLA_Obj obj)
Definition FLA_Query.c:137
FLA_Error FLA_Check_floating_object(FLA_Obj A)
Definition FLA_Check.c:232
int FLA_Error
Definition FLA_type_defs.h:47

References FLA_Check_floating_object(), FLA_Check_identical_object_precision(), FLA_Check_nonconstant_object(), FLA_Check_object_length_equals(), FLA_Check_object_width_equals(), FLA_Check_valid_conj(), FLA_Check_valid_leftright_side(), and FLA_Obj_vector_dim().

Referenced by FLA_Apply_diag_matrix().

◆ FLA_Apply_G_1x2_check()

FLA_Error FLA_Apply_G_1x2_check ( FLA_Obj  gamma,
FLA_Obj  sigma,
FLA_Obj  beta,
FLA_Obj  epsilon 
)

◆ FLA_Apply_G_check()

FLA_Error FLA_Apply_G_check ( FLA_Side  side,
FLA_Direct  direct,
FLA_Obj  G,
FLA_Obj  A 
)

◆ FLA_Apply_G_mx2_check()

FLA_Error FLA_Apply_G_mx2_check ( FLA_Obj  gamma,
FLA_Obj  sigma,
FLA_Obj  a1,
FLA_Obj  a2 
)

◆ FLA_Apply_GTG_check()

FLA_Error FLA_Apply_GTG_check ( FLA_Obj  gamma,
FLA_Obj  sigma,
FLA_Obj  delta1,
FLA_Obj  epsilon1,
FLA_Obj  delta2 
)

◆ fla_dlamch()

doublereal fla_dlamch ( char cmach,
ftnlen  cmach_len 
)
57{
58 /* Initialized data */
59
60 static logical first = TRUE_;
61
62 /* System generated locals */
65
66 /* Builtin functions */
67 double fla_pow_di(doublereal *, integer *);
68
69 /* Local variables */
70 static doublereal base;
71 static integer beta;
72 static doublereal emin, prec, emax;
73 static integer imin, imax;
74 static logical lrnd;
75 static doublereal rmin, rmax, t, rmach;
76 extern logical fla_lsame(char *, char *, ftnlen, ftnlen);
77 static doublereal small, sfmin;
78 extern /* Subroutine */ int fla_dlamc2(integer *, integer *, logical *,
80 static integer it;
81 static doublereal rnd, eps;
82
83
84/* -- LAPACK auxiliary routine (version 3.2) -- */
85/* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
86/* November 2006 */
87
88/* .. Scalar Arguments .. */
89/* .. */
90
91/* Purpose */
92/* ======= */
93
94/* DLAMCH determines double precision machine parameters. */
95
96/* Arguments */
97/* ========= */
98
99/* CMACH (input) CHARACTER*1 */
100/* Specifies the value to be returned by DLAMCH: */
101/* = 'E' or 'e', DLAMCH := eps */
102/* = 'S' or 's , DLAMCH := sfmin */
103/* = 'B' or 'b', DLAMCH := base */
104/* = 'P' or 'p', DLAMCH := eps*base */
105/* = 'N' or 'n', DLAMCH := t */
106/* = 'R' or 'r', DLAMCH := rnd */
107/* = 'M' or 'm', DLAMCH := emin */
108/* = 'U' or 'u', DLAMCH := rmin */
109/* = 'L' or 'l', DLAMCH := emax */
110/* = 'O' or 'o', DLAMCH := rmax */
111
112/* where */
113
114/* eps = relative machine precision */
115/* sfmin = safe minimum, such that 1/sfmin does not overflow */
116/* base = base of the machine */
117/* prec = eps*base */
118/* t = number of (base) digits in the mantissa */
119/* rnd = 1.0 when rounding occurs in addition, 0.0 otherwise */
120/* emin = minimum exponent before (gradual) underflow */
121/* rmin = underflow threshold - base**(emin-1) */
122/* emax = largest exponent before overflow */
123/* rmax = overflow threshold - (base**emax)*(1-eps) */
124
125/* ===================================================================== */
126
127/* .. Parameters .. */
128/* .. */
129/* .. Local Scalars .. */
130/* .. */
131/* .. External Functions .. */
132/* .. */
133/* .. External Subroutines .. */
134/* .. */
135/* .. Save statement .. */
136/* .. */
137/* .. Data statements .. */
138/* .. */
139/* .. Executable Statements .. */
140
141 if (first) {
142 fla_dlamc2(&beta, &it, &lrnd, &eps, &imin, &rmin, &imax, &rmax);
143 base = (doublereal) beta;
144 t = (doublereal) it;
145 if (lrnd) {
146 rnd = 1.;
147 i__1 = 1 - it;
148 eps = fla_pow_di(&base, &i__1) / 2;
149 } else {
150 rnd = 0.;
151 i__1 = 1 - it;
152 eps = fla_pow_di(&base, &i__1);
153 }
154 prec = eps * base;
155 emin = (doublereal) imin;
156 emax = (doublereal) imax;
157 sfmin = rmin;
158 small = 1. / rmax;
159 if (small >= sfmin) {
160
161/* Use SMALL plus a bit, to avoid the possibility of rounding */
162/* causing overflow when computing 1/sfmin. */
163
164 sfmin = small * (eps + 1.);
165 }
166 }
167
168 if (fla_lsame(cmach, "E", (ftnlen)1, (ftnlen)1)) {
169 rmach = eps;
170 } else if (fla_lsame(cmach, "S", (ftnlen)1, (ftnlen)1)) {
171 rmach = sfmin;
172 } else if (fla_lsame(cmach, "B", (ftnlen)1, (ftnlen)1)) {
173 rmach = base;
174 } else if (fla_lsame(cmach, "P", (ftnlen)1, (ftnlen)1)) {
175 rmach = prec;
176 } else if (fla_lsame(cmach, "N", (ftnlen)1, (ftnlen)1)) {
177 rmach = t;
178 } else if (fla_lsame(cmach, "R", (ftnlen)1, (ftnlen)1)) {
179 rmach = rnd;
180 } else if (fla_lsame(cmach, "M", (ftnlen)1, (ftnlen)1)) {
181 rmach = emin;
182 } else if (fla_lsame(cmach, "U", (ftnlen)1, (ftnlen)1)) {
183 rmach = rmin;
184 } else if (fla_lsame(cmach, "L", (ftnlen)1, (ftnlen)1)) {
185 rmach = emax;
186 } else if (fla_lsame(cmach, "O", (ftnlen)1, (ftnlen)1)) {
187 rmach = rmax;
188 }
189
190 ret_val = rmach;
191 first = FALSE_;
192 return ret_val;
193
194/* End of DLAMCH */
195
196} /* fla_dlamch_ */
double doublereal
Definition FLA_f2c.h:31
short ftnlen
Definition FLA_f2c.h:61
int integer
Definition FLA_f2c.h:25
int logical
Definition FLA_f2c.h:36
logical fla_lsame(char *ca, char *cb, ftnlen ca_len, ftnlen cb_len)
Definition fla_lsame.c:20
int fla_dlamc2(integer *beta, integer *t, logical *rnd, doublereal *eps, integer *emin, doublereal *rmin, integer *emax, doublereal *rmax)
Definition fla_dlamch.c:411
double fla_pow_di(doublereal *ap, integer *bp)
Definition fla_dlamch.c:26

References fla_dlamc2(), fla_lsame(), fla_pow_di(), and i.

Referenced by FLA_Mach_params_opd().

◆ FLA_Form_perm_matrix()

FLA_Error FLA_Form_perm_matrix ( FLA_Obj  p,
FLA_Obj  A 
)
14{
17
18 // We assume that A is correctly sized, m x m, where m is the row
19 // dimension of the matrix given to FLA_LU_piv() or similar function.
21
22 // We assume that p contains pivots in native FLAME format. That is,
23 // we assume the pivot type is FLA_NATIVE_PIVOTS. This is not a huge
24 // assumption since the user has to go out of his way to shift the
25 // pivots into LAPACK-indexed pivots.
27
28 return FLA_SUCCESS;
29}
FLA_Error FLA_Form_perm_matrix_check(FLA_Obj p, FLA_Obj A)
Definition FLA_Form_perm_matrix_check.c:13
FLA_Error FLA_Apply_pivots(FLA_Side side, FLA_Trans trans, FLA_Obj p, FLA_Obj A)
Definition FLA_Apply_pivots.c:15
FLA_Error FLA_Set_to_identity(FLA_Obj A)
Definition FLA_Set_to_identity.c:13

References FLA_Apply_pivots(), FLA_Check_error_level(), FLA_Form_perm_matrix_check(), FLA_Set_to_identity(), and i.

◆ FLA_Form_perm_matrix_check()

FLA_Error FLA_Form_perm_matrix_check ( FLA_Obj  p,
FLA_Obj  A 
)
14{
16
19
22
25
28
31
34
37
38 return FLA_SUCCESS;
39}
FLA_Error FLA_Check_square(FLA_Obj A)
Definition FLA_Check.c:363
FLA_Error FLA_Check_int_object(FLA_Obj A)
Definition FLA_Check.c:245
FLA_Error FLA_Check_matrix_vector_dims(FLA_Trans trans, FLA_Obj A, FLA_Obj x, FLA_Obj y)
Definition FLA_Check.c:453

References FLA_Check_floating_object(), FLA_Check_if_vector(), FLA_Check_int_object(), FLA_Check_matrix_vector_dims(), FLA_Check_nonconstant_object(), and FLA_Check_square().

Referenced by FLA_Form_perm_matrix().

◆ FLA_Givens2_check()

FLA_Error FLA_Givens2_check ( FLA_Obj  chi_1,
FLA_Obj  chi_2,
FLA_Obj  gamma,
FLA_Obj  sigma,
FLA_Obj  chi_1_new 
)

◆ FLA_Hev_2x2()

FLA_Error FLA_Hev_2x2 ( FLA_Obj  alpha11,
FLA_Obj  alpha21,
FLA_Obj  alpha22,
FLA_Obj  lambda1,
FLA_Obj  lambda2 
)
29{
30 FLA_Datatype datatype;
31
32 datatype = FLA_Obj_datatype( alpha11 );
33
34 switch ( datatype )
35 {
36 case FLA_FLOAT:
37 {
43
49
50 break;
51 }
52
53 case FLA_DOUBLE:
54 {
60
66
67 break;
68 }
69
70 case FLA_COMPLEX:
71 {
73
74 break;
75 }
76
78 {
80
81 break;
82 }
83 }
84
85 return FLA_SUCCESS;
86}
FLA_Error FLA_Hev_2x2_ops(float *alpha11, float *alpha21, float *alpha22, float *lambda1, float *lambda2)
Definition FLA_Hev_2x2.c:90
FLA_Error FLA_Hev_2x2_opd(double *alpha11, double *alpha21, double *alpha22, double *lambda1, double *lambda2)
Definition FLA_Hev_2x2.c:149

References FLA_Hev_2x2_opd(), FLA_Hev_2x2_ops(), FLA_Obj_datatype(), and i.

◆ FLA_Hev_2x2_opd()

FLA_Error FLA_Hev_2x2_opd ( double buff_alpha11,
double buff_alpha21,
double buff_alpha22,
double buff_lambda1,
double buff_lambda2 
)
154{
155 double a11, a21, a22;
156 double l1, l2;
157 double ab, acmn, acmx, adf, df, rt, sm, tb;
158
159 a11 = *alpha11;
160 a21 = *alpha21;
161 a22 = *alpha22;
162
163 sm = a11 + a22;
164 df = a11 - a22;
165 adf = fabs( df );
166 tb = a21 + a21;
167 ab = fabs( tb );
168
169 if ( fabs( a11 ) > fabs( a22 ) )
170 {
171 acmx = a11;
172 acmn = a22;
173 }
174 else
175 {
176 acmx = a22;
177 acmn = a11;
178 }
179
180 if ( adf > ab ) rt = adf * sqrt( 1.0 + ( ab / adf ) * ( ab / adf ) );
181 else if ( adf < ab ) rt = ab * sqrt( 1.0 + ( adf / ab ) * ( adf / ab ) );
182 else rt = ab * sqrt( 2.0 );
183
184 if ( sm < 0.0 )
185 {
186 l1 = 0.5 * ( sm - rt );
187 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
188 }
189 else if ( sm > 0.0 )
190 {
191 l1 = 0.5 * ( sm + rt );
192 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
193 }
194 else
195 {
196 l1 = 0.5 * rt;
197 l2 = -0.5 * rt;
198 }
199
200 *lambda1 = l1;
201 *lambda2 = l2;
202
203 return FLA_SUCCESS;
204}

References i.

Referenced by FLA_Hev_2x2(), and FLA_Tevd_iteracc_n_opd_var1().

◆ FLA_Hev_2x2_ops()

FLA_Error FLA_Hev_2x2_ops ( float buff_alpha11,
float buff_alpha21,
float buff_alpha22,
float buff_lambda1,
float buff_lambda2 
)
95{
96 float a11, a21, a22;
97 float l1, l2;
98 float ab, acmn, acmx, adf, df, rt, sm, tb;
99
100 a11 = *alpha11;
101 a21 = *alpha21;
102 a22 = *alpha22;
103
104 sm = a11 + a22;
105 df = a11 - a22;
106 adf = fabs( df );
107 tb = a21 + a21;
108 ab = fabs( tb );
109
110 if ( fabs( a11 ) > fabs( a22 ) )
111 {
112 acmx = a11;
113 acmn = a22;
114 }
115 else
116 {
117 acmx = a22;
118 acmn = a11;
119 }
120
121 if ( adf > ab ) rt = adf * sqrt( 1.0F + ( ab / adf ) * ( ab / adf ) );
122 else if ( adf < ab ) rt = ab * sqrt( 1.0F + ( adf / ab ) * ( adf / ab ) );
123 else rt = ab * sqrt( 2.0F );
124
125 if ( sm < 0.0F )
126 {
127 l1 = 0.5F * ( sm - rt );
128 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
129 }
130 else if ( sm > 0.0F )
131 {
132 l1 = 0.5F * ( sm + rt );
133 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
134 }
135 else
136 {
137 l1 = 0.5F * rt;
138 l2 = -0.5F * rt;
139 }
140
141 *lambda1 = l1;
142 *lambda2 = l2;
143
144 return FLA_SUCCESS;
145}

References i.

Referenced by FLA_Hev_2x2().

◆ FLA_Hevv_2x2()

FLA_Error FLA_Hevv_2x2 ( FLA_Obj  alpha11,
FLA_Obj  alpha21,
FLA_Obj  alpha22,
FLA_Obj  lambda1,
FLA_Obj  lambda2,
FLA_Obj  gamma1,
FLA_Obj  sigma1 
)
38{
39 FLA_Datatype datatype;
40
41 datatype = FLA_Obj_datatype( alpha11 );
42
43 switch ( datatype )
44 {
45 case FLA_FLOAT:
46 {
54
62
63 break;
64 }
65
66 case FLA_DOUBLE:
67 {
75
83
84 break;
85 }
86
87 case FLA_COMPLEX:
88 {
96
103 buff_sigma1 );
104
105 break;
106 }
107
109 {
115 double* buff_gamma1 = FLA_DOUBLE_PTR( gamma1 );
117
124 buff_sigma1 );
125
126 break;
127 }
128 }
129
130 return FLA_SUCCESS;
131}
FLA_Error FLA_Hevv_2x2_opd(double *alpha11, double *alpha21, double *alpha22, double *lambda1, double *lambda2, double *gamma1, double *sigma1)
Definition FLA_Hevv_2x2.c:249
FLA_Error FLA_Hevv_2x2_opc(scomplex *alpha11, scomplex *alpha21, scomplex *alpha22, float *lambda1, float *lambda2, float *gamma1, scomplex *sigma1)
Definition FLA_Hevv_2x2.c:363
FLA_Error FLA_Hevv_2x2_ops(float *alpha11, float *alpha21, float *alpha22, float *lambda1, float *lambda2, float *gamma1, float *sigma1)
Definition FLA_Hevv_2x2.c:135
FLA_Error FLA_Hevv_2x2_opz(dcomplex *alpha11, dcomplex *alpha21, dcomplex *alpha22, double *lambda1, double *lambda2, double *gamma1, dcomplex *sigma1)
Definition FLA_Hevv_2x2.c:378

References FLA_Hevv_2x2_opc(), FLA_Hevv_2x2_opd(), FLA_Hevv_2x2_ops(), FLA_Hevv_2x2_opz(), FLA_Obj_datatype(), and i.

◆ FLA_Hevv_2x2_opc()

FLA_Error FLA_Hevv_2x2_opc ( scomplex alpha11,
scomplex alpha21,
scomplex alpha22,
float lambda1,
float lambda2,
float gamma1,
scomplex sigma1 
)
370{
372
373 return FLA_SUCCESS;
374}

References i.

Referenced by FLA_Hevv_2x2().

◆ FLA_Hevv_2x2_opd()

FLA_Error FLA_Hevv_2x2_opd ( double alpha11,
double alpha21,
double alpha22,
double lambda1,
double lambda2,
double gamma1,
double sigma1 
)
256{
257 double a11, a21, a22;
258 double l1, l2;
259 double g1, s1;
260 double ab, acmn, acmx, acs, adf, cs, ct, df, rt, sm, tb, tn;
261 int sgn1, sgn2;
262
263 a11 = *alpha11;
264 a21 = *alpha21;
265 a22 = *alpha22;
266
267 // Compute the eigenvalues.
268
269 sm = a11 + a22;
270 df = a11 - a22;
271 adf = fabs( df );
272 tb = a21 + a21;
273 ab = fabs( tb );
274
275 if ( fabs( a11 ) > fabs( a22 ) )
276 {
277 acmx = a11;
278 acmn = a22;
279 }
280 else
281 {
282 acmx = a22;
283 acmn = a11;
284 }
285
286 if ( adf > ab ) rt = adf * sqrt( 1.0 + pow( ( ab / adf ), 2.0 ) );
287 else if ( adf < ab ) rt = ab * sqrt( 1.0 + pow( ( adf / ab ), 2.0 ) );
288 else rt = ab * sqrt( 2.0 );
289
290 if ( sm < 0.0 )
291 {
292 l1 = 0.5 * ( sm - rt );
293 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
294 sgn1 = -1;
295 }
296 else if ( sm > 0.0 )
297 {
298 l1 = 0.5 * ( sm + rt );
299 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
300 sgn1 = 1;
301 }
302 else
303 {
304 l1 = 0.5 * rt;
305 l2 = -0.5 * rt;
306 sgn1 = 1;
307 }
308
309 *lambda1 = l1;
310 *lambda2 = l2;
311
312 // Compute the eigenvector.
313
314 if ( df >= 0.0 )
315 {
316 cs = df + rt;
317 sgn2 = 1;
318 }
319 else
320 {
321 cs = df - rt;
322 sgn2 = -1;
323 }
324
325 acs = fabs( cs );
326
327 if ( acs > ab )
328 {
329 ct = -tb / cs;
330 s1 = 1.0 / sqrt( 1.0 + ct*ct );
331 g1 = ct * s1;
332 }
333 else
334 {
335 if ( ab == 0.0 )
336 {
337 g1 = 1.0;
338 s1 = 0.0;
339 }
340 else
341 {
342 tn = -cs / tb;
343 g1 = 1.0 / sqrt( 1.0 + tn*tn );
344 s1 = tn * g1;
345 }
346 }
347
348 if ( sgn1 == sgn2 )
349 {
350 tn = g1;
351 g1 = -s1;
352 s1 = tn;
353 }
354
355 *gamma1 = g1;
356 *sigma1 = s1;
357
358 return FLA_SUCCESS;
359}

References i.

Referenced by FLA_Hevv_2x2(), FLA_Tevd_iteracc_v_opd_var1(), and FLA_Tevd_iteracc_v_opd_var3().

◆ FLA_Hevv_2x2_ops()

FLA_Error FLA_Hevv_2x2_ops ( float alpha11,
float alpha21,
float alpha22,
float lambda1,
float lambda2,
float gamma1,
float sigma1 
)
142{
143 float a11, a21, a22;
144 float l1, l2;
145 float g1, s1;
146 float ab, acmn, acmx, acs, adf, cs, ct, df, rt, sm, tb, tn;
147 int sgn1, sgn2;
148
149 a11 = *alpha11;
150 a21 = *alpha21;
151 a22 = *alpha22;
152
153 // Compute the eigenvalues.
154
155 sm = a11 + a22;
156 df = a11 - a22;
157 adf = fabs( df );
158 tb = a21 + a21;
159 ab = fabs( tb );
160
161 if ( fabs( a11 ) > fabs( a22 ) )
162 {
163 acmx = a11;
164 acmn = a22;
165 }
166 else
167 {
168 acmx = a22;
169 acmn = a11;
170 }
171
172 if ( adf > ab ) rt = adf * sqrt( 1.0F + ( ab / adf ) * ( ab / adf ) );
173 else if ( adf < ab ) rt = ab * sqrt( 1.0F + ( adf / ab ) * ( adf / ab ) );
174 else rt = ab * sqrt( 2.0F );
175
176 if ( sm < 0.0F )
177 {
178 l1 = 0.5F * ( sm - rt );
179 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
180 sgn1 = -1;
181 }
182 else if ( sm > 0.0F )
183 {
184 l1 = 0.5F * ( sm + rt );
185 l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21;
186 sgn1 = 1;
187 }
188 else
189 {
190 l1 = 0.5F * rt;
191 l2 = -0.5F * rt;
192 sgn1 = 1;
193 }
194
195 *lambda1 = l1;
196 *lambda2 = l2;
197
198 // Compute the eigenvector.
199
200 if ( df >= 0.0F )
201 {
202 cs = df + rt;
203 sgn2 = 1;
204 }
205 else
206 {
207 cs = df - rt;
208 sgn2 = -1;
209 }
210
211 acs = fabs( cs );
212
213 if ( acs > ab )
214 {
215 ct = -tb / cs;
216 s1 = 1.0F / sqrt( 1.0F + ct*ct );
217 g1 = ct * s1;
218 }
219 else
220 {
221 if ( ab == 0.0F )
222 {
223 g1 = 1.0F;
224 s1 = 0.0F;
225 }
226 else
227 {
228 tn = -cs / tb;
229 g1 = 1.0F / sqrt( 1.0F + tn*tn );
230 s1 = tn * g1;
231 }
232 }
233
234 if ( sgn1 == sgn2 )
235 {
236 tn = g1;
237 g1 = -s1;
238 s1 = tn;
239 }
240
241 *gamma1 = g1;
242 *sigma1 = s1;
243
244 return FLA_SUCCESS;
245}

References i.

Referenced by FLA_Hevv_2x2().

◆ FLA_Hevv_2x2_opz()

FLA_Error FLA_Hevv_2x2_opz ( dcomplex alpha11,
dcomplex alpha21,
dcomplex alpha22,
double lambda1,
double lambda2,
double gamma1,
dcomplex sigma1 
)
385{
387
388 return FLA_SUCCESS;
389}

References i.

Referenced by FLA_Hevv_2x2().

◆ FLA_Househ2_UT()

FLA_Error FLA_Househ2_UT ( FLA_Side  side,
FLA_Obj  chi_1,
FLA_Obj  x2,
FLA_Obj  tau 
)
59{
60 FLA_Datatype datatype;
61 int m_x2;
62 int inc_x2;
63
64 datatype = FLA_Obj_datatype( x2 );
65
68
71
72 switch ( datatype )
73 {
74 case FLA_FLOAT:
75 {
76 float* chi_1_p = ( float* ) FLA_FLOAT_PTR( chi_1 );
77 float* x2_p = ( float* ) FLA_FLOAT_PTR( x2 );
78 float* tau_p = ( float* ) FLA_FLOAT_PTR( tau );
79
80 if ( side == FLA_LEFT )
82 chi_1_p,
83 x2_p, inc_x2,
84 tau_p );
85 else // if ( side == FLA_RIGHT )
87 chi_1_p,
88 x2_p, inc_x2,
89 tau_p );
90
91 break;
92 }
93
94 case FLA_DOUBLE:
95 {
96 double* chi_1_p = ( double* ) FLA_DOUBLE_PTR( chi_1 );
97 double* x2_p = ( double* ) FLA_DOUBLE_PTR( x2 );
98 double* tau_p = ( double* ) FLA_DOUBLE_PTR( tau );
99
100 if ( side == FLA_LEFT )
102 chi_1_p,
103 x2_p, inc_x2,
104 tau_p );
105 else // if ( side == FLA_RIGHT )
107 chi_1_p,
108 x2_p, inc_x2,
109 tau_p );
110
111 break;
112 }
113
114 case FLA_COMPLEX:
115 {
119
120 if ( side == FLA_LEFT )
122 chi_1_p,
123 x2_p, inc_x2,
124 tau_p );
125 else // if ( side == FLA_RIGHT )
127 chi_1_p,
128 x2_p, inc_x2,
129 tau_p );
130
131 break;
132 }
133
135 {
139
140 if ( side == FLA_LEFT )
142 chi_1_p,
143 x2_p, inc_x2,
144 tau_p );
145 else // if ( side == FLA_RIGHT )
147 chi_1_p,
148 x2_p, inc_x2,
149 tau_p );
150
151 break;
152 }
153 }
154
155 return FLA_SUCCESS;
156}
FLA_Error FLA_Househ2_UT_l_opz(int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *tau)
Definition FLA_Househ2_UT.c:521
FLA_Error FLA_Househ2_UT_r_opd(int m_x2, double *chi_1, double *x2, int inc_x2, double *tau)
Definition FLA_Househ2_UT.c:664
FLA_Error FLA_Househ2_UT_l_ops(int m_x2, float *chi_1, float *x2, int inc_x2, float *tau)
Definition FLA_Househ2_UT.c:160
FLA_Error FLA_Househ2_UT_r_ops(int m_x2, float *chi_1, float *x2, int inc_x2, float *tau)
Definition FLA_Househ2_UT.c:651
FLA_Error FLA_Househ2_UT_l_opd(int m_x2, double *chi_1, double *x2, int inc_x2, double *tau)
Definition FLA_Househ2_UT.c:274
FLA_Error FLA_Househ2_UT_r_opz(int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *tau)
Definition FLA_Househ2_UT.c:693
FLA_Error FLA_Househ2_UT_r_opc(int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *tau)
Definition FLA_Househ2_UT.c:677
FLA_Error FLA_Househ2_UT_l_opc(int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *tau)
Definition FLA_Househ2_UT.c:390
FLA_Error FLA_Househ2_UT_check(FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj tau)
Definition FLA_Househ2_UT_check.c:13

References FLA_Check_error_level(), FLA_Househ2_UT_check(), FLA_Househ2_UT_l_opc(), FLA_Househ2_UT_l_opd(), FLA_Househ2_UT_l_ops(), FLA_Househ2_UT_l_opz(), FLA_Househ2_UT_r_opc(), FLA_Househ2_UT_r_opd(), FLA_Househ2_UT_r_ops(), FLA_Househ2_UT_r_opz(), FLA_Obj_datatype(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), and i.

Referenced by FLA_Bidiag_UT_u_step_unb_var1(), FLA_Bidiag_UT_u_step_unb_var2(), FLA_Bidiag_UT_u_step_unb_var3(), FLA_Bidiag_UT_u_step_unb_var4(), FLA_Bidiag_UT_u_step_unb_var5(), FLA_CAQR2_UT_unb_var1(), FLA_Hess_UT_step_unb_var1(), FLA_Hess_UT_step_unb_var2(), FLA_Hess_UT_step_unb_var3(), FLA_Hess_UT_step_unb_var4(), FLA_Hess_UT_step_unb_var5(), FLA_LQ_UT_unb_var1(), FLA_LQ_UT_unb_var2(), FLA_QR2_UT_unb_var1(), FLA_QR_UT_piv_unb_var1(), FLA_QR_UT_piv_unb_var2(), FLA_QR_UT_unb_var1(), FLA_QR_UT_unb_var2(), FLA_Tridiag_UT_l_step_unb_var1(), FLA_Tridiag_UT_l_step_unb_var2(), and FLA_Tridiag_UT_l_step_unb_var3().

◆ FLA_Househ2_UT_check()

FLA_Error FLA_Househ2_UT_check ( FLA_Side  side,
FLA_Obj  chi_1,
FLA_Obj  x2,
FLA_Obj  tau 
)

◆ FLA_Househ2_UT_l_opc()

FLA_Error FLA_Househ2_UT_l_opc ( int  m_x2,
scomplex chi_1,
scomplex x2,
int  inc_x2,
scomplex tau 
)
394{
396 scomplex y[2];
399 float abs_chi_1;
400 float norm_x_2;
401 float norm_x;
404 int i_one = 1;
405 int i_two = 2;
406
407 //
408 // Compute the 2-norm of x_2:
409 //
410 // norm_x_2 := || x_2 ||_2
411 //
412
414 x2, inc_x2,
415 &norm_x_2 );
416
417 //
418 // If 2-norm of x_2 is zero, then return with trivial values.
419 //
420
421 if ( norm_x_2 == 0.0F )
422 {
423 chi_1->real = -(chi_1->real);
424 chi_1->imag = -(chi_1->imag);
425 tau->real = one_half.real;
426 tau->imag = one_half.imag;
427
428 return FLA_SUCCESS;
429 }
430
431 //
432 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
433 // of chi_1:
434 //
435 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
436 //
437
439 chi_1, i_one,
440 &abs_chi_1 );
441
442 //
443 // Compute the 2-norm of x via the two norms previously computed above:
444 //
445 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
446 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
447 //
448
449 y[0].real = abs_chi_1;
450 y[0].imag = 0.0F;
451
452 y[1].real = norm_x_2;
453 y[1].imag = 0.0F;
454
456 y, i_one,
457 &norm_x );
458
459 //
460 // Compute alpha:
461 //
462 // alpha := - || x ||_2 * chi_1 / | chi_1 |
463 //
464
465 if ( abs_chi_1 == 0.0F )
466 {
467 alpha.real = norm_x * ( -1.0F );
468 alpha.imag = norm_x * ( -1.0F );
469 }
470 else
471 {
472 alpha.real = norm_x * ( -chi_1->real / abs_chi_1 );
473 alpha.imag = norm_x * ( -chi_1->imag / abs_chi_1 );
474 }
475
476 //
477 // Overwrite x_2 with u_2:
478 //
479 // x_2 := x_2 / ( chi_1 - alpha )
480 //
481
482 chi_1_minus_alpha.real = chi_1->real - alpha.real;
483 chi_1_minus_alpha.imag = chi_1->imag - alpha.imag;
484
486 m_x2,
488 x2, inc_x2 );
489
490 //
491 // Compute tau:
492 //
493 // tau := ( 1 + u_2' * u_2 ) / 2
494 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
495 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
496 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
497 //
498
500
504 tau->imag = 0.0F;
505
506 //
507 // Overwrite chi_1 with alpha:
508 //
509 // chi_1 := alpha
510 //
511
512 chi_1->real = alpha.real;
513 chi_1->imag = alpha.imag;
514
515 return FLA_SUCCESS;
516}
FLA_Obj FLA_ONE_HALF
Definition FLA_Init.c:19
void bl1_cinvscalv(conj1_t conj, int n, scomplex *alpha, scomplex *x, int incx)
Definition bl1_invscalv.c:52
void bl1_cnrm2(int n, scomplex *x, int incx, float *norm)
Definition bl1_nrm2.c:35
@ BLIS1_NO_CONJUGATE
Definition blis_type_defs.h:81

References bl1_cinvscalv(), bl1_cnrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, and i.

Referenced by FLA_Bidiag_UT_u_step_ofc_var2(), FLA_Bidiag_UT_u_step_ofc_var3(), FLA_Bidiag_UT_u_step_ofc_var4(), FLA_Bidiag_UT_u_step_opc_var1(), FLA_Bidiag_UT_u_step_opc_var2(), FLA_Bidiag_UT_u_step_opc_var3(), FLA_Bidiag_UT_u_step_opc_var4(), FLA_Bidiag_UT_u_step_opc_var5(), FLA_CAQR2_UT_opc_var1(), FLA_Hess_UT_step_ofc_var2(), FLA_Hess_UT_step_ofc_var3(), FLA_Hess_UT_step_ofc_var4(), FLA_Hess_UT_step_opc_var1(), FLA_Hess_UT_step_opc_var2(), FLA_Hess_UT_step_opc_var3(), FLA_Hess_UT_step_opc_var4(), FLA_Hess_UT_step_opc_var5(), FLA_Househ2_UT(), FLA_Househ2_UT_r_opc(), FLA_QR2_UT_opc_var1(), FLA_QR_UT_opc_var1(), FLA_QR_UT_opc_var2(), FLA_Tridiag_UT_l_step_ofc_var2(), FLA_Tridiag_UT_l_step_ofc_var3(), FLA_Tridiag_UT_l_step_opc_var1(), FLA_Tridiag_UT_l_step_opc_var2(), and FLA_Tridiag_UT_l_step_opc_var3().

◆ FLA_Househ2_UT_l_opd()

FLA_Error FLA_Househ2_UT_l_opd ( int  m_x2,
double chi_1,
double x2,
int  inc_x2,
double tau 
)
278{
280 double y[2];
281 double alpha;
282 double chi_1_minus_alpha;
283 double abs_chi_1;
284 double norm_x_2;
285 double norm_x;
288 int i_one = 1;
289 int i_two = 2;
290
291 //
292 // Compute the 2-norm of x_2:
293 //
294 // norm_x_2 := || x_2 ||_2
295 //
296
298 x2, inc_x2,
299 &norm_x_2 );
300
301 //
302 // If 2-norm of x_2 is zero, then return with trivial values.
303 //
304
305 if ( norm_x_2 == 0.0 )
306 {
307 *chi_1 = -(*chi_1);
308 *tau = one_half;
309
310 return FLA_SUCCESS;
311 }
312
313 //
314 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
315 // of chi_1:
316 //
317 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
318 //
319
321 chi_1, i_one,
322 &abs_chi_1 );
323
324 //
325 // Compute the 2-norm of x via the two norms previously computed above:
326 //
327 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
328 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
329 //
330
331 y[0] = abs_chi_1;
332 y[1] = norm_x_2;
333
335 y, i_one,
336 &norm_x );
337
338 //
339 // Compute alpha:
340 //
341 // alpha := - || x ||_2 * chi_1 / | chi_1 |
342 // = -sign( chi_1 ) * || x ||_2
343 //
344
345 alpha = -dsign( *chi_1 ) * norm_x;
346
347 //
348 // Overwrite x_2 with u_2:
349 //
350 // x_2 := x_2 / ( chi_1 - alpha )
351 //
352
354
356 m_x2,
358 x2, inc_x2 );
359
360 //
361 // Compute tau:
362 //
363 // tau := ( 1 + u_2' * u_2 ) / 2
364 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
365 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
366 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
367 //
368
370
372
376
377 //
378 // Overwrite chi_1 with alpha:
379 //
380 // chi_1 := alpha
381 //
382
383 *chi_1 = alpha;
384
385 return FLA_SUCCESS;
386}
void bl1_dinvscalv(conj1_t conj, int n, double *alpha, double *x, int incx)
Definition bl1_invscalv.c:26
void bl1_dnrm2(int n, double *x, int incx, double *norm)
Definition bl1_nrm2.c:24

References bl1_dinvscalv(), bl1_dnrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, and i.

Referenced by FLA_Bidiag_UT_u_step_ofd_var2(), FLA_Bidiag_UT_u_step_ofd_var3(), FLA_Bidiag_UT_u_step_ofd_var4(), FLA_Bidiag_UT_u_step_opd_var1(), FLA_Bidiag_UT_u_step_opd_var2(), FLA_Bidiag_UT_u_step_opd_var3(), FLA_Bidiag_UT_u_step_opd_var4(), FLA_Bidiag_UT_u_step_opd_var5(), FLA_CAQR2_UT_opd_var1(), FLA_Hess_UT_step_ofd_var2(), FLA_Hess_UT_step_ofd_var3(), FLA_Hess_UT_step_ofd_var4(), FLA_Hess_UT_step_opd_var1(), FLA_Hess_UT_step_opd_var2(), FLA_Hess_UT_step_opd_var3(), FLA_Hess_UT_step_opd_var4(), FLA_Hess_UT_step_opd_var5(), FLA_Househ2_UT(), FLA_Househ2_UT_r_opd(), FLA_QR2_UT_opd_var1(), FLA_QR_UT_opd_var1(), FLA_QR_UT_opd_var2(), FLA_Tridiag_UT_l_step_ofd_var2(), FLA_Tridiag_UT_l_step_ofd_var3(), FLA_Tridiag_UT_l_step_opd_var1(), FLA_Tridiag_UT_l_step_opd_var2(), and FLA_Tridiag_UT_l_step_opd_var3().

◆ FLA_Househ2_UT_l_ops()

FLA_Error FLA_Househ2_UT_l_ops ( int  m_x2,
float chi_1,
float x2,
int  inc_x2,
float tau 
)
164{
166 float y[2];
167 float alpha;
168 float chi_1_minus_alpha;
169 float abs_chi_1;
170 float norm_x_2;
171 float norm_x;
174 int i_one = 1;
175 int i_two = 2;
176
177 //
178 // Compute the 2-norm of x_2:
179 //
180 // norm_x_2 := || x_2 ||_2
181 //
182
184 x2, inc_x2,
185 &norm_x_2 );
186
187 //
188 // If 2-norm of x_2 is zero, then return with trivial values.
189 //
190
191 if ( norm_x_2 == 0.0F )
192 {
193 *chi_1 = -(*chi_1);
194 *tau = one_half;
195
196 return FLA_SUCCESS;
197 }
198
199 //
200 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
201 // of chi_1:
202 //
203 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
204 //
205
207 chi_1, i_one,
208 &abs_chi_1 );
209
210 //
211 // Compute the 2-norm of x via the two norms previously computed above:
212 //
213 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
214 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
215 //
216
217 y[0] = abs_chi_1;
218 y[1] = norm_x_2;
219
221 y, i_one,
222 &norm_x );
223
224 //
225 // Compute alpha:
226 //
227 // alpha := - || x ||_2 * chi_1 / | chi_1 |
228 // = -sign( chi_1 ) * || x ||_2
229 //
230
231 alpha = -ssign( *chi_1 ) * norm_x;
232
233 //
234 // Overwrite x_2 with u_2:
235 //
236 // x_2 := x_2 / ( chi_1 - alpha )
237 //
238
240
242 m_x2,
244 x2, inc_x2 );
245
246 //
247 // Compute tau:
248 //
249 // tau := ( 1 + u_2' * u_2 ) / 2
250 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
251 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
252 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
253 //
254
256
260
261 //
262 // Overwrite chi_1 with alpha:
263 //
264 // chi_1 := alpha
265 //
266
267 *chi_1 = alpha;
268
269 return FLA_SUCCESS;
270}
void bl1_sinvscalv(conj1_t conj, int n, float *alpha, float *x, int incx)
Definition bl1_invscalv.c:13
void bl1_snrm2(int n, float *x, int incx, float *norm)
Definition bl1_nrm2.c:13

References bl1_sinvscalv(), bl1_snrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, and i.

Referenced by FLA_Bidiag_UT_u_step_ofs_var2(), FLA_Bidiag_UT_u_step_ofs_var3(), FLA_Bidiag_UT_u_step_ofs_var4(), FLA_Bidiag_UT_u_step_ops_var1(), FLA_Bidiag_UT_u_step_ops_var2(), FLA_Bidiag_UT_u_step_ops_var3(), FLA_Bidiag_UT_u_step_ops_var4(), FLA_Bidiag_UT_u_step_ops_var5(), FLA_CAQR2_UT_ops_var1(), FLA_Hess_UT_step_ofs_var2(), FLA_Hess_UT_step_ofs_var3(), FLA_Hess_UT_step_ofs_var4(), FLA_Hess_UT_step_ops_var1(), FLA_Hess_UT_step_ops_var2(), FLA_Hess_UT_step_ops_var3(), FLA_Hess_UT_step_ops_var4(), FLA_Hess_UT_step_ops_var5(), FLA_Househ2_UT(), FLA_Househ2_UT_r_ops(), FLA_QR2_UT_ops_var1(), FLA_QR_UT_ops_var1(), FLA_QR_UT_ops_var2(), FLA_Tridiag_UT_l_step_ofs_var2(), FLA_Tridiag_UT_l_step_ofs_var3(), FLA_Tridiag_UT_l_step_ops_var1(), FLA_Tridiag_UT_l_step_ops_var2(), and FLA_Tridiag_UT_l_step_ops_var3().

◆ FLA_Househ2_UT_l_opz()

FLA_Error FLA_Househ2_UT_l_opz ( int  m_x2,
dcomplex chi_1,
dcomplex x2,
int  inc_x2,
dcomplex tau 
)
525{
527 dcomplex y[2];
530 double abs_chi_1;
531 double norm_x_2;
532 double norm_x;
535 int i_one = 1;
536 int i_two = 2;
537
538 //
539 // Compute the 2-norm of x_2:
540 //
541 // norm_x_2 := || x_2 ||_2
542 //
543
545 x2, inc_x2,
546 &norm_x_2 );
547
548 //
549 // If 2-norm of x_2 is zero, then return with trivial values.
550 //
551
552 if ( norm_x_2 == 0.0 )
553 {
554 chi_1->real = -(chi_1->real);
555 chi_1->imag = -(chi_1->imag);
556 tau->real = one_half.real;
557 tau->imag = one_half.imag;
558
559 return FLA_SUCCESS;
560 }
561
562 //
563 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
564 // of chi_1:
565 //
566 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
567 //
568
570 chi_1, i_one,
571 &abs_chi_1 );
572
573 //
574 // Compute the 2-norm of x via the two norms previously computed above:
575 //
576 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
577 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
578 //
579
580 y[0].real = abs_chi_1;
581 y[0].imag = 0.0;
582
583 y[1].real = norm_x_2;
584 y[1].imag = 0.0;
585
587 y, i_one,
588 &norm_x );
589
590 //
591 // Compute alpha:
592 //
593 // alpha := - || x ||_2 * chi_1 / | chi_1 |
594 //
595
596 if ( abs_chi_1 == 0.0 )
597 {
598 alpha.real = norm_x * ( -1.0 );
599 alpha.imag = norm_x * ( -1.0 );
600 }
601 else
602 {
603 alpha.real = norm_x * ( -chi_1->real / abs_chi_1 );
604 alpha.imag = norm_x * ( -chi_1->imag / abs_chi_1 );
605 }
606
607 //
608 // Overwrite x_2 with u_2:
609 //
610 // x_2 := x_2 / ( chi_1 - alpha )
611 //
612
613 chi_1_minus_alpha.real = chi_1->real - alpha.real;
614 chi_1_minus_alpha.imag = chi_1->imag - alpha.imag;
615
617 m_x2,
619 x2, inc_x2 );
620
621 //
622 // Compute tau:
623 //
624 // tau := ( 1 + u_2' * u_2 ) / 2
625 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
626 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
627 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
628 //
629
631
635 tau->imag = 0.0;
636
637 //
638 // Overwrite chi_1 with alpha:
639 //
640 // chi_1 := alpha
641 //
642
643 chi_1->real = alpha.real;
644 chi_1->imag = alpha.imag;
645
646 return FLA_SUCCESS;
647}
void bl1_zinvscalv(conj1_t conj, int n, dcomplex *alpha, dcomplex *x, int incx)
Definition bl1_invscalv.c:78
void bl1_znrm2(int n, dcomplex *x, int incx, double *norm)
Definition bl1_nrm2.c:46

References bl1_zinvscalv(), bl1_znrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, and i.

Referenced by FLA_Bidiag_UT_u_step_ofz_var2(), FLA_Bidiag_UT_u_step_ofz_var3(), FLA_Bidiag_UT_u_step_ofz_var4(), FLA_Bidiag_UT_u_step_opz_var1(), FLA_Bidiag_UT_u_step_opz_var2(), FLA_Bidiag_UT_u_step_opz_var3(), FLA_Bidiag_UT_u_step_opz_var4(), FLA_Bidiag_UT_u_step_opz_var5(), FLA_CAQR2_UT_opz_var1(), FLA_Hess_UT_step_ofz_var2(), FLA_Hess_UT_step_ofz_var3(), FLA_Hess_UT_step_ofz_var4(), FLA_Hess_UT_step_opz_var1(), FLA_Hess_UT_step_opz_var2(), FLA_Hess_UT_step_opz_var3(), FLA_Hess_UT_step_opz_var4(), FLA_Hess_UT_step_opz_var5(), FLA_Househ2_UT(), FLA_Househ2_UT_r_opz(), FLA_QR2_UT_opz_var1(), FLA_QR_UT_opz_var1(), FLA_QR_UT_opz_var2(), FLA_Tridiag_UT_l_step_ofz_var2(), FLA_Tridiag_UT_l_step_ofz_var3(), FLA_Tridiag_UT_l_step_opz_var1(), FLA_Tridiag_UT_l_step_opz_var2(), and FLA_Tridiag_UT_l_step_opz_var3().

◆ FLA_Househ2_UT_r_opc()

FLA_Error FLA_Househ2_UT_r_opc ( int  m_x2,
scomplex chi_1,
scomplex x2,
int  inc_x2,
scomplex tau 
)
681{
683 chi_1,
684 x2, inc_x2,
685 tau );
686
688 x2, inc_x2 );
689
690 return FLA_SUCCESS;
691}
void bl1_cconjv(int m, scomplex *x, int incx)
Definition bl1_conjv.c:23

References bl1_cconjv(), FLA_Househ2_UT_l_opc(), and i.

Referenced by FLA_Bidiag_UT_u_step_ofc_var2(), FLA_Bidiag_UT_u_step_opc_var1(), FLA_Bidiag_UT_u_step_opc_var2(), FLA_Bidiag_UT_u_step_opc_var5(), FLA_Househ2_UT(), FLA_LQ_UT_opc_var1(), and FLA_LQ_UT_opc_var2().

◆ FLA_Househ2_UT_r_opd()

FLA_Error FLA_Househ2_UT_r_opd ( int  m_x2,
double chi_1,
double x2,
int  inc_x2,
double tau 
)

◆ FLA_Househ2_UT_r_ops()

FLA_Error FLA_Househ2_UT_r_ops ( int  m_x2,
float chi_1,
float x2,
int  inc_x2,
float tau 
)

◆ FLA_Househ2_UT_r_opz()

FLA_Error FLA_Househ2_UT_r_opz ( int  m_x2,
dcomplex chi_1,
dcomplex x2,
int  inc_x2,
dcomplex tau 
)
697{
699 chi_1,
700 x2, inc_x2,
701 tau );
702
704 x2, inc_x2 );
705
706 return FLA_SUCCESS;
707}
void bl1_zconjv(int m, dcomplex *x, int incx)
Definition bl1_conjv.c:34

References bl1_zconjv(), FLA_Househ2_UT_l_opz(), and i.

Referenced by FLA_Bidiag_UT_u_step_ofz_var2(), FLA_Bidiag_UT_u_step_opz_var1(), FLA_Bidiag_UT_u_step_opz_var2(), FLA_Bidiag_UT_u_step_opz_var5(), FLA_Househ2_UT(), FLA_LQ_UT_opz_var1(), and FLA_LQ_UT_opz_var2().

◆ FLA_Househ2s_UT()

FLA_Error FLA_Househ2s_UT ( FLA_Side  side,
FLA_Obj  chi_1,
FLA_Obj  x2,
FLA_Obj  alpha,
FLA_Obj  chi_1_minus_alpha,
FLA_Obj  tau 
)
17{
18 FLA_Datatype datatype;
19 int m_x2;
20 int inc_x2;
21
22 datatype = FLA_Obj_datatype( x2 );
23
26
29
30 switch ( datatype )
31 {
32 case FLA_FLOAT:
33 {
34 float* chi_1_p = ( float* ) FLA_FLOAT_PTR( chi_1 );
35 float* x2_p = ( float* ) FLA_FLOAT_PTR( x2 );
36 float* alpha_p = ( float* ) FLA_FLOAT_PTR( alpha );
38 float* tau_p = ( float* ) FLA_FLOAT_PTR( tau );
39
40 if ( side == FLA_LEFT )
42 chi_1_p,
43 x2_p, inc_x2,
44 alpha_p,
46 tau_p );
47 else // if ( side == FLA_RIGHT )
49 chi_1_p,
50 x2_p, inc_x2,
51 alpha_p,
53 tau_p );
54
55 break;
56 }
57
58 case FLA_DOUBLE:
59 {
60 double* chi_1_p = ( double* ) FLA_DOUBLE_PTR( chi_1 );
61 double* x2_p = ( double* ) FLA_DOUBLE_PTR( x2 );
62 double* alpha_p = ( double* ) FLA_DOUBLE_PTR( alpha );
64 double* tau_p = ( double* ) FLA_DOUBLE_PTR( tau );
65
66 if ( side == FLA_LEFT )
68 chi_1_p,
69 x2_p, inc_x2,
70 alpha_p,
72 tau_p );
73 else // if ( side == FLA_RIGHT )
75 chi_1_p,
76 x2_p, inc_x2,
77 alpha_p,
79 tau_p );
80
81 break;
82 }
83
84 case FLA_COMPLEX:
85 {
91
92 if ( side == FLA_LEFT )
94 chi_1_p,
95 x2_p, inc_x2,
96 alpha_p,
98 tau_p );
99 else // if ( side == FLA_RIGHT )
101 chi_1_p,
102 x2_p, inc_x2,
103 alpha_p,
105 tau_p );
106
107 break;
108 }
109
111 {
117
118 if ( side == FLA_LEFT )
120 chi_1_p,
121 x2_p, inc_x2,
122 alpha_p,
124 tau_p );
125 else // if ( side == FLA_RIGHT )
127 chi_1_p,
128 x2_p, inc_x2,
129 alpha_p,
131 tau_p );
132
133 break;
134 }
135 }
136
137 return FLA_SUCCESS;
138}
FLA_Error FLA_Househ2s_UT_l_opd(int m_x2, double *chi_1, double *x2, int inc_x2, double *alpha, double *chi_1_minus_alpha, double *tau)
Definition FLA_Househ2s_UT.c:237
FLA_Error FLA_Househ2s_UT_l_ops(int m_x2, float *chi_1, float *x2, int inc_x2, float *alpha, float *chi_1_minus_alpha, float *tau)
Definition FLA_Househ2s_UT.c:142
FLA_Error FLA_Househ2s_UT_r_opz(int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *alpha, dcomplex *chi_1_minus_alpha, dcomplex *tau)
Definition FLA_Househ2s_UT.c:610
FLA_Error FLA_Househ2s_UT_l_opz(int m_x2, dcomplex *chi_1, dcomplex *x2, int inc_x2, dcomplex *alpha, dcomplex *chi_1_minus_alpha, dcomplex *tau)
Definition FLA_Househ2s_UT.c:443
FLA_Error FLA_Househ2s_UT_l_opc(int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *alpha, scomplex *chi_1_minus_alpha, scomplex *tau)
Definition FLA_Househ2s_UT.c:332
FLA_Error FLA_Househ2s_UT_r_opd(int m_x2, double *chi_1, double *x2, int inc_x2, double *alpha, double *chi_1_minus_alpha, double *tau)
Definition FLA_Househ2s_UT.c:572
FLA_Error FLA_Househ2s_UT_r_ops(int m_x2, float *chi_1, float *x2, int inc_x2, float *alpha, float *chi_1_minus_alpha, float *tau)
Definition FLA_Househ2s_UT.c:555
FLA_Error FLA_Househ2s_UT_r_opc(int m_x2, scomplex *chi_1, scomplex *x2, int inc_x2, scomplex *alpha, scomplex *chi_1_minus_alpha, scomplex *tau)
Definition FLA_Househ2s_UT.c:589
FLA_Error FLA_Househ2s_UT_check(FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj alpha, FLA_Obj chi_1_minus_alpha, FLA_Obj tau)
Definition FLA_Househ2s_UT_check.c:13

References FLA_Check_error_level(), FLA_Househ2s_UT_check(), FLA_Househ2s_UT_l_opc(), FLA_Househ2s_UT_l_opd(), FLA_Househ2s_UT_l_ops(), FLA_Househ2s_UT_l_opz(), FLA_Househ2s_UT_r_opc(), FLA_Househ2s_UT_r_opd(), FLA_Househ2s_UT_r_ops(), FLA_Househ2s_UT_r_opz(), FLA_Obj_datatype(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), and i.

Referenced by FLA_Bidiag_UT_u_step_unb_var3(), and FLA_Bidiag_UT_u_step_unb_var4().

◆ FLA_Househ2s_UT_check()

FLA_Error FLA_Househ2s_UT_check ( FLA_Side  side,
FLA_Obj  chi_1,
FLA_Obj  x2,
FLA_Obj  alpha,
FLA_Obj  chi_1_minus_alpha,
FLA_Obj  tau 
)

◆ FLA_Househ2s_UT_l_opc()

FLA_Error FLA_Househ2s_UT_l_opc ( int  m_x2,
scomplex chi_1,
scomplex x2,
int  inc_x2,
scomplex alpha,
scomplex chi_1_minus_alpha,
scomplex tau 
)
338{
340 scomplex y[2];
341 float abs_chi_1;
342 float norm_x_2;
343 float norm_x;
346 int i_one = 1;
347 int i_two = 2;
348
349 //
350 // Compute the 2-norm of x_2:
351 //
352 // norm_x_2 := || x_2 ||_2
353 //
354
356 x2, inc_x2,
357 &norm_x_2 );
358
359 //
360 // If 2-norm of x_2 is zero, then return with trivial values.
361 //
362
363 if ( norm_x_2 == 0.0F )
364 {
365 alpha->real = -(chi_1->real);
366 alpha->imag = -(chi_1->imag);
367 chi_1_minus_alpha->real = 2.0F * chi_1->real;
368 chi_1_minus_alpha->imag = 2.0F * chi_1->imag;
369 tau->real = one_half.real;
370 tau->imag = one_half.imag;
371
372 return FLA_SUCCESS;
373 }
374
375 //
376 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
377 // of chi_1:
378 //
379 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
380 //
381
383 chi_1, i_one,
384 &abs_chi_1 );
385
386 //
387 // Compute the 2-norm of x via the two norms previously computed above:
388 //
389 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
390 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
391 //
392
393 y[0].real = abs_chi_1;
394 y[0].imag = 0.0;
395
396 y[1].real = norm_x_2;
397 y[1].imag = 0.0F;
398
400 y, i_one,
401 &norm_x );
402
403 //
404 // Compute alpha:
405 //
406 // alpha := - || x ||_2 * chi_1 / | chi_1 |
407 //
408
409 if ( abs_chi_1 == 0.0F )
410 {
411 alpha->real = norm_x * ( -1.0F );
412 alpha->imag = norm_x * ( -1.0F );
413 }
414 else
415 {
416 alpha->real = norm_x * ( -chi_1->real / abs_chi_1 );
417 alpha->imag = norm_x * ( -chi_1->imag / abs_chi_1 );
418 }
419
420 chi_1_minus_alpha->real = chi_1->real - alpha->real;
421 chi_1_minus_alpha->imag = chi_1->imag - alpha->imag;
422
423 //
424 // Compute tau:
425 //
426 // tau := ( 1 + u_2' * u_2 ) / 2
427 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
428 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
429 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
430 //
432
436 tau->imag = 0.0F;
437
438 return FLA_SUCCESS;
439}

References bl1_cnrm2(), FLA_ONE_HALF, and i.

Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_opc().

◆ FLA_Househ2s_UT_l_opd()

FLA_Error FLA_Househ2s_UT_l_opd ( int  m_x2,
double chi_1,
double x2,
int  inc_x2,
double alpha,
double chi_1_minus_alpha,
double tau 
)
243{
245 double y[2];
246 double abs_chi_1;
247 double norm_x_2;
248 double norm_x;
251 int i_one = 1;
252 int i_two = 2;
253
254 //
255 // Compute the 2-norm of x_2:
256 //
257 // norm_x_2 := || x_2 ||_2
258 //
259
261 x2, inc_x2,
262 &norm_x_2 );
263
264 //
265 // If 2-norm of x_2 is zero, then return with trivial values.
266 //
267
268 if ( norm_x_2 == 0.0 )
269 {
270 *alpha = -(*chi_1);
271 *chi_1_minus_alpha = 2.0 * (*chi_1);
272 *tau = one_half;
273
274 return FLA_SUCCESS;
275 }
276
277 //
278 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
279 // of chi_1:
280 //
281 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
282 //
283
285 chi_1, i_one,
286 &abs_chi_1 );
287
288 //
289 // Compute the 2-norm of x via the two norms previously computed above:
290 //
291 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
292 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
293 //
294
295 y[0] = abs_chi_1;
296 y[1] = norm_x_2;
297
299 y, i_one,
300 &norm_x );
301
302 //
303 // Compute alpha:
304 //
305 // alpha := - || x ||_2 * chi_1 / | chi_1 |
306 // = -sign( chi_1 ) * || x ||_2
307 //
308
309 *alpha = -dsign( *chi_1 ) * norm_x;
310
311 *chi_1_minus_alpha = (*chi_1) - (*alpha);
312
313 //
314 // Compute tau:
315 //
316 // tau := ( 1 + u_2' * u_2 ) / 2
317 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
318 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
319 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
320 //
322
326
327 return FLA_SUCCESS;
328}

References bl1_dnrm2(), FLA_ONE_HALF, and i.

Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_opd().

◆ FLA_Househ2s_UT_l_ops()

FLA_Error FLA_Househ2s_UT_l_ops ( int  m_x2,
float chi_1,
float x2,
int  inc_x2,
float alpha,
float chi_1_minus_alpha,
float tau 
)
148{
150 float y[2];
151 float abs_chi_1;
152 float norm_x_2;
153 float norm_x;
156 int i_one = 1;
157 int i_two = 2;
158
159 //
160 // Compute the 2-norm of x_2:
161 //
162 // norm_x_2 := || x_2 ||_2
163 //
164
166 x2, inc_x2,
167 &norm_x_2 );
168
169 //
170 // If 2-norm of x_2 is zero, then return with trivial values.
171 //
172
173 if ( norm_x_2 == 0.0F )
174 {
175 *alpha = -(*chi_1);
176 *chi_1_minus_alpha = 2.0F * (*chi_1);
177 *tau = one_half;
178
179 return FLA_SUCCESS;
180 }
181
182 //
183 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
184 // of chi_1:
185 //
186 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
187 //
188
190 chi_1, i_one,
191 &abs_chi_1 );
192
193 //
194 // Compute the 2-norm of x via the two norms previously computed above:
195 //
196 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
197 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
198 //
199
200 y[0] = abs_chi_1;
201 y[1] = norm_x_2;
202
204 y, i_one,
205 &norm_x );
206
207 //
208 // Compute alpha:
209 //
210 // alpha := - || x ||_2 * chi_1 / | chi_1 |
211 // = -sign( chi_1 ) * || x ||_2
212 //
213
214 *alpha = -ssign( *chi_1 ) * norm_x;
215
216 *chi_1_minus_alpha = (*chi_1) - (*alpha);
217
218 //
219 // Compute tau:
220 //
221 // tau := ( 1 + u_2' * u_2 ) / 2
222 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
223 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
224 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
225 //
227
231
232 return FLA_SUCCESS;
233}

References bl1_snrm2(), FLA_ONE_HALF, and i.

Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_ops().

◆ FLA_Househ2s_UT_l_opz()

FLA_Error FLA_Househ2s_UT_l_opz ( int  m_x2,
dcomplex chi_1,
dcomplex x2,
int  inc_x2,
dcomplex alpha,
dcomplex chi_1_minus_alpha,
dcomplex tau 
)
449{
451 dcomplex y[2];
452 double abs_chi_1;
453 double norm_x_2;
454 double norm_x;
457 int i_one = 1;
458 int i_two = 2;
459
460 //
461 // Compute the 2-norm of x_2:
462 //
463 // norm_x_2 := || x_2 ||_2
464 //
465
467 x2, inc_x2,
468 &norm_x_2 );
469
470 //
471 // If 2-norm of x_2 is zero, then return with trivial values.
472 //
473
474 if ( norm_x_2 == 0.0 )
475 {
476 alpha->real = -(chi_1->real);
477 alpha->imag = -(chi_1->imag);
478 chi_1_minus_alpha->real = 2.0 * chi_1->real;
479 chi_1_minus_alpha->imag = 2.0 * chi_1->imag;
480 tau->real = one_half.real;
481 tau->imag = one_half.imag;
482
483 return FLA_SUCCESS;
484 }
485
486 //
487 // Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
488 // of chi_1:
489 //
490 // abs_chi_1 := | chi_1 | = || chi_1 ||_2
491 //
492
494 chi_1, i_one,
495 &abs_chi_1 );
496
497 //
498 // Compute the 2-norm of x via the two norms previously computed above:
499 //
500 // norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
501 // || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
502 //
503
504 y[0].real = abs_chi_1;
505 y[0].imag = 0.0;
506
507 y[1].real = norm_x_2;
508 y[1].imag = 0.0;
509
511 y, i_one,
512 &norm_x );
513
514 //
515 // Compute alpha:
516 //
517 // alpha := - || x ||_2 * chi_1 / | chi_1 |
518 //
519
520 if ( abs_chi_1 == 0.0 )
521 {
522 alpha->real = norm_x * ( -1.0 );
523 alpha->imag = norm_x * ( -1.0 );
524 }
525 else
526 {
527 alpha->real = norm_x * ( -chi_1->real / abs_chi_1 );
528 alpha->imag = norm_x * ( -chi_1->imag / abs_chi_1 );
529 }
530
531 chi_1_minus_alpha->real = chi_1->real - alpha->real;
532 chi_1_minus_alpha->imag = chi_1->imag - alpha->imag;
533
534 //
535 // Compute tau:
536 //
537 // tau := ( 1 + u_2' * u_2 ) / 2
538 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
539 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
540 // = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
541 //
543
547 tau->imag = 0.0;
548
549 return FLA_SUCCESS;
550}

References bl1_znrm2(), FLA_ONE_HALF, and i.

Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_opz().

◆ FLA_Househ2s_UT_r_opc()

FLA_Error FLA_Househ2s_UT_r_opc ( int  m_x2,
scomplex chi_1,
scomplex x2,
int  inc_x2,
scomplex alpha,
scomplex chi_1_minus_alpha,
scomplex tau 
)
595{
597 chi_1,
598 x2, inc_x2,
599 alpha,
601 tau );
602
603 //chi_1_minus_alpha->real = chi_1->real - alpha->real;
604 //chi_1_minus_alpha->imag = chi_1->imag - -alpha->imag;
605
606 return FLA_SUCCESS;
607}

References FLA_Househ2s_UT_l_opc(), and i.

Referenced by FLA_Bidiag_UT_u_step_ofc_var3(), FLA_Bidiag_UT_u_step_ofc_var4(), FLA_Bidiag_UT_u_step_opc_var3(), FLA_Bidiag_UT_u_step_opc_var4(), and FLA_Househ2s_UT().

◆ FLA_Househ2s_UT_r_opd()

FLA_Error FLA_Househ2s_UT_r_opd ( int  m_x2,
double chi_1,
double x2,
int  inc_x2,
double alpha,
double chi_1_minus_alpha,
double tau 
)

◆ FLA_Househ2s_UT_r_ops()

FLA_Error FLA_Househ2s_UT_r_ops ( int  m_x2,
float chi_1,
float x2,
int  inc_x2,
float alpha,
float chi_1_minus_alpha,
float tau 
)

◆ FLA_Househ2s_UT_r_opz()

FLA_Error FLA_Househ2s_UT_r_opz ( int  m_x2,
dcomplex chi_1,
dcomplex x2,
int  inc_x2,
dcomplex alpha,
dcomplex chi_1_minus_alpha,
dcomplex tau 
)
616{
618 chi_1,
619 x2, inc_x2,
620 alpha,
622 tau );
623
624 //chi_1_minus_alpha->real = chi_1->real - alpha->real;
625 //chi_1_minus_alpha->imag = chi_1->imag - -alpha->imag;
626
627 return FLA_SUCCESS;
628}

References FLA_Househ2s_UT_l_opz(), and i.

Referenced by FLA_Bidiag_UT_u_step_ofz_var3(), FLA_Bidiag_UT_u_step_ofz_var4(), FLA_Bidiag_UT_u_step_opz_var3(), FLA_Bidiag_UT_u_step_opz_var4(), and FLA_Househ2s_UT().

◆ FLA_Househ3UD_UT()

FLA_Error FLA_Househ3UD_UT ( FLA_Obj  chi_1,
FLA_Obj  x2,
FLA_Obj  y2,
FLA_Obj  tau 
)
51{
52 FLA_Datatype datatype;
53 int m_x1;
54 int m_y2;
55 int inc_x1;
56 int inc_y2;
57
58 datatype = FLA_Obj_datatype( x1 );
59
64
67
68 switch ( datatype )
69 {
70 case FLA_FLOAT:
71 {
72 float* chi_0_p = ( float* ) FLA_FLOAT_PTR( chi_0 );
73 float* x1_p = ( float* ) FLA_FLOAT_PTR( x1 );
74 float* y2_p = ( float* ) FLA_FLOAT_PTR( y2 );
75 float* tau_p = ( float* ) FLA_FLOAT_PTR( tau );
76
78 m_y2,
79 chi_0_p,
80 x1_p, inc_x1,
81 y2_p, inc_y2,
82 tau_p );
83 break;
84 }
85
86 case FLA_DOUBLE:
87 {
88 double* chi_0_p = ( double* ) FLA_DOUBLE_PTR( chi_0 );
89 double* x1_p = ( double* ) FLA_DOUBLE_PTR( x1 );
90 double* y2_p = ( double* ) FLA_DOUBLE_PTR( y2 );
91 double* tau_p = ( double* ) FLA_DOUBLE_PTR( tau );
92
94 m_y2,
95 chi_0_p,
96 x1_p, inc_x1,
97 y2_p, inc_y2,
98 tau_p );
99 break;
100 }
101
102 case FLA_COMPLEX:
103 {
108
110 m_y2,
111 chi_0_p,
112 x1_p, inc_x1,
113 y2_p, inc_y2,
114 tau_p );
115 break;
116 }
117
119 {
124
126 m_y2,
127 chi_0_p,
128 x1_p, inc_x1,
129 y2_p, inc_y2,
130 tau_p );
131 break;
132 }
133 }
134
135 return FLA_SUCCESS;
136}
FLA_Error FLA_Househ3UD_UT_opz(int m_x1, int m_y2, dcomplex *chi_0, dcomplex *x1, int inc_x1, dcomplex *y2, int inc_y2, dcomplex *tau)
Definition FLA_Househ3UD_UT.c:527
FLA_Error FLA_Househ3UD_UT_opd(int m_x1, int m_y2, double *chi_0, double *x1, int inc_x1, double *y2, int inc_y2, double *tau)
Definition FLA_Househ3UD_UT.c:267
FLA_Error FLA_Househ3UD_UT_ops(int m_x1, int m_y2, float *chi_0, float *x1, int inc_x1, float *y2, int inc_y2, float *tau)
Definition FLA_Househ3UD_UT.c:140
FLA_Error FLA_Househ3UD_UT_opc(int m_x1, int m_y2, scomplex *chi_0, scomplex *x1, int inc_x1, scomplex *y2, int inc_y2, scomplex *tau)
Definition FLA_Househ3UD_UT.c:393
FLA_Error FLA_Househ3UD_UT_check(FLA_Obj chi_1, FLA_Obj x2, FLA_Obj y2, FLA_Obj tau)
Definition FLA_Househ3UD_UT_check.c:13
x1
Definition bl1_dotsv2.c:374

References FLA_Check_error_level(), FLA_Househ3UD_UT_check(), FLA_Househ3UD_UT_opc(), FLA_Househ3UD_UT_opd(), FLA_Househ3UD_UT_ops(), FLA_Househ3UD_UT_opz(), FLA_Obj_datatype(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), i, and x1.

Referenced by FLA_UDdate_UT_unb_var1().

◆ FLA_Househ3UD_UT_check()

FLA_Error FLA_Househ3UD_UT_check ( FLA_Obj  chi_1,
FLA_Obj  x2,
FLA_Obj  y2,
FLA_Obj  tau 
)

◆ FLA_Househ3UD_UT_opc()

FLA_Error FLA_Househ3UD_UT_opc ( int  m_x2,
int  m_y2,
scomplex chi_1,
scomplex x2,
int  inc_x2,
scomplex y2,
int  inc_y2,
scomplex tau 
)
399{
404 float abs_chi_0;
405 float norm_x_1;
406 float norm_y_2;
407 float lambda;
409 int i_one = 1;
410
411 //
412 // Compute the 2-norms of x_1 and y_2:
413 //
414 // norm_x_1 := || x_1 ||_2
415 // norm_y_2 := || y_2 ||_2
416 //
417
419 x1, inc_x1,
420 &norm_x_1 );
421
423 y2, inc_y2,
424 &norm_y_2 );
425
426 //
427 // If 2-norms of x_1, y_2 are zero, then return with trivial tau, chi_0 values.
428 //
429
430 if ( norm_x_1 == 0.0F &&
431 norm_y_2 == 0.0F )
432 {
433 chi_0->real = -(chi_0->real);
434 chi_0->imag = -(chi_0->imag);
435 tau->real = one_half.real;
436 tau->imag = one_half.imag;
437
438 return FLA_SUCCESS;
439 }
440
441 //
442 // Compute the absolute value (magnitude) of chi_0, which equals the 2-norm
443 // of chi_0:
444 //
445 // abs_chi_0 := | chi_0 | = || chi_0 ||_2
446 //
447
449 chi_0, i_one,
450 &abs_chi_0 );
451
452 //
453 // Compute lambda:
454 //
455 // lambda := sqrt( conj(chi0) chi0 + x1' x1 - y2' y2 )
456 //
457
460 norm_y_2 * norm_y_2 );
461
462 //
463 // Compute alpha:
464 //
465 // alpha := - lambda * chi_0 / | chi_0 |
466 //
467
468 alpha.real = -chi_0->real * lambda / abs_chi_0;
469 alpha.imag = -chi_0->imag * lambda / abs_chi_0;
470
471 //
472 // Overwrite x_1 and y_2 with u_1 and v_2, respectively:
473 //
474 // x_1 := x_1 / ( chi_0 - alpha )
475 // y_2 := y_2 / -( chi_0 - alpha )
476 //
477
478 chi_0_minus_alpha.real = chi_0->real - alpha.real;
479 chi_0_minus_alpha.imag = chi_0->imag - alpha.imag;
480
482 m_x1,
484 x1, inc_x1 );
485
488
490 m_y2,
492 y2, inc_y2 );
493
494 //
495 // Compute tau:
496 //
497 // tau := ( 1 + u_1' * u_1 - v_2' * v_2 ) / 2
498 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_1' * x_1 - y_2' * y_2 ) /
499 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
500 // = ( | chi_1 - alpha |^2 + || x_2 ||_2^2 - || y_2 ||_2^2 ) /
501 // ( 2 * | chi_1 - alpha |^2 )
502 //
503
506
507 tau->real = ( abs_sq_chi_0_minus_alpha +
509 norm_y_2 * norm_y_2 ) /
510 ( 2.0F * abs_sq_chi_0_minus_alpha );
511 tau->imag = 0.0F;
512
513 //
514 // Overwrite chi_0 with alpha:
515 //
516 // chi_0 := alpha
517 //
518
519 chi_0->real = alpha.real;
520 chi_0->imag = alpha.imag;
521
522 return FLA_SUCCESS;
523}

References bl1_cinvscalv(), bl1_cnrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, i, and x1.

Referenced by FLA_Househ3UD_UT(), and FLA_UDdate_UT_opc_var1().

◆ FLA_Househ3UD_UT_opd()

FLA_Error FLA_Househ3UD_UT_opd ( int  m_x2,
int  m_y2,
double chi_1,
double x2,
int  inc_x2,
double y2,
int  inc_y2,
double tau 
)
273{
275 double alpha;
276 double chi_0_minus_alpha;
278 double abs_chi_0;
279 double norm_x_1;
280 double norm_y_2;
281 double lambda;
283 int i_one = 1;
284
285 //
286 // Compute the 2-norms of x_1 and y_2:
287 //
288 // norm_x_1 := || x_1 ||_2
289 // norm_y_2 := || y_2 ||_2
290 //
291
293 x1, inc_x1,
294 &norm_x_1 );
295
297 y2, inc_y2,
298 &norm_y_2 );
299
300 //
301 // If 2-norms of x_1, y_2 are zero, then return with trivial tau, chi_0 values.
302 //
303
304 if ( norm_x_1 == 0.0 &&
305 norm_y_2 == 0.0 )
306 {
307 *chi_0 = -(*chi_0);
308 *tau = one_half;
309
310 return FLA_SUCCESS;
311 }
312
313 //
314 // Compute the absolute value (magnitude) of chi_0, which equals the 2-norm
315 // of chi_0:
316 //
317 // abs_chi_0 := | chi_0 | = || chi_0 ||_2
318 //
319
321 chi_0, i_one,
322 &abs_chi_0 );
323
324 //
325 // Compute lambda:
326 //
327 // lambda := sqrt( conj(chi0) chi0 + x1' x1 - y2' y2 )
328 //
329
332 norm_y_2 * norm_y_2 );
333
334 // Compute alpha:
335 //
336 // alpha := - lambda * chi_0 / | chi_0 |
337 // = -sign( chi_0 ) * lambda
338 //
339
340 alpha = -dsign( *chi_0 ) * lambda;
341
342 //
343 // Overwrite x_1 and y_2 with u_1 and v_2, respectively:
344 //
345 // x_1 := x_1 / ( chi_0 - alpha )
346 // y_2 := y_2 / -( chi_0 - alpha )
347 //
348
349 chi_0_minus_alpha = (*chi_0) - alpha;
350
352 m_x1,
354 x1, inc_x1 );
355
357
359 m_y2,
361 y2, inc_y2 );
362
363 //
364 // Compute tau:
365 //
366 // tau := ( 1 + u_1' * u_1 - v_2' * v_2 ) / 2
367 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_1' * x_1 - y_2' * y_2 ) /
368 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
369 // = ( | chi_1 - alpha |^2 + || x_2 ||_2^2 - || y_2 ||_2^2 ) /
370 // ( 2 * | chi_1 - alpha |^2 )
371 //
372
374
377 norm_y_2 * norm_y_2 ) /
378 ( 2.0 * abs_sq_chi_0_minus_alpha );
379
380 //
381 // Overwrite chi_0 with alpha:
382 //
383 // chi_0 := alpha
384 //
385
386 *chi_0 = alpha;
387
388 return FLA_SUCCESS;
389}

References bl1_dinvscalv(), bl1_dnrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, i, and x1.

Referenced by FLA_Househ3UD_UT(), and FLA_UDdate_UT_opd_var1().

◆ FLA_Househ3UD_UT_ops()

FLA_Error FLA_Househ3UD_UT_ops ( int  m_x2,
int  m_y2,
float chi_1,
float x2,
int  inc_x2,
float y2,
int  inc_y2,
float tau 
)
146{
148 float alpha;
149 float chi_0_minus_alpha;
151 float abs_chi_0;
152 float norm_x_1;
153 float norm_y_2;
154 float lambda;
156 int i_one = 1;
157
158 //
159 // Compute the 2-norms of x_1 and y_2:
160 //
161 // norm_x_1 := || x_1 ||_2
162 // norm_y_2 := || y_2 ||_2
163 //
164
166 x1, inc_x1,
167 &norm_x_1 );
168
170 y2, inc_y2,
171 &norm_y_2 );
172
173 //
174 // If 2-norms of x_1, y_2 are zero, then return with trivial tau, chi_0 values.
175 //
176
177 if ( norm_x_1 == 0.0F &&
178 norm_y_2 == 0.0F )
179 {
180 *chi_0 = -(*chi_0);
181 *tau = one_half;
182
183 return FLA_SUCCESS;
184 }
185
186 //
187 // Compute the absolute value (magnitude) of chi_0, which equals the 2-norm
188 // of chi_0:
189 //
190 // abs_chi_0 := | chi_0 | = || chi_0 ||_2
191 //
192
194 chi_0, i_one,
195 &abs_chi_0 );
196
197 //
198 // Compute lambda:
199 //
200 // lambda := sqrt( conj(chi0) chi0 + x1' x1 - y2' y2 )
201 //
202
205 norm_y_2 * norm_y_2 );
206
207 // Compute alpha:
208 //
209 // alpha := - lambda * chi_0 / | chi_0 |
210 // = -sign( chi_0 ) * lambda
211 //
212
213 alpha = -ssign( *chi_0 ) * lambda;
214
215
216 //
217 // Overwrite x_1 and y_2 with u_1 and v_2, respectively:
218 //
219 // x_1 := x_1 / ( chi_0 - alpha )
220 // y_2 := y_2 / -( chi_0 - alpha )
221 //
222
223 chi_0_minus_alpha = (*chi_0) - alpha;
224
226 m_x1,
228 x1, inc_x1 );
229
231
233 m_y2,
235 y2, inc_y2 );
236
237 //
238 // Compute tau:
239 //
240 // tau := ( 1 + u_1' * u_1 - v_2' * v_2 ) / 2
241 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_1' * x_1 - y_2' * y_2 ) /
242 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
243 // = ( | chi_1 - alpha |^2 + || x_2 ||_2^2 - || y_2 ||_2^2 ) /
244 // ( 2 * | chi_1 - alpha |^2 )
245 //
246
248
251 norm_y_2 * norm_y_2 ) /
252 ( 2.0F * abs_sq_chi_0_minus_alpha );
253
254 //
255 // Overwrite chi_0 with alpha:
256 //
257 // chi_0 := alpha
258 //
259
260 *chi_0 = alpha;
261
262 return FLA_SUCCESS;
263}

References bl1_sinvscalv(), bl1_snrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, i, and x1.

Referenced by FLA_Househ3UD_UT(), and FLA_UDdate_UT_ops_var1().

◆ FLA_Househ3UD_UT_opz()

FLA_Error FLA_Househ3UD_UT_opz ( int  m_x2,
int  m_y2,
dcomplex chi_1,
dcomplex x2,
int  inc_x2,
dcomplex y2,
int  inc_y2,
dcomplex tau 
)
533{
538 double abs_chi_0;
539 double norm_x_1;
540 double norm_y_2;
541 double lambda;
543 int i_one = 1;
544
545 //
546 // Compute the 2-norms of x_1 and y_2:
547 //
548 // norm_x_1 := || x_1 ||_2
549 // norm_y_2 := || y_2 ||_2
550 //
551
553 x1, inc_x1,
554 &norm_x_1 );
555
557 y2, inc_y2,
558 &norm_y_2 );
559
560 //
561 // If 2-norms of x_1, y_2 are zero, then return with trivial tau, chi_0 values.
562 //
563
564 if ( norm_x_1 == 0.0 &&
565 norm_y_2 == 0.0 )
566 {
567 chi_0->real = -(chi_0->real);
568 chi_0->imag = -(chi_0->imag);
569 tau->real = one_half.real;
570 tau->imag = one_half.imag;
571
572 return FLA_SUCCESS;
573 }
574
575 //
576 // Compute the absolute value (magnitude) of chi_0, which equals the 2-norm
577 // of chi_0:
578 //
579 // abs_chi_0 := | chi_0 | = || chi_0 ||_2
580 //
581
583 chi_0, i_one,
584 &abs_chi_0 );
585
586 //
587 // Compute lambda:
588 //
589 // lambda := sqrt( conj(chi0) chi0 + x1' x1 - y2' y2 )
590 //
591
594 norm_y_2 * norm_y_2 );
595
596 //
597 // Compute alpha:
598 //
599 // alpha := - lambda * chi_0 / | chi_0 |
600 //
601
602 alpha.real = -chi_0->real * lambda / abs_chi_0;
603 alpha.imag = -chi_0->imag * lambda / abs_chi_0;
604
605 //
606 // Overwrite x_1 and y_2 with u_1 and v_2, respectively:
607 //
608 // x_1 := x_1 / ( chi_0 - alpha )
609 // y_2 := y_2 / -( chi_0 - alpha )
610 //
611
612 chi_0_minus_alpha.real = chi_0->real - alpha.real;
613 chi_0_minus_alpha.imag = chi_0->imag - alpha.imag;
614
616 m_x1,
618 x1, inc_x1 );
619
622
624 m_y2,
626 y2, inc_y2 );
627
628 //
629 // Compute tau:
630 //
631 // tau := ( 1 + u_1' * u_1 - v_2' * v_2 ) / 2
632 // = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_1' * x_1 - y_2' * y_2 ) /
633 // ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
634 // = ( | chi_1 - alpha |^2 + || x_2 ||_2^2 - || y_2 ||_2^2 ) /
635 // ( 2 * | chi_1 - alpha |^2 )
636 //
637
640
641 tau->real = ( abs_sq_chi_0_minus_alpha +
643 norm_y_2 * norm_y_2 ) /
644 ( 2.0 * abs_sq_chi_0_minus_alpha );
645 tau->imag = 0.0;
646
647 //
648 // Overwrite chi_0 with alpha:
649 //
650 // chi_0 := alpha
651 //
652
653 chi_0->real = alpha.real;
654 chi_0->imag = alpha.imag;
655
656 return FLA_SUCCESS;
657}

References bl1_zinvscalv(), bl1_znrm2(), BLIS1_NO_CONJUGATE, FLA_ONE_HALF, i, and x1.

Referenced by FLA_Househ3UD_UT(), and FLA_UDdate_UT_opz_var1().

◆ FLA_Introduce_bulge_check()

FLA_Error FLA_Introduce_bulge_check ( FLA_Obj  shift,
FLA_Obj  gamma,
FLA_Obj  sigma,
FLA_Obj  delta1,
FLA_Obj  epsilon1,
FLA_Obj  delta2,
FLA_Obj  beta,
FLA_Obj  epsilon2 
)
14{
16
19
22
25
28
31
34
37
40
43
46
49
52
55
58
61
64
67
68 return FLA_SUCCESS;
69}

References FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_nonconstant_object(), and FLA_Check_real_object().

◆ fla_lsame()

logical fla_lsame ( char ca,
char cb,
ftnlen  ca_len,
ftnlen  cb_len 
)
21{
22 /* System generated locals */
24
25 /* Local variables */
26 static integer inta, intb, zcode;
27
28
29/* -- LAPACK auxiliary routine (version 3.2) -- */
30/* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
31/* November 2006 */
32
33/* .. Scalar Arguments .. */
34/* .. */
35
36/* Purpose */
37/* ======= */
38
39/* LSAME returns .TRUE. if CA is the same letter as CB regardless of */
40/* case. */
41
42/* Arguments */
43/* ========= */
44
45/* CA (input) CHARACTER*1 */
46/* CB (input) CHARACTER*1 */
47/* CA and CB specify the single characters to be compared. */
48
49/* ===================================================================== */
50
51/* .. Intrinsic Functions .. */
52/* .. */
53/* .. Local Scalars .. */
54/* .. */
55/* .. Executable Statements .. */
56
57/* Test if the characters are equal */
58
59 ret_val = *(unsigned char *)ca == *(unsigned char *)cb;
60 if (ret_val) {
61 return ret_val;
62 }
63
64/* Now test for equivalence if both characters are alphabetic. */
65
66 zcode = 'Z';
67
68/* Use 'Z' rather than 'A' so that ASCII can be detected on Prime */
69/* machines, on which ICHAR returns a value with bit 8 set. */
70/* ICHAR('A') on Prime machines returns 193 which is the same as */
71/* ICHAR('A') on an EBCDIC machine. */
72
73 inta = *(unsigned char *)ca;
74 intb = *(unsigned char *)cb;
75
76 if (zcode == 90 || zcode == 122) {
77
78/* ASCII is assumed - ZCODE is the ASCII code of either lower or */
79/* upper case 'Z'. */
80
81 if (inta >= 97 && inta <= 122) {
82 inta += -32;
83 }
84 if (intb >= 97 && intb <= 122) {
85 intb += -32;
86 }
87
88 } else if (zcode == 233 || zcode == 169) {
89
90/* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or */
91/* upper case 'Z'. */
92
93 if ((inta >= 129 && inta <= 137) || (inta >= 145 && inta <= 153) || (inta
94 >= 162 && inta <= 169)) {
95 inta += 64;
96 }
97 if ((intb >= 129 && intb <= 137) || (intb >= 145 && intb <= 153) || (intb
98 >= 162 && intb <= 169)) {
99 intb += 64;
100 }
101
102 } else if (zcode == 218 || zcode == 250) {
103
104/* ASCII is assumed, on Prime machines - ZCODE is the ASCII code */
105/* plus 128 of either lower or upper case 'Z'. */
106
107 if (inta >= 225 && inta <= 250) {
108 inta += -32;
109 }
110 if (intb >= 225 && intb <= 250) {
111 intb += -32;
112 }
113 }
114 ret_val = inta == intb;
115
116/* RETURN */
117
118/* End of LSAME */
119
120 return ret_val;
121} /* fla_lsame */

References i.

Referenced by fla_dlamch(), and fla_slamch().

◆ FLA_LU_find_zero_on_diagonal()

FLA_Error FLA_LU_find_zero_on_diagonal ( FLA_Obj  A)
14{
15 FLA_Obj ATL, ATR, A00, a01, A02,
17 A20, a21, A22;
18
21
22 FLA_Part_2x2( A, &ATL, &ATR,
23 &ABL, &ABR, 0, 0, FLA_TL );
24
25 while ( FLA_Obj_length( ATL ) < FLA_Obj_min_dim( A ) ){
26
27 FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
28 /* ************* */ /* ************************** */
29 &a10t, /**/ &alpha11, &a12t,
30 ABL, /**/ ABR, &A20, /**/ &a21, &A22,
31 1, 1, FLA_BR );
32
33 /*------------------------------------------------------------*/
34
36
37 /*------------------------------------------------------------*/
38
39 FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
40 a10t, alpha11, /**/ a12t,
41 /* ************** */ /* ************************ */
42 &ABL, /**/ &ABR, A20, a21, /**/ A22,
43 FLA_TL );
44 }
45
46 return FLA_SUCCESS;
47}
FLA_Error FLA_LU_find_zero_on_diagonal_check(FLA_Obj A)
Definition FLA_LU_find_zero_on_diagonal_check.c:13
FLA_Obj FLA_ZERO
Definition FLA_Init.c:20
FLA_Error FLA_Cont_with_3x3_to_2x2(FLA_Obj *ATL, FLA_Obj *ATR, FLA_Obj A00, FLA_Obj A01, FLA_Obj A02, FLA_Obj A10, FLA_Obj A11, FLA_Obj A12, FLA_Obj *ABL, FLA_Obj *ABR, FLA_Obj A20, FLA_Obj A21, FLA_Obj A22, FLA_Quadrant quadrant)
Definition FLA_View.c:304
FLA_Error FLA_Part_2x2(FLA_Obj A, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition FLA_View.c:17
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_Bool FLA_Obj_equals(FLA_Obj A, FLA_Obj B)
Definition FLA_Query.c:507
dim_t FLA_Obj_min_dim(FLA_Obj obj)
Definition FLA_Query.c:153
Definition FLA_type_defs.h:159

References FLA_Check_error_level(), FLA_Cont_with_3x3_to_2x2(), FLA_LU_find_zero_on_diagonal_check(), FLA_Obj_equals(), FLA_Obj_length(), FLA_Obj_min_dim(), FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLA_ZERO, and i.

Referenced by FLA_LU_nopiv(), and FLASH_LU_find_zero_on_diagonal().

◆ FLA_LU_find_zero_on_diagonal_check()

FLA_Error FLA_LU_find_zero_on_diagonal_check ( FLA_Obj  A)

◆ FLA_Mach_params()

FLA_Error FLA_Mach_params ( FLA_Machval  machval,
FLA_Obj  val 
)
14{
15 FLA_Datatype datatype;
16
17 datatype = FLA_Obj_datatype( val );
18
21
22 switch ( datatype )
23 {
24 case FLA_FLOAT:
25 {
26 float* val_p = ( float* ) FLA_FLOAT_PTR( val );
27
29
30 break;
31 }
32
33 case FLA_DOUBLE:
34 {
35 double* val_p = ( double* ) FLA_DOUBLE_PTR( val );
36
38
39 break;
40 }
41 }
42
43 return FLA_SUCCESS;
44}
double FLA_Mach_params_opd(FLA_Machval machval)
Definition FLA_Mach_params.c:74
float FLA_Mach_params_ops(FLA_Machval machval)
Definition FLA_Mach_params.c:47
FLA_Error FLA_Mach_params_check(FLA_Machval machval, FLA_Obj val)
Definition FLA_Mach_params_check.c:13

References FLA_Check_error_level(), FLA_Mach_params_check(), FLA_Mach_params_opd(), FLA_Mach_params_ops(), FLA_Obj_datatype(), and i.

Referenced by FLA_Hevd_compute_scaling(), FLA_Hevdr_external(), and FLA_Svd_compute_scaling().

◆ FLA_Mach_params_check()

FLA_Error FLA_Mach_params_check ( FLA_Machval  machval,
FLA_Obj  val 
)
14{
16
19
22
23 return FLA_SUCCESS;
24}
FLA_Error FLA_Check_valid_machval(FLA_Machval val)
Definition FLA_Check.c:1295

References FLA_Check_real_object(), and FLA_Check_valid_machval().

Referenced by FLA_Mach_params().

◆ FLA_Mach_params_opd()

double FLA_Mach_params_opd ( FLA_Machval  machval)
75{
76 static int first_time = TRUE;
77 static double vals[FLA_MACH_N_VALS];
78
79 if ( first_time )
80 {
81 char lapack_machval;
82 int i;
83
84 for( i = 0; i < FLA_MACH_N_VALS - 1; ++i )
85 {
87//printf( "querying %d %c\n", FLA_MACH_START + i, lapack_machval );
89//printf( "got back %34.29e\n", vals[i] );
90 }
91
92 // Store epsilon^2 in the last element.
93 vals[i] = vals[0] * vals[0];
94
95 first_time = FALSE;
96 }
97
98 return vals[ machval - FLA_MACH_START ];
99}
void FLA_Param_map_flame_to_netlib_machval(FLA_Machval machval, void *blas_machval)
Definition FLA_Param.c:195
doublereal fla_dlamch(char *cmach, ftnlen cmach_len)
Definition fla_dlamch.c:56

References fla_dlamch(), FLA_Param_map_flame_to_netlib_machval(), and i.

Referenced by FLA_Bsvd_compute_shift_opd(), FLA_Bsvd_compute_tol_thresh_opd(), FLA_Bsvd_ext_opd_var1(), FLA_Bsvd_ext_opz_var1(), FLA_Bsvd_v_opd_var1(), FLA_Bsvd_v_opd_var2(), FLA_Bsvd_v_opz_var1(), FLA_Bsvd_v_opz_var2(), FLA_Givens2_opd(), FLA_Mach_params(), FLA_Svv_2x2_opd(), FLA_Tevd_compute_scaling_opd(), FLA_Tevd_eigval_n_opd_var1(), FLA_Tevd_eigval_v_opd_var1(), FLA_Tevd_eigval_v_opd_var3(), FLA_Tevd_find_submatrix_opd(), FLA_Tevd_francis_n_opd_var1(), FLA_Tevd_francis_v_opd_var1(), and FLA_Tevd_n_opz_var1().

◆ FLA_Mach_params_ops()

float FLA_Mach_params_ops ( FLA_Machval  machval)
48{
49 static int first_time = TRUE;
50 static float vals[FLA_MACH_N_VALS];
51
52 if ( first_time )
53 {
54 char lapack_machval;
55 int i;
56
57 for( i = 0; i < FLA_MACH_N_VALS - 1; ++i )
58 {
60//printf( "querying %d %c\n", FLA_MACH_START + i, lapack_machval );
62//printf( "got back %34.29e\n", vals[i] );
63 }
64
65 // Store epsilon^2 in the last element.
66 vals[i] = vals[0] * vals[0];
67
68 first_time = FALSE;
69 }
70
71 return vals[ machval - FLA_MACH_START ];
72}
real fla_slamch(char *cmach, ftnlen cmach_len)
Definition fla_slamch.c:56

References FLA_Param_map_flame_to_netlib_machval(), fla_slamch(), and i.

Referenced by FLA_Bsvd_compute_shift_ops(), FLA_Bsvd_compute_tol_thresh_ops(), FLA_Bsvd_ext_opc_var1(), FLA_Bsvd_ext_ops_var1(), FLA_Bsvd_v_opc_var1(), FLA_Bsvd_v_ops_var1(), FLA_Mach_params(), FLA_Svv_2x2_ops(), and FLA_Tevd_compute_scaling_ops().

◆ fla_pow_di()

double fla_pow_di ( doublereal a,
integer n 
)
27{
28 double pow, x;
29 integer n;
30 unsigned long u;
31
32 pow = 1;
33 x = *ap;
34 n = *bp;
35
36 if( n != 0 )
37 {
38 if( n < 0 )
39 {
40 n = -n;
41 x = 1/x;
42 }
43 for( u = n; ; )
44 {
45 if( u & 01 )
46 pow *= x;
47 if( u >>= 1 )
48 x *= x;
49 else
50 break;
51 }
52 }
53 return pow;
54}

References i.

Referenced by fla_dlamc2(), and fla_dlamch().

◆ fla_pow_ri()

real fla_pow_ri ( real a,
integer n 
)
27{
28 double pow, x;
29 integer n;
30 unsigned long u;
31
32 pow = 1;
33 x = *ap;
34 n = *bp;
35
36 if( n != 0 )
37 {
38 if( n < 0 )
39 {
40 n = -n;
41 x = 1/x;
42 }
43 for( u = n; ; )
44 {
45 if( u & 01 )
46 pow *= x;
47 if( u >>= 1 )
48 x *= x;
49 else
50 break;
51 }
52 }
53 return pow;
54}

References i.

Referenced by fla_slamc2(), and fla_slamch().

◆ FLA_Pythag2()

FLA_Error FLA_Pythag2 ( FLA_Obj  chi,
FLA_Obj  psi,
FLA_Obj  rho 
)
14{
15 FLA_Datatype datatype;
16
17 datatype = FLA_Obj_datatype( chi );
18
19 switch ( datatype )
20 {
21 case FLA_FLOAT:
22 {
23 float* buff_chi = FLA_FLOAT_PTR( chi );
24 float* buff_psi = FLA_FLOAT_PTR( psi );
25 float* buff_rho = FLA_FLOAT_PTR( rho );
26
29 buff_rho );
30
31 break;
32 }
33
34 case FLA_DOUBLE:
35 {
36 double* buff_chi = FLA_DOUBLE_PTR( chi );
37 double* buff_psi = FLA_DOUBLE_PTR( psi );
38 double* buff_rho = FLA_DOUBLE_PTR( rho );
39
42 buff_rho );
43
44 break;
45 }
46
47 case FLA_COMPLEX:
48 {
50
51 break;
52 }
53
55 {
57
58 break;
59 }
60 }
61
62 return FLA_SUCCESS;
63}
FLA_Error FLA_Pythag2_opd(double *chi, double *psi, double *rho)
Definition FLA_Pythag2.c:99
FLA_Error FLA_Pythag2_ops(float *chi, float *psi, float *rho)
Definition FLA_Pythag2.c:67
* rho
Definition bl1_axpyv2bdotaxpy.c:322

References FLA_Obj_datatype(), FLA_Pythag2_opd(), FLA_Pythag2_ops(), i, and rho.

◆ FLA_Pythag2_opd()

FLA_Error FLA_Pythag2_opd ( double chi,
double psi,
double rho 
)
102{
103 double zero = bl1_d0();
104 double one = bl1_d1();
105
106 double xabs, yabs;
107 double w, z;
108 double zdivw;
109
110 xabs = fabs( *chi );
111 yabs = fabs( *psi );
112 w = max( xabs, yabs );
113 z = min( xabs, yabs );
114
115 if ( z == zero )
116 {
117 *rho = w;
118 }
119 else
120 {
121 zdivw = z / w;
122
123 *rho = w * sqrt( one + zdivw * zdivw );
124 }
125
126 return FLA_SUCCESS;
127}
double bl1_d0(void)
Definition bl1_constants.c:118
double bl1_d1(void)
Definition bl1_constants.c:54

References bl1_d0(), bl1_d1(), i, and rho.

Referenced by FLA_Pythag2().

◆ FLA_Pythag2_ops()

FLA_Error FLA_Pythag2_ops ( float chi,
float psi,
float rho 
)
70{
71 float zero = bl1_s0();
72 float one = bl1_s1();
73
74 float xabs, yabs;
75 float w, z;
76 float zdivw;
77
78 xabs = fabsf( *chi );
79 yabs = fabsf( *psi );
80 w = max( xabs, yabs );
81 z = min( xabs, yabs );
82
83 if ( z == zero )
84 {
85 *rho = w;
86 }
87 else
88 {
89 zdivw = z / w;
90
91 *rho = w * sqrt( one + zdivw * zdivw );
92 }
93
94 return FLA_SUCCESS;
95}
float bl1_s0(void)
Definition bl1_constants.c:111
float bl1_s1(void)
Definition bl1_constants.c:47

References bl1_s0(), bl1_s1(), i, and rho.

Referenced by FLA_Pythag2().

◆ FLA_Pythag3()

FLA_Error FLA_Pythag3 ( FLA_Obj  chi,
FLA_Obj  psi,
FLA_Obj  zeta,
FLA_Obj  rho 
)
14{
15 FLA_Datatype datatype;
16
17 datatype = FLA_Obj_datatype( chi );
18
19 switch ( datatype )
20 {
21 case FLA_FLOAT:
22 {
23 float* buff_chi = FLA_FLOAT_PTR( chi );
24 float* buff_psi = FLA_FLOAT_PTR( psi );
25 float* buff_zeta = FLA_FLOAT_PTR( zeta );
26 float* buff_rho = FLA_FLOAT_PTR( rho );
27
31 buff_rho );
32
33 break;
34 }
35
36 case FLA_DOUBLE:
37 {
38 double* buff_chi = FLA_DOUBLE_PTR( chi );
39 double* buff_psi = FLA_DOUBLE_PTR( psi );
40 double* buff_zeta = FLA_DOUBLE_PTR( zeta );
41 double* buff_rho = FLA_DOUBLE_PTR( rho );
42
46 buff_rho );
47
48 break;
49 }
50
51 case FLA_COMPLEX:
52 {
54
55 break;
56 }
57
59 {
61
62 break;
63 }
64 }
65
66 return FLA_SUCCESS;
67}
FLA_Error FLA_Pythag3_opd(double *chi, double *psi, double *zeta, double *rho)
Definition FLA_Pythag3.c:112
FLA_Error FLA_Pythag3_ops(float *chi, float *psi, float *zeta, float *rho)
Definition FLA_Pythag3.c:71

References FLA_Obj_datatype(), FLA_Pythag3_opd(), FLA_Pythag3_ops(), i, and rho.

◆ FLA_Pythag3_opd()

FLA_Error FLA_Pythag3_opd ( double chi,
double psi,
double zeta,
double rho 
)
116{
117 double zero = bl1_d0();
118
119 double xabs, yabs, zabs;
120 double w;
121 double xabsdivw;
122 double yabsdivw;
123 double zabsdivw;
124
125 xabs = fabs( *chi );
126 yabs = fabs( *psi );
127 zabs = fabs( *zeta );
128 w = max( xabs, max( yabs, zabs ) );
129
130 if ( w == zero )
131 {
132 // From netlib dlapy3:
133 // W can be zero for max(0,nan,0). Adding all three entries
134 // together will make sure NaN will not disappear.
135 *rho = xabs + yabs + zabs;
136 }
137 else
138 {
139 xabsdivw = xabs / w;
140 yabsdivw = yabs / w;
141 zabsdivw = zabs / w;
142
143 *rho = w * sqrt( xabsdivw * xabsdivw +
145 zabsdivw * zabsdivw );
146 }
147
148 return FLA_SUCCESS;
149}

References bl1_d0(), i, and rho.

Referenced by FLA_Pythag3().

◆ FLA_Pythag3_ops()

FLA_Error FLA_Pythag3_ops ( float chi,
float psi,
float zeta,
float rho 
)
75{
76 float zero = bl1_s0();
77
78 float xabs, yabs, zabs;
79 float w;
80 float xabsdivw;
81 float yabsdivw;
82 float zabsdivw;
83
84 xabs = fabsf( *chi );
85 yabs = fabsf( *psi );
86 zabs = fabsf( *zeta );
87 w = max( xabs, max( yabs, zabs ) );
88
89 if ( w == zero )
90 {
91 // From netlib dlapy3:
92 // W can be zero for max(0,nan,0). Adding all three entries
93 // together will make sure NaN will not disappear.
94 *rho = xabs + yabs + zabs;
95 }
96 else
97 {
98 xabsdivw = xabs / w;
99 yabsdivw = yabs / w;
100 zabsdivw = zabs / w;
101
102 *rho = w * sqrt( xabsdivw * xabsdivw +
104 zabsdivw * zabsdivw );
105 }
106
107 return FLA_SUCCESS;
108}

References bl1_s0(), i, and rho.

Referenced by FLA_Pythag3().

◆ FLA_Shift_pivots_to()

FLA_Error FLA_Shift_pivots_to ( FLA_Pivot_type  ptype,
FLA_Obj  p 
)
14{
15 int m_p, n_p;
16 int* buff_p;
17 int i;
18
21
22 m_p = FLA_Obj_length( p );
23 n_p = FLA_Obj_width( p );
24 buff_p = FLA_INT_PTR( p );
25
26 if ( m_p < 1 || n_p < 1 ) return FLA_SUCCESS;
27
28 if ( ptype == FLA_LAPACK_PIVOTS )
29 {
30 // Shift FLAME pivots to LAPACK pivots.
31 for ( i = 0; i < m_p; i++ )
32 buff_p[ i ] += i + 1;
33 }
34 else
35 {
36 // Otherwise, shift LAPACK pivots back to FLAME.
37 for ( i = 0; i < m_p; i++ )
38 buff_p[ i ] -= i + 1;
39 }
40
41 return FLA_SUCCESS;
42}
FLA_Error FLA_Shift_pivots_to_check(FLA_Pivot_type ptype, FLA_Obj p)
Definition FLA_Shift_pivots_to_check.c:13

References FLA_Check_error_level(), FLA_Obj_length(), FLA_Obj_width(), FLA_Shift_pivots_to_check(), and i.

Referenced by FLA_LU_piv_blk_external(), and FLA_LU_piv_unb_external().

◆ FLA_Shift_pivots_to_check()

FLA_Error FLA_Shift_pivots_to_check ( FLA_Pivot_type  ptype,
FLA_Obj  p 
)
14{
16
19
22
25
28
29 return FLA_SUCCESS;
30}
FLA_Error FLA_Check_valid_pivot_type(FLA_Pivot_type ptype)
Definition FLA_Check.c:552
FLA_Error FLA_Check_col_vector(FLA_Obj x)
Definition FLA_Check.c:1233

References FLA_Check_col_vector(), FLA_Check_int_object(), FLA_Check_nonconstant_object(), and FLA_Check_valid_pivot_type().

Referenced by FLA_Shift_pivots_to().

◆ fla_slamch()

real fla_slamch ( char cmach,
ftnlen  cmach_len 
)
57{
58 /* Initialized data */
59
60 static logical first = TRUE_;
61
62 /* System generated locals */
65
66 /* Builtin functions */
67 double fla_pow_ri(real *, integer *);
68
69 /* Local variables */
70 static real base;
71 static integer beta;
72 static real emin, prec, emax;
73 static integer imin, imax;
74 static logical lrnd;
75 static real rmin, rmax, t, rmach;
76 extern logical fla_lsame(char *, char *, ftnlen, ftnlen);
77 static real small, sfmin;
78 extern /* Subroutine */ int fla_slamc2(integer *, integer *, logical *, real
79 *, integer *, real *, integer *, real *);
80 static integer it;
81 static real rnd, eps;
82
83
84/* -- LAPACK auxiliary routine (version 3.2) -- */
85/* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
86/* November 2006 */
87
88/* .. Scalar Arguments .. */
89/* .. */
90
91/* Purpose */
92/* ======= */
93
94/* SLAMCH determines single precision machine parameters. */
95
96/* Arguments */
97/* ========= */
98
99/* CMACH (input) CHARACTER*1 */
100/* Specifies the value to be returned by SLAMCH: */
101/* = 'E' or 'e', SLAMCH := eps */
102/* = 'S' or 's , SLAMCH := sfmin */
103/* = 'B' or 'b', SLAMCH := base */
104/* = 'P' or 'p', SLAMCH := eps*base */
105/* = 'N' or 'n', SLAMCH := t */
106/* = 'R' or 'r', SLAMCH := rnd */
107/* = 'M' or 'm', SLAMCH := emin */
108/* = 'U' or 'u', SLAMCH := rmin */
109/* = 'L' or 'l', SLAMCH := emax */
110/* = 'O' or 'o', SLAMCH := rmax */
111
112/* where */
113
114/* eps = relative machine precision */
115/* sfmin = safe minimum, such that 1/sfmin does not overflow */
116/* base = base of the machine */
117/* prec = eps*base */
118/* t = number of (base) digits in the mantissa */
119/* rnd = 1.0 when rounding occurs in addition, 0.0 otherwise */
120/* emin = minimum exponent before (gradual) underflow */
121/* rmin = underflow threshold - base**(emin-1) */
122/* emax = largest exponent before overflow */
123/* rmax = overflow threshold - (base**emax)*(1-eps) */
124
125/* ===================================================================== */
126
127/* .. Parameters .. */
128/* .. */
129/* .. Local Scalars .. */
130/* .. */
131/* .. External Functions .. */
132/* .. */
133/* .. External Subroutines .. */
134/* .. */
135/* .. Save statement .. */
136/* .. */
137/* .. Data statements .. */
138/* .. */
139/* .. Executable Statements .. */
140
141 if (first) {
142 fla_slamc2(&beta, &it, &lrnd, &eps, &imin, &rmin, &imax, &rmax);
143 base = (real) beta;
144 t = (real) it;
145 if (lrnd) {
146 rnd = (float)1.;
147 i__1 = 1 - it;
148 eps = fla_pow_ri(&base, &i__1) / 2;
149 } else {
150 rnd = (float)0.;
151 i__1 = 1 - it;
152 eps = fla_pow_ri(&base, &i__1);
153 }
154 prec = eps * base;
155 emin = (real) imin;
156 emax = (real) imax;
157 sfmin = rmin;
158 small = (float)1. / rmax;
159 if (small >= sfmin) {
160
161/* Use SMALL plus a bit, to avoid the possibility of rounding */
162/* causing overflow when computing 1/sfmin. */
163
164 sfmin = small * (eps + (float)1.);
165 }
166 }
167
168 if (fla_lsame(cmach, "E", (ftnlen)1, (ftnlen)1)) {
169 rmach = eps;
170 } else if (fla_lsame(cmach, "S", (ftnlen)1, (ftnlen)1)) {
171 rmach = sfmin;
172 } else if (fla_lsame(cmach, "B", (ftnlen)1, (ftnlen)1)) {
173 rmach = base;
174 } else if (fla_lsame(cmach, "P", (ftnlen)1, (ftnlen)1)) {
175 rmach = prec;
176 } else if (fla_lsame(cmach, "N", (ftnlen)1, (ftnlen)1)) {
177 rmach = t;
178 } else if (fla_lsame(cmach, "R", (ftnlen)1, (ftnlen)1)) {
179 rmach = rnd;
180 } else if (fla_lsame(cmach, "M", (ftnlen)1, (ftnlen)1)) {
181 rmach = emin;
182 } else if (fla_lsame(cmach, "U", (ftnlen)1, (ftnlen)1)) {
183 rmach = rmin;
184 } else if (fla_lsame(cmach, "L", (ftnlen)1, (ftnlen)1)) {
185 rmach = emax;
186 } else if (fla_lsame(cmach, "O", (ftnlen)1, (ftnlen)1)) {
187 rmach = rmax;
188 }
189
190 ret_val = rmach;
191 first = FALSE_;
192 return ret_val;
193
194/* End of SLAMCH */
195
196} /* fla_slamch_ */
float real
Definition FLA_f2c.h:30
double fla_pow_ri(real *ap, integer *bp)
Definition fla_slamch.c:26
int fla_slamc2(integer *beta, integer *t, logical *rnd, real *eps, integer *emin, real *rmin, integer *emax, real *rmax)
Definition fla_slamch.c:409

References fla_lsame(), fla_pow_ri(), fla_slamc2(), and i.

Referenced by FLA_Mach_params_ops().

◆ FLA_Sort_bsvd_ext()

FLA_Error FLA_Sort_bsvd_ext ( FLA_Direct  direct,
FLA_Obj  s,
FLA_Bool  apply_U,
FLA_Obj  U,
FLA_Bool  apply_V,
FLA_Obj  V,
FLA_Bool  apply_C,
FLA_Obj  C 
)
72{
73 FLA_Datatype datatype;
78
79 //if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
80 // FLA_Sort_bsvd_check( direct, s,
81 // apply_U, U,
82 // apply_V, V,
83 // apply_C, C );
84
85 // Sort singular values only; quick sort
86 if ( apply_U == FALSE && apply_V == FALSE )
87 return FLA_Sort( direct, s );
88
89 // s dimensions must be provided.
92
93 // Datatype of U, V and C must be consistent and must be defined from one of them.
97
98 switch ( datatype )
99 {
100 case FLA_FLOAT:
101 {
102 float* s_p = ( float* ) FLA_FLOAT_PTR( s );
103 float* U_p = ( apply_U == TRUE ? ( float* ) FLA_FLOAT_PTR( U ) : NULL );
104 float* V_p = ( apply_V == TRUE ? ( float* ) FLA_FLOAT_PTR( V ) : NULL );
105 float* C_p = ( apply_C == TRUE ? ( float* ) FLA_FLOAT_PTR( C ) : NULL );
106
107 if ( direct == FLA_FORWARD )
109 m_U, U_p, rs_U, cs_U,
110 m_V, V_p, rs_V, cs_V,
111 n_C, C_p, rs_C, cs_C );
112 else // if ( direct == FLA_BACKWARD )
114 m_U, U_p, rs_U, cs_U,
115 m_V, V_p, rs_V, cs_V,
116 n_C, C_p, rs_C, cs_C );
117 break;
118 }
119 case FLA_DOUBLE:
120 {
121 double* s_p = ( double* ) FLA_DOUBLE_PTR( s );
122 double* U_p = ( apply_U == TRUE ? ( double* ) FLA_DOUBLE_PTR( U ) : NULL );
123 double* V_p = ( apply_V == TRUE ? ( double* ) FLA_DOUBLE_PTR( V ) : NULL );
124 double* C_p = ( apply_C == TRUE ? ( double* ) FLA_DOUBLE_PTR( C ) : NULL );
125
126 if ( direct == FLA_FORWARD )
128 m_U, U_p, rs_U, cs_U,
129 m_V, V_p, rs_V, cs_V,
130 n_C, C_p, rs_C, cs_C );
131 else // if ( direct == FLA_BACKWARD )
133 m_U, U_p, rs_U, cs_U,
134 m_V, V_p, rs_V, cs_V,
135 n_C, C_p, rs_C, cs_C );
136 break;
137 }
138 case FLA_COMPLEX:
139 {
140 float* s_p = ( float* ) FLA_FLOAT_PTR( s );
141 scomplex* U_p = ( apply_U == TRUE ? ( scomplex* ) FLA_COMPLEX_PTR( U ) : NULL );
142 scomplex* V_p = ( apply_V == TRUE ? ( scomplex* ) FLA_COMPLEX_PTR( V ) : NULL );
143 scomplex* C_p = ( apply_C == TRUE ? ( scomplex* ) FLA_COMPLEX_PTR( C ) : NULL );
144
145 if ( direct == FLA_FORWARD )
147 m_U, U_p, rs_U, cs_U,
148 m_V, V_p, rs_V, cs_V,
149 n_C, C_p, rs_C, cs_C );
150 else // if ( direct == FLA_BACKWARD )
152 m_U, U_p, rs_U, cs_U,
153 m_V, V_p, rs_V, cs_V,
154 n_C, C_p, rs_C, cs_C );
155 break;
156 }
158 {
159 double* s_p = ( double* ) FLA_DOUBLE_PTR( s );
163
164 if ( direct == FLA_FORWARD )
166 m_U, U_p, rs_U, cs_U,
167 m_V, V_p, rs_V, cs_V,
168 n_C, C_p, rs_C, cs_C );
169 else // if ( direct == FLA_BACKWARD )
171 m_U, U_p, rs_U, cs_U,
172 m_V, V_p, rs_V, cs_V,
173 n_C, C_p, rs_C, cs_C );
174 break;
175 }
176 }
177 return FLA_SUCCESS;
178}
FLA_Error FLA_Sort_bsvd_ext_f_opd(int m_s, double *s, int inc_s, int m_U, double *U, int rs_U, int cs_U, int m_V, double *V, int rs_V, int cs_V, int n_C, double *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:203
FLA_Error FLA_Sort_bsvd_ext_f_ops(int m_s, float *s, int inc_s, int m_U, float *U, int rs_U, int cs_U, int m_V, float *V, int rs_V, int cs_V, int n_C, float *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:181
FLA_Error FLA_Sort_bsvd_ext_b_opd(int m_s, double *s, int inc_s, int m_U, double *U, int rs_U, int cs_U, int m_V, double *V, int rs_V, int cs_V, int n_C, double *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:213
FLA_Error FLA_Sort_bsvd_ext_f_opc(int m_s, float *s, int inc_s, int m_U, scomplex *U, int rs_U, int cs_U, int m_V, scomplex *V, int rs_V, int cs_V, int n_C, scomplex *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:225
FLA_Error FLA_Sort_bsvd_ext_b_ops(int m_s, float *s, int inc_s, int m_U, float *U, int rs_U, int cs_U, int m_V, float *V, int rs_V, int cs_V, int n_C, float *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:191
FLA_Error FLA_Sort_bsvd_ext_b_opz(int m_s, double *s, int inc_s, int m_U, dcomplex *U, int rs_U, int cs_U, int m_V, dcomplex *V, int rs_V, int cs_V, int n_C, dcomplex *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:257
FLA_Error FLA_Sort_bsvd_ext_f_opz(int m_s, double *s, int inc_s, int m_U, dcomplex *U, int rs_U, int cs_U, int m_V, dcomplex *V, int rs_V, int cs_V, int n_C, dcomplex *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:247
FLA_Error FLA_Sort_bsvd_ext_b_opc(int m_s, float *s, int inc_s, int m_U, scomplex *U, int rs_U, int cs_U, int m_V, scomplex *V, int rs_V, int cs_V, int n_C, scomplex *C, int rs_C, int cs_C)
Definition FLA_Sort_bsvd_ext.c:235
unsigned long dim_t
Definition FLA_type_defs.h:71
FLA_Error FLA_Sort(FLA_Direct direct, FLA_Obj x)
Definition FLA_Sort.c:18

References FLA_Obj_length(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), FLA_Obj_width(), FLA_Sort(), FLA_Sort_bsvd_ext_b_opc(), FLA_Sort_bsvd_ext_b_opd(), FLA_Sort_bsvd_ext_b_ops(), FLA_Sort_bsvd_ext_b_opz(), FLA_Sort_bsvd_ext_f_opc(), FLA_Sort_bsvd_ext_f_opd(), FLA_Sort_bsvd_ext_f_ops(), FLA_Sort_bsvd_ext_f_opz(), and i.

◆ FLA_Sort_bsvd_ext_b_opc()

FLA_Error FLA_Sort_bsvd_ext_b_opc ( int  m_s,
float s,
int  inc_s,
int  m_U,
scomplex U,
int  rs_U,
int  cs_U,
int  m_V,
scomplex V,
int  rs_V,
int  cs_V,
int  n_C,
scomplex C,
int  rs_C,
int  cs_C 
)
239{
240 int i, ii, j, k;
241 float p;
243 return FLA_SUCCESS;
244}
void bl1_cswapv(int n, scomplex *x, int incx, scomplex *y, int incy)
Definition bl1_swapv.c:33

References bl1_cswapv(), and i.

Referenced by FLA_Bsvd_ext_opt_var1(), and FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_b_opd()

FLA_Error FLA_Sort_bsvd_ext_b_opd ( int  m_s,
double s,
int  inc_s,
int  m_U,
double U,
int  rs_U,
int  cs_U,
int  m_V,
double V,
int  rs_V,
int  cs_V,
int  n_C,
double C,
int  rs_C,
int  cs_C 
)
217{
218 int i, ii, j, k;
219 double p;
221 return FLA_SUCCESS;
222}
void bl1_dswapv(int n, double *x, int incx, double *y, int incy)
Definition bl1_swapv.c:23

References bl1_dswapv(), and i.

Referenced by FLA_Bsvd_ext_opt_var1(), and FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_b_ops()

FLA_Error FLA_Sort_bsvd_ext_b_ops ( int  m_s,
float s,
int  inc_s,
int  m_U,
float U,
int  rs_U,
int  cs_U,
int  m_V,
float V,
int  rs_V,
int  cs_V,
int  n_C,
float C,
int  rs_C,
int  cs_C 
)
195{
196 int i, ii, j, k;
197 float p;
199 return FLA_SUCCESS;
200}
void bl1_sswapv(int n, float *x, int incx, float *y, int incy)
Definition bl1_swapv.c:13

References bl1_sswapv(), and i.

Referenced by FLA_Bsvd_ext_opt_var1(), and FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_b_opz()

FLA_Error FLA_Sort_bsvd_ext_b_opz ( int  m_s,
double s,
int  inc_s,
int  m_U,
dcomplex U,
int  rs_U,
int  cs_U,
int  m_V,
dcomplex V,
int  rs_V,
int  cs_V,
int  n_C,
dcomplex C,
int  rs_C,
int  cs_C 
)
261{
262 int i, ii, j, k;
263 double p;
265 return FLA_SUCCESS;
266}
void bl1_zswapv(int n, dcomplex *x, int incx, dcomplex *y, int incy)
Definition bl1_swapv.c:43

References bl1_zswapv(), and i.

Referenced by FLA_Bsvd_ext_opt_var1(), and FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_f_opc()

FLA_Error FLA_Sort_bsvd_ext_f_opc ( int  m_s,
float s,
int  inc_s,
int  m_U,
scomplex U,
int  rs_U,
int  cs_U,
int  m_V,
scomplex V,
int  rs_V,
int  cs_V,
int  n_C,
scomplex C,
int  rs_C,
int  cs_C 
)
229{
230 int i, ii, j, k;
231 float p;
233 return FLA_SUCCESS;
234}

References bl1_cswapv(), and i.

Referenced by FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_f_opd()

FLA_Error FLA_Sort_bsvd_ext_f_opd ( int  m_s,
double s,
int  inc_s,
int  m_U,
double U,
int  rs_U,
int  cs_U,
int  m_V,
double V,
int  rs_V,
int  cs_V,
int  n_C,
double C,
int  rs_C,
int  cs_C 
)
207{
208 int i, ii, j, k;
209 float p;
211 return FLA_SUCCESS;
212}

References bl1_dswapv(), and i.

Referenced by FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_f_ops()

FLA_Error FLA_Sort_bsvd_ext_f_ops ( int  m_s,
float s,
int  inc_s,
int  m_U,
float U,
int  rs_U,
int  cs_U,
int  m_V,
float V,
int  rs_V,
int  cs_V,
int  n_C,
float C,
int  rs_C,
int  cs_C 
)
185{
186 int i, ii, j, k;
187 float p;
189 return FLA_SUCCESS;
190}

References bl1_sswapv(), and i.

Referenced by FLA_Sort_bsvd_ext().

◆ FLA_Sort_bsvd_ext_f_opz()

FLA_Error FLA_Sort_bsvd_ext_f_opz ( int  m_s,
double s,
int  inc_s,
int  m_U,
dcomplex U,
int  rs_U,
int  cs_U,
int  m_V,
dcomplex V,
int  rs_V,
int  cs_V,
int  n_C,
dcomplex C,
int  rs_C,
int  cs_C 
)
251{
252 int i, ii, j, k;
253 double p;
255 return FLA_SUCCESS;
256}

References bl1_zswapv(), and i.

Referenced by FLA_Sort_bsvd_ext().

◆ FLA_Sort_evd()

FLA_Error FLA_Sort_evd ( FLA_Direct  direct,
FLA_Obj  l,
FLA_Obj  V 
)
14{
15 FLA_Datatype datatype;
16 dim_t m_A;
19
22
23 datatype = FLA_Obj_datatype( V );
24
25 m_A = FLA_Obj_length( V );
26
29
31
32 switch ( datatype )
33 {
34 case FLA_FLOAT:
35 {
36 float* l_p = ( float* ) FLA_FLOAT_PTR( l );
37 float* V_p = ( float* ) FLA_FLOAT_PTR( V );
38
39 if ( direct == FLA_FORWARD )
41 l_p, inc_l,
42 V_p, rs_V, cs_V );
43 else // if ( direct == FLA_BACKWARD )
45 l_p, inc_l,
46 V_p, rs_V, cs_V );
47
48 break;
49 }
50
51 case FLA_DOUBLE:
52 {
53 double* l_p = ( double* ) FLA_DOUBLE_PTR( l );
54 double* V_p = ( double* ) FLA_DOUBLE_PTR( V );
55
56 if ( direct == FLA_FORWARD )
58 l_p, inc_l,
59 V_p, rs_V, cs_V );
60 else // if ( direct == FLA_BACKWARD )
62 l_p, inc_l,
63 V_p, rs_V, cs_V );
64
65 break;
66 }
67
68 case FLA_COMPLEX:
69 {
70 float* l_p = ( float* ) FLA_FLOAT_PTR( l );
72
73 if ( direct == FLA_FORWARD )
75 l_p, inc_l,
76 V_p, rs_V, cs_V );
77 else // if ( direct == FLA_BACKWARD )
79 l_p, inc_l,
80 V_p, rs_V, cs_V );
81
82 break;
83 }
84
86 {
87 double* l_p = ( double* ) FLA_DOUBLE_PTR( l );
89
90 if ( direct == FLA_FORWARD )
92 l_p, inc_l,
93 V_p, rs_V, cs_V );
94 else // if ( direct == FLA_BACKWARD )
96 l_p, inc_l,
97 V_p, rs_V, cs_V );
98
99 break;
100 }
101
102 }
103
104 return FLA_SUCCESS;
105}
FLA_Error FLA_Sort_evd_f_ops(int m_A, float *l, int inc_l, float *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:109
FLA_Error FLA_Sort_evd_b_opz(int m_A, double *l, int inc_l, dcomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:245
FLA_Error FLA_Sort_evd_b_ops(int m_A, float *l, int inc_l, float *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:116
FLA_Error FLA_Sort_evd_f_opz(int m_A, double *l, int inc_l, dcomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:209
FLA_Error FLA_Sort_evd_f_opd(int m_A, double *l, int inc_l, double *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:123
FLA_Error FLA_Sort_evd_b_opc(int m_A, float *l, int inc_l, scomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:202
FLA_Error FLA_Sort_evd_b_opd(int m_A, double *l, int inc_l, double *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:159
FLA_Error FLA_Sort_evd_f_opc(int m_A, float *l, int inc_l, scomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_evd.c:195
FLA_Error FLA_Sort_evd_check(FLA_Direct direct, FLA_Obj l, FLA_Obj V)
Definition FLA_Sort_evd_check.c:13

References FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_Sort_evd_b_opc(), FLA_Sort_evd_b_opd(), FLA_Sort_evd_b_ops(), FLA_Sort_evd_b_opz(), FLA_Sort_evd_check(), FLA_Sort_evd_f_opc(), FLA_Sort_evd_f_opd(), FLA_Sort_evd_f_ops(), FLA_Sort_evd_f_opz(), and i.

Referenced by FLA_Hevd_lv_unb_var1(), and FLA_Hevd_lv_unb_var2().

◆ FLA_Sort_evd_b_opc()

FLA_Error FLA_Sort_evd_b_opc ( int  m_A,
float l,
int  inc_l,
scomplex V,
int  rs_V,
int  cs_V 
)
205{
206 return FLA_SUCCESS;
207}

References i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_b_opd()

FLA_Error FLA_Sort_evd_b_opd ( int  m_A,
double l,
int  inc_l,
double V,
int  rs_V,
int  cs_V 
)
162{
163 int i, ii, j, k;
164 double p;
165
166 for ( ii = 1; ii < m_A; ++ii )
167 {
168 i = ii - 1;
169 k = i;
170
171 p = l[ i*inc_l ];
172
173 for ( j = ii; j < m_A; ++j )
174 {
175 if ( l[ j*inc_l ] > p )
176 {
177 k = j;
178 p = l[ j*inc_l ];
179 }
180 }
181
182 if ( k != i )
183 {
184 l[ k*inc_l ] = l[ i ];
185 l[ i ] = p;
187 V + i*cs_V, rs_V,
188 V + k*cs_V, rs_V );
189 }
190 }
191
192 return FLA_SUCCESS;
193}

References bl1_dswapv(), and i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_b_ops()

FLA_Error FLA_Sort_evd_b_ops ( int  m_A,
float l,
int  inc_l,
float V,
int  rs_V,
int  cs_V 
)
119{
120 return FLA_SUCCESS;
121}

References i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_b_opz()

FLA_Error FLA_Sort_evd_b_opz ( int  m_A,
double l,
int  inc_l,
dcomplex V,
int  rs_V,
int  cs_V 
)
248{
249 int i, ii, j, k;
250 double p;
251
252 for ( ii = 1; ii < m_A; ++ii )
253 {
254 i = ii - 1;
255 k = i;
256
257 p = l[ i*inc_l ];
258
259 for ( j = ii; j < m_A; ++j )
260 {
261 if ( l[ j*inc_l ] > p )
262 {
263 k = j;
264 p = l[ j*inc_l ];
265 }
266 }
267
268 if ( k != i )
269 {
270 l[ k*inc_l ] = l[ i ];
271 l[ i ] = p;
273 V + i*cs_V, rs_V,
274 V + k*cs_V, rs_V );
275 }
276 }
277
278 return FLA_SUCCESS;
279}

References bl1_zswapv(), and i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_check()

FLA_Error FLA_Sort_evd_check ( FLA_Direct  direct,
FLA_Obj  l,
FLA_Obj  V 
)

◆ FLA_Sort_evd_f_opc()

FLA_Error FLA_Sort_evd_f_opc ( int  m_A,
float l,
int  inc_l,
scomplex V,
int  rs_V,
int  cs_V 
)
198{
199 return FLA_SUCCESS;
200}

References i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_f_opd()

FLA_Error FLA_Sort_evd_f_opd ( int  m_A,
double l,
int  inc_l,
double V,
int  rs_V,
int  cs_V 
)
126{
127 int i, ii, j, k;
128 double p;
129
130 for ( ii = 1; ii < m_A; ++ii )
131 {
132 i = ii - 1;
133 k = i;
134
135 p = l[ i*inc_l ];
136
137 for ( j = ii; j < m_A; ++j )
138 {
139 if ( l[ j*inc_l ] < p )
140 {
141 k = j;
142 p = l[ j*inc_l ];
143 }
144 }
145
146 if ( k != i )
147 {
148 l[ k*inc_l ] = l[ i ];
149 l[ i ] = p;
151 V + i*cs_V, rs_V,
152 V + k*cs_V, rs_V );
153 }
154 }
155
156 return FLA_SUCCESS;
157}

References bl1_dswapv(), and i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_f_ops()

FLA_Error FLA_Sort_evd_f_ops ( int  m_A,
float l,
int  inc_l,
float V,
int  rs_V,
int  cs_V 
)
112{
113 return FLA_SUCCESS;
114}

References i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_evd_f_opz()

FLA_Error FLA_Sort_evd_f_opz ( int  m_A,
double l,
int  inc_l,
dcomplex V,
int  rs_V,
int  cs_V 
)
212{
213 int i, ii, j, k;
214 double p;
215
216 for ( ii = 1; ii < m_A; ++ii )
217 {
218 i = ii - 1;
219 k = i;
220
221 p = l[ i*inc_l ];
222
223 for ( j = ii; j < m_A; ++j )
224 {
225 if ( l[ j*inc_l ] < p )
226 {
227 k = j;
228 p = l[ j*inc_l ];
229 }
230 }
231
232 if ( k != i )
233 {
234 l[ k*inc_l ] = l[ i ];
235 l[ i ] = p;
237 V + i*cs_V, rs_V,
238 V + k*cs_V, rs_V );
239 }
240 }
241
242 return FLA_SUCCESS;
243}

References bl1_zswapv(), and i.

Referenced by FLA_Sort_evd().

◆ FLA_Sort_svd()

FLA_Error FLA_Sort_svd ( FLA_Direct  direct,
FLA_Obj  s,
FLA_Obj  U,
FLA_Obj  V 
)
14{
15 FLA_Datatype datatype;
16 dim_t m_U, n_V;
20
23
24 datatype = FLA_Obj_datatype( U );
25
26 m_U = FLA_Obj_length( U );
27 n_V = FLA_Obj_length( V );
28
31
34
36
37 switch ( datatype )
38 {
39 case FLA_FLOAT:
40 {
41 float* s_p = ( float* ) FLA_FLOAT_PTR( s );
42 float* U_p = ( float* ) FLA_FLOAT_PTR( U );
43 float* V_p = ( float* ) FLA_FLOAT_PTR( V );
44
45 if ( direct == FLA_FORWARD )
47 n_V,
48 s_p, inc_s,
49 U_p, rs_U, cs_U,
50 V_p, rs_V, cs_V );
51 else // if ( direct == FLA_BACKWARD )
53 n_V,
54 s_p, inc_s,
55 U_p, rs_U, cs_U,
56 V_p, rs_V, cs_V );
57
58 break;
59 }
60
61 case FLA_DOUBLE:
62 {
63 double* s_p = ( double* ) FLA_DOUBLE_PTR( s );
64 double* U_p = ( double* ) FLA_DOUBLE_PTR( U );
65 double* V_p = ( double* ) FLA_DOUBLE_PTR( V );
66
67 if ( direct == FLA_FORWARD )
69 n_V,
70 s_p, inc_s,
71 U_p, rs_U, cs_U,
72 V_p, rs_V, cs_V );
73 else // if ( direct == FLA_BACKWARD )
75 n_V,
76 s_p, inc_s,
77 U_p, rs_U, cs_U,
78 V_p, rs_V, cs_V );
79
80 break;
81 }
82
83 case FLA_COMPLEX:
84 {
85 float* s_p = ( float* ) FLA_FLOAT_PTR( s );
88
89 if ( direct == FLA_FORWARD )
91 n_V,
92 s_p, inc_s,
93 U_p, rs_U, cs_U,
94 V_p, rs_V, cs_V );
95 else // if ( direct == FLA_BACKWARD )
97 n_V,
98 s_p, inc_s,
99 U_p, rs_U, cs_U,
100 V_p, rs_V, cs_V );
101
102 break;
103 }
104
106 {
107 double* s_p = ( double* ) FLA_DOUBLE_PTR( s );
110
111 if ( direct == FLA_FORWARD )
113 n_V,
114 s_p, inc_s,
115 U_p, rs_U, cs_U,
116 V_p, rs_V, cs_V );
117 else // if ( direct == FLA_BACKWARD )
119 n_V,
120 s_p, inc_s,
121 U_p, rs_U, cs_U,
122 V_p, rs_V, cs_V );
123
124 break;
125 }
126
127 }
128
129 return FLA_SUCCESS;
130}
FLA_Error FLA_Sort_svd_b_ops(int m_U, int n_V, float *s, int inc_s, float *U, int rs_U, int cs_U, float *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:143
FLA_Error FLA_Sort_svd_f_opc(int m_U, int n_V, float *s, int inc_s, scomplex *U, int rs_U, int cs_U, scomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:236
FLA_Error FLA_Sort_svd_f_opd(int m_U, int n_V, double *s, int inc_s, double *U, int rs_U, int cs_U, double *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:152
FLA_Error FLA_Sort_svd_b_opz(int m_U, int n_V, double *s, int inc_s, dcomplex *U, int rs_U, int cs_U, dcomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:296
FLA_Error FLA_Sort_svd_f_ops(int m_U, int n_V, float *s, int inc_s, float *U, int rs_U, int cs_U, float *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:134
FLA_Error FLA_Sort_svd_b_opd(int m_U, int n_V, double *s, int inc_s, double *U, int rs_U, int cs_U, double *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:194
FLA_Error FLA_Sort_svd_b_opc(int m_U, int n_V, float *s, int inc_s, scomplex *U, int rs_U, int cs_U, scomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:245
FLA_Error FLA_Sort_svd_f_opz(int m_U, int n_V, double *s, int inc_s, dcomplex *U, int rs_U, int cs_U, dcomplex *V, int rs_V, int cs_V)
Definition FLA_Sort_svd.c:254
FLA_Error FLA_Sort_svd_check(FLA_Direct direct, FLA_Obj s, FLA_Obj U, FLA_Obj V)
Definition FLA_Sort_svd_check.c:13

References FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_Sort_svd_b_opc(), FLA_Sort_svd_b_opd(), FLA_Sort_svd_b_ops(), FLA_Sort_svd_b_opz(), FLA_Sort_svd_check(), FLA_Sort_svd_f_opc(), FLA_Sort_svd_f_opd(), FLA_Sort_svd_f_ops(), FLA_Sort_svd_f_opz(), and i.

Referenced by FLA_Svd_uv_unb_var1(), and FLA_Svd_uv_unb_var2().

◆ FLA_Sort_svd_b_opc()

FLA_Error FLA_Sort_svd_b_opc ( int  m_U,
int  n_V,
float s,
int  inc_s,
scomplex U,
int  rs_U,
int  cs_U,
scomplex V,
int  rs_V,
int  cs_V 
)
250{
251 return FLA_SUCCESS;
252}

References i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_b_opd()

FLA_Error FLA_Sort_svd_b_opd ( int  m_U,
int  n_V,
double s,
int  inc_s,
double U,
int  rs_U,
int  cs_U,
double V,
int  rs_V,
int  cs_V 
)
199{
200 int min_m_n = min( m_U, n_V );
201 int i, ii, j, k;
202 double p;
203
204 for ( ii = 1; ii < min_m_n; ++ii )
205 {
206 i = ii - 1;
207 k = i;
208
209 p = s[ i*inc_s ];
210
211 for ( j = ii; j < min_m_n; ++j )
212 {
213 if ( s[ j*inc_s ] > p )
214 {
215 k = j;
216 p = s[ j*inc_s ];
217 }
218 }
219
220 if ( k != i )
221 {
222 s[ k*inc_s ] = s[ i ];
223 s[ i ] = p;
225 U + i*cs_U, rs_U,
226 U + k*cs_U, rs_U );
228 V + i*cs_V, rs_V,
229 V + k*cs_V, rs_V );
230 }
231 }
232
233 return FLA_SUCCESS;
234}

References bl1_dswapv(), and i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_b_ops()

FLA_Error FLA_Sort_svd_b_ops ( int  m_U,
int  n_V,
float s,
int  inc_s,
float U,
int  rs_U,
int  cs_U,
float V,
int  rs_V,
int  cs_V 
)
148{
149 return FLA_SUCCESS;
150}

References i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_b_opz()

FLA_Error FLA_Sort_svd_b_opz ( int  m_U,
int  n_V,
double s,
int  inc_s,
dcomplex U,
int  rs_U,
int  cs_U,
dcomplex V,
int  rs_V,
int  cs_V 
)
301{
302 int min_m_n = min( m_U, n_V );
303 int i, ii, j, k;
304 double p;
305
306 for ( ii = 1; ii < min_m_n; ++ii )
307 {
308 i = ii - 1;
309 k = i;
310
311 p = s[ i*inc_s ];
312
313 for ( j = ii; j < min_m_n; ++j )
314 {
315 if ( s[ j*inc_s ] > p )
316 {
317 k = j;
318 p = s[ j*inc_s ];
319 }
320 }
321
322 if ( k != i )
323 {
324 s[ k*inc_s ] = s[ i ];
325 s[ i ] = p;
327 U + i*cs_U, rs_U,
328 U + k*cs_U, rs_U );
330 V + i*cs_V, rs_V,
331 V + k*cs_V, rs_V );
332 }
333 }
334
335 return FLA_SUCCESS;
336}

References bl1_zswapv(), and i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_check()

FLA_Error FLA_Sort_svd_check ( FLA_Direct  direct,
FLA_Obj  s,
FLA_Obj  U,
FLA_Obj  V 
)
14{
16
19
22
25
28
31
34
37
38 //e_val = FLA_Check_square( U );
39 //FLA_Check_error_code( e_val );
40
41 //e_val = FLA_Check_square( V );
42 //FLA_Check_error_code( e_val );
43
46
47 return FLA_SUCCESS;
48}
FLA_Error FLA_Check_vector_dim(FLA_Obj x, dim_t expected_length)
Definition FLA_Check.c:1213

References FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_identical_object_precision(), FLA_Check_nonconstant_object(), FLA_Check_real_object(), FLA_Check_valid_direct(), FLA_Check_vector_dim(), and FLA_Obj_length().

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_f_opc()

FLA_Error FLA_Sort_svd_f_opc ( int  m_U,
int  n_V,
float s,
int  inc_s,
scomplex U,
int  rs_U,
int  cs_U,
scomplex V,
int  rs_V,
int  cs_V 
)
241{
242 return FLA_SUCCESS;
243}

References i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_f_opd()

FLA_Error FLA_Sort_svd_f_opd ( int  m_U,
int  n_V,
double s,
int  inc_s,
double U,
int  rs_U,
int  cs_U,
double V,
int  rs_V,
int  cs_V 
)
157{
158 int min_m_n = min( m_U, n_V );
159 int i, ii, j, k;
160 double p;
161
162 for ( ii = 1; ii < min_m_n; ++ii )
163 {
164 i = ii - 1;
165 k = i;
166
167 p = s[ i*inc_s ];
168
169 for ( j = ii; j < min_m_n; ++j )
170 {
171 if ( s[ j*inc_s ] < p )
172 {
173 k = j;
174 p = s[ j*inc_s ];
175 }
176 }
177
178 if ( k != i )
179 {
180 s[ k*inc_s ] = s[ i ];
181 s[ i ] = p;
183 U + i*cs_U, rs_U,
184 U + k*cs_U, rs_U );
186 V + i*cs_V, rs_V,
187 V + k*cs_V, rs_V );
188 }
189 }
190
191 return FLA_SUCCESS;
192}

References bl1_dswapv(), and i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_f_ops()

FLA_Error FLA_Sort_svd_f_ops ( int  m_U,
int  n_V,
float s,
int  inc_s,
float U,
int  rs_U,
int  cs_U,
float V,
int  rs_V,
int  cs_V 
)
139{
140 return FLA_SUCCESS;
141}

References i.

Referenced by FLA_Sort_svd().

◆ FLA_Sort_svd_f_opz()

FLA_Error FLA_Sort_svd_f_opz ( int  m_U,
int  n_V,
double s,
int  inc_s,
dcomplex U,
int  rs_U,
int  cs_U,
dcomplex V,
int  rs_V,
int  cs_V 
)
259{
260 int min_m_n = min( m_U, n_V );
261 int i, ii, j, k;
262 double p;
263
264 for ( ii = 1; ii < min_m_n; ++ii )
265 {
266 i = ii - 1;
267 k = i;
268
269 p = s[ i*inc_s ];
270
271 for ( j = ii; j < min_m_n; ++j )
272 {
273 if ( s[ j*inc_s ] < p )
274 {
275 k = j;
276 p = s[ j*inc_s ];
277 }
278 }
279
280 if ( k != i )
281 {
282 s[ k*inc_s ] = s[ i ];
283 s[ i ] = p;
285 U + i*cs_U, rs_U,
286 U + k*cs_U, rs_U );
288 V + i*cs_V, rs_V,
289 V + k*cs_V, rs_V );
290 }
291 }
292
293 return FLA_SUCCESS;
294}

References bl1_zswapv(), and i.

Referenced by FLA_Sort_svd().

◆ FLA_Sv_2x2()

FLA_Error FLA_Sv_2x2 ( FLA_Obj  alpha11,
FLA_Obj  alpha12,
FLA_Obj  alpha22,
FLA_Obj  sigma1,
FLA_Obj  sigma2 
)
36{
37 FLA_Datatype datatype;
38
39 datatype = FLA_Obj_datatype( alpha11 );
40
41 switch ( datatype )
42 {
43 case FLA_FLOAT:
44 {
50
56
57 break;
58 }
59
60 case FLA_DOUBLE:
61 {
67
73
74 break;
75 }
76 }
77
78 return FLA_SUCCESS;
79}
FLA_Error FLA_Sv_2x2_opd(double *alpha11, double *alpha12, double *alpha22, double *sigma1, double *sigma2)
Definition FLA_Sv_2x2.c:166
FLA_Error FLA_Sv_2x2_ops(float *alpha11, float *alpha12, float *alpha22, float *sigma1, float *sigma2)
Definition FLA_Sv_2x2.c:83

References FLA_Obj_datatype(), FLA_Sv_2x2_opd(), FLA_Sv_2x2_ops(), and i.

◆ FLA_Sv_2x2_opd()

FLA_Error FLA_Sv_2x2_opd ( double alpha11,
double alpha12,
double alpha22,
double sigma1,
double sigma2 
)
171{
172 double zero = 0.0;
173 double one = 1.0;
174 double two = 2.0;
175
176 double f, g, h;
177 double as, at, au, c, fa, fhmin, fhmax, ga, ha;
178 double ssmin, ssmax;
179 double temp, temp2;
180
181 f = *alpha11;
182 g = *alpha12;
183 h = *alpha22;
184
185 fa = fabs( f );
186 ga = fabs( g );
187 ha = fabs( h );
188
189 fhmin = min( fa, ha );
190 fhmax = max( fa, ha );
191
192 if ( fhmin == zero )
193 {
194 ssmin = zero;
195
196 if ( fhmax == zero )
197 ssmax = ga;
198 else
199 {
200 temp = min( fhmax, ga ) / max( fhmax, ga );
201 ssmax = max( fhmax, ga ) * sqrt( one + temp * temp );
202 }
203 }
204 else
205 {
206 if ( ga < fhmax )
207 {
208 as = one + fhmin / fhmax;
209 at = ( fhmax - fhmin ) / fhmax;
210 au = ( ga / fhmax ) * ( ga / fhmax );
211 c = two / ( sqrt( as * as + au ) + sqrt( at * at + au ) );
212 ssmin = fhmin * c;
213 ssmax = fhmax / c;
214 }
215 else
216 {
217 au = fhmax / ga;
218
219 if ( au == zero )
220 {
221 ssmin = ( fhmin * fhmax ) / ga;
222 ssmax = ga;
223 }
224 else
225 {
226 as = one + fhmin / fhmax;
227 at = ( fhmax - fhmin ) / fhmax;
228 temp = as * au;
229 temp2 = at * au;
230 c = one / ( sqrt( one + temp * temp ) +
231 sqrt( one + temp2 * temp2 ) );
232 ssmin = ( fhmin * c ) * au;
233 ssmin = ssmin + ssmin;
234 ssmax = ga / ( c + c );
235 }
236 }
237 }
238
239 // Save the output values.
240
241 *sigma1 = ssmin;
242 *sigma2 = ssmax;
243
244 return FLA_SUCCESS;
245}
double temp2
Definition bl1_axpyv2b.c:147
dcomplex temp
Definition bl1_axpyv2b.c:301

References i, temp, and temp2.

Referenced by FLA_Bsvd_compute_shift_opd(), and FLA_Sv_2x2().

◆ FLA_Sv_2x2_ops()

FLA_Error FLA_Sv_2x2_ops ( float alpha11,
float alpha12,
float alpha22,
float sigma1,
float sigma2 
)
88{
89 float zero = 0.0F;
90 float one = 1.0F;
91 float two = 2.0F;
92
93 float f, g, h;
94 float as, at, au, c, fa, fhmin, fhmax, ga, ha;
95 float ssmin, ssmax;
96 float temp, temp2;
97
98 f = *alpha11;
99 g = *alpha12;
100 h = *alpha22;
101
102 fa = fabsf( f );
103 ga = fabsf( g );
104 ha = fabsf( h );
105
106 fhmin = min( fa, ha );
107 fhmax = max( fa, ha );
108
109 if ( fhmin == zero )
110 {
111 ssmin = zero;
112
113 if ( fhmax == zero )
114 ssmax = ga;
115 else
116 {
117 temp = min( fhmax, ga ) / max( fhmax, ga );
118 ssmax = max( fhmax, ga ) * sqrtf( one + temp * temp );
119 }
120 }
121 else
122 {
123 if ( ga < fhmax )
124 {
125 as = one + fhmin / fhmax;
126 at = ( fhmax - fhmin ) / fhmax;
127 au = ( ga / fhmax ) * ( ga / fhmax );
128 c = two / ( sqrtf( as * as + au ) + sqrtf( at * at + au ) );
129 ssmin = fhmin * c;
130 ssmax = fhmax / c;
131 }
132 else
133 {
134 au = fhmax / ga;
135
136 if ( au == zero )
137 {
138 ssmin = ( fhmin * fhmax ) / ga;
139 ssmax = ga;
140 }
141 else
142 {
143 as = one + fhmin / fhmax;
144 at = ( fhmax - fhmin ) / fhmax;
145 temp = as * au;
146 temp2 = at * au;
147 c = one / ( sqrtf( one + temp * temp ) +
148 sqrtf( one + temp2 * temp2 ) );
149 ssmin = ( fhmin * c ) * au;
150 ssmin = ssmin + ssmin;
151 ssmax = ga / ( c + c );
152 }
153 }
154 }
155
156 // Save the output values.
157
158 *sigma1 = ssmin;
159 *sigma2 = ssmax;
160
161 return FLA_SUCCESS;
162}

References i, temp, and temp2.

Referenced by FLA_Bsvd_compute_shift_ops(), and FLA_Sv_2x2().

◆ FLA_Svv_2x2()

FLA_Error FLA_Svv_2x2 ( FLA_Obj  alpha11,
FLA_Obj  alpha12,
FLA_Obj  alpha22,
FLA_Obj  sigma1,
FLA_Obj  sigma2,
FLA_Obj  gammaL,
FLA_Obj  sigmaL,
FLA_Obj  gammaR,
FLA_Obj  sigmaR 
)
39{
40 FLA_Datatype datatype;
41
42 datatype = FLA_Obj_datatype( alpha11 );
43
44 switch ( datatype )
45 {
46 case FLA_FLOAT:
47 {
57
67
68 break;
69 }
70
71 case FLA_DOUBLE:
72 {
82
92
93 break;
94 }
95 }
96
97 return FLA_SUCCESS;
98}
FLA_Error FLA_Svv_2x2_ops(float *alpha11, float *alpha12, float *alpha22, float *sigma1, float *sigma2, float *gammaL, float *sigmaL, float *gammaR, float *sigmaR)
Definition FLA_Svv_2x2.c:102
FLA_Error FLA_Svv_2x2_opd(double *alpha11, double *alpha12, double *alpha22, double *sigma1, double *sigma2, double *gammaL, double *sigmaL, double *gammaR, double *sigmaR)
Definition FLA_Svv_2x2.c:290

References FLA_Obj_datatype(), FLA_Svv_2x2_opd(), FLA_Svv_2x2_ops(), and i.

◆ FLA_Svv_2x2_opd()

FLA_Error FLA_Svv_2x2_opd ( double alpha11,
double alpha12,
double alpha22,
double sigma1,
double sigma2,
double gammaL,
double sigmaL,
double gammaR,
double sigmaR 
)
299{
300 double zero = 0.0;
301 double half = 0.5;
302 double one = 1.0;
303 double two = 2.0;
304 double four = 4.0;
305
306 double eps;
307
308 double f, g, h;
309 double clt, crt, slt, srt;
310 double a, d, fa, ft, ga, gt, ha, ht, l;
311 double m, mm, r, s, t, temp, tsign, tt;
312 double ssmin, ssmax;
313 double csl, snl;
314 double csr, snr;
315
316 int gasmal, swap;
317 int pmax;
318
319 f = *alpha11;
320 g = *alpha12;
321 h = *alpha22;
322
324
325 ft = f;
326 fa = fabs( f );
327 ht = h;
328 ha = fabs( h );
329
330 // pmax points to the maximum absolute element of matrix.
331 // pmax = 1 if f largest in absolute values.
332 // pmax = 2 if g largest in absolute values.
333 // pmax = 3 if h largest in absolute values.
334
335 pmax = 1;
336
337 swap = ( ha > fa );
338 if ( swap )
339 {
340 pmax = 3;
341
342 temp = ft;
343 ft = ht;
344 ht = temp;
345
346 temp = fa;
347 fa = ha;
348 ha = temp;
349 }
350
351 gt = g;
352 ga = fabs( g );
353
354 if ( ga == zero )
355 {
356 // Diagonal matrix case.
357
358 ssmin = ha;
359 ssmax = fa;
360 clt = one;
361 slt = zero;
362 crt = one;
363 srt = zero;
364 }
365 else
366 {
367 gasmal = TRUE;
368
369 if ( ga > fa )
370 {
371 pmax = 2;
372
373 if ( ( fa / ga ) < eps )
374 {
375 // Case of very large ga.
376
377 gasmal = FALSE;
378
379 ssmax = ga;
380
381 if ( ha > one ) ssmin = fa / ( ga / ha );
382 else ssmin = ( fa / ga ) * ha;
383
384 clt = one;
385 slt = ht / gt;
386 crt = ft / gt;
387 srt = one;
388 }
389 }
390
391 if ( gasmal )
392 {
393 // Normal case.
394
395 d = fa - ha;
396
397 if ( d == fa ) l = one;
398 else l = d / fa;
399
400 m = gt / ft;
401
402 t = two - l;
403
404 mm = m * m;
405 tt = t * t;
406 s = sqrt( tt + mm );
407
408 if ( l == zero ) r = fabs( m );
409 else r = sqrt( l * l + mm );
410
411 a = half * ( s + r );
412
413 ssmin = ha / a;
414 ssmax = fa * a;
415
416 if ( mm == zero )
417 {
418 // Here, m is tiny.
419
420 if ( l == zero ) t = signof( two, ft ) * signof( one, gt );
421 else t = gt / signof( d, ft ) + m / t;
422 }
423 else
424 {
425 t = ( m / ( s + t ) + m / ( r + l ) ) * ( one + a );
426 }
427
428 l = sqrt( t*t + four );
429 crt = two / l;
430 srt = t / l;
431 clt = ( crt + srt * m ) / a;
432 slt = ( ht / ft ) * srt / a;
433 }
434 }
435
436 if ( swap )
437 {
438 csl = srt;
439 snl = crt;
440 csr = slt;
441 snr = clt;
442 }
443 else
444 {
445 csl = clt;
446 snl = slt;
447 csr = crt;
448 snr = srt;
449 }
450
451
452 // Correct the signs of ssmax and ssmin.
453
454 if ( pmax == 1 )
455 tsign = signof( one, csr ) * signof( one, csl ) * signof( one, f );
456 else if ( pmax == 2 )
457 tsign = signof( one, snr ) * signof( one, csl ) * signof( one, g );
458 else // if ( pmax == 3 )
459 tsign = signof( one, snr ) * signof( one, snl ) * signof( one, h );
460
461 ssmax = signof( ssmax, tsign );
462 ssmin = signof( ssmin, tsign * signof( one, f ) * signof( one, h ) );
463
464 // Save the output values.
465
466 *sigma1 = ssmin;
467 *sigma2 = ssmax;
468 *gammaL = csl;
469 *sigmaL = snl;
470 *gammaR = csr;
471 *sigmaR = snr;
472
473 return FLA_SUCCESS;
474}
double FLA_Mach_params_opd(FLA_Machval machval)
Definition FLA_Mach_params.c:74

References FLA_Mach_params_opd(), i, and temp.

Referenced by FLA_Bsvd_iteracc_v_opd_var1(), and FLA_Svv_2x2().

◆ FLA_Svv_2x2_ops()

FLA_Error FLA_Svv_2x2_ops ( float alpha11,
float alpha12,
float alpha22,
float sigma1,
float sigma2,
float gammaL,
float sigmaL,
float gammaR,
float sigmaR 
)
111{
112 float zero = 0.0F;
113 float half = 0.5F;
114 float one = 1.0F;
115 float two = 2.0F;
116 float four = 4.0F;
117
118 float eps;
119
120 float f, g, h;
121 float clt, crt, slt, srt;
122 float a, d, fa, ft, ga, gt, ha, ht, l;
123 float m, mm, r, s, t, temp, tsign, tt;
124 float ssmin, ssmax;
125 float csl, snl;
126 float csr, snr;
127
128 int gasmal, swap;
129 int pmax;
130
131 f = *alpha11;
132 g = *alpha12;
133 h = *alpha22;
134
136
137 ft = f;
138 fa = fabsf( f );
139 ht = h;
140 ha = fabsf( h );
141
142 // pmax points to the maximum absolute element of matrix.
143 // pmax = 1 if f largest in absolute values.
144 // pmax = 2 if g largest in absolute values.
145 // pmax = 3 if h largest in absolute values.
146
147 pmax = 1;
148
149 swap = ( ha > fa );
150 if ( swap )
151 {
152 pmax = 3;
153
154 temp = ft;
155 ft = ht;
156 ht = temp;
157
158 temp = fa;
159 fa = ha;
160 ha = temp;
161 }
162
163 gt = g;
164 ga = fabsf( g );
165
166 if ( ga == zero )
167 {
168 // Diagonal matrix case.
169
170 ssmin = ha;
171 ssmax = fa;
172 clt = one;
173 slt = zero;
174 crt = one;
175 srt = zero;
176 }
177 else
178 {
179 gasmal = TRUE;
180
181 if ( ga > fa )
182 {
183 pmax = 2;
184
185 if ( ( fa / ga ) < eps )
186 {
187 // Case of very large ga.
188
189 gasmal = FALSE;
190
191 ssmax = ga;
192
193 if ( ha > one ) ssmin = fa / ( ga / ha );
194 else ssmin = ( fa / ga ) * ha;
195
196 clt = one;
197 slt = ht / gt;
198 crt = ft / gt;
199 srt = one;
200 }
201 }
202
203 if ( gasmal )
204 {
205 // Normal case.
206
207 d = fa - ha;
208
209 if ( d == fa ) l = one;
210 else l = d / fa;
211
212 m = gt / ft;
213
214 t = two - l;
215
216 mm = m * m;
217 tt = t * t;
218 s = sqrtf( tt + mm );
219
220 if ( l == zero ) r = fabsf( m );
221 else r = sqrtf( l * l + mm );
222
223 a = half * ( s + r );
224
225 ssmin = ha / a;
226 ssmax = fa * a;
227
228 if ( mm == zero )
229 {
230 // Here, m is tiny.
231
232 if ( l == zero ) t = signof( two, ft ) * signof( one, gt );
233 else t = gt / signof( d, ft ) + m / t;
234 }
235 else
236 {
237 t = ( m / ( s + t ) + m / ( r + l ) ) * ( one + a );
238 }
239
240 l = sqrtf( t*t + four );
241 crt = two / l;
242 srt = t / l;
243 clt = ( crt + srt * m ) / a;
244 slt = ( ht / ft ) * srt / a;
245 }
246 }
247
248 if ( swap )
249 {
250 csl = srt;
251 snl = crt;
252 csr = slt;
253 snr = clt;
254 }
255 else
256 {
257 csl = clt;
258 snl = slt;
259 csr = crt;
260 snr = srt;
261 }
262
263
264 // Correct the signs of ssmax and ssmin.
265
266 if ( pmax == 1 )
267 tsign = signof( one, csr ) * signof( one, csl ) * signof( one, f );
268 else if ( pmax == 2 )
269 tsign = signof( one, snr ) * signof( one, csl ) * signof( one, g );
270 else // if ( pmax == 3 )
271 tsign = signof( one, snr ) * signof( one, snl ) * signof( one, h );
272
273 ssmax = signof( ssmax, tsign );
274 ssmin = signof( ssmin, tsign * signof( one, f ) * signof( one, h ) );
275
276 // Save the output values.
277
278 *sigma1 = ssmin;
279 *sigma2 = ssmax;
280 *gammaL = csl;
281 *sigmaL = snl;
282 *gammaR = csr;
283 *sigmaR = snr;
284
285 return FLA_SUCCESS;
286}
float FLA_Mach_params_ops(FLA_Machval machval)
Definition FLA_Mach_params.c:47

References FLA_Mach_params_ops(), i, and temp.

Referenced by FLA_Bsvd_iteracc_v_ops_var1(), and FLA_Svv_2x2().

◆ FLA_Wilkshift_bidiag_check()

FLA_Error FLA_Wilkshift_bidiag_check ( FLA_Obj  epsilon1,
FLA_Obj  delta1,
FLA_Obj  epsilon2,
FLA_Obj  delta2,
FLA_Obj  kappa 
)

◆ FLA_Wilkshift_tridiag()

FLA_Error FLA_Wilkshift_tridiag ( FLA_Obj  delta1,
FLA_Obj  epsilon,
FLA_Obj  delta2,
FLA_Obj  kappa 
)
59{
60 FLA_Datatype datatype;
61
62 datatype = FLA_Obj_datatype( delta1 );
63
66
67 switch ( datatype )
68 {
69 case FLA_FLOAT:
70 {
71 float* delta1_p = ( float* ) FLA_FLOAT_PTR( delta1 );
72 float* epsilon_p = ( float* ) FLA_FLOAT_PTR( epsilon );
73 float* delta2_p = ( float* ) FLA_FLOAT_PTR( delta2 );
74 float* kappa_p = ( float* ) FLA_FLOAT_PTR( kappa );
75
77 *epsilon_p,
78 *delta2_p,
79 kappa_p );
80
81 break;
82 }
83
84 case FLA_DOUBLE:
85 {
86 double* delta1_p = ( double* ) FLA_DOUBLE_PTR( delta1 );
87 double* epsilon_p = ( double* ) FLA_DOUBLE_PTR( epsilon );
88 double* delta2_p = ( double* ) FLA_DOUBLE_PTR( delta2 );
89 double* kappa_p = ( double* ) FLA_DOUBLE_PTR( kappa );
90
92 *epsilon_p,
93 *delta2_p,
94 kappa_p );
95
96 break;
97 }
98 }
99
100 return FLA_SUCCESS;
101}
FLA_Error FLA_Wilkshift_tridiag_ops(float delta1, float epsilon, float delta2, float *kappa)
Definition FLA_Wilkshift_tridiag.c:105
FLA_Error FLA_Wilkshift_tridiag_opd(double delta1, double epsilon, double delta2, double *kappa)
Definition FLA_Wilkshift_tridiag.c:155
FLA_Error FLA_Wilkshift_tridiag_check(FLA_Obj delta1, FLA_Obj epsilon, FLA_Obj delta2, FLA_Obj kappa)
Definition FLA_Wilkshift_tridiag_check.c:13

References FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Wilkshift_tridiag_check(), FLA_Wilkshift_tridiag_opd(), FLA_Wilkshift_tridiag_ops(), and i.

◆ FLA_Wilkshift_tridiag_check()

FLA_Error FLA_Wilkshift_tridiag_check ( FLA_Obj  delta1,
FLA_Obj  epsilon,
FLA_Obj  delta2,
FLA_Obj  kappa 
)

◆ FLA_Wilkshift_tridiag_opd()

FLA_Error FLA_Wilkshift_tridiag_opd ( double  delta1,
double  epsilon,
double  delta2,
double kappa 
)
159{
160 double a = delta1;
161 double c = epsilon;
162 double d = delta2;
163 double p, q, r, s, k;
164
165 // Begin with kappa equal to d.
166 k = d;
167
168 // Compute a scaling factor to promote numerical stability.
169 s = fabs( a ) + 2.0 * fabs( c ) + fabs( d );
170
171 if ( s == 0.0 ) return FLA_SUCCESS;
172
173 // Compute q with scaling applied.
174 q = ( c / s ) * ( c / s );
175
176 if ( q != 0.0 )
177 {
178
179 // Compute p = 0.5*( a - d ) with scaling applied.
180 p = 0.5 * ( ( a / s ) - ( d / s ) );
181
182 // Compute r = sqrt( p*p - q ).
183 r = sqrt( p * p + q );
184
185 // If p*r is negative, then we need to negate r to ensure we use the
186 // larger of the two eigenvalues.
187 if ( p * r < 0.0 ) r = -r;
188
189 // Compute the Wilkinson shift with scaling removed:
190 // k = lambda_min + d
191 // = d + lambda_min
192 // = d + (-q / lambda_max)
193 // = d - q / lambda_max
194 // = d - q / (p + r)
195 k = k - s * ( q / ( p + r ) );
196
197/*
198 // LAPACK method:
199
200 p = 0.5 * ( ( a ) - ( d ) ) / c ;
201 //r = sqrt( p * p + 1.0 );
202 r = fla_dlapy2( p, 1.0 );
203 if ( p < 0.0 ) r = -r;
204 k = k - ( c / ( p + r ) );
205*/
206 }
207
208 // Save the result.
209 *kappa = k;
210
211 return FLA_SUCCESS;
212}

References i.

Referenced by FLA_Tevd_eigval_n_opd_var1(), FLA_Tevd_eigval_v_opd_var1(), FLA_Tevd_eigval_v_opd_var3(), FLA_Tevd_find_perfshift_opd(), and FLA_Wilkshift_tridiag().

◆ FLA_Wilkshift_tridiag_ops()

FLA_Error FLA_Wilkshift_tridiag_ops ( float  delta1,
float  epsilon,
float  delta2,
float kappa 
)
109{
110 float a = delta1;
111 float c = epsilon;
112 float d = delta2;
113 float p, q, r, s, k;
114
115 // Begin with kappa equal to d.
116 k = d;
117
118 // Compute a scaling factor to promote numerical stability.
119 s = fabs( a ) + 2.0F * fabs( c ) + fabs( d );
120
121 if ( s == 0.0F ) return FLA_SUCCESS;
122
123 // Compute q with scaling applied.
124 q = ( c / s ) * ( c / s );
125
126 if ( q != 0.0F )
127 {
128 // Compute p = 0.5*( a - d ) with scaling applied.
129 p = 0.5F * ( ( a / s ) - ( d / s ) );
130
131 // Compute r = sqrt( p*p - q ).
132 r = sqrt( p * p + q );
133
134 // If p*r is negative, then we need to negate r to ensure we use the
135 // larger of the two eigenvalues.
136 if ( p * r < 0.0F ) r = -r;
137
138 // Compute the Wilkinson shift with scaling removed:
139 // k = lambda_min + d
140 // = d + lambda_min
141 // = d + (-q / lambda_max)
142 // = d - q / lambda_max
143 // = d - q / (p + r)
144 k = k - s * ( q / ( p + r ) );
145 }
146
147 // Save the result.
148 *kappa = k;
149
150 return FLA_SUCCESS;
151}

References i.

Referenced by FLA_Wilkshift_tridiag().