FLA_Symmetrize.c File Reference

(r)


Functions

FLA_Error FLA_Symmetrize (FLA_Uplo uplo, FLA_Obj A)
void FLA_F2C() fla_symmetrize_f (F_INT *uplo, F_INT *A, F_INT *IERROR)

Function Documentation

FLA_Error FLA_Symmetrize ( FLA_Uplo  uplo,
FLA_Obj  A 
)

References cblas_ccopy(), cblas_dcopy(), cblas_scopy(), cblas_zcopy(), ccopy(), dcopy(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_ldim(), FLA_Obj_width(), FLA_Symmetrize_check(), scopy(), and zcopy().

Referenced by FLA_Hermitianize(), FLA_Random_spd_matrix(), and fla_symmetrize_f().

00036 {
00037   FLA_Datatype datatype;
00038   int          j;
00039   int          n_A, ldim_A;
00040   int          ldim_src, inc_src;
00041   int          ldim_dst, inc_dst;
00042 
00043   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00044     FLA_Symmetrize_check( uplo, A );
00045 
00046   datatype = FLA_Obj_datatype( A );
00047 
00048   n_A      = FLA_Obj_width( A );
00049   ldim_A   = FLA_Obj_ldim( A );
00050 
00051   if ( uplo == FLA_LOWER_TRIANGULAR )
00052   {
00053     ldim_src = 1;
00054     ldim_dst = ldim_A;
00055     inc_src  = ldim_A;
00056     inc_dst  = 1;
00057   }
00058   else
00059   {
00060     ldim_src = ldim_A;
00061     ldim_dst = 1;
00062     inc_src  = 1;
00063     inc_dst  = ldim_A;
00064   }
00065 
00066   switch ( datatype ){
00067 
00068   case FLA_FLOAT:
00069   {
00070     float *buff_A = ( float * ) FLA_FLOAT_PTR( A );
00071 
00072     for ( j = 1; j < n_A; j++ )
00073     {
00074 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00075       cblas_scopy( j,
00076                    buff_A + j*ldim_src, inc_src,
00077                    buff_A + j*ldim_dst, inc_dst );
00078 #else
00079       FLA_C2F( scopy )( &j,
00080                         buff_A + j*ldim_src, &inc_src,
00081                         buff_A + j*ldim_dst, &inc_dst );
00082 #endif
00083     }
00084 
00085     break;
00086   }
00087 
00088   case FLA_DOUBLE:
00089   {
00090     double *buff_A = ( double * ) FLA_DOUBLE_PTR( A );
00091 
00092     for ( j = 1; j < n_A; j++ )
00093     {
00094 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00095       cblas_dcopy( j,
00096                    buff_A + j*ldim_src, inc_src,
00097                    buff_A + j*ldim_dst, inc_dst );
00098 #else
00099       FLA_C2F( dcopy )( &j,
00100                         buff_A + j*ldim_src, &inc_src,
00101                         buff_A + j*ldim_dst, &inc_dst );
00102 #endif
00103     }
00104 
00105     break;
00106   }
00107 
00108   case FLA_COMPLEX:
00109   {
00110     scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A );
00111 
00112     for ( j = 1; j < n_A; j++ )
00113     {
00114 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00115       cblas_ccopy( j,
00116                    buff_A + j*ldim_src, inc_src,
00117                    buff_A + j*ldim_dst, inc_dst );
00118 #else
00119       FLA_C2F( ccopy )( &j,
00120                         buff_A + j*ldim_src, &inc_src,
00121                         buff_A + j*ldim_dst, &inc_dst );
00122 #endif
00123     }
00124 
00125     break;
00126   }
00127 
00128   case FLA_DOUBLE_COMPLEX:
00129   {
00130     dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00131 
00132     for ( j = 1; j < n_A; j++ )
00133     {
00134 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00135       cblas_zcopy( j,
00136                    buff_A + j*ldim_src, inc_src,
00137                    buff_A + j*ldim_dst, inc_dst );
00138 #else
00139       FLA_C2F( zcopy )( &j,
00140                         buff_A + j*ldim_src, &inc_src,
00141                         buff_A + j*ldim_dst, &inc_dst );
00142 #endif
00143     }
00144 
00145     break;
00146   }
00147 
00148   }
00149 
00150   return FLA_SUCCESS;
00151 }

void FLA_F2C() fla_symmetrize_f ( F_INT *  uplo,
F_INT *  A,
F_INT *  IERROR 
)

References FLA_Symmetrize().

00155 {
00156   *IERROR = FLA_Symmetrize( *( ( FLA_Uplo * ) uplo ),
00157                             *( ( FLA_Obj  * ) A    ) );
00158 }


Generated on Mon Jul 6 05:45:53 2009 for libflame by  doxygen 1.5.9