FLA_blas3_prototypes.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_Gemm (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Hemm (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Herk (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Her2k (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Symm (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Syrk (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Syr2k (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Trmm (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
FLA_Error FLA_Trmmsx (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
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)
FLA_Error FLA_Trsmsx (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Gemp (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Gepm (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Gepp (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
void FLA_F2C() fla_gemm_f (F_INT *transa, F_INT *transb, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_hemm_f (F_INT *side, F_INT *uplo, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_her2k_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_herk_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_symm_f (F_INT *side, F_INT *uplo, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_syr2k_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_syrk_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_trmm_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)
void FLA_F2C() fla_trmmsx_f (F_INT *side, F_INT *uplo, F_INT *trans, F_INT *diag, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
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)
void FLA_F2C() fla_trsmsx_f (F_INT *side, F_INT *uplo, F_INT *trans, F_INT *diag, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_gemp_f (F_INT *transa, F_INT *transb, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_gepm_f (F_INT *transa, F_INT *transb, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_gepp_f (F_INT *transa, F_INT *transb, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
FLA_Error FLA_Gemm_task (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Hemm_task (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Herk_task (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Her2k_task (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Symm_task (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Syrk_task (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Syr2k_task (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Trmm_task (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trsm_task (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Gemm_hh_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_hn_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_ht_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_nh_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_nn_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_nt_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_th_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_tn_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Gemm_tt_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Hemm_ll_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Hemm_lu_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Hemm_rl_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Hemm_ru_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Her2k_ln_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Her2k_lh_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Her2k_un_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Her2k_uh_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Herk_ln_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Herk_lh_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Herk_un_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Herk_uh_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Symm_ll_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Symm_lu_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Symm_rl_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Symm_ru_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Syr2k_ln_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Syr2k_lt_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Syr2k_un_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Syr2k_ut_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Syrk_ln_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Syrk_lt_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Syrk_un_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Syrk_ut_task (FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Trmm_llh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_lln_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_llt_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_luh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_lun_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_lut_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_rlh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_rln_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_rlt_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_ruh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_run_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trmm_rut_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trsm_llh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_lln_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_llt_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_luh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_lun_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_lut_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_rlh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_rln_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_rlt_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_ruh_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_run_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Trsm_rut_task (FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Gemm_internal (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Hemm_internal (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Herk_internal (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Her2k_internal (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Symm_internal (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Syrk_internal (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Syr2k_internal (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Trmm_internal (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trsm_internal (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)
FLA_Error FLA_Gemm_external (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Hemm_external (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Herk_external (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Her2k_external (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Symm_external (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Syrk_external (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Syr2k_external (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Trmm_external (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
FLA_Error FLA_Trsm_external (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
FLA_Error FLA_Trmmsx_external (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Trsmsx_external (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
void FLA_F2C() fla_gemm_external_f (F_INT *transa, F_INT *transb, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_hemm_external_f (F_INT *side, F_INT *uplo, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_her2k_external_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_herk_external_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_symm_external_f (F_INT *side, F_INT *uplo, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_syr2k_external_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_syrk_external_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_trmm_external_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)
void FLA_F2C() fla_trsm_external_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)
void FLA_F2C() fla_trmmsx_external_f (F_INT *side, F_INT *uplo, F_INT *transa, F_INT *diag, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
void FLA_F2C() fla_trsmsx_external_f (F_INT *side, F_INT *uplo, F_INT *transa, F_INT *diag, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)
FLA_Error FLA_Gemm_check (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Hemm_check (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Her2k_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Herk_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Symm_check (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Syr2k_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Syrk_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Trmm_check (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
FLA_Error FLA_Trmmsx_check (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Trsm_check (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
FLA_Error FLA_Trsmsx_check (FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
FLA_Error FLA_Gemm_internal_check (FLA_Trans transa, FLA_Trans transb, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_gemm_t *cntl)
FLA_Error FLA_Hemm_internal_check (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_hemm_t *cntl)
FLA_Error FLA_Herk_internal_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t *cntl)
FLA_Error FLA_Her2k_internal_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_her2k_t *cntl)
FLA_Error FLA_Symm_internal_check (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_symm_t *cntl)
FLA_Error FLA_Syrk_internal_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_syrk_t *cntl)
FLA_Error FLA_Syr2k_internal_check (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C, fla_syr2k_t *cntl)
FLA_Error FLA_Trmm_internal_check (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trmm_t *cntl)
FLA_Error FLA_Trsm_internal_check (FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t *cntl)


Function Documentation

FLA_Error FLA_Gemm ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Gemm_check(), FLA_Gemm_external(), FLA_Gemm_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().

Referenced by fla_gemm_f(), fla_gemp_f(), fla_gepm_f(), and fla_gepp_f().

00069 {
00070   FLA_Error    r_val = FLA_SUCCESS;
00071 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES
00072   FLA_Datatype datatype;
00073   int          m_C, n_C, k_AB;
00074   int          FLA_GEMM_VAR1_BLOCKSIZE;
00075   int          FLA_GEMM_VAR3_BLOCKSIZE;
00076   int          FLA_GEMM_VAR5_BLOCKSIZE;
00077 #endif
00078   
00079   // Check parameters.
00080   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00081     FLA_Gemm_check( transa, transb, alpha, A, B, beta, C );
00082 
00083 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES
00084   // Determine the datatype of the operation.
00085   datatype = FLA_Obj_datatype( A );
00086 
00087   // Extract the appropriate blocksize for the given datatype.
00088   FLA_GEMM_VAR1_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_gemm_var1_bsize );
00089   FLA_GEMM_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_gemm_var3_bsize );
00090   FLA_GEMM_VAR5_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_gemm_var5_bsize );
00091 
00092   // Determine the m and n dimensions from C.
00093   m_C = FLA_Obj_length( C );
00094   n_C = FLA_Obj_width( C );
00095 
00096   // Determine the k dimension of A and B.
00097   if ( transa == FLA_NO_TRANSPOSE )
00098     k_AB = FLA_Obj_width( A );
00099   else
00100     k_AB = FLA_Obj_length( A );
00101 
00102   // Invoke FLA_Gemm_internal() with the appropriate control tree.
00103   if      ( FLA_GEMM_VAR1_BLOCKSIZE < m_C && FLA_GEMM_VAR3_BLOCKSIZE < n_C && FLA_GEMM_VAR5_BLOCKSIZE < k_AB )
00104   {
00105     r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mm_op );
00106     //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mm_mp );
00107     //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mm_pm );
00108   }
00109   else if ( m_C <= FLA_GEMM_VAR1_BLOCKSIZE && FLA_GEMM_VAR3_BLOCKSIZE < n_C && FLA_GEMM_VAR5_BLOCKSIZE < k_AB )
00110   {
00111     r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_pm_bp );
00112     //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_pm_ip );
00113   }
00114   else if ( FLA_GEMM_VAR1_BLOCKSIZE < m_C && n_C <= FLA_GEMM_VAR3_BLOCKSIZE && FLA_GEMM_VAR5_BLOCKSIZE < k_AB )
00115   {
00116     r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mp_pb );
00117     //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mp_ip );
00118   }
00119   else if ( FLA_GEMM_VAR1_BLOCKSIZE < m_C && FLA_GEMM_VAR3_BLOCKSIZE < n_C && k_AB <= FLA_GEMM_VAR5_BLOCKSIZE )
00120   {
00121     r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_op_bp );
00122     //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_op_pb );
00123   }
00124   else
00125   {
00126     r_val = FLA_Gemm_external( transa, transb, alpha, A, B, beta, C );
00127   }
00128 #else
00129   r_val = FLA_Gemm_external( transa, transb, alpha, A, B, beta, C );
00130 #endif
00131 
00132   return r_val;
00133 }

FLA_Error FLA_Gemm_check ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), and FLA_Check_valid_trans().

Referenced by FLA_Gemm(), FLA_Gemm_external(), and FLASH_Gemm().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_trans( transa );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_trans( transb );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_floating_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_identical_object_datatype( A, B );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_identical_object_datatype( A, C );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, beta );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_if_scalar( beta );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_matrix_matrix_dims( transa, transb, A, B, C );
00070   FLA_Check_error_code( e_val );
00071 
00072   return FLA_SUCCESS;
00073 }

FLA_Error FLA_Gemm_external ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_cgemm(), cblas_dgemm(), cblas_sgemm(), cblas_zgemm(), CblasColMajor, cgemm(), dgemm(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Gemm_check(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Scal_external(), sgemm(), and zgemm().

Referenced by FLA_Gemm(), fla_gemm_external_f(), FLA_Gemm_hh_task(), FLA_Gemm_hn_task(), FLA_Gemm_ht_task(), FLA_Gemm_nh_task(), FLA_Gemm_nn_task(), FLA_Gemm_nt_task(), FLA_Gemm_task(), FLA_Gemm_th_task(), FLA_Gemm_tn_task(), FLA_Gemm_tt_task(), FLA_Gemp(), FLA_Gepm(), FLA_Gepp(), FLA_LQ_UT_Accum_T_blk_var1(), FLA_LQ_UT_blk_var2(), FLA_QR_UT_Accum_T_blk_var1(), FLA_QR_UT_blk_var2(), FLA_SA_FS_blk(), and FLA_SA_LU_blk().

00036 {
00037   FLA_Datatype datatype;
00038   int          k_AB;
00039   int          m_A, n_A, ldim_A;
00040   int          ldim_B; 
00041   int          m_C, n_C, ldim_C;
00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00043   CBLAS_ORDER     cblas_order = CblasColMajor;
00044   CBLAS_TRANSPOSE blas_transa;
00045   CBLAS_TRANSPOSE blas_transb;
00046 #else
00047   char         blas_transa; 
00048   char         blas_transb;
00049 #endif
00050   FLA_Obj      A_copy;
00051   FLA_Obj      B_copy;
00052 
00053   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00054     FLA_Gemm_check( transa, transb, alpha, A, B, beta, C );
00055 
00056   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00057 
00058   if ( FLA_Obj_has_zero_dim( A ) || FLA_Obj_has_zero_dim( B ) )
00059   {
00060     FLA_Scal_external( beta, C );
00061     return FLA_SUCCESS;
00062   }
00063 
00064   datatype = FLA_Obj_datatype( A );
00065 
00066   m_A      = FLA_Obj_length( A );
00067   n_A      = FLA_Obj_width( A );
00068   ldim_A   = FLA_Obj_ldim( A );
00069 
00070   ldim_B   = FLA_Obj_ldim( B );
00071 
00072   m_C      = FLA_Obj_length( C );
00073   n_C      = FLA_Obj_width( C );
00074   ldim_C   = FLA_Obj_ldim( C );
00075 
00076   if ( transa == FLA_NO_TRANSPOSE || transa == FLA_CONJ_NO_TRANSPOSE )
00077     k_AB = n_A;
00078   else
00079     k_AB = m_A;
00080 
00081   if ( transa == FLA_CONJ_NO_TRANSPOSE )
00082   {
00083     FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy );
00084     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy );
00085 
00086     ldim_A = FLA_Obj_ldim( A_copy );
00087   }
00088   else
00089   {
00090     A_copy = A;
00091   }
00092 
00093   if ( transb == FLA_CONJ_NO_TRANSPOSE )
00094   {
00095     FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, B, &B_copy );
00096     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, B, B_copy );
00097 
00098     ldim_B = FLA_Obj_ldim( B_copy );
00099   }
00100   else
00101   {
00102     B_copy = B;
00103   }
00104 
00105   FLA_Param_map_to_blas_trans( transa, &blas_transa );
00106   FLA_Param_map_to_blas_trans( transb, &blas_transb );
00107 
00108 
00109   switch( datatype ){
00110 
00111   case FLA_FLOAT:
00112   {
00113     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00114     float *buff_B     = ( float * ) FLA_FLOAT_PTR( B );
00115     float *buff_C     = ( float * ) FLA_FLOAT_PTR( C );
00116     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00117     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00118 
00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00120     cblas_sgemm( cblas_order,
00121                  blas_transa, 
00122                  blas_transb,
00123                  m_C,
00124                  n_C, 
00125                  k_AB, 
00126                  *buff_alpha,
00127                  buff_A, ldim_A, 
00128                  buff_B, ldim_B,
00129                  *buff_beta,
00130                  buff_C, ldim_C );
00131 #else
00132     FLA_C2F( sgemm )( &blas_transa, 
00133                       &blas_transb,
00134                       &m_C,
00135                       &n_C, 
00136                       &k_AB, 
00137                       buff_alpha,
00138                       buff_A, &ldim_A, 
00139                       buff_B, &ldim_B,
00140                       buff_beta,
00141                       buff_C, &ldim_C );
00142 #endif
00143     break;
00144   }
00145 
00146   case FLA_DOUBLE:
00147   {
00148     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00149     double *buff_B     = ( double * ) FLA_DOUBLE_PTR( B );
00150     double *buff_C     = ( double * ) FLA_DOUBLE_PTR( C );
00151     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00152     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00153                          
00154 #ifdef FLA_ENABLE_CBLAS_INTERFACE           
00155     cblas_dgemm( cblas_order,
00156                  blas_transa, 
00157                  blas_transb,
00158                  m_C,
00159                  n_C, 
00160                  k_AB, 
00161                  *buff_alpha,
00162                  buff_A, ldim_A, 
00163                  buff_B, ldim_B,
00164                  *buff_beta,
00165                  buff_C, ldim_C );
00166 #else
00167     FLA_C2F( dgemm )( &blas_transa, 
00168                       &blas_transb,
00169                       &m_C,
00170                       &n_C, 
00171                       &k_AB, 
00172                       buff_alpha,
00173                       buff_A, &ldim_A, 
00174                       buff_B, &ldim_B,
00175                       buff_beta,
00176                       buff_C, &ldim_C );
00177 #endif
00178     break;
00179   }
00180 
00181   case FLA_COMPLEX:
00182   {
00183     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A_copy );
00184     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B_copy );
00185     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00186     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00187     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00188                          
00189 #ifdef FLA_ENABLE_CBLAS_INTERFACE           
00190     cblas_cgemm( cblas_order,
00191                  blas_transa, 
00192                  blas_transb,
00193                  m_C,
00194                  n_C, 
00195                  k_AB, 
00196                  buff_alpha,
00197                  buff_A, ldim_A, 
00198                  buff_B, ldim_B,
00199                  buff_beta,
00200                  buff_C, ldim_C );
00201 #else
00202     FLA_C2F( cgemm )( &blas_transa, 
00203                       &blas_transb,
00204                       &m_C,
00205                       &n_C, 
00206                       &k_AB, 
00207                       buff_alpha,
00208                       buff_A, &ldim_A, 
00209                       buff_B, &ldim_B,
00210                       buff_beta,
00211                       buff_C, &ldim_C );
00212 #endif
00213     break;
00214   }
00215 
00216   case FLA_DOUBLE_COMPLEX:
00217   {
00218     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy );
00219     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B_copy );
00220     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00221     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00222     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00223 
00224 #ifdef FLA_ENABLE_CBLAS_INTERFACE                                    
00225     cblas_zgemm( cblas_order,
00226                  blas_transa, 
00227                  blas_transb,
00228                  m_C,
00229                  n_C, 
00230                  k_AB, 
00231                  buff_alpha,
00232                  buff_A, ldim_A, 
00233                  buff_B, ldim_B,
00234                  buff_beta,
00235                  buff_C, ldim_C );
00236 #else
00237     FLA_C2F( zgemm )( &blas_transa, 
00238                       &blas_transb,
00239                       &m_C,
00240                       &n_C, 
00241                       &k_AB, 
00242                       buff_alpha,
00243                       buff_A, &ldim_A, 
00244                       buff_B, &ldim_B,
00245                       buff_beta,
00246                       buff_C, &ldim_C );
00247 #endif
00248     break;
00249   }
00250 
00251   }
00252 
00253   if ( transa == FLA_CONJ_NO_TRANSPOSE )
00254     FLA_Obj_free( &A_copy );
00255 
00256   if ( transb == FLA_CONJ_NO_TRANSPOSE )
00257     FLA_Obj_free( &B_copy );
00258  
00259   return FLA_SUCCESS;
00260 }

void FLA_F2C() fla_gemm_external_f ( F_INT *  transa,
F_INT *  transb,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Gemm_external().

00264 {
00265   *IERROR = FLA_Gemm_external( *( ( FLA_Trans * ) transa ), 
00266                                *( ( FLA_Trans * ) transb ), 
00267                                *( ( FLA_Obj   * ) alpha  ), 
00268                                *( ( FLA_Obj   * ) A      ), 
00269                                *( ( FLA_Obj   * ) B      ),
00270                                *( ( FLA_Obj   * ) beta   ), 
00271                                *( ( FLA_Obj   * ) C      ) );
00272 }

void FLA_F2C() fla_gemm_f ( F_INT *  transa,
F_INT *  transb,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Gemm().

00137 {
00138   *IERROR = FLA_Gemm( *( ( FLA_Trans * ) transa ),
00139                       *( ( FLA_Trans * ) transb ),
00140                       *( ( FLA_Obj   * ) alpha  ),
00141                       *( ( FLA_Obj   * ) A      ),
00142                       *( ( FLA_Obj   * ) B      ),
00143                       *( ( FLA_Obj   * ) beta   ),
00144                       *( ( FLA_Obj   * ) C      ) );
00145 }

FLA_Error FLA_Gemm_hh_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_hh().

00041 {
00042   return FLA_Gemm_external( FLA_CONJ_TRANSPOSE, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C );
00043 }

FLA_Error FLA_Gemm_hn_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_hn().

00046 {
00047   return FLA_Gemm_external( FLA_CONJ_TRANSPOSE, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00048 }

FLA_Error FLA_Gemm_ht_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_ht().

00051 {
00052   return FLA_Gemm_external( FLA_CONJ_TRANSPOSE, FLA_TRANSPOSE, alpha, A, B, beta, C );
00053 }

FLA_Error FLA_Gemm_internal ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

Referenced by FLA_Apply_Q_UT_lhc_blk_var1(), FLA_Apply_Q_UT_UD_lhc_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_u_blk_var2(), FLA_Gemm(), FLA_Gemm_hh_blk_var1(), FLA_Gemm_hh_blk_var2(), FLA_Gemm_hh_blk_var3(), FLA_Gemm_hh_blk_var4(), FLA_Gemm_hh_blk_var5(), FLA_Gemm_hh_blk_var6(), FLA_Gemm_hn_blk_var1(), FLA_Gemm_hn_blk_var2(), FLA_Gemm_hn_blk_var3(), FLA_Gemm_hn_blk_var4(), FLA_Gemm_hn_blk_var5(), FLA_Gemm_hn_blk_var6(), FLA_Gemm_ht_blk_var1(), FLA_Gemm_ht_blk_var2(), FLA_Gemm_ht_blk_var3(), FLA_Gemm_ht_blk_var4(), FLA_Gemm_ht_blk_var5(), FLA_Gemm_ht_blk_var6(), FLA_Gemm_internal(), FLA_Gemm_nh_blk_var1(), FLA_Gemm_nh_blk_var2(), FLA_Gemm_nh_blk_var3(), FLA_Gemm_nh_blk_var4(), FLA_Gemm_nh_blk_var5(), FLA_Gemm_nh_blk_var6(), FLA_Gemm_nn_blk_var1(), FLA_Gemm_nn_blk_var2(), FLA_Gemm_nn_blk_var3(), FLA_Gemm_nn_blk_var4(), FLA_Gemm_nn_blk_var5(), FLA_Gemm_nn_blk_var6(), FLA_Gemm_nt_blk_var1(), FLA_Gemm_nt_blk_var2(), FLA_Gemm_nt_blk_var3(), FLA_Gemm_nt_blk_var4(), FLA_Gemm_nt_blk_var5(), FLA_Gemm_nt_blk_var6(), FLA_Gemm_th_blk_var1(), FLA_Gemm_th_blk_var2(), FLA_Gemm_th_blk_var3(), FLA_Gemm_th_blk_var4(), FLA_Gemm_th_blk_var5(), FLA_Gemm_th_blk_var6(), FLA_Gemm_tn_blk_var1(), FLA_Gemm_tn_blk_var2(), FLA_Gemm_tn_blk_var3(), FLA_Gemm_tn_blk_var4(), FLA_Gemm_tn_blk_var5(), FLA_Gemm_tn_blk_var6(), FLA_Gemm_tt_blk_var1(), FLA_Gemm_tt_blk_var2(), FLA_Gemm_tt_blk_var3(), FLA_Gemm_tt_blk_var4(), FLA_Gemm_tt_blk_var5(), FLA_Gemm_tt_blk_var6(), FLA_Hemm_ll_blk_var1(), FLA_Hemm_ll_blk_var2(), FLA_Hemm_ll_blk_var3(), FLA_Hemm_ll_blk_var4(), FLA_Hemm_ll_blk_var5(), FLA_Hemm_ll_blk_var6(), FLA_Hemm_ll_blk_var7(), FLA_Hemm_ll_blk_var8(), FLA_Hemm_lu_blk_var1(), FLA_Hemm_lu_blk_var2(), FLA_Hemm_lu_blk_var3(), FLA_Hemm_lu_blk_var4(), FLA_Hemm_lu_blk_var5(), FLA_Hemm_lu_blk_var6(), FLA_Hemm_lu_blk_var7(), FLA_Hemm_lu_blk_var8(), FLA_Hemm_rl_blk_var1(), FLA_Hemm_rl_blk_var2(), FLA_Hemm_rl_blk_var3(), FLA_Hemm_rl_blk_var4(), FLA_Hemm_rl_blk_var5(), FLA_Hemm_rl_blk_var6(), FLA_Hemm_rl_blk_var7(), FLA_Hemm_rl_blk_var8(), FLA_Hemm_ru_blk_var1(), FLA_Hemm_ru_blk_var2(), FLA_Hemm_ru_blk_var3(), FLA_Hemm_ru_blk_var4(), FLA_Hemm_ru_blk_var5(), FLA_Hemm_ru_blk_var6(), FLA_Hemm_ru_blk_var7(), FLA_Hemm_ru_blk_var8(), FLA_Her2k_lh_blk_var1(), FLA_Her2k_lh_blk_var2(), FLA_Her2k_lh_blk_var3(), FLA_Her2k_lh_blk_var4(), FLA_Her2k_lh_blk_var5(), FLA_Her2k_lh_blk_var6(), FLA_Her2k_lh_blk_var7(), FLA_Her2k_lh_blk_var8(), FLA_Her2k_ln_blk_var1(), FLA_Her2k_ln_blk_var2(), FLA_Her2k_ln_blk_var3(), FLA_Her2k_ln_blk_var4(), FLA_Her2k_ln_blk_var5(), FLA_Her2k_ln_blk_var6(), FLA_Her2k_ln_blk_var7(), FLA_Her2k_ln_blk_var8(), FLA_Her2k_uh_blk_var1(), FLA_Her2k_uh_blk_var2(), FLA_Her2k_uh_blk_var3(), FLA_Her2k_uh_blk_var4(), FLA_Her2k_uh_blk_var5(), FLA_Her2k_uh_blk_var6(), FLA_Her2k_uh_blk_var7(), FLA_Her2k_uh_blk_var8(), FLA_Her2k_un_blk_var1(), FLA_Her2k_un_blk_var2(), FLA_Her2k_un_blk_var3(), FLA_Her2k_un_blk_var4(), FLA_Her2k_un_blk_var5(), FLA_Her2k_un_blk_var6(), FLA_Her2k_un_blk_var7(), FLA_Her2k_un_blk_var8(), FLA_Herk_lh_blk_var1(), FLA_Herk_lh_blk_var2(), FLA_Herk_lh_blk_var3(), FLA_Herk_lh_blk_var4(), FLA_Herk_ln_blk_var1(), FLA_Herk_ln_blk_var2(), FLA_Herk_ln_blk_var3(), FLA_Herk_ln_blk_var4(), FLA_Herk_uh_blk_var1(), FLA_Herk_uh_blk_var2(), FLA_Herk_uh_blk_var3(), FLA_Herk_uh_blk_var4(), FLA_Herk_un_blk_var1(), FLA_Herk_un_blk_var2(), FLA_Herk_un_blk_var3(), FLA_Herk_un_blk_var4(), FLA_LU_nopiv_blk_var1(), FLA_LU_nopiv_blk_var2(), FLA_LU_nopiv_blk_var3(), FLA_LU_nopiv_blk_var4(), FLA_LU_nopiv_blk_var5(), FLA_LU_piv_blk_var3(), FLA_LU_piv_blk_var4(), FLA_LU_piv_blk_var5(), FLA_QR_UT_UD_blk_var1(), FLA_Sylv_nn_blk_var1(), FLA_Sylv_nn_blk_var10(), FLA_Sylv_nn_blk_var11(), FLA_Sylv_nn_blk_var12(), FLA_Sylv_nn_blk_var13(), FLA_Sylv_nn_blk_var14(), FLA_Sylv_nn_blk_var15(), FLA_Sylv_nn_blk_var16(), FLA_Sylv_nn_blk_var17(), FLA_Sylv_nn_blk_var18(), FLA_Sylv_nn_blk_var2(), FLA_Sylv_nn_blk_var3(), FLA_Sylv_nn_blk_var4(), FLA_Sylv_nn_blk_var5(), FLA_Sylv_nn_blk_var6(), FLA_Sylv_nn_blk_var7(), FLA_Sylv_nn_blk_var8(), FLA_Sylv_nn_blk_var9(), FLA_Sylv_nt_blk_var1(), FLA_Sylv_nt_blk_var10(), FLA_Sylv_nt_blk_var11(), FLA_Sylv_nt_blk_var12(), FLA_Sylv_nt_blk_var13(), FLA_Sylv_nt_blk_var14(), FLA_Sylv_nt_blk_var15(), FLA_Sylv_nt_blk_var16(), FLA_Sylv_nt_blk_var17(), FLA_Sylv_nt_blk_var18(), FLA_Sylv_nt_blk_var2(), FLA_Sylv_nt_blk_var3(), FLA_Sylv_nt_blk_var4(), FLA_Sylv_nt_blk_var5(), FLA_Sylv_nt_blk_var6(), FLA_Sylv_nt_blk_var7(), FLA_Sylv_nt_blk_var8(), FLA_Sylv_nt_blk_var9(), FLA_Sylv_tn_blk_var1(), FLA_Sylv_tn_blk_var10(), FLA_Sylv_tn_blk_var11(), FLA_Sylv_tn_blk_var12(), FLA_Sylv_tn_blk_var13(), FLA_Sylv_tn_blk_var14(), FLA_Sylv_tn_blk_var15(), FLA_Sylv_tn_blk_var16(), FLA_Sylv_tn_blk_var17(), FLA_Sylv_tn_blk_var18(), FLA_Sylv_tn_blk_var2(), FLA_Sylv_tn_blk_var3(), FLA_Sylv_tn_blk_var4(), FLA_Sylv_tn_blk_var5(), FLA_Sylv_tn_blk_var6(), FLA_Sylv_tn_blk_var7(), FLA_Sylv_tn_blk_var8(), FLA_Sylv_tn_blk_var9(), FLA_Sylv_tt_blk_var1(), FLA_Sylv_tt_blk_var10(), FLA_Sylv_tt_blk_var11(), FLA_Sylv_tt_blk_var12(), FLA_Sylv_tt_blk_var13(), FLA_Sylv_tt_blk_var14(), FLA_Sylv_tt_blk_var15(), FLA_Sylv_tt_blk_var16(), FLA_Sylv_tt_blk_var17(), FLA_Sylv_tt_blk_var18(), FLA_Sylv_tt_blk_var2(), FLA_Sylv_tt_blk_var3(), FLA_Sylv_tt_blk_var4(), FLA_Sylv_tt_blk_var5(), FLA_Sylv_tt_blk_var6(), FLA_Sylv_tt_blk_var7(), FLA_Sylv_tt_blk_var8(), FLA_Sylv_tt_blk_var9(), FLA_Symm_ll_blk_var1(), FLA_Symm_ll_blk_var2(), FLA_Symm_ll_blk_var3(), FLA_Symm_ll_blk_var4(), FLA_Symm_ll_blk_var5(), FLA_Symm_ll_blk_var6(), FLA_Symm_ll_blk_var7(), FLA_Symm_ll_blk_var8(), FLA_Symm_lu_blk_var1(), FLA_Symm_lu_blk_var2(), FLA_Symm_lu_blk_var3(), FLA_Symm_lu_blk_var4(), FLA_Symm_lu_blk_var5(), FLA_Symm_lu_blk_var6(), FLA_Symm_lu_blk_var7(), FLA_Symm_lu_blk_var8(), FLA_Symm_rl_blk_var1(), FLA_Symm_rl_blk_var2(), FLA_Symm_rl_blk_var3(), FLA_Symm_rl_blk_var4(), FLA_Symm_rl_blk_var5(), FLA_Symm_rl_blk_var6(), FLA_Symm_rl_blk_var7(), FLA_Symm_rl_blk_var8(), FLA_Symm_ru_blk_var1(), FLA_Symm_ru_blk_var2(), FLA_Symm_ru_blk_var3(), FLA_Symm_ru_blk_var4(), FLA_Symm_ru_blk_var5(), FLA_Symm_ru_blk_var6(), FLA_Symm_ru_blk_var7(), FLA_Symm_ru_blk_var8(), FLA_Syr2k_ln_blk_var1(), FLA_Syr2k_ln_blk_var2(), FLA_Syr2k_ln_blk_var3(), FLA_Syr2k_ln_blk_var4(), FLA_Syr2k_ln_blk_var5(), FLA_Syr2k_ln_blk_var6(), FLA_Syr2k_ln_blk_var7(), FLA_Syr2k_ln_blk_var8(), FLA_Syr2k_lt_blk_var1(), FLA_Syr2k_lt_blk_var2(), FLA_Syr2k_lt_blk_var3(), FLA_Syr2k_lt_blk_var4(), FLA_Syr2k_lt_blk_var5(), FLA_Syr2k_lt_blk_var6(), FLA_Syr2k_lt_blk_var7(), FLA_Syr2k_lt_blk_var8(), FLA_Syr2k_un_blk_var1(), FLA_Syr2k_un_blk_var2(), FLA_Syr2k_un_blk_var3(), FLA_Syr2k_un_blk_var4(), FLA_Syr2k_un_blk_var5(), FLA_Syr2k_un_blk_var6(), FLA_Syr2k_un_blk_var7(), FLA_Syr2k_un_blk_var8(), FLA_Syr2k_ut_blk_var1(), FLA_Syr2k_ut_blk_var2(), FLA_Syr2k_ut_blk_var3(), FLA_Syr2k_ut_blk_var4(), FLA_Syr2k_ut_blk_var5(), FLA_Syr2k_ut_blk_var6(), FLA_Syr2k_ut_blk_var7(), FLA_Syr2k_ut_blk_var8(), FLA_Syrk_ln_blk_var1(), FLA_Syrk_ln_blk_var2(), FLA_Syrk_ln_blk_var3(), FLA_Syrk_ln_blk_var4(), FLA_Syrk_lt_blk_var1(), FLA_Syrk_lt_blk_var2(), FLA_Syrk_lt_blk_var3(), FLA_Syrk_lt_blk_var4(), FLA_Syrk_un_blk_var1(), FLA_Syrk_un_blk_var2(), FLA_Syrk_un_blk_var3(), FLA_Syrk_un_blk_var4(), FLA_Syrk_ut_blk_var1(), FLA_Syrk_ut_blk_var2(), FLA_Syrk_ut_blk_var3(), FLA_Syrk_ut_blk_var4(), FLA_Trinv_l_blk_var3(), FLA_Trinv_l_blk_var4(), FLA_Trinv_u_blk_var3(), FLA_Trinv_u_blk_var4(), FLA_Trmm_llh_blk_var1(), FLA_Trmm_llh_blk_var2(), FLA_Trmm_lln_blk_var1(), FLA_Trmm_lln_blk_var2(), FLA_Trmm_llt_blk_var1(), FLA_Trmm_llt_blk_var2(), FLA_Trmm_luh_blk_var1(), FLA_Trmm_luh_blk_var2(), FLA_Trmm_lun_blk_var1(), FLA_Trmm_lun_blk_var2(), FLA_Trmm_lut_blk_var1(), FLA_Trmm_lut_blk_var2(), FLA_Trmm_rlh_blk_var1(), FLA_Trmm_rlh_blk_var2(), FLA_Trmm_rln_blk_var1(), FLA_Trmm_rln_blk_var2(), FLA_Trmm_rlt_blk_var1(), FLA_Trmm_rlt_blk_var2(), FLA_Trmm_ruh_blk_var1(), FLA_Trmm_ruh_blk_var2(), FLA_Trmm_run_blk_var1(), FLA_Trmm_run_blk_var2(), FLA_Trmm_rut_blk_var1(), FLA_Trmm_rut_blk_var2(), FLA_Trsm_llh_blk_var1(), FLA_Trsm_llh_blk_var2(), FLA_Trsm_lln_blk_var1(), FLA_Trsm_lln_blk_var2(), FLA_Trsm_llt_blk_var1(), FLA_Trsm_llt_blk_var2(), FLA_Trsm_luh_blk_var1(), FLA_Trsm_luh_blk_var2(), FLA_Trsm_lun_blk_var1(), FLA_Trsm_lun_blk_var2(), FLA_Trsm_lut_blk_var1(), FLA_Trsm_lut_blk_var2(), FLA_Trsm_rlh_blk_var1(), FLA_Trsm_rlh_blk_var2(), FLA_Trsm_rln_blk_var1(), FLA_Trsm_rln_blk_var2(), FLA_Trsm_rlt_blk_var1(), FLA_Trsm_rlt_blk_var2(), FLA_Trsm_ruh_blk_var1(), FLA_Trsm_ruh_blk_var2(), FLA_Trsm_run_blk_var1(), FLA_Trsm_run_blk_var2(), FLA_Trsm_rut_blk_var1(), FLA_Trsm_rut_blk_var2(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_u_blk_var2(), and FLASH_Gemm().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Gemm_internal_check( transa, transb, alpha, A, B, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Gemm_internal( transa, 
00051                                    transb, 
00052                                    alpha, 
00053                                    *FLASH_OBJ_PTR_AT( A ), 
00054                                    *FLASH_OBJ_PTR_AT( B ), 
00055                                    beta, 
00056                                    *FLASH_OBJ_PTR_AT( C ), 
00057                                    flash_gemm_cntl_mm_op );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Gemm( transa, transb, alpha, A, B, beta, C, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_gemm_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( transa == FLA_NO_TRANSPOSE )
00078         {
00079             if      ( transb == FLA_NO_TRANSPOSE )
00080                 r_val = FLA_Gemm_nn( alpha, A, B, beta, C, cntl );
00081             else if ( transb == FLA_TRANSPOSE )
00082                 r_val = FLA_Gemm_nt( alpha, A, B, beta, C, cntl );
00083             else if ( transb == FLA_CONJ_TRANSPOSE )
00084                 r_val = FLA_Gemm_nh( alpha, A, B, beta, C, cntl );
00085         }
00086         else if ( transa == FLA_TRANSPOSE )
00087         {
00088             if      ( transb == FLA_NO_TRANSPOSE )
00089                 r_val = FLA_Gemm_tn( alpha, A, B, beta, C, cntl );
00090             else if ( transb == FLA_TRANSPOSE )
00091                 r_val = FLA_Gemm_tt( alpha, A, B, beta, C, cntl );
00092             else if ( transb == FLA_CONJ_TRANSPOSE )
00093                 r_val = FLA_Gemm_th( alpha, A, B, beta, C, cntl );
00094         }
00095         else if ( transa == FLA_CONJ_TRANSPOSE )
00096         {
00097             if      ( transb == FLA_NO_TRANSPOSE )
00098                 r_val = FLA_Gemm_hn( alpha, A, B, beta, C, cntl );
00099             else if ( transb == FLA_TRANSPOSE )
00100                 r_val = FLA_Gemm_ht( alpha, A, B, beta, C, cntl );
00101             else if ( transb == FLA_CONJ_TRANSPOSE )
00102                 r_val = FLA_Gemm_hh( alpha, A, B, beta, C, cntl );
00103         }
00104     }
00105 
00106     return r_val;
00107 }

FLA_Error FLA_Gemm_internal_check ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Gemm_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     e_val = FLA_Check_identical_object_elemtype( A, C );
00048     FLA_Check_error_code( e_val );
00049 
00050     // Verify conformality between all the objects. This check works regardless
00051     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00052     // element length and width are used instead of scalar length and width.
00053     e_val = FLA_Check_matrix_matrix_dims( transa, transb, A, B, C );
00054     FLA_Check_error_code( e_val );
00055 
00056     return FLA_SUCCESS;
00057 }

FLA_Error FLA_Gemm_nh_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_nh().

00056 {
00057   return FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C );
00058 }

FLA_Error FLA_Gemm_nn_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_nn().

00061 {
00062   return FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00063 }

FLA_Error FLA_Gemm_nt_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_nt().

00066 {
00067   return FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, alpha, A, B, beta, C );
00068 }

FLA_Error FLA_Gemm_task ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C );
00038 }

FLA_Error FLA_Gemm_th_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_th().

00071 {
00072   return FLA_Gemm_external( FLA_TRANSPOSE, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C );
00073 }

FLA_Error FLA_Gemm_tn_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_tn().

00076 {
00077   return FLA_Gemm_external( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00078 }

FLA_Error FLA_Gemm_tt_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_gemm_t cntl 
)

References FLA_Gemm_external().

Referenced by FLA_Gemm_tt().

00081 {
00082   return FLA_Gemm_external( FLA_TRANSPOSE, FLA_TRANSPOSE, alpha, A, B, beta, C );
00083 }

FLA_Error FLA_Gemp ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Gemm_external().

00036 {
00037   return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C );
00038 }

void FLA_F2C() fla_gemp_f ( F_INT *  transa,
F_INT *  transb,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Gemm().

00042 {
00043   *IERROR = FLA_Gemm( *( ( FLA_Trans * ) transa ),
00044                       *( ( FLA_Trans * ) transb ),
00045                       *( ( FLA_Obj   * ) alpha  ),
00046                       *( ( FLA_Obj   * ) A      ),
00047                       *( ( FLA_Obj   * ) B      ),
00048                       *( ( FLA_Obj   * ) beta   ),
00049                       *( ( FLA_Obj   * ) C      ) );
00050 }

FLA_Error FLA_Gepm ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Gemm_external().

00036 {
00037   return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C );
00038 }

void FLA_F2C() fla_gepm_f ( F_INT *  transa,
F_INT *  transb,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Gemm().

00042 {
00043   *IERROR = FLA_Gemm( *( ( FLA_Trans * ) transa ),
00044                       *( ( FLA_Trans * ) transb ),
00045                       *( ( FLA_Obj   * ) alpha  ),
00046                       *( ( FLA_Obj   * ) A      ),
00047                       *( ( FLA_Obj   * ) B      ),
00048                       *( ( FLA_Obj   * ) beta   ),
00049                       *( ( FLA_Obj   * ) C      ) );
00050 }

FLA_Error FLA_Gepp ( FLA_Trans  transa,
FLA_Trans  transb,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Gemm_external().

00036 {
00037   return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C );
00038 }

void FLA_F2C() fla_gepp_f ( F_INT *  transa,
F_INT *  transb,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Gemm().

00042 {
00043   *IERROR = FLA_Gemm( *( ( FLA_Trans * ) transa ),
00044                       *( ( FLA_Trans * ) transb ),
00045                       *( ( FLA_Obj   * ) alpha  ),
00046                       *( ( FLA_Obj   * ) A      ),
00047                       *( ( FLA_Obj   * ) B      ),
00048                       *( ( FLA_Obj   * ) beta   ),
00049                       *( ( FLA_Obj   * ) C      ) );
00050 }

FLA_Error FLA_Hemm ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Hemm_check(), FLA_Hemm_external(), FLA_Hemm_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().

Referenced by fla_hemm_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_HEMM_VAR4_BLOCKSIZE;
00048   int          FLA_HEMM_VAR9_BLOCKSIZE;
00049 #endif
00050   
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Hemm_check( side, uplo, alpha, A, B, beta, C );
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_HEMM_VAR4_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_hemm_var4_bsize );
00061   FLA_HEMM_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_hemm_var9_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 (ie: the number of columns
00067   // when side == FLA_LEFT and rows when side == FLA_RIGHT).
00068   if ( side == FLA_LEFT )
00069     nrhs_B = FLA_Obj_width( B );
00070   else
00071     nrhs_B = FLA_Obj_length( B );
00072 
00073   // Invoke FLA_Hemm_internal() with the appropriate control tree.
00074   if      ( FLA_HEMM_VAR4_BLOCKSIZE < m_A && FLA_HEMM_VAR9_BLOCKSIZE < nrhs_B )
00075   {
00076     r_val = FLA_Hemm_internal( side, uplo, alpha, A, B, beta, C, fla_hemm_cntl_mm );
00077   }
00078   else if ( FLA_HEMM_VAR4_BLOCKSIZE < m_A && nrhs_B <= FLA_HEMM_VAR9_BLOCKSIZE )
00079   {
00080     r_val = FLA_Hemm_internal( side, uplo, alpha, A, B, beta, C, fla_hemm_cntl_mp );
00081   }
00082   else if ( m_A <= FLA_HEMM_VAR4_BLOCKSIZE && FLA_HEMM_VAR9_BLOCKSIZE < nrhs_B )
00083   {
00084     r_val = FLA_Hemm_internal( side, uplo, alpha, A, B, beta, C, fla_hemm_cntl_bp );
00085   }
00086   else if ( m_A <= FLA_HEMM_VAR4_BLOCKSIZE && nrhs_B <= FLA_HEMM_VAR9_BLOCKSIZE )
00087   {
00088     r_val = FLA_Hemm_external( side, uplo, alpha, A, B, beta, C );
00089   }
00090 #else
00091   r_val = FLA_Hemm_external( side, uplo, alpha, A, B, beta, C );
00092 #endif
00093 
00094   return r_val;
00095 }

FLA_Error FLA_Hemm_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_complex_object(), FLA_Check_consistent_object_datatype(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_side(), and FLA_Check_valid_uplo().

Referenced by FLA_Hemm(), FLA_Hemm_external(), and FLASH_Hemm().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_side( side );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_uplo( uplo );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_complex_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_identical_object_datatype( A, B );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_identical_object_datatype( A, C );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, beta );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_if_scalar( beta );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_square( A );
00070   FLA_Check_error_code( e_val );
00071 
00072   if ( side == FLA_LEFT )
00073   {
00074     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00075     FLA_Check_error_code( e_val );
00076   }
00077   else
00078   {
00079     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C );
00080     FLA_Check_error_code( e_val );
00081   }
00082   
00083   return FLA_SUCCESS;
00084 }

FLA_Error FLA_Hemm_external ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_chemm(), cblas_zhemm(), CblasColMajor, chemm(), FLA_Check_error_level(), FLA_Hemm_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_uplo(), and zhemm().

Referenced by FLA_Hemm(), fla_hemm_external_f(), FLA_Hemm_ll_task(), FLA_Hemm_lu_task(), FLA_Hemm_rl_task(), FLA_Hemm_ru_task(), and FLA_Hemm_task().

00036 {
00037   FLA_Datatype datatype;
00038   int          ldim_A;
00039   int          ldim_B; 
00040   int          m_C, n_C, ldim_C;
00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00042   CBLAS_ORDER  cblas_order = CblasColMajor;
00043   CBLAS_SIDE   blas_side;
00044   CBLAS_UPLO   blas_uplo;
00045 #else
00046   char         blas_side;
00047   char         blas_uplo; 
00048 #endif
00049 
00050   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00051     FLA_Hemm_check( side, uplo, alpha, A, B, beta, C );
00052 
00053   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00054 
00055   datatype = FLA_Obj_datatype( A );
00056 
00057   ldim_A   = FLA_Obj_ldim( A );
00058 
00059   ldim_B   = FLA_Obj_ldim( B );
00060 
00061   m_C      = FLA_Obj_length( C );
00062   n_C      = FLA_Obj_width( C );
00063   ldim_C   = FLA_Obj_ldim( C );
00064 
00065   FLA_Param_map_to_blas_side( side, &blas_side );
00066   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00067   
00068 
00069   switch( datatype ){
00070 
00071   case FLA_COMPLEX:
00072   {
00073     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00074     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00075     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00076     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00077     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00078 
00079 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00080     cblas_chemm( cblas_order,
00081                  blas_side,
00082                  blas_uplo,
00083                  m_C,
00084                  n_C,
00085                  buff_alpha,
00086                  buff_A, ldim_A, 
00087                  buff_B, ldim_B, 
00088                  buff_beta,  
00089                  buff_C, ldim_C );
00090 #else
00091     FLA_C2F( chemm )( &blas_side,
00092                       &blas_uplo,
00093                       &m_C,
00094                       &n_C,
00095                       buff_alpha,
00096                       buff_A, &ldim_A, 
00097                       buff_B, &ldim_B, 
00098                       buff_beta,  
00099                       buff_C, &ldim_C );
00100 #endif
00101     break;
00102   }
00103 
00104   case FLA_DOUBLE_COMPLEX:
00105   {
00106     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00107     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00108     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00109     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00110     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00111 
00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00113     cblas_zhemm( cblas_order,
00114                  blas_side,
00115                  blas_uplo,
00116                  m_C,
00117                  n_C,
00118                  buff_alpha,
00119                  buff_A, ldim_A,
00120                  buff_B, ldim_B,
00121                  buff_beta,
00122                  buff_C, ldim_C );
00123 #else
00124     FLA_C2F( zhemm )( &blas_side,
00125                       &blas_uplo,
00126                       &m_C,
00127                       &n_C,
00128                       buff_alpha,
00129                       buff_A, &ldim_A,
00130                       buff_B, &ldim_B,
00131                       buff_beta,
00132                       buff_C, &ldim_C );
00133 #endif
00134     break;
00135   }
00136 
00137   }
00138  
00139   return FLA_SUCCESS;
00140 }

void FLA_F2C() fla_hemm_external_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Hemm_external().

00144 {
00145   *IERROR = FLA_Hemm_external( *( ( FLA_Side * ) side  ),
00146                                *( ( FLA_Uplo * ) uplo  ),
00147                                *( ( FLA_Obj  * ) alpha ),
00148                                *( ( FLA_Obj  * ) A     ),
00149                                *( ( FLA_Obj  * ) B     ),
00150                                *( ( FLA_Obj  * ) beta  ),
00151                                *( ( FLA_Obj  * ) C     ) );
00152 }

void FLA_F2C() fla_hemm_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Hemm().

00099 {
00100   *IERROR = FLA_Hemm( *( ( FLA_Side * ) side  ),
00101                       *( ( FLA_Uplo * ) uplo  ),
00102                       *( ( FLA_Obj  * ) alpha ),
00103                       *( ( FLA_Obj  * ) A     ),
00104                       *( ( FLA_Obj  * ) B     ),
00105                       *( ( FLA_Obj  * ) beta  ),
00106                       *( ( FLA_Obj  * ) C     ) );
00107 }

FLA_Error FLA_Hemm_internal ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

Referenced by FLA_Hemm(), FLA_Hemm_internal(), FLA_Hemm_ll_blk_var1(), FLA_Hemm_ll_blk_var10(), FLA_Hemm_ll_blk_var2(), FLA_Hemm_ll_blk_var3(), FLA_Hemm_ll_blk_var4(), FLA_Hemm_ll_blk_var5(), FLA_Hemm_ll_blk_var6(), FLA_Hemm_ll_blk_var7(), FLA_Hemm_ll_blk_var8(), FLA_Hemm_ll_blk_var9(), FLA_Hemm_lu_blk_var1(), FLA_Hemm_lu_blk_var10(), FLA_Hemm_lu_blk_var2(), FLA_Hemm_lu_blk_var3(), FLA_Hemm_lu_blk_var4(), FLA_Hemm_lu_blk_var5(), FLA_Hemm_lu_blk_var6(), FLA_Hemm_lu_blk_var7(), FLA_Hemm_lu_blk_var8(), FLA_Hemm_lu_blk_var9(), FLA_Hemm_rl_blk_var1(), FLA_Hemm_rl_blk_var10(), FLA_Hemm_rl_blk_var2(), FLA_Hemm_rl_blk_var3(), FLA_Hemm_rl_blk_var4(), FLA_Hemm_rl_blk_var5(), FLA_Hemm_rl_blk_var6(), FLA_Hemm_rl_blk_var7(), FLA_Hemm_rl_blk_var8(), FLA_Hemm_rl_blk_var9(), FLA_Hemm_ru_blk_var1(), FLA_Hemm_ru_blk_var10(), FLA_Hemm_ru_blk_var2(), FLA_Hemm_ru_blk_var3(), FLA_Hemm_ru_blk_var4(), FLA_Hemm_ru_blk_var5(), FLA_Hemm_ru_blk_var6(), FLA_Hemm_ru_blk_var7(), FLA_Hemm_ru_blk_var8(), FLA_Hemm_ru_blk_var9(), and FLASH_Hemm().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Hemm_internal_check( side, uplo, alpha, A, B, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Hemm_internal( side,
00051                                    uplo,
00052                                    alpha,
00053                                    *FLASH_OBJ_PTR_AT( A ),
00054                                    *FLASH_OBJ_PTR_AT( B ),
00055                                    beta,
00056                                    *FLASH_OBJ_PTR_AT( C ),
00057                                    flash_hemm_cntl_mm );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Hemm( side, uplo, alpha, A, B, beta, C, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_hemm_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( side == FLA_LEFT )
00078         {
00079             if      ( uplo == FLA_LOWER_TRIANGULAR )
00080                 r_val = FLA_Hemm_ll( alpha, A, B, beta, C, cntl );
00081             else if ( uplo == FLA_UPPER_TRIANGULAR )
00082                 r_val = FLA_Hemm_lu( alpha, A, B, beta, C, cntl );
00083         }
00084         else if ( side == FLA_RIGHT )
00085         {
00086             if      ( uplo == FLA_LOWER_TRIANGULAR )
00087                 r_val = FLA_Hemm_rl( alpha, A, B, beta, C, cntl );
00088             else if ( uplo == FLA_UPPER_TRIANGULAR )
00089                 r_val = FLA_Hemm_ru( alpha, A, B, beta, C, cntl );
00090         }
00091     }
00092 
00093     return r_val;
00094 }

FLA_Error FLA_Hemm_internal_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Hemm_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     e_val = FLA_Check_identical_object_elemtype( A, C );
00048     FLA_Check_error_code( e_val );
00049 
00050     // Verify conformality between all the objects. This check works regardless
00051     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00052     // element length and width are used instead of scalar length and width.
00053     if ( side == FLA_LEFT )
00054     {
00055         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00056         FLA_Check_error_code( e_val );
00057     }
00058     else
00059     {
00060         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C );
00061         FLA_Check_error_code( e_val );
00062     }
00063 
00064     return FLA_SUCCESS;
00065 }

FLA_Error FLA_Hemm_ll_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

References FLA_Hemm_external().

Referenced by FLA_Hemm_ll().

00041 {
00042   return FLA_Hemm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C );
00043 }

FLA_Error FLA_Hemm_lu_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

References FLA_Hemm_external().

Referenced by FLA_Hemm_lu().

00046 {
00047   return FLA_Hemm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C );
00048 }

FLA_Error FLA_Hemm_rl_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

References FLA_Hemm_external().

Referenced by FLA_Hemm_rl().

00051 {
00052   return FLA_Hemm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C );
00053 }

FLA_Error FLA_Hemm_ru_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

References FLA_Hemm_external().

Referenced by FLA_Hemm_ru().

00056 {
00057   return FLA_Hemm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C );
00058 }

FLA_Error FLA_Hemm_task ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_hemm_t cntl 
)

References FLA_Hemm_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Hemm_external( side, uplo, alpha, A, B, beta, C );
00038 }

FLA_Error FLA_Her2k ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Her2k_check(), FLA_Her2k_external(), FLA_Her2k_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().

Referenced by fla_her2k_f().

00042 {
00043   FLA_Error    r_val = FLA_SUCCESS;
00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES
00045   FLA_Datatype datatype;
00046   int          k_AB, m_AB;
00047   int          FLA_HER2K_VAR3_BLOCKSIZE;
00048   int          FLA_HER2K_VAR9_BLOCKSIZE;
00049 #endif 
00050   
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Her2k_check( uplo, trans, alpha, A, B, beta, C );
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_HER2K_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_her2k_var3_bsize );
00061   FLA_HER2K_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_her2k_var9_bsize );
00062 
00063   // Determine the dimension of C.
00064   m_AB = FLA_Obj_length( C );
00065 
00066   // Determine the dimensions of A and B after transposition.
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_AB = FLA_Obj_width( A );
00069   else
00070     k_AB = FLA_Obj_length( A );
00071 
00072   // Invoke FLA_Her2k_internal() with the appropriate control tree.
00073   if      ( FLA_HER2K_VAR3_BLOCKSIZE < m_AB && FLA_HER2K_VAR9_BLOCKSIZE < k_AB )
00074   {
00075     r_val = FLA_Her2k_internal( uplo, trans, alpha, A, B, beta, C, fla_her2k_cntl_sq );
00076   }
00077   else if ( FLA_HER2K_VAR3_BLOCKSIZE < m_AB && k_AB <= FLA_HER2K_VAR9_BLOCKSIZE )
00078   {
00079     r_val = FLA_Her2k_internal( uplo, trans, alpha, A, B, beta, C, fla_her2k_cntl_op );
00080   }
00081   else if ( m_AB <= FLA_HER2K_VAR3_BLOCKSIZE && FLA_HER2K_VAR9_BLOCKSIZE < k_AB )
00082   {
00083     r_val = FLA_Her2k_internal( uplo, trans, alpha, A, B, beta, C, fla_her2k_cntl_ip );
00084   }
00085   else if ( m_AB <= FLA_HER2K_VAR3_BLOCKSIZE && k_AB <= FLA_HER2K_VAR9_BLOCKSIZE )
00086   {
00087     r_val = FLA_Her2k_external( uplo, trans, alpha, A, B, beta, C );
00088   }
00089 #else
00090   r_val = FLA_Her2k_external( uplo, trans, alpha, A, B, beta, C );
00091 #endif
00092 
00093   return r_val;
00094 }

FLA_Error FLA_Her2k_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_complex_object(), FLA_Check_consistent_object_datatype(), FLA_Check_identical_object_datatype(), FLA_Check_identical_object_precision(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_real_object(), FLA_Check_square(), FLA_Check_valid_complex_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Her2k(), FLA_Her2k_external(), and FLASH_Her2k().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_uplo( uplo );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_complex_trans( trans );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_complex_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_real_object( beta );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_identical_object_datatype( A, B );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_identical_object_datatype( A, C );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_identical_object_precision( A, beta );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_if_scalar( alpha );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_if_scalar( beta );
00070   FLA_Check_error_code( e_val );
00071 
00072   e_val = FLA_Check_square( C );
00073   FLA_Check_error_code( e_val );
00074 
00075   if ( trans == FLA_NO_TRANSPOSE )
00076   {
00077     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C );
00078     FLA_Check_error_code( e_val );
00079   }
00080   else
00081   {
00082     e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00083     FLA_Check_error_code( e_val );
00084   }
00085   
00086   return FLA_SUCCESS;
00087 }

FLA_Error FLA_Her2k_external ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_cher2k(), cblas_zher2k(), CblasColMajor, cher2k(), FLA_Check_error_level(), FLA_Her2k_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), and zher2k().

Referenced by FLA_Her2k(), fla_her2k_external_f(), FLA_Her2k_lh_task(), FLA_Her2k_ln_task(), FLA_Her2k_task(), FLA_Her2k_uh_task(), and FLA_Her2k_un_task().

00036 {
00037   FLA_Datatype datatype;
00038   int          k_AB;
00039   int          m_A, n_A, ldim_A;
00040   int          ldim_B; 
00041   int          m_C, ldim_C;
00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00043   CBLAS_ORDER     cblas_order = CblasColMajor;
00044   CBLAS_UPLO      blas_uplo;
00045   CBLAS_TRANSPOSE blas_trans;
00046 #else
00047   char         blas_uplo; 
00048   char         blas_trans;
00049 #endif
00050 
00051   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00052     FLA_Her2k_check( uplo, trans, alpha, A, B, beta, C );
00053 
00054   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00055 
00056   datatype = FLA_Obj_datatype( A );
00057 
00058   m_A      = FLA_Obj_length( A );
00059   n_A      = FLA_Obj_width( A );
00060   ldim_A   = FLA_Obj_ldim( A );
00061 
00062   ldim_B   = FLA_Obj_ldim( B );
00063 
00064   m_C      = FLA_Obj_length( C );
00065   ldim_C   = FLA_Obj_ldim( C );
00066 
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_AB = n_A;
00069   else
00070     k_AB = m_A;
00071 
00072   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00073   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00074 
00075 
00076   switch( datatype ){
00077 
00078   case FLA_COMPLEX:
00079   {
00080     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00081     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00082     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00083     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00084     float    *buff_beta  = ( float    * ) FLA_FLOAT_PTR( beta );
00085 
00086 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00087     cblas_cher2k( cblas_order,
00088                   blas_uplo,
00089                   blas_trans,
00090                   m_C,
00091                   k_AB,
00092                   buff_alpha,
00093                   buff_A, ldim_A,
00094                   buff_B, ldim_B,
00095                   *buff_beta,
00096                   buff_C, ldim_C );
00097 #else
00098     FLA_C2F( cher2k )( &blas_uplo,
00099                        &blas_trans,
00100                        &m_C,
00101                        &k_AB,
00102                        buff_alpha,
00103                        buff_A, &ldim_A,
00104                        buff_B, &ldim_B,
00105                        buff_beta,
00106                        buff_C, &ldim_C );
00107 #endif
00108     break;
00109   }
00110 
00111   case FLA_DOUBLE_COMPLEX:
00112   {
00113     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00114     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00115     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00116     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00117     double   *buff_beta  = ( double   * ) FLA_DOUBLE_PTR( beta );
00118 
00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00120     cblas_zher2k( cblas_order,
00121                   blas_uplo,
00122                   blas_trans,
00123                   m_C,
00124                   k_AB,
00125                   buff_alpha,
00126                   buff_A, ldim_A,
00127                   buff_B, ldim_B,
00128                   *buff_beta,
00129                   buff_C, ldim_C );
00130 #else
00131     FLA_C2F( zher2k )( &blas_uplo,
00132                        &blas_trans,
00133                        &m_C,
00134                        &k_AB,
00135                        buff_alpha,
00136                        buff_A, &ldim_A,
00137                        buff_B, &ldim_B,
00138                        buff_beta,
00139                        buff_C, &ldim_C );
00140 #endif
00141     break;
00142   }
00143 
00144   }
00145  
00146   return FLA_SUCCESS;
00147 }

void FLA_F2C() fla_her2k_external_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Her2k_external().

00151 {
00152   *IERROR = FLA_Her2k_external( *( ( FLA_Uplo  * ) uplo  ),
00153                                 *( ( FLA_Trans * ) trans ),
00154                                 *( ( FLA_Obj   * ) alpha ),
00155                                 *( ( FLA_Obj   * ) A     ),
00156                                 *( ( FLA_Obj   * ) B     ),
00157                                 *( ( FLA_Obj   * ) beta  ),
00158                                 *( ( FLA_Obj   * ) C     ) );
00159 }

void FLA_F2C() fla_her2k_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Her2k().

00098 {
00099   *IERROR = FLA_Her2k( *( ( FLA_Uplo  * ) uplo  ),
00100                        *( ( FLA_Trans * ) trans ),
00101                        *( ( FLA_Obj   * ) alpha ),
00102                        *( ( FLA_Obj   * ) A     ),
00103                        *( ( FLA_Obj   * ) B     ),
00104                        *( ( FLA_Obj   * ) beta  ),
00105                        *( ( FLA_Obj   * ) C     ) );
00106 }

FLA_Error FLA_Her2k_internal ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

Referenced by FLA_Her2k(), FLA_Her2k_internal(), FLA_Her2k_lh_blk_var1(), FLA_Her2k_lh_blk_var10(), FLA_Her2k_lh_blk_var2(), FLA_Her2k_lh_blk_var3(), FLA_Her2k_lh_blk_var4(), FLA_Her2k_lh_blk_var5(), FLA_Her2k_lh_blk_var6(), FLA_Her2k_lh_blk_var7(), FLA_Her2k_lh_blk_var8(), FLA_Her2k_lh_blk_var9(), FLA_Her2k_ln_blk_var1(), FLA_Her2k_ln_blk_var10(), FLA_Her2k_ln_blk_var2(), FLA_Her2k_ln_blk_var3(), FLA_Her2k_ln_blk_var4(), FLA_Her2k_ln_blk_var5(), FLA_Her2k_ln_blk_var6(), FLA_Her2k_ln_blk_var7(), FLA_Her2k_ln_blk_var8(), FLA_Her2k_ln_blk_var9(), FLA_Her2k_uh_blk_var1(), FLA_Her2k_uh_blk_var10(), FLA_Her2k_uh_blk_var2(), FLA_Her2k_uh_blk_var3(), FLA_Her2k_uh_blk_var4(), FLA_Her2k_uh_blk_var5(), FLA_Her2k_uh_blk_var6(), FLA_Her2k_uh_blk_var7(), FLA_Her2k_uh_blk_var8(), FLA_Her2k_uh_blk_var9(), FLA_Her2k_un_blk_var1(), FLA_Her2k_un_blk_var10(), FLA_Her2k_un_blk_var2(), FLA_Her2k_un_blk_var3(), FLA_Her2k_un_blk_var4(), FLA_Her2k_un_blk_var5(), FLA_Her2k_un_blk_var6(), FLA_Her2k_un_blk_var7(), FLA_Her2k_un_blk_var8(), FLA_Her2k_un_blk_var9(), and FLASH_Her2k().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Her2k_internal_check( uplo, trans, alpha, A, B, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Her2k_internal( uplo,
00051                                     trans,
00052                                     alpha,
00053                                     *FLASH_OBJ_PTR_AT( A ),
00054                                     *FLASH_OBJ_PTR_AT( B ),
00055                                     beta,
00056                                     *FLASH_OBJ_PTR_AT( C ),
00057                                     flash_her2k_cntl_sq );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Her2k( uplo, trans, alpha, A, B, beta, C, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_her2k_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( uplo == FLA_LOWER_TRIANGULAR )
00078         {
00079             if      ( trans == FLA_NO_TRANSPOSE )
00080                 r_val = FLA_Her2k_ln( alpha, A, B, beta, C, cntl );
00081             else if ( trans == FLA_CONJ_TRANSPOSE )
00082                 r_val = FLA_Her2k_lh( alpha, A, B, beta, C, cntl );
00083         }
00084         else if ( uplo == FLA_UPPER_TRIANGULAR )
00085         {
00086             if      ( trans == FLA_NO_TRANSPOSE )
00087                 r_val = FLA_Her2k_un( alpha, A, B, beta, C, cntl );
00088             else if ( trans == FLA_CONJ_TRANSPOSE )
00089                 r_val = FLA_Her2k_uh( alpha, A, B, beta, C, cntl );
00090         }
00091     }
00092 
00093     return r_val;
00094 }

FLA_Error FLA_Her2k_internal_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Her2k_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     e_val = FLA_Check_identical_object_elemtype( A, C );
00048     FLA_Check_error_code( e_val );
00049 
00050     // Verify conformality between all the objects. This check works regardless
00051     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00052     // element length and width are used instead of scalar length and width.
00053     if ( trans == FLA_NO_TRANSPOSE )
00054     {
00055         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C );
00056         FLA_Check_error_code( e_val );
00057     }
00058     else
00059     {
00060         e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00061         FLA_Check_error_code( e_val );
00062     }
00063 
00064     return FLA_SUCCESS;
00065 }

FLA_Error FLA_Her2k_lh_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

References FLA_Her2k_external().

Referenced by FLA_Her2k_lh().

00046 {
00047   return FLA_Her2k_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C );
00048 }

FLA_Error FLA_Her2k_ln_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

References FLA_Her2k_external().

Referenced by FLA_Her2k_ln().

00041 {
00042   return FLA_Her2k_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00043 }

FLA_Error FLA_Her2k_task ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

References FLA_Her2k_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Her2k_external( uplo, trans, alpha, A, B, beta, C );
00038 }

FLA_Error FLA_Her2k_uh_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

References FLA_Her2k_external().

Referenced by FLA_Her2k_uh().

00056 {
00057   return FLA_Her2k_external( FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C );
00058 }

FLA_Error FLA_Her2k_un_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_her2k_t cntl 
)

References FLA_Her2k_external().

Referenced by FLA_Her2k_un().

00051 {
00052   return FLA_Her2k_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00053 }

FLA_Error FLA_Herk ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Herk_check(), FLA_Herk_external(), FLA_Herk_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().

Referenced by fla_herk_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_C, k_A;
00047   int          FLA_HERK_VAR2_BLOCKSIZE;
00048   int          FLA_HERK_VAR5_BLOCKSIZE;
00049 #endif
00050 
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Herk_check( uplo, trans, alpha, A, beta, C );
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_HERK_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_herk_var2_bsize );
00061   FLA_HERK_VAR5_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_herk_var5_bsize );
00062 
00063   // Determine the dimension of C.
00064   m_C = FLA_Obj_length( C );
00065 
00066   // Determine the k dimension of A after transposition.
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_A = FLA_Obj_width( A );
00069   else
00070     k_A = FLA_Obj_length( A );
00071 
00072   // Invoke FLA_Herk_internal() with the appropriate control tree.
00073   if      ( FLA_HERK_VAR2_BLOCKSIZE < m_C && FLA_HERK_VAR5_BLOCKSIZE < k_A )
00074   {
00075     r_val = FLA_Herk_internal( uplo, trans, alpha, A, beta, C, fla_herk_cntl_sq );
00076   }
00077   else if ( FLA_HERK_VAR2_BLOCKSIZE < m_C && k_A <= FLA_HERK_VAR5_BLOCKSIZE )
00078   {
00079     r_val = FLA_Herk_internal( uplo, trans, alpha, A, beta, C, fla_herk_cntl_op );
00080   }
00081   else if ( m_C <= FLA_HERK_VAR2_BLOCKSIZE && FLA_HERK_VAR5_BLOCKSIZE < k_A )
00082   {
00083     r_val = FLA_Herk_internal( uplo, trans, alpha, A, beta, C, fla_herk_cntl_ip );
00084   }
00085   else if ( m_C <= FLA_HERK_VAR2_BLOCKSIZE && k_A <= FLA_HERK_VAR5_BLOCKSIZE )
00086   {
00087     r_val = FLA_Herk_external( uplo, trans, alpha, A, beta, C );
00088   }
00089 #else
00090   r_val = FLA_Herk_external( uplo, trans, alpha, A, beta, C );
00091 #endif
00092 
00093   return r_val;
00094 }

FLA_Error FLA_Herk_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_complex_object(), FLA_Check_identical_object_datatype(), FLA_Check_identical_object_precision(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_real_object(), FLA_Check_square(), FLA_Check_valid_complex_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Herk(), FLA_Herk_external(), and FLASH_Herk().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_uplo( uplo );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_complex_trans( trans );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_complex_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_real_object( alpha );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_real_object( beta );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_identical_object_datatype( A, C );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_identical_object_precision( A, alpha );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_identical_object_precision( A, beta );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_if_scalar( alpha );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_if_scalar( beta );
00070   FLA_Check_error_code( e_val );
00071 
00072   e_val = FLA_Check_square( C );
00073   FLA_Check_error_code( e_val );
00074 
00075   if ( trans == FLA_NO_TRANSPOSE )
00076   {
00077     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C );
00078     FLA_Check_error_code( e_val );
00079   }
00080   else
00081   {
00082     e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C );
00083     FLA_Check_error_code( e_val );
00084   }
00085   
00086   return FLA_SUCCESS;
00087 }

FLA_Error FLA_Herk_external ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_cherk(), cblas_zherk(), CblasColMajor, cherk(), FLA_Check_error_level(), FLA_Herk_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), and zherk().

Referenced by FLA_Herk(), fla_herk_external_f(), FLA_Herk_lh_task(), FLA_Herk_ln_task(), FLA_Herk_task(), FLA_Herk_uh_task(), FLA_Herk_un_task(), and FLA_Random_spd_matrix().

00036 {
00037   FLA_Datatype datatype;
00038   int          k_A;
00039   int          m_A, n_A, ldim_A;
00040   int          m_C, ldim_C;
00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00042   CBLAS_ORDER     cblas_order = CblasColMajor;
00043   CBLAS_UPLO      blas_uplo;
00044   CBLAS_TRANSPOSE blas_trans;
00045 #else
00046   char         blas_uplo; 
00047   char         blas_trans;
00048 #endif
00049 
00050   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00051     FLA_Herk_check( uplo, trans, alpha, A, beta, C );
00052   
00053   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00054 
00055   datatype = FLA_Obj_datatype( A );
00056 
00057   m_A      = FLA_Obj_length( A );
00058   n_A      = FLA_Obj_width( A );
00059   ldim_A   = FLA_Obj_ldim( A );
00060 
00061   m_C      = FLA_Obj_length( C );
00062   ldim_C   = FLA_Obj_ldim( C );
00063 
00064   if ( trans == FLA_NO_TRANSPOSE )
00065     k_A = n_A;
00066   else
00067     k_A = m_A;
00068 
00069   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00070   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00071 
00072 
00073   switch( datatype ){
00074 
00075   case FLA_COMPLEX:
00076   {
00077     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00078     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00079     float    *buff_alpha = ( float    * ) FLA_FLOAT_PTR( alpha );
00080     float    *buff_beta  = ( float    * ) FLA_FLOAT_PTR( beta );
00081 
00082 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00083     cblas_cherk( cblas_order,
00084                  blas_uplo, 
00085                  blas_trans,
00086                  m_C,
00087                  k_A,
00088                  *buff_alpha,
00089                  buff_A, ldim_A, 
00090                  *buff_beta,  
00091                  buff_C, ldim_C );
00092 #else
00093     FLA_C2F( cherk )( &blas_uplo, 
00094                       &blas_trans,
00095                       &m_C,
00096                       &k_A,
00097                       buff_alpha,
00098                       buff_A, &ldim_A, 
00099                       buff_beta,  
00100                       buff_C, &ldim_C );
00101 #endif
00102     break;
00103   }
00104 
00105   case FLA_DOUBLE_COMPLEX:
00106   {
00107     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00108     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00109     double   *buff_alpha = ( double   * ) FLA_DOUBLE_PTR( alpha );
00110     double   *buff_beta  = ( double   * ) FLA_DOUBLE_PTR( beta );
00111 
00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00113     cblas_zherk( cblas_order,
00114                  blas_uplo, 
00115                  blas_trans,
00116                  m_C,
00117                  k_A,
00118                  *buff_alpha,
00119                  buff_A, ldim_A, 
00120                  *buff_beta,  
00121                  buff_C, ldim_C );
00122 #else
00123     FLA_C2F( zherk )( &blas_uplo, 
00124                       &blas_trans,
00125                       &m_C,
00126                       &k_A,
00127                       buff_alpha,
00128                       buff_A, &ldim_A, 
00129                       buff_beta,  
00130                       buff_C, &ldim_C );
00131 #endif
00132     break;
00133   }
00134 
00135   }
00136  
00137   return FLA_SUCCESS;
00138 }

void FLA_F2C() fla_herk_external_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Herk_external().

00142 {
00143   *IERROR = FLA_Herk_external( *( ( FLA_Uplo  * ) uplo  ),
00144                                *( ( FLA_Trans * ) trans ),
00145                                *( ( FLA_Obj   * ) alpha ),
00146                                *( ( FLA_Obj   * ) A     ),
00147                                *( ( FLA_Obj   * ) beta  ),
00148                                *( ( FLA_Obj   * ) C     ) );
00149 }

void FLA_F2C() fla_herk_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Herk().

00098 {
00099   *IERROR = FLA_Herk( *( ( FLA_Uplo  * ) uplo  ),
00100                       *( ( FLA_Trans * ) trans ),
00101                       *( ( FLA_Obj   * ) alpha ),
00102                       *( ( FLA_Obj   * ) A     ),
00103                       *( ( FLA_Obj   * ) beta  ),
00104                       *( ( FLA_Obj   * ) C     ) );
00105 }

FLA_Error FLA_Herk_internal ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

Referenced by FLA_Chol_l_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_l_blk_var3(), FLA_Chol_u_blk_var1(), FLA_Chol_u_blk_var2(), FLA_Chol_u_blk_var3(), FLA_Herk(), FLA_Herk_internal(), FLA_Herk_lh_blk_var1(), FLA_Herk_lh_blk_var2(), FLA_Herk_lh_blk_var3(), FLA_Herk_lh_blk_var4(), FLA_Herk_lh_blk_var5(), FLA_Herk_lh_blk_var6(), FLA_Herk_ln_blk_var1(), FLA_Herk_ln_blk_var2(), FLA_Herk_ln_blk_var3(), FLA_Herk_ln_blk_var4(), FLA_Herk_ln_blk_var5(), FLA_Herk_ln_blk_var6(), FLA_Herk_uh_blk_var1(), FLA_Herk_uh_blk_var2(), FLA_Herk_uh_blk_var3(), FLA_Herk_uh_blk_var4(), FLA_Herk_uh_blk_var5(), FLA_Herk_uh_blk_var6(), FLA_Herk_un_blk_var1(), FLA_Herk_un_blk_var2(), FLA_Herk_un_blk_var3(), FLA_Herk_un_blk_var4(), FLA_Herk_un_blk_var5(), FLA_Herk_un_blk_var6(), FLA_Ttmm_l_blk_var1(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_l_blk_var3(), FLA_Ttmm_u_blk_var1(), FLA_Ttmm_u_blk_var2(), FLA_Ttmm_u_blk_var3(), and FLASH_Herk().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Herk_internal_check( uplo, trans, alpha, A, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Herk_internal( uplo,
00051                                    trans,
00052                                    alpha,
00053                                    *FLASH_OBJ_PTR_AT( A ),
00054                                    beta,
00055                                    *FLASH_OBJ_PTR_AT( C ),
00056                                    flash_herk_cntl_sq );
00057     }
00058     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00059               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00060               FLASH_Queue_get_enabled( ) )
00061     {
00062         // Enqueue
00063         ENQUEUE_FLASH_Herk( uplo, trans, alpha, A, beta, C, cntl );
00064     }
00065     else
00066     {
00067         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00068              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00069              !FLASH_Queue_get_enabled( ) )
00070         {
00071             // Execute leaf
00072             cntl = flash_herk_cntl_blas;
00073         }
00074 
00075         // Parameter combinations
00076         if      ( uplo == FLA_LOWER_TRIANGULAR )
00077         {
00078             if      ( trans == FLA_NO_TRANSPOSE )
00079                 r_val = FLA_Herk_ln( alpha, A, beta, C, cntl );
00080             else if ( trans == FLA_CONJ_TRANSPOSE )
00081                 r_val = FLA_Herk_lh( alpha, A, beta, C, cntl );
00082         }
00083         else if ( uplo == FLA_UPPER_TRIANGULAR )
00084         {
00085             if      ( trans == FLA_NO_TRANSPOSE )
00086                 r_val = FLA_Herk_un( alpha, A, beta, C, cntl );
00087             else if ( trans == FLA_CONJ_TRANSPOSE )
00088                 r_val = FLA_Herk_uh( alpha, A, beta, C, cntl );
00089         }
00090     }
00091 
00092     return r_val;
00093 }

FLA_Error FLA_Herk_internal_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Herk_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, C );
00045     FLA_Check_error_code( e_val );
00046 
00047     // Verify conformality between all the objects. This check works regardless
00048     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00049     // element length and width are used instead of scalar length and width.
00050     if ( trans == FLA_NO_TRANSPOSE )
00051     {
00052         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C );
00053         FLA_Check_error_code( e_val );
00054     }
00055     else
00056     {
00057         e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C );
00058         FLA_Check_error_code( e_val );
00059     }
00060 
00061     return FLA_SUCCESS;
00062 }

FLA_Error FLA_Herk_lh_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

References FLA_Herk_external().

Referenced by FLA_Herk_lh().

00046 {
00047   return FLA_Herk_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, beta, C );
00048 }

FLA_Error FLA_Herk_ln_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

References FLA_Herk_external().

Referenced by FLA_Herk_ln().

00041 {
00042   return FLA_Herk_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C );
00043 }

FLA_Error FLA_Herk_task ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

References FLA_Herk_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Herk_external( uplo, trans, alpha, A, beta, C );
00038 }

FLA_Error FLA_Herk_uh_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

References FLA_Herk_external().

Referenced by FLA_Herk_uh().

00056 {
00057   return FLA_Herk_external( FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, beta, C );
00058 }

FLA_Error FLA_Herk_un_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_herk_t cntl 
)

References FLA_Herk_external().

Referenced by FLA_Herk_un().

00051 {
00052   return FLA_Herk_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C );
00053 }

FLA_Error FLA_Symm ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Symm_check(), FLA_Symm_external(), and FLA_Symm_internal().

Referenced by fla_symm_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_SYMM_VAR4_BLOCKSIZE;
00048   int          FLA_SYMM_VAR9_BLOCKSIZE;
00049 #endif
00050 
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Symm_check( side, uplo, alpha, A, B, beta, C );
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_SYMM_VAR4_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_symm_var4_bsize );
00061   FLA_SYMM_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_symm_var9_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 (ie: the number of columns
00067   // when side == FLA_LEFT and rows when side == FLA_RIGHT).
00068   if ( side == FLA_LEFT )
00069     nrhs_B = FLA_Obj_width( B );
00070   else
00071     nrhs_B = FLA_Obj_length( B );
00072 
00073   // Invoke FLA_Symm_internal() with the appropriate control tree.
00074   if      ( FLA_SYMM_VAR4_BLOCKSIZE < m_A && FLA_SYMM_VAR9_BLOCKSIZE < nrhs_B )
00075   {
00076     r_val = FLA_Symm_internal( side, uplo, alpha, A, B, beta, C, fla_symm_cntl_mm );
00077   }
00078   else if ( FLA_SYMM_VAR4_BLOCKSIZE < m_A && nrhs_B <= FLA_SYMM_VAR9_BLOCKSIZE )
00079   {
00080     r_val = FLA_Symm_internal( side, uplo, alpha, A, B, beta, C, fla_symm_cntl_mp );
00081   }
00082   else if ( m_A <= FLA_SYMM_VAR4_BLOCKSIZE && FLA_SYMM_VAR9_BLOCKSIZE < nrhs_B )
00083   {
00084     r_val = FLA_Symm_internal( side, uplo, alpha, A, B, beta, C, fla_symm_cntl_bp );
00085   }
00086   else if ( m_A <= FLA_SYMM_VAR4_BLOCKSIZE && nrhs_B <= FLA_SYMM_VAR9_BLOCKSIZE )
00087   {
00088     r_val = FLA_Symm_external( side, uplo, alpha, A, B, beta, C );
00089   }
00090 #else
00091   r_val = FLA_Symm_external( side, uplo, alpha, A, B, beta, C );
00092 #endif
00093 
00094   return r_val;
00095 }

