|
libflame
12600
|
Functions | |
| 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_Househ2s_UT | ( | FLA_Side | side, |
| FLA_Obj | chi_1, | ||
| FLA_Obj | x2, | ||
| FLA_Obj | alpha, | ||
| FLA_Obj | chi_1_minus_alpha, | ||
| FLA_Obj | tau | ||
| ) |
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(), and FLA_Obj_vector_inc().
Referenced by FLA_Bidiag_UT_u_step_unb_var3(), and FLA_Bidiag_UT_u_step_unb_var4().
{
FLA_Datatype datatype;
int m_x2;
int inc_x2;
datatype = FLA_Obj_datatype( x2 );
m_x2 = FLA_Obj_vector_dim( x2 );
inc_x2 = FLA_Obj_vector_inc( x2 );
if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
FLA_Househ2s_UT_check( side, chi_1, x2, alpha, chi_1_minus_alpha, tau );
switch ( datatype )
{
case FLA_FLOAT:
{
float* chi_1_p = ( float* ) FLA_FLOAT_PTR( chi_1 );
float* x2_p = ( float* ) FLA_FLOAT_PTR( x2 );
float* alpha_p = ( float* ) FLA_FLOAT_PTR( alpha );
float* chi_1_minus_alpha_p = ( float* ) FLA_FLOAT_PTR( chi_1_minus_alpha );
float* tau_p = ( float* ) FLA_FLOAT_PTR( tau );
if ( side == FLA_LEFT )
FLA_Househ2s_UT_l_ops( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
else // if ( side == FLA_RIGHT )
FLA_Househ2s_UT_r_ops( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
break;
}
case FLA_DOUBLE:
{
double* chi_1_p = ( double* ) FLA_DOUBLE_PTR( chi_1 );
double* x2_p = ( double* ) FLA_DOUBLE_PTR( x2 );
double* alpha_p = ( double* ) FLA_DOUBLE_PTR( alpha );
double* chi_1_minus_alpha_p = ( double* ) FLA_DOUBLE_PTR( chi_1_minus_alpha );
double* tau_p = ( double* ) FLA_DOUBLE_PTR( tau );
if ( side == FLA_LEFT )
FLA_Househ2s_UT_l_opd( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
else // if ( side == FLA_RIGHT )
FLA_Househ2s_UT_r_opd( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
break;
}
case FLA_COMPLEX:
{
scomplex* chi_1_p = ( scomplex* ) FLA_COMPLEX_PTR( chi_1 );
scomplex* x2_p = ( scomplex* ) FLA_COMPLEX_PTR( x2 );
scomplex* alpha_p = ( scomplex* ) FLA_COMPLEX_PTR( alpha );
scomplex* chi_1_minus_alpha_p = ( scomplex* ) FLA_COMPLEX_PTR( chi_1_minus_alpha );
scomplex* tau_p = ( scomplex* ) FLA_COMPLEX_PTR( tau );
if ( side == FLA_LEFT )
FLA_Househ2s_UT_l_opc( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
else // if ( side == FLA_RIGHT )
FLA_Househ2s_UT_r_opc( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
break;
}
case FLA_DOUBLE_COMPLEX:
{
dcomplex* chi_1_p = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( chi_1 );
dcomplex* x2_p = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( x2 );
dcomplex* alpha_p = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( alpha );
dcomplex* chi_1_minus_alpha_p = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( chi_1_minus_alpha );
dcomplex* tau_p = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( tau );
if ( side == FLA_LEFT )
FLA_Househ2s_UT_l_opz( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
else // if ( side == FLA_RIGHT )
FLA_Househ2s_UT_r_opz( m_x2,
chi_1_p,
x2_p, inc_x2,
alpha_p,
chi_1_minus_alpha_p,
tau_p );
break;
}
}
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References bl1_cnrm2(), FLA_ONE_HALF, scomplex::imag, and scomplex::real.
Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_opc().
{
scomplex one_half = *FLA_COMPLEX_PTR( FLA_ONE_HALF );
scomplex y[2];
float abs_chi_1;
float norm_x_2;
float norm_x;
float abs_chi_1_minus_alpha;
float norm_x_2_div_abs_chi_1_minus_alpha;
int i_one = 1;
int i_two = 2;
//
// Compute the 2-norm of x_2:
//
// norm_x_2 := || x_2 ||_2
//
bl1_cnrm2( m_x2,
x2, inc_x2,
&norm_x_2 );
//
// If 2-norm of x_2 is zero, then return with trivial values.
//
if ( norm_x_2 == 0.0F )
{
alpha->real = -(chi_1->real);
alpha->imag = -(chi_1->imag);
chi_1_minus_alpha->real = 2.0F * chi_1->real;
chi_1_minus_alpha->imag = 2.0F * chi_1->imag;
tau->real = one_half.real;
tau->imag = one_half.imag;
return FLA_SUCCESS;
}
//
// Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
// of chi_1:
//
// abs_chi_1 := | chi_1 | = || chi_1 ||_2
//
bl1_cnrm2( i_one,
chi_1, i_one,
&abs_chi_1 );
//
// Compute the 2-norm of x via the two norms previously computed above:
//
// norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
// || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
//
y[0].real = abs_chi_1;
y[0].imag = 0.0;
y[1].real = norm_x_2;
y[1].imag = 0.0F;
bl1_cnrm2( i_two,
y, i_one,
&norm_x );
//
// Compute alpha:
//
// alpha := - || x ||_2 * chi_1 / | chi_1 |
//
if ( abs_chi_1 == 0.0F )
{
alpha->real = norm_x * ( -1.0F );
alpha->imag = norm_x * ( -1.0F );
}
else
{
alpha->real = norm_x * ( -chi_1->real / abs_chi_1 );
alpha->imag = norm_x * ( -chi_1->imag / abs_chi_1 );
}
chi_1_minus_alpha->real = chi_1->real - alpha->real;
chi_1_minus_alpha->imag = chi_1->imag - alpha->imag;
//
// Compute tau:
//
// tau := ( 1 + u_2' * u_2 ) / 2
// = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
// ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
// = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
//
bl1_csabsval2( chi_1_minus_alpha, &abs_chi_1_minus_alpha );
norm_x_2_div_abs_chi_1_minus_alpha = norm_x_2 / abs_chi_1_minus_alpha;
tau->real = one_half.real + one_half.real*( norm_x_2_div_abs_chi_1_minus_alpha *
norm_x_2_div_abs_chi_1_minus_alpha );
tau->imag = 0.0F;
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References bl1_dnrm2(), and FLA_ONE_HALF.
Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_opd().
{
double one_half = *FLA_DOUBLE_PTR( FLA_ONE_HALF );
double y[2];
double abs_chi_1;
double norm_x_2;
double norm_x;
double abs_chi_1_minus_alpha;
double norm_x_2_div_abs_chi_1_minus_alpha;
int i_one = 1;
int i_two = 2;
//
// Compute the 2-norm of x_2:
//
// norm_x_2 := || x_2 ||_2
//
bl1_dnrm2( m_x2,
x2, inc_x2,
&norm_x_2 );
//
// If 2-norm of x_2 is zero, then return with trivial values.
//
if ( norm_x_2 == 0.0 )
{
*alpha = -(*chi_1);
*chi_1_minus_alpha = 2.0 * (*chi_1);
*tau = one_half;
return FLA_SUCCESS;
}
//
// Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
// of chi_1:
//
// abs_chi_1 := | chi_1 | = || chi_1 ||_2
//
bl1_dnrm2( i_one,
chi_1, i_one,
&abs_chi_1 );
//
// Compute the 2-norm of x via the two norms previously computed above:
//
// norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
// || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
//
y[0] = abs_chi_1;
y[1] = norm_x_2;
bl1_dnrm2( i_two,
y, i_one,
&norm_x );
//
// Compute alpha:
//
// alpha := - || x ||_2 * chi_1 / | chi_1 |
// = -sign( chi_1 ) * || x ||_2
//
*alpha = -dsign( *chi_1 ) * norm_x;
*chi_1_minus_alpha = (*chi_1) - (*alpha);
//
// Compute tau:
//
// tau := ( 1 + u_2' * u_2 ) / 2
// = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
// ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
// = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
//
bl1_dabsval2( chi_1_minus_alpha, &abs_chi_1_minus_alpha );
norm_x_2_div_abs_chi_1_minus_alpha = norm_x_2 / abs_chi_1_minus_alpha;
*tau = one_half + one_half*( norm_x_2_div_abs_chi_1_minus_alpha *
norm_x_2_div_abs_chi_1_minus_alpha );
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References bl1_snrm2(), and FLA_ONE_HALF.
Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_ops().
{
float one_half = *FLA_FLOAT_PTR( FLA_ONE_HALF );
float y[2];
float abs_chi_1;
float norm_x_2;
float norm_x;
float abs_chi_1_minus_alpha;
float norm_x_2_div_abs_chi_1_minus_alpha;
int i_one = 1;
int i_two = 2;
//
// Compute the 2-norm of x_2:
//
// norm_x_2 := || x_2 ||_2
//
bl1_snrm2( m_x2,
x2, inc_x2,
&norm_x_2 );
//
// If 2-norm of x_2 is zero, then return with trivial values.
//
if ( norm_x_2 == 0.0F )
{
*alpha = -(*chi_1);
*chi_1_minus_alpha = 2.0F * (*chi_1);
*tau = one_half;
return FLA_SUCCESS;
}
//
// Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
// of chi_1:
//
// abs_chi_1 := | chi_1 | = || chi_1 ||_2
//
bl1_snrm2( i_one,
chi_1, i_one,
&abs_chi_1 );
//
// Compute the 2-norm of x via the two norms previously computed above:
//
// norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
// || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
//
y[0] = abs_chi_1;
y[1] = norm_x_2;
bl1_snrm2( i_two,
y, i_one,
&norm_x );
//
// Compute alpha:
//
// alpha := - || x ||_2 * chi_1 / | chi_1 |
// = -sign( chi_1 ) * || x ||_2
//
*alpha = -ssign( *chi_1 ) * norm_x;
*chi_1_minus_alpha = (*chi_1) - (*alpha);
//
// Compute tau:
//
// tau := ( 1 + u_2' * u_2 ) / 2
// = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
// ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
// = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
//
bl1_sabsval2( chi_1_minus_alpha, &abs_chi_1_minus_alpha );
norm_x_2_div_abs_chi_1_minus_alpha = norm_x_2 / abs_chi_1_minus_alpha;
*tau = one_half + one_half*( norm_x_2_div_abs_chi_1_minus_alpha *
norm_x_2_div_abs_chi_1_minus_alpha );
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References bl1_znrm2(), FLA_ONE_HALF, dcomplex::imag, and dcomplex::real.
Referenced by FLA_Househ2s_UT(), and FLA_Househ2s_UT_r_opz().
{
dcomplex one_half = *FLA_DOUBLE_COMPLEX_PTR( FLA_ONE_HALF );
dcomplex y[2];
double abs_chi_1;
double norm_x_2;
double norm_x;
double abs_chi_1_minus_alpha;
double norm_x_2_div_abs_chi_1_minus_alpha;
int i_one = 1;
int i_two = 2;
//
// Compute the 2-norm of x_2:
//
// norm_x_2 := || x_2 ||_2
//
bl1_znrm2( m_x2,
x2, inc_x2,
&norm_x_2 );
//
// If 2-norm of x_2 is zero, then return with trivial values.
//
if ( norm_x_2 == 0.0 )
{
alpha->real = -(chi_1->real);
alpha->imag = -(chi_1->imag);
chi_1_minus_alpha->real = 2.0 * chi_1->real;
chi_1_minus_alpha->imag = 2.0 * chi_1->imag;
tau->real = one_half.real;
tau->imag = one_half.imag;
return FLA_SUCCESS;
}
//
// Compute the absolute value (magnitude) of chi_1, which equals the 2-norm
// of chi_1:
//
// abs_chi_1 := | chi_1 | = || chi_1 ||_2
//
bl1_znrm2( i_one,
chi_1, i_one,
&abs_chi_1 );
//
// Compute the 2-norm of x via the two norms previously computed above:
//
// norm_x := || x ||_2 = || / chi_1 \ || = || / || chi_1 ||_2 \ ||
// || \ x_2 / ||_2 || \ || x_2 ||_2 / ||_2
//
y[0].real = abs_chi_1;
y[0].imag = 0.0;
y[1].real = norm_x_2;
y[1].imag = 0.0;
bl1_znrm2( i_two,
y, i_one,
&norm_x );
//
// Compute alpha:
//
// alpha := - || x ||_2 * chi_1 / | chi_1 |
//
if ( abs_chi_1 == 0.0 )
{
alpha->real = norm_x * ( -1.0 );
alpha->imag = norm_x * ( -1.0 );
}
else
{
alpha->real = norm_x * ( -chi_1->real / abs_chi_1 );
alpha->imag = norm_x * ( -chi_1->imag / abs_chi_1 );
}
chi_1_minus_alpha->real = chi_1->real - alpha->real;
chi_1_minus_alpha->imag = chi_1->imag - alpha->imag;
//
// Compute tau:
//
// tau := ( 1 + u_2' * u_2 ) / 2
// = ( ( chi_1 - alpha ) * conj( chi_1 - alpha ) + x_2' * x_2 ) /
// ( 2 * ( chi_1 - alpha ) * conj( chi_1 - alpha ) )
// = 1/2 + ( || x ||_2 / | chi_1 - alpha | )^2
//
bl1_zdabsval2( chi_1_minus_alpha, &abs_chi_1_minus_alpha );
norm_x_2_div_abs_chi_1_minus_alpha = norm_x_2 / abs_chi_1_minus_alpha;
tau->real = one_half.real + one_half.real*( norm_x_2_div_abs_chi_1_minus_alpha *
norm_x_2_div_abs_chi_1_minus_alpha );
tau->imag = 0.0;
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References FLA_Househ2s_UT_l_opc().
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_l_opc( m_x2,
chi_1,
x2, inc_x2,
alpha,
chi_1_minus_alpha,
tau );
//chi_1_minus_alpha->real = chi_1->real - alpha->real;
//chi_1_minus_alpha->imag = chi_1->imag - -alpha->imag;
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References FLA_Househ2s_UT_l_opd().
Referenced by FLA_Bidiag_UT_u_step_ofd_var3(), FLA_Bidiag_UT_u_step_ofd_var4(), FLA_Bidiag_UT_u_step_opd_var3(), FLA_Bidiag_UT_u_step_opd_var4(), and FLA_Househ2s_UT().
{
FLA_Househ2s_UT_l_opd( m_x2,
chi_1,
x2, inc_x2,
alpha,
chi_1_minus_alpha,
tau );
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References FLA_Househ2s_UT_l_ops().
Referenced by FLA_Bidiag_UT_u_step_ofs_var3(), FLA_Bidiag_UT_u_step_ofs_var4(), FLA_Bidiag_UT_u_step_ops_var3(), FLA_Bidiag_UT_u_step_ops_var4(), and FLA_Househ2s_UT().
{
FLA_Househ2s_UT_l_ops( m_x2,
chi_1,
x2, inc_x2,
alpha,
chi_1_minus_alpha,
tau );
return FLA_SUCCESS;
}
| 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 | ||
| ) |
References FLA_Househ2s_UT_l_opz().
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_Househ2s_UT_l_opz( m_x2,
chi_1,
x2, inc_x2,
alpha,
chi_1_minus_alpha,
tau );
//chi_1_minus_alpha->real = chi_1->real - alpha->real;
//chi_1_minus_alpha->imag = chi_1->imag - -alpha->imag;
return FLA_SUCCESS;
}
1.7.6.1