libflame
12600
|
Functions | |
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_Hevv_2x2 | ( | FLA_Obj | alpha11, |
FLA_Obj | alpha21, | ||
FLA_Obj | alpha22, | ||
FLA_Obj | lambda1, | ||
FLA_Obj | lambda2, | ||
FLA_Obj | gamma1, | ||
FLA_Obj | sigma1 | ||
) |
References FLA_Hevv_2x2_opc(), FLA_Hevv_2x2_opd(), FLA_Hevv_2x2_ops(), FLA_Hevv_2x2_opz(), and FLA_Obj_datatype().
{ FLA_Datatype datatype; datatype = FLA_Obj_datatype( alpha11 ); switch ( datatype ) { case FLA_FLOAT: { float* buff_alpha11 = FLA_FLOAT_PTR( alpha11 ); float* buff_alpha21 = FLA_FLOAT_PTR( alpha21 ); float* buff_alpha22 = FLA_FLOAT_PTR( alpha22 ); float* buff_lambda1 = FLA_FLOAT_PTR( lambda1 ); float* buff_lambda2 = FLA_FLOAT_PTR( lambda2 ); float* buff_gamma1 = FLA_FLOAT_PTR( gamma1 ); float* buff_sigma1 = FLA_FLOAT_PTR( sigma1 ); FLA_Hevv_2x2_ops( buff_alpha11, buff_alpha21, buff_alpha22, buff_lambda1, buff_lambda2, buff_gamma1, buff_sigma1 ); break; } case FLA_DOUBLE: { double* buff_alpha11 = FLA_DOUBLE_PTR( alpha11 ); double* buff_alpha21 = FLA_DOUBLE_PTR( alpha21 ); double* buff_alpha22 = FLA_DOUBLE_PTR( alpha22 ); double* buff_lambda1 = FLA_DOUBLE_PTR( lambda1 ); double* buff_lambda2 = FLA_DOUBLE_PTR( lambda2 ); double* buff_gamma1 = FLA_DOUBLE_PTR( gamma1 ); double* buff_sigma1 = FLA_DOUBLE_PTR( sigma1 ); FLA_Hevv_2x2_opd( buff_alpha11, buff_alpha21, buff_alpha22, buff_lambda1, buff_lambda2, buff_gamma1, buff_sigma1 ); break; } case FLA_COMPLEX: { scomplex* buff_alpha11 = FLA_COMPLEX_PTR( alpha11 ); scomplex* buff_alpha21 = FLA_COMPLEX_PTR( alpha21 ); scomplex* buff_alpha22 = FLA_COMPLEX_PTR( alpha22 ); float* buff_lambda1 = FLA_FLOAT_PTR( lambda1 ); float* buff_lambda2 = FLA_FLOAT_PTR( lambda2 ); float* buff_gamma1 = FLA_FLOAT_PTR( gamma1 ); scomplex* buff_sigma1 = FLA_COMPLEX_PTR( sigma1 ); FLA_Hevv_2x2_opc( buff_alpha11, buff_alpha21, buff_alpha22, buff_lambda1, buff_lambda2, buff_gamma1, buff_sigma1 ); break; } case FLA_DOUBLE_COMPLEX: { dcomplex* buff_alpha11 = FLA_DOUBLE_COMPLEX_PTR( alpha11 ); dcomplex* buff_alpha21 = FLA_DOUBLE_COMPLEX_PTR( alpha21 ); dcomplex* buff_alpha22 = FLA_DOUBLE_COMPLEX_PTR( alpha22 ); double* buff_lambda1 = FLA_DOUBLE_PTR( lambda1 ); double* buff_lambda2 = FLA_DOUBLE_PTR( lambda2 ); double* buff_gamma1 = FLA_DOUBLE_PTR( gamma1 ); dcomplex* buff_sigma1 = FLA_DOUBLE_COMPLEX_PTR( sigma1 ); FLA_Hevv_2x2_opz( buff_alpha11, buff_alpha21, buff_alpha22, buff_lambda1, buff_lambda2, buff_gamma1, buff_sigma1 ); break; } } return FLA_SUCCESS; }
FLA_Error FLA_Hevv_2x2_opc | ( | scomplex * | alpha11, |
scomplex * | alpha21, | ||
scomplex * | alpha22, | ||
float * | lambda1, | ||
float * | lambda2, | ||
float * | gamma1, | ||
scomplex * | sigma1 | ||
) |
Referenced by FLA_Hevv_2x2().
{
FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
return FLA_SUCCESS;
}
FLA_Error FLA_Hevv_2x2_opd | ( | double * | alpha11, |
double * | alpha21, | ||
double * | alpha22, | ||
double * | lambda1, | ||
double * | lambda2, | ||
double * | gamma1, | ||
double * | sigma1 | ||
) |
Referenced by FLA_Hevv_2x2(), FLA_Tevd_iteracc_v_opd_var1(), and FLA_Tevd_iteracc_v_opd_var3().
{ double a11, a21, a22; double l1, l2; double g1, s1; double ab, acmn, acmx, acs, adf, cs, ct, df, rt, sm, tb, tn; int sgn1, sgn2; a11 = *alpha11; a21 = *alpha21; a22 = *alpha22; // Compute the eigenvalues. sm = a11 + a22; df = a11 - a22; adf = fabs( df ); tb = a21 + a21; ab = fabs( tb ); if ( fabs( a11 ) > fabs( a22 ) ) { acmx = a11; acmn = a22; } else { acmx = a22; acmn = a11; } if ( adf > ab ) rt = adf * sqrt( 1.0 + pow( ( ab / adf ), 2.0 ) ); else if ( adf < ab ) rt = ab * sqrt( 1.0 + pow( ( adf / ab ), 2.0 ) ); else rt = ab * sqrt( 2.0 ); if ( sm < 0.0 ) { l1 = 0.5 * ( sm - rt ); l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21; sgn1 = -1; } else if ( sm > 0.0 ) { l1 = 0.5 * ( sm + rt ); l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21; sgn1 = 1; } else { l1 = 0.5 * rt; l2 = -0.5 * rt; sgn1 = 1; } *lambda1 = l1; *lambda2 = l2; // Compute the eigenvector. if ( df >= 0.0 ) { cs = df + rt; sgn2 = 1; } else { cs = df - rt; sgn2 = -1; } acs = fabs( cs ); if ( acs > ab ) { ct = -tb / cs; s1 = 1.0 / sqrt( 1.0 + ct*ct ); g1 = ct * s1; } else { if ( ab == 0.0 ) { g1 = 1.0; s1 = 0.0; } else { tn = -cs / tb; g1 = 1.0 / sqrt( 1.0 + tn*tn ); s1 = tn * g1; } } if ( sgn1 == sgn2 ) { tn = g1; g1 = -s1; s1 = tn; } *gamma1 = g1; *sigma1 = s1; return FLA_SUCCESS; }
FLA_Error FLA_Hevv_2x2_ops | ( | float * | alpha11, |
float * | alpha21, | ||
float * | alpha22, | ||
float * | lambda1, | ||
float * | lambda2, | ||
float * | gamma1, | ||
float * | sigma1 | ||
) |
Referenced by FLA_Hevv_2x2().
{ float a11, a21, a22; float l1, l2; float g1, s1; float ab, acmn, acmx, acs, adf, cs, ct, df, rt, sm, tb, tn; int sgn1, sgn2; a11 = *alpha11; a21 = *alpha21; a22 = *alpha22; // Compute the eigenvalues. sm = a11 + a22; df = a11 - a22; adf = fabs( df ); tb = a21 + a21; ab = fabs( tb ); if ( fabs( a11 ) > fabs( a22 ) ) { acmx = a11; acmn = a22; } else { acmx = a22; acmn = a11; } if ( adf > ab ) rt = adf * sqrt( 1.0F + ( ab / adf ) * ( ab / adf ) ); else if ( adf < ab ) rt = ab * sqrt( 1.0F + ( adf / ab ) * ( adf / ab ) ); else rt = ab * sqrt( 2.0F ); if ( sm < 0.0F ) { l1 = 0.5F * ( sm - rt ); l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21; sgn1 = -1; } else if ( sm > 0.0F ) { l1 = 0.5F * ( sm + rt ); l2 = ( acmx / l1 ) * acmn - ( a21 / l1 ) * a21; sgn1 = 1; } else { l1 = 0.5F * rt; l2 = -0.5F * rt; sgn1 = 1; } *lambda1 = l1; *lambda2 = l2; // Compute the eigenvector. if ( df >= 0.0F ) { cs = df + rt; sgn2 = 1; } else { cs = df - rt; sgn2 = -1; } acs = fabs( cs ); if ( acs > ab ) { ct = -tb / cs; s1 = 1.0F / sqrt( 1.0F + ct*ct ); g1 = ct * s1; } else { if ( ab == 0.0F ) { g1 = 1.0F; s1 = 0.0F; } else { tn = -cs / tb; g1 = 1.0F / sqrt( 1.0F + tn*tn ); s1 = tn * g1; } } if ( sgn1 == sgn2 ) { tn = g1; g1 = -s1; s1 = tn; } *gamma1 = g1; *sigma1 = s1; return FLA_SUCCESS; }
FLA_Error FLA_Hevv_2x2_opz | ( | dcomplex * | alpha11, |
dcomplex * | alpha21, | ||
dcomplex * | alpha22, | ||
double * | lambda1, | ||
double * | lambda2, | ||
double * | gamma1, | ||
dcomplex * | sigma1 | ||
) |
Referenced by FLA_Hevv_2x2().
{
FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
return FLA_SUCCESS;
}