FLA_Error FLA_Symm_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_side(), and FLA_Check_valid_uplo().

Referenced by FLA_Symm(), FLA_Symm_external(), and FLASH_Symm().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_side( side );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_uplo( uplo );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_floating_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_identical_object_datatype( A, B );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_identical_object_datatype( A, C );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, beta );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_if_scalar( beta );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_square( A );
00070   FLA_Check_error_code( e_val );
00071 
00072   if ( side == FLA_LEFT )
00073   {
00074     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00075     FLA_Check_error_code( e_val );
00076   }
00077   else
00078   {
00079     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C );
00080     FLA_Check_error_code( e_val );
00081   }
00082   
00083   return FLA_SUCCESS;
00084 }

FLA_Error FLA_Symm_external ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_csymm(), cblas_dsymm(), cblas_ssymm(), cblas_zsymm(), CblasColMajor, csymm(), dsymm(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_uplo(), FLA_Symm_check(), ssymm(), and zsymm().

Referenced by FLA_Symm(), fla_symm_external_f(), FLA_Symm_ll_task(), FLA_Symm_lu_task(), FLA_Symm_rl_task(), FLA_Symm_ru_task(), and FLA_Symm_task().

00036 {
00037   FLA_Datatype datatype;
00038   int          ldim_A;
00039   int          ldim_B;
00040   int          m_C, n_C, ldim_C;
00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00042   CBLAS_ORDER  cblas_order = CblasColMajor;
00043   CBLAS_SIDE   blas_side;
00044   CBLAS_UPLO   blas_uplo;
00045 #else
00046   char         blas_side;
00047   char         blas_uplo; 
00048 #endif
00049 
00050   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00051     FLA_Symm_check( side, uplo, alpha, A, B, beta, C );
00052 
00053   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00054 
00055   datatype = FLA_Obj_datatype( A );
00056 
00057   ldim_A   = FLA_Obj_ldim( A );
00058 
00059   ldim_B   = FLA_Obj_ldim( B );
00060 
00061   m_C      = FLA_Obj_length( C );
00062   n_C      = FLA_Obj_width( C );
00063   ldim_C   = FLA_Obj_ldim( C );
00064 
00065   FLA_Param_map_to_blas_side( side, &blas_side );
00066   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00067 
00068 
00069   switch( datatype ){
00070 
00071   case FLA_FLOAT:
00072   {
00073     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00074     float *buff_B     = ( float * ) FLA_FLOAT_PTR( B );
00075     float *buff_C     = ( float * ) FLA_FLOAT_PTR( C );
00076     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00077     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00078 
00079 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00080     cblas_ssymm( cblas_order,
00081                  blas_side, 
00082                  blas_uplo, 
00083                  m_C, 
00084                  n_C, 
00085                  *buff_alpha,
00086                  buff_A, ldim_A, 
00087                  buff_B, ldim_B,
00088                  *buff_beta,  
00089                  buff_C, ldim_C );
00090 #else
00091     FLA_C2F( ssymm )( &blas_side, 
00092                       &blas_uplo, 
00093                       &m_C, 
00094                       &n_C, 
00095                       buff_alpha,
00096                       buff_A, &ldim_A, 
00097                       buff_B, &ldim_B,
00098                       buff_beta,  
00099                       buff_C, &ldim_C );
00100 #endif
00101     break;
00102   }
00103 
00104   case FLA_DOUBLE:
00105   {
00106     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00107     double *buff_B     = ( double * ) FLA_DOUBLE_PTR( B );
00108     double *buff_C     = ( double * ) FLA_DOUBLE_PTR( C );
00109     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00110     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00111 
00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00113     cblas_dsymm( cblas_order,
00114                  blas_side, 
00115                  blas_uplo, 
00116                  m_C, 
00117                  n_C, 
00118                  *buff_alpha,
00119                  buff_A, ldim_A, 
00120                  buff_B, ldim_B,
00121                  *buff_beta,  
00122                  buff_C, ldim_C );
00123 #else
00124     FLA_C2F( dsymm )( &blas_side, 
00125                       &blas_uplo, 
00126                       &m_C, 
00127                       &n_C, 
00128                       buff_alpha,
00129                       buff_A, &ldim_A, 
00130                       buff_B, &ldim_B,
00131                       buff_beta,  
00132                       buff_C, &ldim_C );
00133 #endif
00134     break;
00135   }
00136 
00137   case FLA_COMPLEX:
00138   {
00139     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00140     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00141     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00142     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00143     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00144 
00145 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00146     cblas_csymm( cblas_order,
00147                  blas_side, 
00148                  blas_uplo, 
00149                  m_C, 
00150                  n_C, 
00151                  buff_alpha,
00152                  buff_A, ldim_A, 
00153                  buff_B, ldim_B,
00154                  buff_beta,  
00155                  buff_C, ldim_C );
00156 #else
00157     FLA_C2F( csymm )( &blas_side, 
00158                       &blas_uplo, 
00159                       &m_C, 
00160                       &n_C, 
00161                       buff_alpha,
00162                       buff_A, &ldim_A, 
00163                       buff_B, &ldim_B,
00164                       buff_beta,  
00165                       buff_C, &ldim_C );
00166 #endif
00167     break;
00168   }
00169 
00170   case FLA_DOUBLE_COMPLEX:
00171   {
00172     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00173     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00174     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00175     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00176     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00177 
00178 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00179     cblas_zsymm( cblas_order,
00180                  blas_side, 
00181                  blas_uplo, 
00182                  m_C, 
00183                  n_C, 
00184                  buff_alpha,
00185                  buff_A, ldim_A, 
00186                  buff_B, ldim_B,
00187                  buff_beta,  
00188                  buff_C, ldim_C );
00189 #else
00190     FLA_C2F( zsymm )( &blas_side, 
00191                       &blas_uplo, 
00192                       &m_C, 
00193                       &n_C, 
00194                       buff_alpha,
00195                       buff_A, &ldim_A, 
00196                       buff_B, &ldim_B,
00197                       buff_beta,  
00198                       buff_C, &ldim_C );
00199 #endif
00200     break;
00201   }
00202 
00203   }
00204   
00205   return FLA_SUCCESS;
00206 }

void FLA_F2C() fla_symm_external_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Symm_external().

00210 {
00211   *IERROR = FLA_Symm_external( *( ( FLA_Side * ) side  ),
00212                                *( ( FLA_Uplo * ) uplo  ),
00213                                *( ( FLA_Obj  * ) alpha ),
00214                                *( ( FLA_Obj  * ) A     ),
00215                                *( ( FLA_Obj  * ) B     ),
00216                                *( ( FLA_Obj  * ) beta  ),
00217                                *( ( FLA_Obj  * ) C     ) );
00218 }

void FLA_F2C() fla_symm_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Symm().

00099 {
00100   *IERROR = FLA_Symm( *( ( FLA_Side * ) side  ),
00101                       *( ( FLA_Uplo * ) uplo  ),
00102                       *( ( FLA_Obj  * ) alpha ),
00103                       *( ( FLA_Obj  * ) A     ),
00104                       *( ( FLA_Obj  * ) B     ),
00105                       *( ( FLA_Obj  * ) beta  ),
00106                       *( ( FLA_Obj  * ) C     ) );
00107 }

FLA_Error FLA_Symm_internal ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

Referenced by FLA_Symm(), FLA_Symm_internal(), FLA_Symm_ll_blk_var1(), FLA_Symm_ll_blk_var10(), FLA_Symm_ll_blk_var2(), FLA_Symm_ll_blk_var3(), FLA_Symm_ll_blk_var4(), FLA_Symm_ll_blk_var5(), FLA_Symm_ll_blk_var6(), FLA_Symm_ll_blk_var7(), FLA_Symm_ll_blk_var8(), FLA_Symm_ll_blk_var9(), FLA_Symm_lu_blk_var1(), FLA_Symm_lu_blk_var10(), FLA_Symm_lu_blk_var2(), FLA_Symm_lu_blk_var3(), FLA_Symm_lu_blk_var4(), FLA_Symm_lu_blk_var5(), FLA_Symm_lu_blk_var6(), FLA_Symm_lu_blk_var7(), FLA_Symm_lu_blk_var8(), FLA_Symm_lu_blk_var9(), FLA_Symm_rl_blk_var1(), FLA_Symm_rl_blk_var10(), FLA_Symm_rl_blk_var2(), FLA_Symm_rl_blk_var3(), FLA_Symm_rl_blk_var4(), FLA_Symm_rl_blk_var5(), FLA_Symm_rl_blk_var6(), FLA_Symm_rl_blk_var7(), FLA_Symm_rl_blk_var8(), FLA_Symm_rl_blk_var9(), FLA_Symm_ru_blk_var1(), FLA_Symm_ru_blk_var10(), FLA_Symm_ru_blk_var2(), FLA_Symm_ru_blk_var3(), FLA_Symm_ru_blk_var4(), FLA_Symm_ru_blk_var5(), FLA_Symm_ru_blk_var6(), FLA_Symm_ru_blk_var7(), FLA_Symm_ru_blk_var8(), FLA_Symm_ru_blk_var9(), and FLASH_Symm().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Symm_internal_check( side, uplo, alpha, A, B, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Symm_internal( side,
00051                                    uplo,
00052                                    alpha,
00053                                    *FLASH_OBJ_PTR_AT( A ),
00054                                    *FLASH_OBJ_PTR_AT( B ),
00055                                    beta,
00056                                    *FLASH_OBJ_PTR_AT( C ),
00057                                    flash_symm_cntl_mm );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Symm( side, uplo, alpha, A, B, beta, C, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_symm_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( side == FLA_LEFT )
00078         {
00079             if      ( uplo == FLA_LOWER_TRIANGULAR )
00080                 r_val = FLA_Symm_ll( alpha, A, B, beta, C, cntl );
00081             else if ( uplo == FLA_UPPER_TRIANGULAR )
00082                 r_val = FLA_Symm_lu( alpha, A, B, beta, C, cntl );
00083         }
00084         else if ( side == FLA_RIGHT )
00085         {
00086             if      ( uplo == FLA_LOWER_TRIANGULAR )
00087                 r_val = FLA_Symm_rl( alpha, A, B, beta, C, cntl );
00088             else if ( uplo == FLA_UPPER_TRIANGULAR )
00089                 r_val = FLA_Symm_ru( alpha, A, B, beta, C, cntl );
00090         }
00091     }
00092 
00093     return r_val;
00094 }

FLA_Error FLA_Symm_internal_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Symm_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     e_val = FLA_Check_identical_object_elemtype( A, C );
00048     FLA_Check_error_code( e_val );
00049 
00050     // Verify conformality between all the objects. This check works regardless
00051     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00052     // element length and width are used instead of scalar length and width.
00053     if ( side == FLA_LEFT )
00054     {
00055         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00056         FLA_Check_error_code( e_val );
00057     }
00058     else
00059     {
00060         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C );
00061         FLA_Check_error_code( e_val );
00062     }
00063 
00064     return FLA_SUCCESS;
00065 }

