/* Compute the inverse-matrix matrix product B = \alpha op(inv(A))B for Side is CblasLeft and B = \alpha B op(inv(A)) for Side is CblasRight. The matrix A is triangular and op(A) = A, A^T, A^H for TransA = CblasNoTrans, CblasTrans, CblasConjTrans. When Uplo is CblasUpper then the upper triangle of A is used, and when Uplo is CblasLower then the lower triangle of A is used. If Diag is CblasNonUnit then the diagonal of A is used, but if Diag is CblasUnit then the diagonal elements of the matrix A are taken as unity and are not referenced. */ int fff_blas_dtrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, double alpha, const fff_matrix * A, fff_matrix * B) { char* side = SWAP_SIDE(Side); char* uplo = SWAP_UPLO(Uplo); char* transa = TRANS(TransA); char* diag = DIAG(Diag); int m = B->size2; int n = B->size1; int lda = (int) A->tda; int ldb = (int) B->tda; return( FNAME(dtrsm)(side, uplo, transa, diag, &m, &n, &alpha, A->data, &lda, B->data, &ldb) ); }
/* Compute the matrix-matrix product and sum C = \alpha A B + \beta C for Side is CblasLeft and C = \alpha B A + \beta C for Side is CblasRight, where the matrix A is symmetric. When Uplo is CblasUpper then the upper triangle and diagonal of A are used, and when Uplo is CblasLower then the lower triangle and diagonal of A are used. */ int fff_blas_dsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, double alpha, const fff_matrix * A, const fff_matrix * B, double beta, fff_matrix * C) { char* side = SWAP_SIDE(Side); char* uplo = SWAP_UPLO(Uplo); int m = C->size2; int n = C->size1; int lda = (int) A->tda; int ldb = (int) B->tda; int ldc = (int) C->tda; return ( FNAME(dsymm)(side, uplo, &m, &n, &alpha, A->data, &lda, B->data, &ldb, &beta, C->data, &ldc) ); }
/* Compute the inverse-matrix matrix product B = \alpha op(inv(A))B for Side is CblasLeft and B = \alpha B op(inv(A)) for Side is CblasRight. The matrix A is triangular and op(A) = A, A^T, A^H for TransA = CblasNoTrans, CblasTrans, CblasConjTrans. When Uplo is CblasUpper then the upper triangle of A is used, and when Uplo is CblasLower then the lower triangle of A is used. If Diag is CblasNonUnit then the diagonal of A is used, but if Diag is CblasUnit then the diagonal elements of the matrix A are taken as unity and are not referenced. */ int fff_blas_dtrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, double alpha, const fff_matrix * A, fff_matrix * B) { char* side = SWAP_SIDE(Side); char* uplo = SWAP_UPLO(Uplo); char* transa = TRANS(TransA); char* diag = DIAG(Diag); int m = B->size2; int n = B->size1; int lda = (int) A->tda; int ldb = (int) B->tda; int (*dtrsm)(char *side, char *uplo, char *transa, char *diag, int* m, int* n, double* alpha, double* a, int* lda, double* b, int* ldb); dtrsm = fff_blas_func[FFF_BLAS_DTRSM]; return( (*dtrsm)(side, uplo, transa, diag, &m, &n, &alpha, A->data, &lda, B->data, &ldb) ); }
/* Compute the matrix-matrix product and sum C = \alpha A B + \beta C for Side is CblasLeft and C = \alpha B A + \beta C for Side is CblasRight, where the matrix A is symmetric. When Uplo is CblasUpper then the upper triangle and diagonal of A are used, and when Uplo is CblasLower then the lower triangle and diagonal of A are used. */ int fff_blas_dsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, double alpha, const fff_matrix * A, const fff_matrix * B, double beta, fff_matrix * C) { char* side = SWAP_SIDE(Side); char* uplo = SWAP_UPLO(Uplo); int m = C->size2; int n = C->size1; int lda = (int) A->tda; int ldb = (int) B->tda; int ldc = (int) C->tda; int (*dsymm)(char *side, char *uplo, int* m, int* n, double* alpha, double* a, int* lda, double* b, int* ldb, double* beta, double* c__, int* ldc); dsymm = fff_blas_func[FFF_BLAS_DSYMM]; return ( (*dsymm)(side, uplo, &m, &n, &alpha, A->data, &lda, B->data, &ldb, &beta, C->data, &ldc) ); }