void PLASMA_ZHEGST(PLASMA_enum *itype, PLASMA_enum *uplo, int *N, PLASMA_Complex64_t *A, int *LDA, PLASMA_Complex64_t *B, int *LDB, int *INFO) { *INFO = PLASMA_zhegst(*itype, *uplo, *N, A, *LDA, B, *LDB); }
int testing_zhegst(int argc, char **argv) { /* Check for number of arguments*/ if (argc != 3) { USAGE("HEGST", "N LDA LDB", " - N : size of the matrices A and B\n" " - LDA : leading dimension of the matrix A\n" " - LDB : leading dimension of the matrix B\n"); return -1; } double eps = LAPACKE_dlamch_work('e'); int N = atoi(argv[0]); int LDA = atoi(argv[1]); int LDB = atoi(argv[2]); int info_transformation, info_factorization; int i, u; int LDAxN = LDA*N; int LDBxN = LDB*N; PLASMA_Complex64_t *A1 = (PLASMA_Complex64_t *)malloc(LDAxN*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *A2 = (PLASMA_Complex64_t *)malloc(LDAxN*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *B1 = (PLASMA_Complex64_t *)malloc(LDBxN*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *B2 = (PLASMA_Complex64_t *)malloc(LDBxN*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *Ainit = (PLASMA_Complex64_t *)malloc(LDAxN*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *Binit = (PLASMA_Complex64_t *)malloc(LDBxN*sizeof(PLASMA_Complex64_t)); /* Check if unable to allocate memory */ if ((!A1)||(!A2)||(!B1)||(!B2)||(!Ainit)||(!Binit)){ printf("Out of Memory \n "); return -2; } /*---------------------------------------------------------- * TESTING ZHEGST */ /* Initialize A1 and A2 */ PLASMA_zplghe(0., N, A1, LDA, 5198); LAPACKE_zlacpy_work(LAPACK_COL_MAJOR, 'A', N, N, A1, LDA, Ainit, LDA); /* Initialize B1 and B2 */ PLASMA_zplghe((double)N, N, B1, LDB, 4231); LAPACKE_zlacpy_work(LAPACK_COL_MAJOR, 'A', N, N, B1, LDB, Binit, LDB); printf("\n"); printf("------ TESTS FOR PLASMA ZHEGST ROUTINE ------- \n"); printf(" Size of the Matrix %d by %d\n", N, N); printf("\n"); printf(" The matrices A and B are randomly generated for each test.\n"); printf("============\n"); printf(" The relative machine precision (eps) is to be %e \n",eps); printf(" Computational tests pass if scaled residuals are less than 60.\n"); /*---------------------------------------------------------- * TESTING ZHEGST */ for (i=0; i<3; i++) { for (u=0; u<2; u++) { memcpy(A2, Ainit, LDAxN*sizeof(PLASMA_Complex64_t)); memcpy(B2, Binit, LDBxN*sizeof(PLASMA_Complex64_t)); PLASMA_zpotrf(uplo[u], N, B2, LDB); PLASMA_zhegst(itype[i], uplo[u], N, A2, LDA, B2, LDB); /* Check the Cholesky factorization and the transformation */ info_factorization = check_factorization(N, B1, B2, LDB, uplo[u], eps); info_transformation = check_transformation(itype[i], uplo[u], N, A1, A2, LDA, B2, LDB, eps); if ( (info_transformation == 0) && (info_factorization == 0) ) { printf("***************************************************\n"); printf(" ---- TESTING ZHEGST (%s, %s) ....... PASSED !\n", itypestr[i], uplostr[u]); printf("***************************************************\n"); } else { printf("************************************************\n"); printf(" - TESTING ZHEGST (%s, %s) ... FAILED !\n", itypestr[i], uplostr[u]); printf("************************************************\n"); } } } free(A1); free(A2); free(B1); free(B2); free(Ainit); free(Binit); return 0; }