FLA_Error FLA_Symm_ll_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

References FLA_Symm_external().

Referenced by FLA_Symm_ll().

00041 {
00042   return FLA_Symm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C );
00043 }

FLA_Error FLA_Symm_lu_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

References FLA_Symm_external().

Referenced by FLA_Symm_lu().

00046 {
00047   return FLA_Symm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C );
00048 }

FLA_Error FLA_Symm_rl_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

References FLA_Symm_external().

Referenced by FLA_Symm_rl().

00051 {
00052   return FLA_Symm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C );
00053 }

FLA_Error FLA_Symm_ru_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

References FLA_Symm_external().

Referenced by FLA_Symm_ru().

00056 {
00057   return FLA_Symm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C );
00058 }

FLA_Error FLA_Symm_task ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_symm_t cntl 
)

References FLA_Symm_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Symm_external( side, uplo, alpha, A, B, beta, C );
00038 }

FLA_Error FLA_Syr2k ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Syr2k_check(), FLA_Syr2k_external(), and FLA_Syr2k_internal().

Referenced by fla_syr2k_f().

00042 {
00043   FLA_Error    r_val = FLA_SUCCESS;
00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES
00045   FLA_Datatype datatype;
00046   int          k_AB, m_AB;
00047   int          FLA_SYR2K_VAR3_BLOCKSIZE;
00048   int          FLA_SYR2K_VAR9_BLOCKSIZE;
00049 #endif
00050   
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Syr2k_check( uplo, trans, alpha, A, B, beta, C );
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_SYR2K_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syr2k_var3_bsize );
00061   FLA_SYR2K_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syr2k_var9_bsize );
00062 
00063   // Determine the dimension of C.
00064   m_AB = FLA_Obj_length( C );
00065 
00066   // Determine the dimensions of A and B after transposition.
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_AB = FLA_Obj_width( A );
00069   else
00070     k_AB = FLA_Obj_length( A );
00071 
00072   // Invoke FLA_Syr2k_internal() with the appropriate control tree.
00073   if      ( FLA_SYR2K_VAR3_BLOCKSIZE < m_AB && FLA_SYR2K_VAR9_BLOCKSIZE < k_AB )
00074   {
00075     r_val = FLA_Syr2k_internal( uplo, trans, alpha, A, B, beta, C, fla_syr2k_cntl_sq );
00076   }
00077   else if ( FLA_SYR2K_VAR3_BLOCKSIZE < m_AB && k_AB <= FLA_SYR2K_VAR9_BLOCKSIZE )
00078   {
00079     r_val = FLA_Syr2k_internal( uplo, trans, alpha, A, B, beta, C, fla_syr2k_cntl_op );
00080   }
00081   else if ( m_AB <= FLA_SYR2K_VAR3_BLOCKSIZE && FLA_SYR2K_VAR9_BLOCKSIZE < k_AB )
00082   {
00083     r_val = FLA_Syr2k_internal( uplo, trans, alpha, A, B, beta, C, fla_syr2k_cntl_ip );
00084   }
00085   else if ( m_AB <= FLA_SYR2K_VAR3_BLOCKSIZE && k_AB <= FLA_SYR2K_VAR9_BLOCKSIZE )
00086   {
00087     r_val = FLA_Syr2k_external( uplo, trans, alpha, A, B, beta, C );
00088   }
00089 #else
00090   r_val = FLA_Syr2k_external( uplo, trans, alpha, A, B, beta, C );
00091 #endif
00092 
00093   return r_val;
00094 }

