PLASMA  2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
testing_zcgesv.c File Reference

Test mixed precision solution with iterative refinement routine PLASMA_zcgesv. More...

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <plasma.h>
#include <cblas.h>
#include <lapacke.h>
#include <core_blas.h>
#include "testing_zmain.h"
Include dependency graph for testing_zcgesv.c:

Go to the source code of this file.

Functions

int testing_zcgesv (int argc, char **argv)

Detailed Description

Test mixed precision solution with iterative refinement routine PLASMA_zcgesv.

PLASMA testing routines PLASMA is a software package provided by Univ. of Tennessee, Univ. of California Berkeley and Univ. of Colorado Denver

Version:
2.4.5
Author:
Emmanuel Agullo
Date:
2010-11-15 mixed zc -> ds

Definition in file testing_zcgesv.c.


Function Documentation

int testing_zcgesv ( int  argc,
char **  argv 
)

Definition at line 30 of file testing_zcgesv.c.

References check_solution(), IONE, ISEED, PLASMA_SUCCESS, PLASMA_zcgesv(), and USAGE.

{
/* Check for valid arguments*/
if (argc != 4){
USAGE("CGESV", "N LDA NRHS LDB",
" - N : the size of the matrix\n"
" - LDA : leading dimension of the matrix A\n"
" - NRHS : number of RHS\n"
" - LDB : leading dimension of the matrix B\n");
return -1;
}
int N = atoi(argv[0]);
int LDA = atoi(argv[1]);
int NRHS = atoi(argv[2]);
int LDB = atoi(argv[3]);
int ITER;
double eps;
int info, info_solution;
int i,j;
int LDAxN = LDA*N;
int LDBxNRHS = LDB*NRHS;
PLASMA_Complex64_t *B1 = (PLASMA_Complex64_t *)malloc(LDB*NRHS*sizeof(PLASMA_Complex64_t));
PLASMA_Complex64_t *B2 = (PLASMA_Complex64_t *)malloc(LDB*NRHS*sizeof(PLASMA_Complex64_t));
int *ipiv = (int *)malloc(N*sizeof(int));
/* Check if unable to allocate memory */
if ( (!A1) || (!A2) || (!B1) || (!B2) ) {
printf("Out of Memory \n ");
exit(0);
}
eps = LAPACKE_dlamch_work('e');
/*----------------------------------------------------------
* TESTING ZCGESV
*/
/* Initialize A1 and A2 Matrix */
LAPACKE_zlarnv_work(IONE, ISEED, LDAxN, A1);
for ( i = 0; i < N; i++)
for ( j = 0; j < N; j++)
A2[LDA*j+i] = A1[LDA*j+i];
/* Initialize B1 and B2 */
LAPACKE_zlarnv_work(IONE, ISEED, LDBxNRHS, B1);
for ( i = 0; i < N; i++)
for ( j = 0; j < NRHS; j++)
B2[LDB*j+i] = B1[LDB*j+i];
printf("\n");
printf("------ TESTS FOR PLASMA ZCGESV ROUTINE ------- \n");
printf(" Size of the Matrix %d by %d\n", N, N);
printf("\n");
printf(" The matrix A is 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");
/* PLASMA ZCGESV */
info = PLASMA_zcgesv(N, NRHS, A2, LDA, ipiv, B1, LDB, B2, LDB, &ITER);
if (info != PLASMA_SUCCESS ) {
printf("PLASMA_zcgesv is not completed: info = %d\n", info);
info_solution = 1;
} else {
printf(" Solution obtained with %d iterations\n", ITER);
/* Check the factorization and the solution */
info_solution = check_solution(N, NRHS, A1, LDA, B1, B2, LDB, eps);
}
if ((info_solution == 0)){
printf("***************************************************\n");
printf(" ---- TESTING ZCGESV ..................... PASSED !\n");
printf("***************************************************\n");
}
else{
printf("************************************************\n");
printf(" ---- TESTING ZCGESV ... FAILED !\n");
printf("************************************************\n");
}
free(A1); free(A2); free(B1); free(B2); free(ipiv);
return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function: