Something went wrong on our end
Forked from
solverstack / Chameleon
344 commits behind the upstream repository.
-
Mathieu Faverge authoredMathieu Faverge authored
lapack_api_common.c 3.81 KiB
/**
*
* @file lapack_api_common.c
*
* @copyright 2022-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon blas/lapack and cblas/lapack api common functions
*
* @version 1.2.0
* @author Mathieu Faverge
* @author Florent Pruvost
* @date 2022-04-22
*
*/
#include "lapack_api_common.h"
/**
* @brief Convert the input char BLAS trans parameter to a compatible parameter
* for the Cblas API.
* @param[in] trans The input char BLAS trans parameter
* @return The CBLAS equivalent parameter (CblasNoTrans, CblasTrans or
* CblasConjTrans).
*/
int chameleon_blastocblas_trans(const char* trans)
{
if ( (*trans == 'N') || (*trans == 'n') ) {
return CblasNoTrans;
} else if ( (*trans == 'T') || (*trans == 't') ) {
return CblasTrans;
} else if ( (*trans == 'C') || (*trans == 'c') ) {
return CblasConjTrans;
} else {
fprintf(stderr, "CHAMELEON ERROR: %s(): %s\n", "chameleon_blastocblas_trans", "illegal value of BLAS transpose parameter");
return CHAMELEON_ERR_ILLEGAL_VALUE;
}
}
/**
* @brief Convert the input char BLAS side parameter to a compatible parameter
* for the Cblas API.
* @param[in] uplo The input char BLAS side parameter
* @return The CBLAS equivalent parameter (CblasLeft or CblasRight).
*/
int chameleon_blastocblas_side(const char* side)
{
if ( (*side == 'L') || (*side == 'l') ) {
return CblasLeft;
} else if ( (*side == 'R') || (*side == 'r') ) {
return CblasRight;
} else {
fprintf(stderr, "CHAMELEON ERROR: %s(): %s\n", "chameleon_blastocblas_side", "illegal value of BLAS side parameter");
return CHAMELEON_ERR_ILLEGAL_VALUE;
}
}
/**
* @brief Convert the input char BLAS uplo parameter to a compatible parameter
* for the Cblas API.
* @param[in] uplo The input char BLAS uplo parameter
* @return The CBLAS equivalent parameter (CblasUpper or CblasLower).
*/
int chameleon_blastocblas_uplo(const char* uplo)
{
if ( (*uplo == 'U') || (*uplo == 'u') ) {
return CblasUpper;
} else if ( (*uplo == 'L') || (*uplo == 'l') ) {
return CblasLower;
} else {
fprintf(stderr, "CHAMELEON ERROR: %s(): %s\n", "chameleon_blastocblas_uplo", "illegal value of BLAS uplo parameter");
return CHAMELEON_ERR_ILLEGAL_VALUE;
}
}
/**
* @brief Convert the input char BLAS diag parameter to a compatible parameter
* for the Cblas API.
* @param[in] diag The input char BLAS diag parameter
* @return The CBLAS equivalent parameter (CblasUnit or CblasNonUnit).
*/
int chameleon_blastocblas_diag(const char* diag)
{
if ( (*diag == 'U') || (*diag == 'u') ) {
return CblasUnit;
} else if ( (*diag == 'N') || (*diag == 'n') ) {
return CblasNonUnit;
} else {
fprintf(stderr, "CHAMELEON ERROR: %s(): %s\n", "chameleon_blastocblas_diag", "illegal value of BLAS diag parameter");
return CHAMELEON_ERR_ILLEGAL_VALUE;
}
}
/**
* @brief Convert the input char LAPACK norm parameter to a compatible parameter
* for the Chameleon API.
* @param[in] norm The input char LAPACK norm parameter
* @return The Chameleon equivalent parameter (ChamMaxNorm, ChamOneNorm, etc).
*/
int chameleon_lapacktochameleon_norm(const char* norm)
{
if ( (*norm == 'M') || (*norm == 'm') ) {
return ChamMaxNorm;
} else if ( (*norm == '1') || (*norm == 'O') || (*norm == 'o') ) {
return ChamOneNorm;
} else if ( (*norm == 'I') || (*norm == 'i') ) {
return ChamInfNorm;
} else if ( (*norm == 'F') || (*norm == 'f') || (*norm == 'E') || (*norm == 'e') ) {
return ChamFrobeniusNorm;
} else {
fprintf(stderr, "CHAMELEON ERROR: %s(): %s\n", "chameleon_lapacktochameleon_norm", "illegal value of LAPACK norm parameter");
return CHAMELEON_ERR_ILLEGAL_VALUE;
}
}