FLA_Error FLA_Syr2k_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_real_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Syr2k(), FLA_Syr2k_external(), and FLASH_Syr2k().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_uplo( uplo );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_real_trans( trans );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_floating_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_identical_object_datatype( A, B );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_identical_object_datatype( A, C );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, beta );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_if_scalar( beta );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_square( C );
00070   FLA_Check_error_code( e_val );
00071 
00072   if ( trans == FLA_NO_TRANSPOSE )
00073   {
00074     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C );
00075     FLA_Check_error_code( e_val );
00076   }
00077   else
00078   {
00079     e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00080     FLA_Check_error_code( e_val );
00081   }
00082   
00083   return FLA_SUCCESS;
00084 }

FLA_Error FLA_Syr2k_external ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_csyr2k(), cblas_dsyr2k(), cblas_ssyr2k(), cblas_zsyr2k(), CblasColMajor, csyr2k(), dsyr2k(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Syr2k_check(), ssyr2k(), and zsyr2k().

Referenced by FLA_Syr2k(), fla_syr2k_external_f(), FLA_Syr2k_ln_task(), FLA_Syr2k_lt_task(), FLA_Syr2k_task(), FLA_Syr2k_un_task(), and FLA_Syr2k_ut_task().

00036 {
00037   FLA_Datatype datatype;
00038   int          k_AB;
00039   int          m_A, n_A, ldim_A;
00040   int          ldim_B; 
00041   int          m_C, ldim_C;
00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00043   CBLAS_ORDER     cblas_order = CblasColMajor;
00044   CBLAS_UPLO      blas_uplo;
00045   CBLAS_TRANSPOSE blas_trans;
00046 #else
00047   char         blas_uplo; 
00048   char         blas_trans;
00049 #endif
00050 
00051   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00052     FLA_Syr2k_check( uplo, trans, alpha, A, B, beta, C );
00053 
00054   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00055 
00056   datatype = FLA_Obj_datatype( A );
00057 
00058   m_A      = FLA_Obj_length( A );
00059   n_A      = FLA_Obj_width( A );
00060   ldim_A   = FLA_Obj_ldim( A );
00061 
00062   ldim_B   = FLA_Obj_ldim( B );
00063 
00064   m_C      = FLA_Obj_length( C );
00065   ldim_C   = FLA_Obj_ldim( C );
00066 
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_AB = n_A;
00069   else
00070     k_AB = m_A;
00071 
00072   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00073   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00074 
00075 
00076   switch( datatype ){
00077 
00078   case FLA_FLOAT:
00079   {
00080     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00081     float *buff_B     = ( float * ) FLA_FLOAT_PTR( B );
00082     float *buff_C     = ( float * ) FLA_FLOAT_PTR( C );
00083     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00084     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00085 
00086 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00087     cblas_ssyr2k( cblas_order,
00088                   blas_uplo, 
00089                   blas_trans,
00090                   m_C,
00091                   k_AB, 
00092                   *buff_alpha,
00093                   buff_A, ldim_A, 
00094                   buff_B, ldim_B, 
00095                   *buff_beta,  
00096                   buff_C, ldim_C );
00097 #else
00098     FLA_C2F( ssyr2k )( &blas_uplo, 
00099                        &blas_trans,
00100                        &m_C,
00101                        &k_AB, 
00102                        buff_alpha,
00103                        buff_A, &ldim_A, 
00104                        buff_B, &ldim_B, 
00105                        buff_beta,  
00106                        buff_C, &ldim_C );
00107 #endif
00108     break;
00109   }
00110 
00111   case FLA_DOUBLE:
00112   {
00113     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00114     double *buff_B     = ( double * ) FLA_DOUBLE_PTR( B );
00115     double *buff_C     = ( double * ) FLA_DOUBLE_PTR( C );
00116     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00117     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00118 
00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00120     cblas_dsyr2k( cblas_order,
00121                   blas_uplo, 
00122                   blas_trans,
00123                   m_C,
00124                   k_AB, 
00125                   *buff_alpha,
00126                   buff_A, ldim_A, 
00127                   buff_B, ldim_B, 
00128                   *buff_beta,  
00129                   buff_C, ldim_C );
00130 #else
00131     FLA_C2F( dsyr2k )( &blas_uplo, 
00132                        &blas_trans,
00133                        &m_C,
00134                        &k_AB, 
00135                        buff_alpha,
00136                        buff_A, &ldim_A, 
00137                        buff_B, &ldim_B, 
00138                        buff_beta,  
00139                        buff_C, &ldim_C );
00140 #endif
00141     break;
00142   }
00143 
00144   case FLA_COMPLEX:
00145   {
00146     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00147     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00148     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00149     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00150     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00151 
00152 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00153     cblas_csyr2k( cblas_order,
00154                   blas_uplo, 
00155                   blas_trans,
00156                   m_C,
00157                   k_AB, 
00158                   buff_alpha,
00159                   buff_A, ldim_A, 
00160                   buff_B, ldim_B, 
00161                   buff_beta,  
00162                   buff_C, ldim_C );
00163 #else
00164     FLA_C2F( csyr2k )( &blas_uplo, 
00165                        &blas_trans,
00166                        &m_C,
00167                        &k_AB, 
00168                        buff_alpha,
00169                        buff_A, &ldim_A, 
00170                        buff_B, &ldim_B, 
00171                        buff_beta,  
00172                        buff_C, &ldim_C );
00173 #endif
00174     break;
00175   }
00176   case FLA_DOUBLE_COMPLEX:
00177   {
00178     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00179     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00180     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00181     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00182     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00183 
00184 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00185     cblas_zsyr2k( cblas_order,
00186                   blas_uplo, 
00187                   blas_trans,
00188                   m_C,
00189                   k_AB, 
00190                   buff_alpha,
00191                   buff_A, ldim_A, 
00192                   buff_B, ldim_B, 
00193                   buff_beta,  
00194                   buff_C, ldim_C );
00195 #else
00196     FLA_C2F( zsyr2k )( &blas_uplo, 
00197                        &blas_trans,
00198                        &m_C,
00199                        &k_AB, 
00200                        buff_alpha,
00201                        buff_A, &ldim_A, 
00202                        buff_B, &ldim_B, 
00203                        buff_beta,  
00204                        buff_C, &ldim_C );
00205 #endif
00206     break;
00207   }
00208 
00209   }
00210   
00211   return FLA_SUCCESS;
00212 }

void FLA_F2C() fla_syr2k_external_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Syr2k_external().

00216 {
00217   *IERROR = FLA_Syr2k_external( *( ( FLA_Uplo  * ) uplo  ),
00218                                 *( ( FLA_Trans * ) trans ),
00219                                 *( ( FLA_Obj   * ) alpha ),
00220                                 *( ( FLA_Obj   * ) A     ),
00221                                 *( ( FLA_Obj   * ) B     ),
00222                                 *( ( FLA_Obj   * ) beta  ),
00223                                 *( ( FLA_Obj   * ) C     ) );
00224 }

void FLA_F2C() fla_syr2k_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Syr2k().

00098 {
00099   *IERROR = FLA_Syr2k( *( ( FLA_Uplo  * ) uplo  ),
00100                        *( ( FLA_Trans * ) trans ),
00101                        *( ( FLA_Obj   * ) alpha ),
00102                        *( ( FLA_Obj   * ) A     ),
00103                        *( ( FLA_Obj   * ) B     ),
00104                        *( ( FLA_Obj   * ) beta  ),
00105                        *( ( FLA_Obj   * ) C     ) );
00106 }

FLA_Error FLA_Syr2k_internal ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

Referenced by FLA_Syr2k(), FLA_Syr2k_internal(), FLA_Syr2k_ln_blk_var1(), FLA_Syr2k_ln_blk_var10(), FLA_Syr2k_ln_blk_var2(), FLA_Syr2k_ln_blk_var3(), FLA_Syr2k_ln_blk_var4(), FLA_Syr2k_ln_blk_var5(), FLA_Syr2k_ln_blk_var6(), FLA_Syr2k_ln_blk_var7(), FLA_Syr2k_ln_blk_var8(), FLA_Syr2k_ln_blk_var9(), FLA_Syr2k_lt_blk_var1(), FLA_Syr2k_lt_blk_var10(), FLA_Syr2k_lt_blk_var2(), FLA_Syr2k_lt_blk_var3(), FLA_Syr2k_lt_blk_var4(), FLA_Syr2k_lt_blk_var5(), FLA_Syr2k_lt_blk_var6(), FLA_Syr2k_lt_blk_var7(), FLA_Syr2k_lt_blk_var8(), FLA_Syr2k_lt_blk_var9(), FLA_Syr2k_un_blk_var1(), FLA_Syr2k_un_blk_var10(), FLA_Syr2k_un_blk_var2(), FLA_Syr2k_un_blk_var3(), FLA_Syr2k_un_blk_var4(), FLA_Syr2k_un_blk_var5(), FLA_Syr2k_un_blk_var6(), FLA_Syr2k_un_blk_var7(), FLA_Syr2k_un_blk_var8(), FLA_Syr2k_un_blk_var9(), FLA_Syr2k_ut_blk_var1(), FLA_Syr2k_ut_blk_var10(), FLA_Syr2k_ut_blk_var2(), FLA_Syr2k_ut_blk_var3(), FLA_Syr2k_ut_blk_var4(), FLA_Syr2k_ut_blk_var5(), FLA_Syr2k_ut_blk_var6(), FLA_Syr2k_ut_blk_var7(), FLA_Syr2k_ut_blk_var8(), FLA_Syr2k_ut_blk_var9(), and FLASH_Syr2k().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Syr2k_internal_check( uplo, trans, alpha, A, B, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Syr2k_internal( uplo,
00051                                     trans,
00052                                     alpha,
00053                                     *FLASH_OBJ_PTR_AT( A ),
00054                                     *FLASH_OBJ_PTR_AT( B ),
00055                                     beta,
00056                                     *FLASH_OBJ_PTR_AT( C ),
00057                                     flash_syr2k_cntl_sq );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Syr2k( uplo, trans, alpha, A, B, beta, C, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_syr2k_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( uplo == FLA_LOWER_TRIANGULAR )
00078         {
00079             if      ( trans == FLA_NO_TRANSPOSE )
00080                 r_val = FLA_Syr2k_ln( alpha, A, B, beta, C, cntl );
00081             else if ( trans == FLA_TRANSPOSE )
00082                 r_val = FLA_Syr2k_lt( alpha, A, B, beta, C, cntl );
00083         }
00084         else if ( uplo == FLA_UPPER_TRIANGULAR )
00085         {
00086             if      ( trans == FLA_NO_TRANSPOSE )
00087                 r_val = FLA_Syr2k_un( alpha, A, B, beta, C, cntl );
00088             else if ( trans == FLA_TRANSPOSE )
00089                 r_val = FLA_Syr2k_ut( alpha, A, B, beta, C, cntl );
00090         }
00091     }
00092 
00093     return r_val;
00094 }

FLA_Error FLA_Syr2k_internal_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Syr2k_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     e_val = FLA_Check_identical_object_elemtype( A, C );
00048     FLA_Check_error_code( e_val );
00049 
00050     // Verify conformality between all the objects. This check works regardless
00051     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00052     // element length and width are used instead of scalar length and width.
00053     if ( trans == FLA_NO_TRANSPOSE )
00054     {
00055         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C );
00056         FLA_Check_error_code( e_val );
00057     }
00058     else
00059     {
00060         e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00061         FLA_Check_error_code( e_val );
00062     }
00063 
00064     return FLA_SUCCESS;
00065 }

