FLA_Trsm.c File Reference

(r)


Functions

FLA_Error FLA_Trsm (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
void FLA_F2C() fla_trsm_f (F_INT *side, F_INT *uplo, F_INT *trans, F_INT *diag, F_INT *alpha, F_INT *A, F_INT *B, F_INT *IERROR)

Variables

fla_trsm_tfla_trsm_cntl_bp
fla_trsm_tfla_trsm_cntl_mp
fla_trsm_tfla_trsm_cntl_mm
fla_blocksize_tfla_trsm_var2_bsize
fla_blocksize_tfla_trsm_var3_bsize

Function Documentation

FLA_Error FLA_Trsm ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Trsm_check(), FLA_Trsm_external(), and FLA_Trsm_internal().

Referenced by fla_trsm_f().

00042 {
00043   FLA_Error    r_val = FLA_SUCCESS;
00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES
00045   FLA_Datatype datatype;
00046   int          m_A, nrhs_B;
00047   int          FLA_TRSM_VAR2_BLOCKSIZE;
00048   int          FLA_TRSM_VAR3_BLOCKSIZE;
00049 #endif
00050 
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Trsm_check( side, uplo, trans, diag, alpha, A, B );
00054 
00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES
00056   // Determine the datatype of the operation.
00057   datatype = FLA_Obj_datatype( A );
00058 
00059   // Extract the appropriate blocksize for the given datatype.
00060   FLA_TRSM_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trsm_var2_bsize );
00061   FLA_TRSM_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trsm_var3_bsize );
00062 
00063   // Determine the dimensions of A.
00064   m_A = FLA_Obj_length( A );
00065 
00066   // Determine the number of right-hand sides of B.
00067   if ( side == FLA_LEFT )
00068     nrhs_B = FLA_Obj_width( B );
00069   else
00070     nrhs_B = FLA_Obj_length( B );
00071 
00072   // Invoke FLA_Trsm_internal() with the appropriate control tree.
00073   if      ( FLA_TRSM_VAR2_BLOCKSIZE < m_A && FLA_TRSM_VAR3_BLOCKSIZE < nrhs_B )
00074   {
00075     r_val = FLA_Trsm_internal( side, uplo, trans, diag, alpha, A, B, fla_trsm_cntl_mm );
00076   }
00077   else if ( FLA_TRSM_VAR2_BLOCKSIZE < m_A && nrhs_B <= FLA_TRSM_VAR3_BLOCKSIZE )
00078   {
00079     r_val = FLA_Trsm_internal( side, uplo, trans, diag, alpha, A, B, fla_trsm_cntl_mp );
00080   }
00081   else if ( m_A <= FLA_TRSM_VAR2_BLOCKSIZE && FLA_TRSM_VAR3_BLOCKSIZE < nrhs_B )
00082   {
00083     r_val = FLA_Trsm_internal( side, uplo, trans, diag, alpha, A, B, fla_trsm_cntl_bp );
00084   }
00085   else if ( m_A <= FLA_TRSM_VAR2_BLOCKSIZE && nrhs_B <= FLA_TRSM_VAR3_BLOCKSIZE )
00086   {
00087     r_val = FLA_Trsm_external( side, uplo, trans, diag, alpha, A, B );
00088   }
00089 #else
00090   r_val = FLA_Trsm_external( side, uplo, trans, diag, alpha, A, B );
00091 #endif
00092 
00093   return r_val;
00094 }

void FLA_F2C() fla_trsm_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  trans,
F_INT *  diag,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  IERROR 
)

References FLA_Trsm().

00098 {
00099   *IERROR = FLA_Trsm( *( ( FLA_Side  * ) side  ),
00100                       *( ( FLA_Uplo  * ) uplo  ),
00101                       *( ( FLA_Trans * ) trans ),
00102                       *( ( FLA_Diag  * ) diag  ),
00103                       *( ( FLA_Obj   * ) alpha ),
00104                       *( ( FLA_Obj   * ) A     ),
00105                       *( ( FLA_Obj   * ) B     ) );
00106 }


Variable Documentation


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