
//@HEADER
// ***************************************************
//
// HPCG: High Performance Conjugate Gradient Benchmark
//
// Contact:
// Michael A. Heroux ( maherou@sandia.gov)
// Jack Dongarra     (dongarra@eecs.utk.edu)
// Piotr Luszczek    (luszczek@eecs.utk.edu)
//
// ***************************************************
//@HEADER

/*!
 @file TestCG.hpp

 HPCG data structure
 */

#ifndef TESTCG_HPP
#define TESTCG_HPP

#include "CGData.hpp"
#include "SparseMatrix.hpp"
#include "Vector.hpp"
#include "hpcg.hpp"

struct TestCGData_STRUCT
{
    int count_pass;              //!< number of succesful tests
    int count_fail;              //!< number of succesful tests
    int expected_niters_no_prec; //!< expected number of test CG iterations without preconditioning with diagonally
                                 //!< dominant matrix (~12)
    int expected_niters_prec;    //!< expected number of test CG iterations with preconditioning and with diagonally
                                 //!< dominant matrix (~1-2)
    int niters_max_no_prec;      //!< maximum number of test CG iterations without predictitioner
    int niters_max_prec;         //!< maximum number of test CG iterations without predictitioner
    double normr;                //!< residual norm achieved during test CG iterations
};
typedef struct TestCGData_STRUCT TestCGData;

extern int TestCG(SparseMatrix& A, CGData& data, Vector& b, Vector& x, TestCGData& testcg_data);

#endif // TESTCG_HPP