FLA_Error FLA_Syr2k_ln_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

References FLA_Syr2k_external().

Referenced by FLA_Syr2k_ln().

00041 {
00042   return FLA_Syr2k_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00043 }

FLA_Error FLA_Syr2k_lt_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

References FLA_Syr2k_external().

Referenced by FLA_Syr2k_lt().

00046 {
00047   return FLA_Syr2k_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, B, beta, C );
00048 }

FLA_Error FLA_Syr2k_task ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

References FLA_Syr2k_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Syr2k_external( uplo, trans, alpha, A, B, beta, C );
00038 }

FLA_Error FLA_Syr2k_un_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

References FLA_Syr2k_external().

Referenced by FLA_Syr2k_un().

00051 {
00052   return FLA_Syr2k_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C );
00053 }

FLA_Error FLA_Syr2k_ut_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C,
fla_syr2k_t cntl 
)

References FLA_Syr2k_external().

Referenced by FLA_Syr2k_ut().

00056 {
00057   return FLA_Syr2k_external( FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, B, beta, C );
00058 }

FLA_Error FLA_Syrk ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Syrk_check(), FLA_Syrk_external(), and FLA_Syrk_internal().

Referenced by fla_syrk_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_C, k_A;
00047   int          FLA_SYRK_VAR2_BLOCKSIZE;
00048   int          FLA_SYRK_VAR5_BLOCKSIZE;
00049 #endif
00050 
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Syrk_check( uplo, trans, alpha, A, beta, C );
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_SYRK_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syrk_var2_bsize );
00061   FLA_SYRK_VAR5_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syrk_var5_bsize );
00062 
00063   // Determine the dimension of C.
00064   m_C = FLA_Obj_length( C );
00065 
00066   // Determine the k dimension of A after transposition.
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_A = FLA_Obj_width( A );
00069   else
00070     k_A = FLA_Obj_length( A );
00071 
00072   // Invoke FLA_Syrk_internal() with the appropriate control tree.
00073   if      ( FLA_SYRK_VAR2_BLOCKSIZE < m_C && FLA_SYRK_VAR5_BLOCKSIZE < k_A )
00074   {
00075     r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_sq );
00076   }
00077   else if ( FLA_SYRK_VAR2_BLOCKSIZE < m_C && k_A <= FLA_SYRK_VAR5_BLOCKSIZE )
00078   {
00079     r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_op );
00080   }
00081   else if ( m_C <= FLA_SYRK_VAR2_BLOCKSIZE && FLA_SYRK_VAR5_BLOCKSIZE < k_A )
00082   {
00083     r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_ip );
00084   }
00085   else if ( m_C <= FLA_SYRK_VAR2_BLOCKSIZE && k_A <= FLA_SYRK_VAR5_BLOCKSIZE )
00086   {
00087     r_val = FLA_Syrk_external( uplo, trans, alpha, A, beta, C );
00088   }
00089 #else
00090   //r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_op );
00091   r_val = FLA_Syrk_external( uplo, trans, alpha, A, beta, C );
00092 #endif
00093   
00094   return r_val;
00095 }

