|
libflame
revision_anchor
|
Functions | |
| FLA_Error | FLA_Norm1_tridiag (FLA_Obj d, FLA_Obj e, FLA_Obj norm) |
| FLA_Error | FLA_Norm1_tridiag_ops (int m_A, float *buff_d, int inc_d, float *buff_e, int inc_e, float *norm) |
| FLA_Error | FLA_Norm1_tridiag_opd (int m_A, double *buff_d, int inc_d, double *buff_e, int inc_e, double *norm) |
| FLA_Error FLA_Norm1_tridiag | ( | FLA_Obj | d, |
| FLA_Obj | e, | ||
| FLA_Obj | norm | ||
| ) |
References FLA_Norm1_tridiag_opd(), FLA_Norm1_tridiag_ops(), FLA_Obj_datatype(), FLA_Obj_vector_dim(), and FLA_Obj_vector_inc().
{
FLA_Datatype datatype;
int m_A;
int inc_d;
int inc_e;
datatype = FLA_Obj_datatype( d );
m_A = FLA_Obj_vector_dim( d );
inc_d = FLA_Obj_vector_inc( d );
inc_e = FLA_Obj_vector_inc( e );
switch ( datatype )
{
case FLA_FLOAT:
{
float* buff_d = FLA_FLOAT_PTR( d );
float* buff_e = FLA_FLOAT_PTR( e );
float* buff_norm = FLA_FLOAT_PTR( norm );
FLA_Norm1_tridiag_ops( m_A,
buff_d, inc_d,
buff_e, inc_e,
buff_norm );
break;
}
case FLA_DOUBLE:
{
double* buff_d = FLA_DOUBLE_PTR( d );
double* buff_e = FLA_DOUBLE_PTR( e );
double* buff_norm = FLA_DOUBLE_PTR( norm );
FLA_Norm1_tridiag_opd( m_A,
buff_d, inc_d,
buff_e, inc_e,
buff_norm );
break;
}
}
return FLA_SUCCESS;
}
| FLA_Error FLA_Norm1_tridiag_opd | ( | int | m_A, |
| double * | buff_d, | ||
| int | inc_d, | ||
| double * | buff_e, | ||
| int | inc_e, | ||
| double * | norm | ||
| ) |
Referenced by FLA_Norm1_tridiag(), and FLA_Tevd_compute_scaling_opd().
{
double* d = buff_d;
double* e = buff_e;
double nm;
int i;
if ( m_A == 1 )
{
nm = fabs( *d );
}
else
{
double d_first = d[ (0 )*inc_d ];
double e_first = e[ (0 )*inc_e ];
double e_last = e[ (m_A-2)*inc_e ];
double d_last = d[ (m_A-1)*inc_d ];
// Record the maximum of the absolute row/column sums for the
// first and last row/columns.
nm = max( fabs( d_first ) + fabs( e_first ),
fabs( e_last ) + fabs( d_last ) );
for ( i = 1; i < m_A - 2; ++i )
{
double e0 = e[ (i-1)*inc_e ];
double e1 = e[ (i )*inc_e ];
double d1 = d[ (i )*inc_d ];
// Update nm with the absolute row/column sum for the ith
// row/column.
nm = max( nm, fabs( e0 ) +
fabs( d1 ) +
fabs( e1 ) );
}
}
*norm = nm;
return FLA_SUCCESS;
}
| FLA_Error FLA_Norm1_tridiag_ops | ( | int | m_A, |
| float * | buff_d, | ||
| int | inc_d, | ||
| float * | buff_e, | ||
| int | inc_e, | ||
| float * | norm | ||
| ) |
Referenced by FLA_Norm1_tridiag(), and FLA_Tevd_compute_scaling_ops().
{
float* d = buff_d;
float* e = buff_e;
float nm;
int i;
if ( m_A == 1 )
{
nm = fabs( *d );
}
else
{
float d_first = d[ (0 )*inc_d ];
float e_first = e[ (0 )*inc_e ];
float e_last = e[ (m_A-2)*inc_e ];
float d_last = d[ (m_A-1)*inc_d ];
// Record the maximum of the absolute row/column sums for the
// first and last row/columns.
nm = max( fabs( d_first ) + fabs( e_first ),
fabs( e_last ) + fabs( d_last ) );
for ( i = 1; i < m_A - 2; ++i )
{
float e0 = e[ (i-1)*inc_e ];
float e1 = e[ (i )*inc_e ];
float d1 = d[ (i )*inc_d ];
// Update nm with the absolute row/column sum for the ith
// row/column.
nm = max( nm, fabs( e0 ) +
fabs( d1 ) +
fabs( e1 ) );
}
}
*norm = nm;
return FLA_SUCCESS;
}
1.7.6.1