FLA_Error FLA_Syrk_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_real_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Syrk(), FLA_Syrk_external(), and FLASH_Syrk().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_uplo( uplo );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_real_trans( trans );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_floating_object( A );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_nonconstant_object( A );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_identical_object_datatype( A, C );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_consistent_object_datatype( A, beta );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_if_scalar( alpha );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( beta );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_square( C );
00067   FLA_Check_error_code( e_val );
00068 
00069   if ( trans == FLA_NO_TRANSPOSE )
00070   {
00071     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C );
00072     FLA_Check_error_code( e_val );
00073   }
00074   else
00075   {
00076     e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C );
00077     FLA_Check_error_code( e_val );
00078   }
00079   
00080   return FLA_SUCCESS;
00081 }

FLA_Error FLA_Syrk_external ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_csyrk(), cblas_dsyrk(), cblas_ssyrk(), cblas_zsyrk(), CblasColMajor, csyrk(), dsyrk(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Syrk_check(), ssyrk(), and zsyrk().

Referenced by FLA_Random_spd_matrix(), FLA_Syrk(), fla_syrk_external_f(), FLA_Syrk_ln_task(), FLA_Syrk_lt_task(), FLA_Syrk_task(), FLA_Syrk_un_task(), and FLA_Syrk_ut_task().

00036 {
00037   FLA_Datatype datatype;
00038   int          k_A;
00039   int          m_A, n_A, ldim_A;
00040   int          m_C, ldim_C;
00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00042   CBLAS_ORDER     cblas_order = CblasColMajor;
00043   CBLAS_UPLO      blas_uplo;
00044   CBLAS_TRANSPOSE blas_trans;
00045 #else
00046   char         blas_uplo; 
00047   char         blas_trans;
00048 #endif
00049 
00050   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00051     FLA_Syrk_check( uplo, trans, alpha, A, beta, C );
00052 
00053   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00054 
00055   datatype = FLA_Obj_datatype( A );
00056 
00057   m_A      = FLA_Obj_length( A );
00058   n_A      = FLA_Obj_width( A );
00059   ldim_A   = FLA_Obj_ldim( A );
00060 
00061   m_C      = FLA_Obj_length( C );
00062   ldim_C   = FLA_Obj_ldim( C );
00063 
00064   if ( trans == FLA_NO_TRANSPOSE )
00065     k_A = n_A;
00066   else
00067     k_A = m_A;
00068 
00069   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00070   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00071 
00072 
00073   switch( datatype ){
00074 
00075   case FLA_FLOAT:
00076   {
00077     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00078     float *buff_C     = ( float * ) FLA_FLOAT_PTR( C );
00079     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00080     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00081 
00082 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00083     cblas_ssyrk( cblas_order,
00084                  blas_uplo, 
00085                  blas_trans,
00086                  m_C,
00087                  k_A, 
00088                  *buff_alpha,
00089                  buff_A, ldim_A, 
00090                  *buff_beta,  
00091                  buff_C, ldim_C );
00092 #else
00093     FLA_C2F( ssyrk )( &blas_uplo, 
00094                       &blas_trans,
00095                       &m_C,
00096                       &k_A, 
00097                       buff_alpha,
00098                       buff_A, &ldim_A, 
00099                       buff_beta,  
00100                       buff_C, &ldim_C );
00101 #endif
00102     break;
00103   }
00104 
00105   case FLA_DOUBLE:
00106   {
00107     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00108     double *buff_C     = ( double * ) FLA_DOUBLE_PTR( C );
00109     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00110     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00111 
00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00113     cblas_dsyrk( cblas_order,
00114                  blas_uplo, 
00115                  blas_trans,
00116                  m_C,
00117                  k_A, 
00118                  *buff_alpha,
00119                  buff_A, ldim_A, 
00120                  *buff_beta,  
00121                  buff_C, ldim_C );
00122 #else
00123     FLA_C2F( dsyrk )( &blas_uplo, 
00124                       &blas_trans,
00125                       &m_C,
00126                       &k_A, 
00127                       buff_alpha,
00128                       buff_A, &ldim_A, 
00129                       buff_beta,  
00130                       buff_C, &ldim_C );
00131 #endif
00132     break;
00133   }
00134 
00135   case FLA_COMPLEX:
00136   {
00137     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00138     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00139     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00140     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00141 
00142 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00143     cblas_csyrk( cblas_order,
00144                  blas_uplo, 
00145                  blas_trans,
00146                  m_C,
00147                  k_A, 
00148                  buff_alpha,
00149                  buff_A, ldim_A, 
00150                  buff_beta,  
00151                  buff_C, ldim_C );
00152 #else
00153     FLA_C2F( csyrk )( &blas_uplo, 
00154                       &blas_trans,
00155                       &m_C,
00156                       &k_A, 
00157                       buff_alpha,
00158                       buff_A, &ldim_A, 
00159                       buff_beta,  
00160                       buff_C, &ldim_C );
00161 #endif
00162     break;
00163   }
00164 
00165   case FLA_DOUBLE_COMPLEX:
00166   {
00167     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00168     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00169     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00170     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00171 
00172 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00173     cblas_zsyrk( cblas_order,
00174                  blas_uplo, 
00175                  blas_trans,
00176                  m_C,
00177                  k_A, 
00178                  buff_alpha,
00179                  buff_A, ldim_A, 
00180                  buff_beta,  
00181                  buff_C, ldim_C );
00182 #else
00183     FLA_C2F( zsyrk )( &blas_uplo, 
00184                       &blas_trans,
00185                       &m_C,
00186                       &k_A, 
00187                       buff_alpha,
00188                       buff_A, &ldim_A, 
00189                       buff_beta,  
00190                       buff_C, &ldim_C );
00191 #endif
00192     break;
00193   }
00194 
00195   }
00196   
00197   return FLA_SUCCESS;
00198 }

void FLA_F2C() fla_syrk_external_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Syrk_external().

00202 {
00203   *IERROR = FLA_Syrk_external( *( ( FLA_Uplo  * ) uplo  ),
00204                                *( ( FLA_Trans * ) trans ), 
00205                                *( ( FLA_Obj   * ) alpha ),
00206                                *( ( FLA_Obj   * ) A     ),
00207                                *( ( FLA_Obj   * ) beta  ),
00208                                *( ( FLA_Obj   * ) C     ) );
00209 }

void FLA_F2C() fla_syrk_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Syrk().

00099 {
00100   *IERROR = FLA_Syrk( *( ( FLA_Uplo  * ) uplo  ),
00101                       *( ( FLA_Trans * ) trans ),
00102                       *( ( FLA_Obj   * ) alpha ),
00103                       *( ( FLA_Obj   * ) A     ),
00104                       *( ( FLA_Obj   * ) beta  ),
00105                       *( ( FLA_Obj   * ) C     ) );
00106 }

FLA_Error FLA_Syrk_internal ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

Referenced by FLA_Chol_l_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_l_blk_var3(), FLA_Chol_u_blk_var1(), FLA_Chol_u_blk_var2(), FLA_Chol_u_blk_var3(), FLA_Syrk(), FLA_Syrk_internal(), FLA_Syrk_ln_blk_var1(), FLA_Syrk_ln_blk_var2(), FLA_Syrk_ln_blk_var3(), FLA_Syrk_ln_blk_var4(), FLA_Syrk_ln_blk_var5(), FLA_Syrk_ln_blk_var6(), FLA_Syrk_lt_blk_var1(), FLA_Syrk_lt_blk_var2(), FLA_Syrk_lt_blk_var3(), FLA_Syrk_lt_blk_var4(), FLA_Syrk_lt_blk_var5(), FLA_Syrk_lt_blk_var6(), FLA_Syrk_un_blk_var1(), FLA_Syrk_un_blk_var2(), FLA_Syrk_un_blk_var3(), FLA_Syrk_un_blk_var4(), FLA_Syrk_un_blk_var5(), FLA_Syrk_un_blk_var6(), FLA_Syrk_ut_blk_var1(), FLA_Syrk_ut_blk_var2(), FLA_Syrk_ut_blk_var3(), FLA_Syrk_ut_blk_var4(), FLA_Syrk_ut_blk_var5(), FLA_Syrk_ut_blk_var6(), FLA_Ttmm_l_blk_var1(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_l_blk_var3(), FLA_Ttmm_u_blk_var1(), FLA_Ttmm_u_blk_var2(), FLA_Ttmm_u_blk_var3(), and FLASH_Syrk().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Syrk_internal_check( uplo, trans, alpha, A, beta, C, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Syrk_internal( uplo,
00051                                    trans,
00052                                    alpha,
00053                                    *FLASH_OBJ_PTR_AT( A ),
00054                                    beta,
00055                                    *FLASH_OBJ_PTR_AT( C ),
00056                                    flash_syrk_cntl_sq );
00057     }
00058     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00059               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00060               FLASH_Queue_get_enabled( ) )
00061     {
00062         // Enqueue
00063         ENQUEUE_FLASH_Syrk( uplo, trans, alpha, A, beta, C, cntl );
00064     }
00065     else
00066     {
00067         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00068              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00069              !FLASH_Queue_get_enabled( ) )
00070         {
00071             // Execute leaf
00072             cntl = flash_syrk_cntl_blas;
00073         }
00074 
00075         // Parameter combinations
00076         if      ( uplo == FLA_LOWER_TRIANGULAR )
00077         {
00078             if      ( trans == FLA_NO_TRANSPOSE )
00079                 r_val = FLA_Syrk_ln( alpha, A, beta, C, cntl );
00080             else if ( trans == FLA_TRANSPOSE )
00081                 r_val = FLA_Syrk_lt( alpha, A, beta, C, cntl );
00082         }
00083         else if ( uplo == FLA_UPPER_TRIANGULAR )
00084         {
00085             if      ( trans == FLA_NO_TRANSPOSE )
00086                 r_val = FLA_Syrk_un( alpha, A, beta, C, cntl );
00087             else if ( trans == FLA_TRANSPOSE )
00088                 r_val = FLA_Syrk_ut( alpha, A, beta, C, cntl );
00089         }
00090     }
00091 
00092     return r_val;
00093 }

FLA_Error FLA_Syrk_internal_check ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Syrk_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, C );
00045     FLA_Check_error_code( e_val );
00046 
00047     // Verify conformality between all the objects. This check works regardless
00048     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00049     // element length and width are used instead of scalar length and width.
00050     if ( trans == FLA_NO_TRANSPOSE )
00051     {
00052         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C );
00053         FLA_Check_error_code( e_val );
00054     }
00055     else
00056     {
00057         e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C );
00058         FLA_Check_error_code( e_val );
00059     }
00060 
00061     return FLA_SUCCESS;
00062 }

FLA_Error FLA_Syrk_ln_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

References FLA_Syrk_external().

Referenced by FLA_Syrk_ln().

00041 {
00042   return FLA_Syrk_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C );
00043 }

FLA_Error FLA_Syrk_lt_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

References FLA_Syrk_external().

Referenced by FLA_Syrk_lt().

00046 {
00047   return FLA_Syrk_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, beta, C );
00048 }

FLA_Error FLA_Syrk_task ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

References FLA_Syrk_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Syrk_external( uplo, trans, alpha, A, beta, C );
00038 }

FLA_Error FLA_Syrk_un_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

References FLA_Syrk_external().

Referenced by FLA_Syrk_un().

00051 {
00052   return FLA_Syrk_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C );
00053 }

FLA_Error FLA_Syrk_ut_task ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  beta,
FLA_Obj  C,
fla_syrk_t cntl 
)

References FLA_Syrk_external().

Referenced by FLA_Syrk_ut().

00056 {
00057   return FLA_Syrk_external( FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, beta, C );
00058 }

FLA_Error FLA_Trmm ( 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_Trmm_check(), FLA_Trmm_external(), and FLA_Trmm_internal().

Referenced by fla_trmm_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_TRMM_VAR2_BLOCKSIZE;
00048   int          FLA_TRMM_VAR3_BLOCKSIZE;
00049 #endif
00050 
00051   // Check parameters.
00052   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00053     FLA_Trmm_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_TRMM_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trmm_var2_bsize );
00061   FLA_TRMM_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trmm_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_Trmm_internal() with the appropriate control tree.
00073   if      ( FLA_TRMM_VAR2_BLOCKSIZE < m_A && FLA_TRMM_VAR3_BLOCKSIZE < nrhs_B )
00074   {
00075     r_val = FLA_Trmm_internal( side, uplo, trans, diag, alpha, A, B, fla_trmm_cntl_mm );
00076   }
00077   else if ( FLA_TRMM_VAR2_BLOCKSIZE < m_A && nrhs_B <= FLA_TRMM_VAR3_BLOCKSIZE )
00078   {
00079     r_val = FLA_Trmm_internal( side, uplo, trans, diag, alpha, A, B, fla_trmm_cntl_mp );
00080   }
00081   else if ( m_A <= FLA_TRMM_VAR2_BLOCKSIZE && FLA_TRMM_VAR3_BLOCKSIZE < nrhs_B )
00082   {
00083     r_val = FLA_Trmm_internal( side, uplo, trans, diag, alpha, A, B, fla_trmm_cntl_bp );
00084   }
00085   else if ( m_A <= FLA_TRMM_VAR2_BLOCKSIZE && nrhs_B <= FLA_TRMM_VAR3_BLOCKSIZE )
00086   {
00087     r_val = FLA_Trmm_external( side, uplo, trans, diag, alpha, A, B );
00088   }
00089 #else
00090   r_val = FLA_Trmm_external( side, uplo, trans, diag, alpha, A, B );
00091 #endif 
00092 
00093   return r_val;
00094 }

FLA_Error FLA_Trmm_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Trmm(), FLA_Trmm_external(), and FLASH_Trmm().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_side( side );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_uplo( uplo );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_valid_trans( trans );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_valid_diag( diag );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_floating_object( A );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_nonconstant_object( A );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_identical_object_datatype( A, B );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_square( A );
00067   FLA_Check_error_code( e_val );
00068 
00069   if ( side == FLA_LEFT )
00070   {
00071     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B );
00072     FLA_Check_error_code( e_val );
00073   }
00074   else
00075   {
00076     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B );
00077     FLA_Check_error_code( e_val );
00078   }
00079   
00080   return FLA_SUCCESS;
00081 }

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

References cblas_ctrmm(), cblas_dtrmm(), cblas_strmm(), cblas_ztrmm(), CblasColMajor, ctrmm(), dtrmm(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_diag(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Trmm_check(), strmm(), and ztrmm().

Referenced by FLA_LQ_UT_Accum_T_blk_var1(), FLA_LQ_UT_blk_var2(), FLA_QR_UT_Accum_T_blk_var1(), FLA_QR_UT_blk_var2(), FLA_Trmm(), fla_trmm_external_f(), FLA_Trmm_llh_task(), FLA_Trmm_lln_task(), FLA_Trmm_llt_task(), FLA_Trmm_luh_task(), FLA_Trmm_lun_task(), FLA_Trmm_lut_task(), FLA_Trmm_rlh_task(), FLA_Trmm_rln_task(), FLA_Trmm_rlt_task(), FLA_Trmm_ruh_task(), FLA_Trmm_run_task(), FLA_Trmm_rut_task(), FLA_Trmm_task(), and FLA_Trmmsx_external().

00036 {
00037   FLA_Datatype datatype;
00038   int          ldim_A;
00039   int          m_B, n_B, ldim_B;
00040 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00041   CBLAS_ORDER     cblas_order = CblasColMajor;
00042   CBLAS_SIDE      blas_side;
00043   CBLAS_UPLO      blas_uplo;
00044   CBLAS_TRANSPOSE blas_trans;
00045   CBLAS_DIAG      blas_diag;
00046 #else
00047   char         blas_side; 
00048   char         blas_uplo;
00049   char         blas_trans;
00050   char         blas_diag;
00051 #endif
00052   FLA_Obj      A_copy;
00053 
00054   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00055     FLA_Trmm_check( side, uplo, trans, diag, alpha, A, B );
00056 
00057   if ( FLA_Obj_has_zero_dim( B ) ) return FLA_SUCCESS;
00058 
00059   datatype = FLA_Obj_datatype( A );
00060 
00061   ldim_A   = FLA_Obj_ldim( A );
00062 
00063   m_B      = FLA_Obj_length( B );
00064   n_B      = FLA_Obj_width( B );
00065   ldim_B   = FLA_Obj_ldim( B );
00066 
00067   if ( trans == FLA_CONJ_NO_TRANSPOSE )
00068   {
00069     FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy );
00070     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy );
00071 
00072     ldim_A = FLA_Obj_ldim( A_copy );
00073   }
00074   else
00075   {
00076     A_copy = A;
00077   }
00078 
00079   FLA_Param_map_to_blas_side( side, &blas_side );
00080   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00081   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00082   FLA_Param_map_to_blas_diag( diag, &blas_diag );
00083 
00084 
00085   switch( datatype ){
00086 
00087   case FLA_FLOAT:
00088   {
00089     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00090     float *buff_B     = ( float * ) FLA_FLOAT_PTR( B );
00091     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00092 
00093 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00094     cblas_strmm( cblas_order,
00095                  blas_side,
00096                  blas_uplo, 
00097                  blas_trans,
00098                  blas_diag,
00099                  m_B,
00100                  n_B,
00101                  *buff_alpha,
00102                  buff_A, ldim_A, 
00103                  buff_B, ldim_B );
00104 #else
00105     FLA_C2F( strmm )( &blas_side,
00106                       &blas_uplo, 
00107                       &blas_trans,
00108                       &blas_diag,
00109                       &m_B,
00110                       &n_B,
00111                       buff_alpha,
00112                       buff_A, &ldim_A, 
00113                       buff_B, &ldim_B );
00114 #endif
00115     break;
00116   }
00117 
00118   case FLA_DOUBLE:
00119   {
00120     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00121     double *buff_B     = ( double * ) FLA_DOUBLE_PTR( B );
00122     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00123 
00124 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00125     cblas_dtrmm( cblas_order,
00126                  blas_side,
00127                  blas_uplo, 
00128                  blas_trans,
00129                  blas_diag,
00130                  m_B,
00131                  n_B,
00132                  *buff_alpha,
00133                  buff_A, ldim_A, 
00134                  buff_B, ldim_B );
00135 #else
00136     FLA_C2F( dtrmm )( &blas_side,
00137                       &blas_uplo, 
00138                       &blas_trans,
00139                       &blas_diag,
00140                       &m_B,
00141                       &n_B,
00142                       buff_alpha,
00143                       buff_A, &ldim_A, 
00144                       buff_B, &ldim_B );
00145 #endif
00146     break;
00147   }
00148 
00149   case FLA_COMPLEX:
00150   {
00151     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A_copy );
00152     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00153     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00154 
00155 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00156     cblas_ctrmm( cblas_order,
00157                  blas_side,
00158                  blas_uplo, 
00159                  blas_trans,
00160                  blas_diag,
00161                  m_B,
00162                  n_B,
00163                  buff_alpha,
00164                  buff_A, ldim_A, 
00165                  buff_B, ldim_B );
00166 #else
00167     FLA_C2F( ctrmm )( &blas_side,
00168                       &blas_uplo, 
00169                       &blas_trans,
00170                       &blas_diag,
00171                       &m_B,
00172                       &n_B,
00173                       buff_alpha,
00174                       buff_A, &ldim_A, 
00175                       buff_B, &ldim_B );
00176 #endif
00177     break;
00178   }
00179 
00180 
00181   case FLA_DOUBLE_COMPLEX:
00182   {
00183     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy );
00184     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00185     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00186 
00187 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00188     cblas_ztrmm( cblas_order,
00189                  blas_side,
00190                  blas_uplo, 
00191                  blas_trans,
00192                  blas_diag,
00193                  m_B,
00194                  n_B,
00195                  buff_alpha,
00196                  buff_A, ldim_A, 
00197                  buff_B, ldim_B );
00198 #else
00199     FLA_C2F( ztrmm )( &blas_side,
00200                       &blas_uplo, 
00201                       &blas_trans,
00202                       &blas_diag,
00203                       &m_B,
00204                       &n_B,
00205                       buff_alpha,
00206                       buff_A, &ldim_A, 
00207                       buff_B, &ldim_B );
00208 #endif
00209     break;
00210   }
00211 
00212   }
00213 
00214   if ( trans == FLA_CONJ_NO_TRANSPOSE )
00215     FLA_Obj_free( &A_copy );
00216   
00217   return FLA_SUCCESS;
00218 }

void FLA_F2C() fla_trmm_external_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_Trmm_external().

00222 {
00223   *IERROR = FLA_Trmm_external( *( ( FLA_Side  * ) side  ),
00224                                *( ( FLA_Uplo  * ) uplo  ),
00225                                *( ( FLA_Trans * ) trans ),
00226                                *( ( FLA_Diag  * ) diag  ),
00227                                *( ( FLA_Obj   * ) alpha ), 
00228                                *( ( FLA_Obj   * ) A     ),
00229                                *( ( FLA_Obj   * ) B     ) );
00230 }

void FLA_F2C() fla_trmm_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_Trmm().

00098 {
00099   *IERROR = FLA_Trmm( *( ( 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 }

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

Referenced by FLA_Apply_Q_UT_lhc_blk_var1(), FLA_Trinv_l_blk_var1(), FLA_Trinv_l_blk_var4(), FLA_Trinv_u_blk_var1(), FLA_Trinv_u_blk_var4(), FLA_Trmm(), FLA_Trmm_internal(), FLA_Trmm_llh_blk_var1(), FLA_Trmm_llh_blk_var2(), FLA_Trmm_llh_blk_var3(), FLA_Trmm_llh_blk_var4(), FLA_Trmm_lln_blk_var1(), FLA_Trmm_lln_blk_var2(), FLA_Trmm_lln_blk_var3(), FLA_Trmm_lln_blk_var4(), FLA_Trmm_llt_blk_var1(), FLA_Trmm_llt_blk_var2(), FLA_Trmm_llt_blk_var3(), FLA_Trmm_llt_blk_var4(), FLA_Trmm_luh_blk_var1(), FLA_Trmm_luh_blk_var2(), FLA_Trmm_luh_blk_var3(), FLA_Trmm_luh_blk_var4(), FLA_Trmm_lun_blk_var1(), FLA_Trmm_lun_blk_var2(), FLA_Trmm_lun_blk_var3(), FLA_Trmm_lun_blk_var4(), FLA_Trmm_lut_blk_var1(), FLA_Trmm_lut_blk_var2(), FLA_Trmm_lut_blk_var3(), FLA_Trmm_lut_blk_var4(), FLA_Trmm_rlh_blk_var1(), FLA_Trmm_rlh_blk_var2(), FLA_Trmm_rlh_blk_var3(), FLA_Trmm_rlh_blk_var4(), FLA_Trmm_rln_blk_var1(), FLA_Trmm_rln_blk_var2(), FLA_Trmm_rln_blk_var3(), FLA_Trmm_rln_blk_var4(), FLA_Trmm_rlt_blk_var1(), FLA_Trmm_rlt_blk_var2(), FLA_Trmm_rlt_blk_var3(), FLA_Trmm_rlt_blk_var4(), FLA_Trmm_ruh_blk_var1(), FLA_Trmm_ruh_blk_var2(), FLA_Trmm_ruh_blk_var3(), FLA_Trmm_ruh_blk_var4(), FLA_Trmm_run_blk_var1(), FLA_Trmm_run_blk_var2(), FLA_Trmm_run_blk_var3(), FLA_Trmm_run_blk_var4(), FLA_Trmm_rut_blk_var1(), FLA_Trmm_rut_blk_var2(), FLA_Trmm_rut_blk_var3(), FLA_Trmm_rut_blk_var4(), FLA_Ttmm_l_blk_var1(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_l_blk_var3(), FLA_Ttmm_u_blk_var1(), FLA_Ttmm_u_blk_var2(), FLA_Ttmm_u_blk_var3(), and FLASH_Trmm().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Trmm_internal_check( side, uplo, transa, diag, alpha, A, B, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Trmm_internal( side,
00051                                    uplo,
00052                                    transa,
00053                                    diag,
00054                                    alpha,
00055                                    *FLASH_OBJ_PTR_AT( A ),
00056                                    *FLASH_OBJ_PTR_AT( B ),
00057                                    flash_trmm_cntl_mm );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Trmm( side, uplo, transa, diag, alpha, A, B, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_trmm_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( side == FLA_LEFT )
00078         {
00079             if      ( uplo == FLA_LOWER_TRIANGULAR )
00080             {
00081                 if      ( transa == FLA_NO_TRANSPOSE )
00082                     r_val = FLA_Trmm_lln( diag, alpha, A, B, cntl );
00083                 else if ( transa == FLA_TRANSPOSE )
00084                     r_val = FLA_Trmm_llt( diag, alpha, A, B, cntl );
00085                 else if ( transa == FLA_CONJ_TRANSPOSE )
00086                     r_val = FLA_Trmm_llh( diag, alpha, A, B, cntl );
00087             }
00088             else if ( uplo == FLA_UPPER_TRIANGULAR )
00089             {
00090                 if      ( transa == FLA_NO_TRANSPOSE )
00091                     r_val = FLA_Trmm_lun( diag, alpha, A, B, cntl );
00092                 else if ( transa == FLA_TRANSPOSE )
00093                     r_val = FLA_Trmm_lut( diag, alpha, A, B, cntl );
00094                 else if ( transa == FLA_CONJ_TRANSPOSE )
00095                     r_val = FLA_Trmm_luh( diag, alpha, A, B, cntl );
00096             }
00097         }
00098         else if ( side == FLA_RIGHT )
00099         {
00100             if      ( uplo == FLA_LOWER_TRIANGULAR )
00101             {
00102                 if      ( transa == FLA_NO_TRANSPOSE )
00103                     r_val = FLA_Trmm_rln( diag, alpha, A, B, cntl );
00104                 else if ( transa == FLA_TRANSPOSE )
00105                     r_val = FLA_Trmm_rlt( diag, alpha, A, B, cntl );
00106                 else if ( transa == FLA_CONJ_TRANSPOSE )
00107                     r_val = FLA_Trmm_rlh( diag, alpha, A, B, cntl );
00108             }
00109             else if ( uplo == FLA_UPPER_TRIANGULAR )
00110             {
00111                 if      ( transa == FLA_NO_TRANSPOSE )
00112                     r_val = FLA_Trmm_run( diag, alpha, A, B, cntl );
00113                 else if ( transa == FLA_TRANSPOSE )
00114                     r_val = FLA_Trmm_rut( diag, alpha, A, B, cntl );
00115                 else if ( transa == FLA_CONJ_TRANSPOSE )
00116                     r_val = FLA_Trmm_ruh( diag, alpha, A, B, cntl );
00117             }
00118         }
00119     }
00120 
00121     return r_val;
00122 }

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

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Trmm_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     // Verify conformality between all the objects. This check works regardless
00048     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00049     // element length and width are used instead of scalar length and width.
00050     if ( side == FLA_LEFT )
00051     {
00052         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B );
00053         FLA_Check_error_code( e_val );
00054     }
00055     else
00056     {
00057         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B );
00058         FLA_Check_error_code( e_val );
00059     }
00060 
00061     return FLA_SUCCESS;
00062 }

FLA_Error FLA_Trmm_llh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_llh().

00041 {
00042   return FLA_Trmm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00043 }

FLA_Error FLA_Trmm_lln_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_lln().

00046 {
00047   return FLA_Trmm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00048 }

FLA_Error FLA_Trmm_llt_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_llt().

00051 {
00052   return FLA_Trmm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00053 }

FLA_Error FLA_Trmm_luh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_luh().

00056 {
00057   return FLA_Trmm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00058 }

FLA_Error FLA_Trmm_lun_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_lun().

00061 {
00062   return FLA_Trmm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00063 }

FLA_Error FLA_Trmm_lut_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_lut().

00066 {
00067   return FLA_Trmm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00068 }

FLA_Error FLA_Trmm_rlh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_rlh().

00071 {
00072   return FLA_Trmm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00073 }

FLA_Error FLA_Trmm_rln_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_rln().

00076 {
00077   return FLA_Trmm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00078 }

FLA_Error FLA_Trmm_rlt_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_rlt().

00081 {
00082   return FLA_Trmm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00083 }

FLA_Error FLA_Trmm_ruh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_ruh().

00086 {
00087   return FLA_Trmm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00088 }

FLA_Error FLA_Trmm_run_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_run().

00091 {
00092   return FLA_Trmm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00093 }

FLA_Error FLA_Trmm_rut_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trmm_t cntl 
)

References FLA_Trmm_external().

Referenced by FLA_Trmm_rut().

00096 {
00097   return FLA_Trmm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00098 }

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

References FLA_Trmm_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Trmm_external( side, uplo, trans, diag, alpha, A, B );
00038 }

FLA_Error FLA_Trmmsx ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

FLA_Error FLA_Trmmsx_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Trmmsx_external().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_side( side );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_uplo( uplo );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_valid_trans( trans );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_valid_diag( diag );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_floating_object( A );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_nonconstant_object( A );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_identical_object_datatype( A, B );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_identical_object_datatype( A, C );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_consistent_object_datatype( A, beta );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_if_scalar( alpha );
00070   FLA_Check_error_code( e_val );
00071 
00072   e_val = FLA_Check_if_scalar( beta );
00073   FLA_Check_error_code( e_val );
00074 
00075   e_val = FLA_Check_square( A );
00076   FLA_Check_error_code( e_val );
00077 
00078   if ( side == FLA_LEFT )
00079   {
00080     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00081     FLA_Check_error_code( e_val );
00082   }
00083   else
00084   {
00085     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C );
00086     FLA_Check_error_code( e_val );
00087   }
00088 
00089   return FLA_SUCCESS;
00090 }

FLA_Error FLA_Trmmsx_external ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Axpy_external(), FLA_Check_error_level(), FLA_Copy_external(), FLA_Obj_create_conf_to(), FLA_Obj_free(), FLA_ONE, FLA_Scal_external(), FLA_Trmm_external(), and FLA_Trmmsx_check().

Referenced by fla_trmmsx_external_f().

00036 {
00037   FLA_Obj B_copy;
00038 
00039   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00040     FLA_Trmmsx_check( side, uplo, transa, diag, alpha, A, B, beta, C );
00041 
00042   FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, B, &B_copy );
00043 
00044   FLA_Copy_external( B, B_copy );
00045 
00046   FLA_Trmm_external( side, uplo, transa, diag, FLA_ONE, A, B_copy );
00047 
00048   FLA_Scal_external( beta, C );
00049 
00050   FLA_Axpy_external( alpha, B_copy, C );
00051 
00052   FLA_Obj_free( &B_copy );
00053   
00054   return FLA_SUCCESS;
00055 }

void FLA_F2C() fla_trmmsx_external_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  transa,
F_INT *  diag,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Trmmsx_external().

00059 {
00060   *IERROR = FLA_Trmmsx_external( *( ( FLA_Side  * ) side   ),
00061                                  *( ( FLA_Uplo  * ) uplo   ), 
00062                                  *( ( FLA_Trans * ) transa ),
00063                                  *( ( FLA_Diag  * ) diag   ),
00064                                  *( ( FLA_Obj   * ) alpha  ),
00065                                  *( ( FLA_Obj   * ) A      ),
00066                                  *( ( FLA_Obj   * ) B      ),
00067                                  *( ( FLA_Obj   * ) beta   ),
00068                                  *( ( FLA_Obj   * ) C      ) );
00069 }

void FLA_F2C() fla_trmmsx_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  trans,
F_INT *  diag,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

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 }

FLA_Error FLA_Trsm_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Trsm(), FLA_Trsm_external(), and FLASH_Trsm().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_side( side );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_uplo( uplo );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_valid_trans( trans );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_valid_diag( diag );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_floating_object( A );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_nonconstant_object( A );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_identical_object_datatype( A, B );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_if_scalar( alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_square( A );
00067   FLA_Check_error_code( e_val );
00068 
00069   if ( side == FLA_LEFT )
00070   {
00071     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B );
00072     FLA_Check_error_code( e_val );
00073   }
00074   else
00075   {
00076     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B );
00077     FLA_Check_error_code( e_val );
00078   }
00079 
00080   return FLA_SUCCESS;
00081 }

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

References cblas_ctrsm(), cblas_dtrsm(), cblas_strsm(), cblas_ztrsm(), CblasColMajor, ctrsm(), dtrsm(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_diag(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Trsm_check(), strsm(), and ztrsm().

Referenced by FLA_LQ_UT_Accum_T_blk_var1(), FLA_LQ_UT_blk_var2(), FLA_LU_nopiv_blk_var1(), FLA_LU_nopiv_blk_var2(), FLA_LU_nopiv_blk_var3(), FLA_LU_nopiv_unb_var1(), FLA_LU_nopiv_unb_var2(), FLA_LU_nopiv_unb_var3(), FLA_LU_piv_blk_var3(), FLA_LU_piv_unb_var3(), FLA_LU_piv_unb_var3b(), FLA_QR_UT_Accum_T_blk_var1(), FLA_QR_UT_blk_var2(), FLA_SA_FS_blk(), FLA_SA_LU_blk(), FLA_Trsm(), fla_trsm_external_f(), FLA_Trsm_llh_task(), FLA_Trsm_lln_task(), FLA_Trsm_llt_task(), FLA_Trsm_luh_task(), FLA_Trsm_lun_task(), FLA_Trsm_lut_task(), FLA_Trsm_piv_task(), FLA_Trsm_rlh_task(), FLA_Trsm_rln_task(), FLA_Trsm_rlt_task(), FLA_Trsm_ruh_task(), FLA_Trsm_run_task(), FLA_Trsm_rut_task(), FLA_Trsm_task(), and FLA_Trsmsx_external().

00036 {
00037   FLA_Datatype datatype;
00038   int          ldim_A;
00039   int          m_B, n_B, ldim_B;
00040 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00041   CBLAS_ORDER     cblas_order = CblasColMajor;
00042   CBLAS_SIDE      blas_side;
00043   CBLAS_UPLO      blas_uplo;
00044   CBLAS_TRANSPOSE blas_trans;
00045   CBLAS_DIAG      blas_diag;
00046 #else
00047   char         blas_side; 
00048   char         blas_uplo;
00049   char         blas_trans;
00050   char         blas_diag;
00051 #endif
00052   FLA_Obj      A_copy;
00053 
00054   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00055     FLA_Trsm_check( side, uplo, trans, diag, alpha, A, B );
00056 
00057   if ( FLA_Obj_has_zero_dim( B ) ) return FLA_SUCCESS;
00058 
00059   datatype = FLA_Obj_datatype( A );
00060 
00061   ldim_A   = FLA_Obj_ldim( A );
00062 
00063   m_B      = FLA_Obj_length( B );
00064   n_B      = FLA_Obj_width( B );
00065   ldim_B   = FLA_Obj_ldim( B );
00066 
00067   if ( trans == FLA_CONJ_NO_TRANSPOSE )
00068   {
00069     FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy );
00070     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy );
00071     
00072     ldim_A = FLA_Obj_ldim( A_copy );
00073   }
00074   else 
00075   {
00076     A_copy = A;
00077   }
00078 
00079   FLA_Param_map_to_blas_side( side, &blas_side );
00080   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00081   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00082   FLA_Param_map_to_blas_diag( diag, &blas_diag );
00083 
00084 
00085   switch( datatype ){
00086 
00087   case FLA_FLOAT:
00088   {
00089     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00090     float *buff_B     = ( float * ) FLA_FLOAT_PTR( B );
00091     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00092 
00093 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00094     cblas_strsm( cblas_order,
00095                  blas_side,
00096                  blas_uplo,
00097                  blas_trans,
00098                  blas_diag,
00099                  m_B,
00100                  n_B,
00101                  *buff_alpha,
00102                  buff_A, ldim_A,
00103                  buff_B, ldim_B );
00104 #else
00105     FLA_C2F( strsm )( &blas_side,
00106                       &blas_uplo,
00107                       &blas_trans,
00108                       &blas_diag,
00109                       &m_B,
00110                       &n_B,
00111                       buff_alpha,
00112                       buff_A, &ldim_A,
00113                       buff_B, &ldim_B );
00114 #endif
00115     break;
00116   }
00117 
00118   case FLA_DOUBLE:
00119   {
00120     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00121     double *buff_B     = ( double * ) FLA_DOUBLE_PTR( B );
00122     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00123 
00124 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00125     cblas_dtrsm( cblas_order,
00126                  blas_side,
00127                  blas_uplo,
00128                  blas_trans,
00129                  blas_diag,
00130                  m_B,
00131                  n_B,
00132                  *buff_alpha,
00133                  buff_A, ldim_A,
00134                  buff_B, ldim_B );
00135 #else
00136     FLA_C2F( dtrsm )( &blas_side,
00137                       &blas_uplo,
00138                       &blas_trans,
00139                       &blas_diag,
00140                       &m_B,
00141                       &n_B,
00142                       buff_alpha,
00143                       buff_A, &ldim_A,
00144                       buff_B, &ldim_B );
00145 #endif
00146     break;
00147   }
00148 
00149   case FLA_COMPLEX:
00150   {
00151     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A_copy );
00152     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00153     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00154 
00155 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00156     cblas_ctrsm( cblas_order,
00157                  blas_side,
00158                  blas_uplo,
00159                  blas_trans,
00160                  blas_diag,
00161                  m_B,
00162                  n_B,
00163                  buff_alpha,
00164                  buff_A, ldim_A,
00165                  buff_B, ldim_B );
00166 #else
00167     FLA_C2F( ctrsm )( &blas_side,
00168                       &blas_uplo,
00169                       &blas_trans,
00170                       &blas_diag,
00171                       &m_B,
00172                       &n_B,
00173                       buff_alpha,
00174                       buff_A, &ldim_A,
00175                       buff_B, &ldim_B );
00176 #endif
00177     break;
00178   }
00179 
00180   case FLA_DOUBLE_COMPLEX:
00181   {
00182     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy );
00183     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00184     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00185 
00186 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00187     cblas_ztrsm( cblas_order,
00188                  blas_side,
00189                  blas_uplo,
00190                  blas_trans,
00191                  blas_diag,
00192                  m_B,
00193                  n_B,
00194                  buff_alpha,
00195                  buff_A, ldim_A,
00196                  buff_B, ldim_B );
00197 #else
00198     FLA_C2F( ztrsm )( &blas_side,
00199                       &blas_uplo,
00200                       &blas_trans,
00201                       &blas_diag,
00202                       &m_B,
00203                       &n_B,
00204                       buff_alpha,
00205                       buff_A, &ldim_A,
00206                       buff_B, &ldim_B );
00207 #endif
00208     break;
00209   }
00210 
00211   }
00212   
00213   if ( trans == FLA_CONJ_NO_TRANSPOSE )
00214     FLA_Obj_free( &A_copy );
00215 
00216   return FLA_SUCCESS;
00217 }

void FLA_F2C() fla_trsm_external_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_external().

00221 {
00222   *IERROR = FLA_Trsm_external( *( ( FLA_Side  * ) side  ),
00223                                *( ( FLA_Uplo  * ) uplo  ),
00224                                *( ( FLA_Trans * ) trans ),
00225                                *( ( FLA_Diag  * ) diag  ),
00226                                *( ( FLA_Obj   * ) alpha ), 
00227                                *( ( FLA_Obj   * ) A     ),
00228                                *( ( FLA_Obj   * ) B     ) );
00229 }

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 }

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

Referenced by FLA_Apply_Q_UT_lhc_blk_var1(), FLA_Apply_Q_UT_UD_lhc_blk_var1(), FLA_Chol_l_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_l_blk_var3(), FLA_Chol_u_blk_var1(), FLA_Chol_u_blk_var2(), FLA_Chol_u_blk_var3(), FLA_LU_nopiv_blk_var1(), FLA_LU_nopiv_blk_var2(), FLA_LU_nopiv_blk_var3(), FLA_LU_nopiv_blk_var4(), FLA_LU_nopiv_blk_var5(), FLA_LU_piv_blk_var3(), FLA_LU_piv_blk_var4(), FLA_LU_piv_blk_var5(), FLA_QR_UT_UD_blk_var1(), FLA_Trinv_l_blk_var1(), FLA_Trinv_l_blk_var2(), FLA_Trinv_l_blk_var3(), FLA_Trinv_l_blk_var4(), FLA_Trinv_u_blk_var1(), FLA_Trinv_u_blk_var2(), FLA_Trinv_u_blk_var3(), FLA_Trinv_u_blk_var4(), FLA_Trsm(), FLA_Trsm_internal(), FLA_Trsm_llh_blk_var1(), FLA_Trsm_llh_blk_var2(), FLA_Trsm_llh_blk_var3(), FLA_Trsm_llh_blk_var4(), FLA_Trsm_lln_blk_var1(), FLA_Trsm_lln_blk_var2(), FLA_Trsm_lln_blk_var3(), FLA_Trsm_lln_blk_var4(), FLA_Trsm_llt_blk_var1(), FLA_Trsm_llt_blk_var2(), FLA_Trsm_llt_blk_var3(), FLA_Trsm_llt_blk_var4(), FLA_Trsm_luh_blk_var1(), FLA_Trsm_luh_blk_var2(), FLA_Trsm_luh_blk_var3(), FLA_Trsm_luh_blk_var4(), FLA_Trsm_lun_blk_var1(), FLA_Trsm_lun_blk_var2(), FLA_Trsm_lun_blk_var3(), FLA_Trsm_lun_blk_var4(), FLA_Trsm_lut_blk_var1(), FLA_Trsm_lut_blk_var2(), FLA_Trsm_lut_blk_var3(), FLA_Trsm_lut_blk_var4(), FLA_Trsm_rlh_blk_var1(), FLA_Trsm_rlh_blk_var2(), FLA_Trsm_rlh_blk_var3(), FLA_Trsm_rlh_blk_var4(), FLA_Trsm_rln_blk_var1(), FLA_Trsm_rln_blk_var2(), FLA_Trsm_rln_blk_var3(), FLA_Trsm_rln_blk_var4(), FLA_Trsm_rlt_blk_var1(), FLA_Trsm_rlt_blk_var2(), FLA_Trsm_rlt_blk_var3(), FLA_Trsm_rlt_blk_var4(), FLA_Trsm_ruh_blk_var1(), FLA_Trsm_ruh_blk_var2(), FLA_Trsm_ruh_blk_var3(), FLA_Trsm_ruh_blk_var4(), FLA_Trsm_run_blk_var1(), FLA_Trsm_run_blk_var2(), FLA_Trsm_run_blk_var3(), FLA_Trsm_run_blk_var4(), FLA_Trsm_rut_blk_var1(), FLA_Trsm_rut_blk_var2(), FLA_Trsm_rut_blk_var3(), FLA_Trsm_rut_blk_var4(), and FLASH_Trsm().

00039 {
00040     FLA_Error r_val = FLA_SUCCESS;
00041 
00042     if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043         FLA_Trsm_internal_check( side, uplo, transa, diag, alpha, A, B, cntl );
00044 
00045     if      ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00046               FLA_Obj_elemtype( A ) == FLA_MATRIX &&
00047               FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
00048     {
00049         // Recurse
00050         r_val = FLA_Trsm_internal( side,
00051                                    uplo,
00052                                    transa,
00053                                    diag,
00054                                    alpha,
00055                                    *FLASH_OBJ_PTR_AT( A ),
00056                                    *FLASH_OBJ_PTR_AT( B ),
00057                                    flash_trsm_cntl_mm );
00058     }
00059     else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00060               FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00061               FLASH_Queue_get_enabled( ) )
00062     {
00063         // Enqueue
00064         ENQUEUE_FLASH_Trsm( side, uplo, transa, diag, alpha, A, B, cntl );
00065     }
00066     else
00067     {
00068         if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
00069              FLA_Obj_elemtype( A ) == FLA_SCALAR &&
00070              !FLASH_Queue_get_enabled( ) )
00071         {
00072             // Execute leaf
00073             cntl = flash_trsm_cntl_blas;
00074         }
00075 
00076         // Parameter combinations
00077         if      ( side == FLA_LEFT )
00078         {
00079             if      ( uplo == FLA_LOWER_TRIANGULAR )
00080             {
00081                 if      ( transa == FLA_NO_TRANSPOSE )
00082                     r_val = FLA_Trsm_lln( diag, alpha, A, B, cntl );
00083                 else if ( transa == FLA_TRANSPOSE )
00084                     r_val = FLA_Trsm_llt( diag, alpha, A, B, cntl );
00085                 else if ( transa == FLA_CONJ_TRANSPOSE )
00086                     r_val = FLA_Trsm_llh( diag, alpha, A, B, cntl );
00087             }
00088             else if ( uplo == FLA_UPPER_TRIANGULAR )
00089             {
00090                 if      ( transa == FLA_NO_TRANSPOSE )
00091                     r_val = FLA_Trsm_lun( diag, alpha, A, B, cntl );
00092                 else if ( transa == FLA_TRANSPOSE )
00093                     r_val = FLA_Trsm_lut( diag, alpha, A, B, cntl );
00094                 else if ( transa == FLA_CONJ_TRANSPOSE )
00095                     r_val = FLA_Trsm_luh( diag, alpha, A, B, cntl );
00096             }
00097         }
00098         else if ( side == FLA_RIGHT )
00099         {
00100             if      ( uplo == FLA_LOWER_TRIANGULAR )
00101             {
00102                 if      ( transa == FLA_NO_TRANSPOSE )
00103                     r_val = FLA_Trsm_rln( diag, alpha, A, B, cntl );
00104                 else if ( transa == FLA_TRANSPOSE )
00105                     r_val = FLA_Trsm_rlt( diag, alpha, A, B, cntl );
00106                 else if ( transa == FLA_CONJ_TRANSPOSE )
00107                     r_val = FLA_Trsm_rlh( diag, alpha, A, B, cntl );
00108             }
00109             else if ( uplo == FLA_UPPER_TRIANGULAR )
00110             {
00111                 if      ( transa == FLA_NO_TRANSPOSE )
00112                     r_val = FLA_Trsm_run( diag, alpha, A, B, cntl );
00113                 else if ( transa == FLA_TRANSPOSE )
00114                     r_val = FLA_Trsm_rut( diag, alpha, A, B, cntl );
00115                 else if ( transa == FLA_CONJ_TRANSPOSE )
00116                     r_val = FLA_Trsm_ruh( diag, alpha, A, B, cntl );
00117             }
00118         }
00119     }
00120 
00121     return r_val;
00122 }

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

References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().

Referenced by FLA_Trsm_internal().

00036 {
00037     FLA_Error e_val;
00038 
00039     // Abort if the control structure is NULL.
00040     e_val = FLA_Check_null_pointer( ( void* ) cntl );
00041     FLA_Check_error_code( e_val );
00042 
00043     // Verify that the object element types are identical.
00044     e_val = FLA_Check_identical_object_elemtype( A, B );
00045     FLA_Check_error_code( e_val );
00046 
00047     // Verify conformality between all the objects. This check works regardless
00048     // of whether the element type is FLA_MATRIX or FLA_SCALAR because the
00049     // element length and width are used instead of scalar length and width.
00050     if ( side == FLA_LEFT )
00051     {
00052         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B );
00053         FLA_Check_error_code( e_val );
00054     }
00055     else
00056     {
00057         e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B );
00058         FLA_Check_error_code( e_val );
00059     }
00060 
00061     return FLA_SUCCESS;
00062 }

FLA_Error FLA_Trsm_llh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_llh().

00041 {
00042   return FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00043 }

FLA_Error FLA_Trsm_lln_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_lln().

00046 {
00047   return FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00048 }

FLA_Error FLA_Trsm_llt_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_llt().

00051 {
00052   return FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00053 }

FLA_Error FLA_Trsm_luh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_luh().

00056 {
00057   return FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00058 }

FLA_Error FLA_Trsm_lun_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_lun().

00061 {
00062   return FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00063 }

FLA_Error FLA_Trsm_lut_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_lut().

00066 {
00067   return FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00068 }

FLA_Error FLA_Trsm_rlh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_rlh().

00071 {
00072   return FLA_Trsm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00073 }

FLA_Error FLA_Trsm_rln_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_rln().

00076 {
00077   return FLA_Trsm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00078 }

FLA_Error FLA_Trsm_rlt_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_rlt().

00081 {
00082   return FLA_Trsm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00083 }

FLA_Error FLA_Trsm_ruh_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_ruh().

00086 {
00087   return FLA_Trsm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B );
00088 }

FLA_Error FLA_Trsm_run_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_run().

00091 {
00092   return FLA_Trsm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B );
00093 }

FLA_Error FLA_Trsm_rut_task ( FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
fla_trsm_t cntl 
)

References FLA_Trsm_external().

Referenced by FLA_Trsm_rut().

00096 {
00097   return FLA_Trsm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B );
00098 }

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

References FLA_Trsm_external().

Referenced by FLASH_Queue_exec_task().

00036 {
00037   return FLA_Trsm_external( side, uplo, trans, diag, alpha, A, B );
00038 }

FLA_Error FLA_Trsmsx ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

FLA_Error FLA_Trsmsx_check ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().

Referenced by FLA_Trsmsx_external().

00036 {
00037   FLA_Error e_val;
00038 
00039   e_val = FLA_Check_valid_side( side );
00040   FLA_Check_error_code( e_val );
00041 
00042   e_val = FLA_Check_valid_uplo( uplo );
00043   FLA_Check_error_code( e_val );
00044 
00045   e_val = FLA_Check_valid_trans( trans );
00046   FLA_Check_error_code( e_val );
00047 
00048   e_val = FLA_Check_valid_diag( diag );
00049   FLA_Check_error_code( e_val );
00050 
00051   e_val = FLA_Check_floating_object( A );
00052   FLA_Check_error_code( e_val );
00053 
00054   e_val = FLA_Check_nonconstant_object( A );
00055   FLA_Check_error_code( e_val );
00056 
00057   e_val = FLA_Check_identical_object_datatype( A, B );
00058   FLA_Check_error_code( e_val );
00059 
00060   e_val = FLA_Check_identical_object_datatype( A, C );
00061   FLA_Check_error_code( e_val );
00062 
00063   e_val = FLA_Check_consistent_object_datatype( A, alpha );
00064   FLA_Check_error_code( e_val );
00065 
00066   e_val = FLA_Check_consistent_object_datatype( A, beta );
00067   FLA_Check_error_code( e_val );
00068 
00069   e_val = FLA_Check_if_scalar( alpha );
00070   FLA_Check_error_code( e_val );
00071 
00072   e_val = FLA_Check_if_scalar( beta );
00073   FLA_Check_error_code( e_val );
00074 
00075   e_val = FLA_Check_square( A );
00076   FLA_Check_error_code( e_val );
00077 
00078   if ( side == FLA_LEFT )
00079   {
00080     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C );
00081     FLA_Check_error_code( e_val );
00082   }
00083   else
00084   {
00085     e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C );
00086     FLA_Check_error_code( e_val );
00087   }
00088 
00089   return FLA_SUCCESS;
00090 }

FLA_Error FLA_Trsmsx_external ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References FLA_Axpy_external(), FLA_Check_error_level(), FLA_Copy_external(), FLA_Obj_create_conf_to(), FLA_Obj_free(), FLA_ONE, FLA_Scal_external(), FLA_Trsm_external(), and FLA_Trsmsx_check().

Referenced by fla_trsmsx_external_f().

00036 {
00037   FLA_Obj B_copy;
00038 
00039   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00040     FLA_Trsmsx_check( side, uplo, transa, diag, alpha, A, B, beta, C );
00041 
00042   FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, B, &B_copy );
00043 
00044   FLA_Copy_external( B, B_copy );
00045 
00046   FLA_Trsm_external( side, uplo, transa, diag, FLA_ONE, A, B_copy );
00047 
00048   FLA_Scal_external( beta, C );
00049 
00050   FLA_Axpy_external( alpha, B_copy, C );
00051 
00052   FLA_Obj_free( &B_copy );
00053 
00054   return FLA_SUCCESS;
00055 }

void FLA_F2C() fla_trsmsx_external_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  transa,
F_INT *  diag,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Trsmsx_external().

00059 {
00060   *IERROR = FLA_Trsmsx_external( *( ( FLA_Side  * ) side   ),
00061                                  *( ( FLA_Uplo  * ) uplo   ), 
00062                                  *( ( FLA_Trans * ) transa ),
00063                                  *( ( FLA_Diag  * ) diag   ),
00064                                  *( ( FLA_Obj   * ) alpha  ),
00065                                  *( ( FLA_Obj   * ) A      ),
00066                                  *( ( FLA_Obj   * ) B      ),
00067                                  *( ( FLA_Obj   * ) beta   ),
00068                                  *( ( FLA_Obj   * ) C      ) );
00069 }

void FLA_F2C() fla_trsmsx_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  trans,
F_INT *  diag,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)


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